]> Entropealabs - wampex.git/commitdiff
add functions and handlers for all errors
authorChristopher <chris@entropealabs.com>
Wed, 1 Apr 2020 22:13:56 +0000 (17:13 -0500)
committerChristopher <chris@entropealabs.com>
Wed, 1 Apr 2020 22:13:56 +0000 (17:13 -0500)
lib/roles/broker.ex
lib/roles/callee.ex
lib/roles/caller.ex
lib/roles/dealer.ex
lib/roles/peer.ex
priv/client.json [deleted file]
priv/repo/migrations/20200319210508_create_realms.exs [deleted file]
priv/router.json [deleted file]
test/wampex_test.exs

index 27beb2b6f895af5a34c4ab50098ced9cd67231a7..7c1b0b69b4968bbd4140093c964f5bf2d1f427ed 100644 (file)
@@ -3,10 +3,12 @@ defmodule Wampex.Roles.Broker do
   Handles requests and responses for a Broker
   """
   alias Wampex.Role
+  alias Wampex.Roles.Peer.Error
   alias Wampex.Roles.Publisher.Publish
   alias Wampex.Roles.Subscriber.{Subscribe, Unsubscribe}
   @behaviour Role
 
+  @error 8
   @publish 16
   @published 17
   @subscribe 32
@@ -82,6 +84,11 @@ defmodule Wampex.Roles.Broker do
     [@subscribed, ri, si]
   end
 
+  @spec subscribe_error(Error.t()) :: Wampex.message()
+  def subscribe_error(%Error{request_id: rid, error: er, details: dets}) do
+    [@error, @subscribe, rid, dets, er]
+  end
+
   @spec unsubscribed(Unsubscribed.t()) :: Wampex.message()
   def unsubscribed(%Unsubscribed{request_id: ri}) do
     [@unsubscribed, ri]
index 6b798cfcacbd0cdd651ea7f2543ff96bf344ad7c..8124e69dee4c2cf0f5a9ba631464c52047dc7152 100644 (file)
@@ -5,8 +5,10 @@ defmodule Wampex.Roles.Callee do
 
   alias Wampex.Role
   alias Wampex.Roles.Dealer.{Invocation}
+  alias Wampex.Roles.Peer.Error
   @behaviour Role
 
+  @error 8
   @register 64
   @registered 65
   @unregister 66
@@ -72,6 +74,17 @@ defmodule Wampex.Roles.Callee do
     [@yield, ri, opts, al, akw]
   end
 
+  @spec invocation_error(Error.t()) :: Wampex.message()
+  def invocation_error(%Error{
+        request_id: rid,
+        error: er,
+        details: dets,
+        arg_list: al,
+        arg_kw: akw
+      }) do
+    [@error, @invocation, rid, dets, er, al, akw]
+  end
+
   @impl true
   def handle(<<@unregistered, request_id>>) do
     {[{:next_event, :internal, :established}], request_id, {:ok, request_id}}
index bdad6d6aba31000abd77ee54d7b1d21352d05d82..37840652bd5886b89fc088102dc04ad87c8267f7 100644 (file)
@@ -5,12 +5,10 @@ defmodule Wampex.Roles.Caller do
 
   alias Wampex.Role
   alias Wampex.Roles.Dealer.Result
-  alias Wampex.Roles.Peer.Error
   @behaviour Role
 
   @call 48
   @cancel 49
-  @error 8
   @result 50
 
   defmodule Call do
@@ -49,11 +47,6 @@ defmodule Wampex.Roles.Caller do
     [@call, opts, p, al, akw]
   end
 
-  @spec call_error(Error.t()) :: Wampex.message()
-  def call_error(%Error{request_id: rid, error: er, details: dets, arg_list: al, arg_kw: akw}) do
-    [@error, @call, rid, dets, er, al, akw]
-  end
-
   @spec cancel(Cancel.t()) :: Wampex.message()
   def cancel(%Cancel{request_id: ri, options: opts}) do
     [@cancel, ri, opts]
index 37ea1f8478854ace1cbe8757b896d3c0798f336e..5709cb9458beec1e8acbe2e0b33abf66bbc89ab3 100644 (file)
@@ -5,8 +5,10 @@ defmodule Wampex.Roles.Dealer do
   alias Wampex.Role
   alias Wampex.Roles.Callee.{Register, Unregister, Yield}
   alias Wampex.Roles.Caller.Call
+  alias Wampex.Roles.Peer.Error
   @behaviour Role
 
+  @error 8
   @call 48
   @result 50
   @register 64
@@ -90,6 +92,16 @@ defmodule Wampex.Roles.Dealer do
     [@invocation, ri, reg_id, opts, al, akw]
   end
 
+  @spec call_error(Error.t()) :: Wampex.message()
+  def call_error(%Error{request_id: rid, error: er, details: dets, arg_list: al, arg_kw: akw}) do
+    [@error, @call, rid, dets, er, al, akw]
+  end
+
+  @spec register_error(Error.t()) :: Wampex.message()
+  def register_error(%Error{request_id: rid, error: er, details: dets}) do
+    [@error, @register, rid, dets, er]
+  end
+
   @spec result(Result.t()) :: Wampex.message()
   def result(%Result{
         request_id: ri,
index 1ef95295200b8c59464d6f70838bdcd6e9f23568..dfeac2f93ea5bddfb6d1c6cabea913bb0bde7b0c 100644 (file)
@@ -12,6 +12,7 @@ defmodule Wampex.Roles.Peer do
   @authenticate 5
   @goodbye 6
   @error 8
+  @invocation 68
 
   defmodule Hello do
     @moduledoc false
@@ -181,6 +182,20 @@ defmodule Wampex.Roles.Peer do
     handle([@error, type, id, dets, error, arg_l, %{}])
   end
 
+  @impl true
+  def handle([@error, @invocation, id, dets, err, arg_l, arg_kw]) do
+    {[{:next_event, :internal, :invocation_error}], id,
+     {:update, :error,
+      %Error{
+        type: @invocation,
+        request_id: id,
+        error: err,
+        details: dets,
+        arg_list: arg_l,
+        arg_kw: arg_kw
+      }}}
+  end
+
   @impl true
   def handle([@error, type, id, dets, error, arg_l, arg_kw]) do
     {[{:next_event, :internal, :established}], id,
diff --git a/priv/client.json b/priv/client.json
deleted file mode 100644 (file)
index b09b052..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-{
-  "Comment": "Session State Machine",
-  "StartAt": "WaitForTransport",
-  "States": {
-    "WaitForTransport": {
-      "Type": "Task",
-      "Resource": "InitTransport",
-      "TransitionEvent": "{:connected, true}",
-      "Next": "Init",
-      "Catch": [
-        {
-          "ErrorEquals": ["{:connected, false}"],
-          "Next": "Abort"
-        }
-      ]
-    },
-    "Init": {
-      "Type": "Task",
-      "Resource": "Hello",
-      "TransitionEvent": ":hello_sent",
-      "Next": "Handshake",
-      "Catch": [
-        {
-          "ErrorEquals": [":abort"],
-          "Next": "Abort"
-        }
-        
-      ]
-    },
-    "Handshake": {
-      "Type": "Choice",
-      "Resource": "HandleHandshake",
-      "Choices": [
-        {
-          "StringEquals": ":message_received",
-          "Next": "Message"
-        },
-        {
-          "StringEquals": ":abort",
-          "Next": "Abort"
-        }
-      ]
-    },
-    "Established": {
-      "Type": "Choice",
-      "Resource": "HandleEstablished",
-      "Choices": [
-        {
-          "StringEquals": ":message_received",
-          "Next": "Message"
-        },
-        {
-          "StringEquals": ":goodbye",
-          "Next": "GoodBye"
-        },
-        {
-          "StringEquals": ":abort",
-          "Next": "Abort"
-        }
-      ]
-    },
-    "Message": {
-      "Type": "Choice",
-      "Resource": "HandleMessage",
-      "Choices": [
-        {
-          "StringEquals": ":established",
-          "Next": "Established"
-        },
-        {
-          "StringEquals": ":event",
-          "Next": "Event"
-        },
-        {
-          "StringEquals": ":invocation",
-          "Next": "Invocation"
-        },
-        {
-          "StringEquals": ":abort",
-          "Next": "Abort"
-        },
-        {
-          "StringEquals": ":goodbye",
-          "Next": "GoodBye"
-        },
-        {
-          "StringEquals": ":challenge",
-          "Next": "Challenge"
-        },
-        {
-          "StringEquals": ":interrupt",
-          "Next": "Interrupt"
-        }
-      ]
-    },
-    "Interrupt": {
-      "Type": "Task",
-      "Resource": "HandleInterrupt",
-      "Next": "Established"
-    },
-    "Challenge": {
-      "Type": "Task",
-      "Resource": "HandleChallenge",
-      "Next": "Handshake",
-      "TransitionEvent": ":challenged"
-    },
-    "Event": {
-      "Type": "Task",
-      "Resource": "HandleEvent",
-      "Next": "Established"
-    },
-    "Invocation": {
-      "Type": "Task",
-      "Resource": "HandleInvocation",
-      "Next": "Established"
-    },
-    "GoodBye": {
-      "Type": "Task",
-      "Resource": "GoodBye",
-      "End": true
-    },
-    "Abort": {
-      "Type": "Task",
-      "Resource": "HandleAbort",
-      "End": true
-    }
-  }
-}
diff --git a/priv/repo/migrations/20200319210508_create_realms.exs b/priv/repo/migrations/20200319210508_create_realms.exs
deleted file mode 100644 (file)
index 86f165b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-defmodule Wampex.Router.Authentication.Repo.Migrations.CreateRealms do
-  use Ecto.Migration
-
-  def change do
-    create table("realms", primary_key: false) do
-      add(:id, :binary_id, primary_key: true, default: fragment("gen_random_uuid()"))
-      add(:uri, :string, null: false)
-      add(:parent, :string, null: true)
-      timestamps()
-    end
-
-    create(unique_index(:realms, [:uri]))
-
-    create table("users", primary_key: false) do
-      add(:id, :binary_id, primary_key: true, default: fragment("gen_random_uuid()"))
-      add(:authid, :string, null: false)
-      add(:password, :string, null: false)
-      add(:salt, :string, null: false)
-      add(:iterations, :integer, null: false)
-      add(:keylen, :integer, null: false)
-      add(:realm_id, references(:realms, type: :binary_id, on_delete: :delete_all), null: false)
-      timestamps()
-    end
-
-    create(index(:users, [:authid]))
-    create(unique_index(:users, [:authid, :realm_id]))
-  end
-end
diff --git a/priv/router.json b/priv/router.json
deleted file mode 100644 (file)
index 9f60d81..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-{
-  "Comment": "Router Session State Machine",
-  "StartAt": "Init",
-  "States": {
-    "Init": {
-      "Type": "Task",
-      "Resource": "HandleInit",
-      "Next": "Established"
-    },
-    "Established": {
-      "Type": "Choice",
-      "Resource": "HandleEstablished",
-      "Choices": [
-        {
-          "StringEquals": ":message_received",
-          "Next": "Message"
-        },
-        {
-          "StringEquals": ":goodbye",
-          "Next": "GoodBye"
-        },
-        {
-          "StringEquals": ":abort",
-          "Next": "Abort"
-        }
-      ]
-    },
-    "Message": {
-      "Type": "Choice",
-      "Resource": "HandleMessage",
-      "Choices": [
-        {
-          "StringEquals": ":hello",
-          "Next": "Hello"
-        },
-        {
-          "StringEquals": ":authenticate",
-          "Next": "Authenticate"
-        },
-        {
-          "StringEquals": ":call",
-          "Next": "Call"
-        },
-        {
-          "StringEquals": ":yield",
-          "Next": "Yield"
-        },
-        {
-          "StringEquals": ":register",
-          "Next": "Register"
-        },
-        {
-          "StringEquals": ":unregister",
-          "Next": "Unregister"
-        },
-        {
-          "StringEquals": ":subscribe",
-          "Next": "Subscribe"
-        },
-        {
-          "StringEquals": ":unsubscribe",
-          "Next": "Unsubscribe"
-        },
-        {
-          "StringEquals": ":publish",
-          "Next": "Publish"
-        },
-        {
-          "StringEquals": ":error",
-          "Next": "Error"
-        },
-        {
-          "StringEquals": ":abort",
-          "Next": "Abort"
-        },
-        {
-          "StringEquals": ":goodbye",
-          "Next": "GoodBye"
-        },
-        {
-          "StringEquals": ":cancel",
-          "Next": "Cancel"
-        }
-      ]
-    },
-    "Hello": {
-      "Type": "Task",
-      "Resource": "HandleHello",
-      "Next": "Established"
-    },
-    "Authenticate": {
-      "Type": "Task",
-      "Resource": "HandleAuthenticate",
-      "Next": "Established"
-    },
-    "Call": {
-      "Type": "Task",
-      "Resource": "HandleCall",
-      "Next": "Established",
-      "Catch": [
-        {
-          "ErrorEquals": ["{:error, :no_live_callees}"],
-          "Next": "Error"
-        }
-      ]
-    },
-    "Yield": {
-      "Type": "Task",
-      "Resource": "HandleYield",
-      "Next": "Established"
-    },
-    "Register":{
-      "Type": "Task",
-      "Resource": "HandleRegister",
-      "Next": "Established"
-    },
-    "Unregister":{
-      "Type": "Task",
-      "Resource": "HandleUnregister",
-      "Next": "Established"
-    },
-    "Subscribe":{
-      "Type": "Task",
-      "Resource": "HandleSubscribe",
-      "Next": "Established"
-    },
-    "Unsubscribe":{
-      "Type": "Task",
-      "Resource": "HandleUnsubscribe",
-      "Next": "Established"
-    },
-    "Publish":{
-      "Type": "Task",
-      "Resource": "HandlePublish",
-      "Next": "Established"
-    },
-    "Error":{
-      "Type": "Task",
-      "Resource": "HandleError",
-      "Next": "Established"
-    },
-    "GoodBye": {
-      "Type": "Task",
-      "Resource": "HandleGoodbye",
-      "End": true
-    },
-    "Abort": {
-      "Type": "Task",
-      "Resource": "HandleAbort",
-      "End": true
-    }
-  }
-}
index b480f4bf294f5daedca9c60a3a6e1195536b435a..88d5c6c67a0df5823f5ce9987d8ea78c5a767c1d 100644 (file)
@@ -8,7 +8,7 @@ defmodule WampexTest do
   alias Callee.{Register, Unregister, Yield}
   alias Caller.Call
   alias Dealer.{Invocation, Registered, Result, Unregistered}
-  alias Peer.{Authenticate, Goodbye, Hello}
+  alias Peer.{Authenticate, Error, Goodbye, Hello}
   alias Publisher.Publish
   alias Subscriber.{Subscribe, Unsubscribe}
   require Logger
@@ -17,6 +17,11 @@ defmodule WampexTest do
     assert %{callee: %{}} = Callee.add(%{})
   end
 
+  test "Callee.invocation_error" do
+    assert [8, 68, 1234, %{}, "error", [], %{}] =
+             Callee.invocation_error(%Error{request_id: 1234, error: "error"})
+  end
+
   test "Callee.register" do
     assert [64, %{}, "test"] = Callee.register(%Register{procedure: "test"})
   end
@@ -118,6 +123,16 @@ defmodule WampexTest do
     assert [67, 123_456] = Dealer.unregistered(%Unregistered{request_id: 123_456})
   end
 
+  test "Dealer.call_error" do
+    assert [8, 48, 123_456, %{}, "error", [], %{}] =
+             Dealer.call_error(%Error{request_id: 123_456, details: %{}, error: "error"})
+  end
+
+  test "Dealer.register_error" do
+    assert [8, 64, 123_456, %{}, "error"] =
+             Dealer.register_error(%Error{request_id: 123_456, details: %{}, error: "error"})
+  end
+
   test "Dealer.result" do
     assert [50, 1234, %{}, [], %{}] = Dealer.result(%Result{request_id: 1234})
     assert [50, 1234, %{}, ["1"], %{}] = Dealer.result(%Result{request_id: 1234, arg_list: ["1"]})
@@ -181,6 +196,11 @@ defmodule WampexTest do
     assert [35, 123_456] = Broker.unsubscribed(%Unsubscribed{request_id: 123_456})
   end
 
+  test "Broker.subscribe_error" do
+    assert [8, 32, 123_456, %{}, "error"] =
+             Broker.subscribe_error(%Error{request_id: 123_456, details: %{}, error: "error"})
+  end
+
   test "Broker.published" do
     assert [17, 123_456, 654_321] =
              Broker.published(%Published{request_id: 123_456, publication_id: 654_321})