diff --git a/lib/openflow/barrier/reply.ex b/lib/openflow/barrier/reply.ex index 59f7f68..73a7367 100644 --- a/lib/openflow/barrier/reply.ex +++ b/lib/openflow/barrier/reply.ex @@ -12,15 +12,9 @@ defmodule Openflow.Barrier.Reply do def ofp_type, do: 21 - def new do - %Reply{} - end + def new(xid \\ 0), do: %Reply{xid: xid} - def read(_) do - %Reply{} - end + def read(_), do: %Reply{} - def to_binary(%Reply{}) do - <<>> - end + def to_binary(%Reply{}), do: <<>> end diff --git a/lib/openflow/barrier/request.ex b/lib/openflow/barrier/request.ex index 346270c..f1e2518 100644 --- a/lib/openflow/barrier/request.ex +++ b/lib/openflow/barrier/request.ex @@ -10,17 +10,22 @@ defmodule Openflow.Barrier.Request do alias __MODULE__ + @type t :: %Request{ + version: 4, + xid: 0..0xFFFFFFFF, + datapath_id: String.t() | nil, + aux_id: non_neg_integer() | nil + } + + @spec ofp_type() :: 20 def ofp_type, do: 20 - def new(xid \\ 0) do - %Request{xid: xid} - end + @spec new(xid :: 0..0xFFFFFFFF) :: t() + def new(xid \\ 0), do: %Request{xid: xid} - def read(_) do - %Request{} - end + @spec read(binary()) :: t() + def read(_), do: %Request{} - def to_binary(%Request{}) do - <<>> - end + @spec to_binary(t()) :: binary() + def to_binary(%Request{}), do: <<>> end diff --git a/test/ofp_action_test.exs b/test/ofp_action_test.exs index 181f90a..f2c6296 100644 --- a/test/ofp_action_test.exs +++ b/test/ofp_action_test.exs @@ -1158,6 +1158,36 @@ defmodule OfpActionTest do end end + describe "Openflow.Action.NxStackPush" do + test "with push:NXM_NX_REG0[]" do + push = Openflow.Action.NxStackPush.new(field: :reg0) + + assert push.n_bits == 32 + assert push.offset == 0 + + push + |> Openflow.Action.to_binary() + |> Openflow.Action.read() + |> Enum.at(0) + |> Kernel.==(push) + |> assert() + end + + test "with push:NXM_NX_REG0[1..31]" do + push = Openflow.Action.NxStackPush.new(field: :reg0, offset: 1, n_bits: 31) + + assert push.n_bits == 31 + assert push.offset == 1 + + push + |> Openflow.Action.to_binary() + |> Openflow.Action.read() + |> Enum.at(0) + |> Kernel.==(push) + |> assert() + end + end + describe "Openflow.Action.NxSetTunnel" do test "with set_tunnel:0x1" do set_tunnel = Openflow.Action.NxSetTunnel.new(1) diff --git a/test/ofp_barrier_test.exs b/test/ofp_barrier_test.exs new file mode 100644 index 0000000..4d0b114 --- /dev/null +++ b/test/ofp_barrier_test.exs @@ -0,0 +1,52 @@ +defmodule OfpBarrierTest do + use ExUnit.Case + doctest Openflow + + describe "Openflow.Barrier.Request" do + test "generate and parse without argument" do + barrier = Openflow.Barrier.Request.new() + + barrier + |> Openflow.to_binary() + |> Openflow.read() + |> Kernel.elem(1) + |> Kernel.==(barrier) + |> assert() + end + + test "generate and parse with argument" do + barrier = Openflow.Barrier.Request.new(1) + + barrier + |> Openflow.to_binary() + |> Openflow.read() + |> Kernel.elem(1) + |> Kernel.==(barrier) + |> assert() + end + end + + describe "Openflow.Barrier.Reply" do + test "generate and parse without argument" do + barrier = Openflow.Barrier.Reply.new() + + barrier + |> Openflow.to_binary() + |> Openflow.read() + |> Kernel.elem(1) + |> Kernel.==(barrier) + |> assert() + end + + test "generate and parse with argument" do + barrier = Openflow.Barrier.Reply.new(1) + + barrier + |> Openflow.to_binary() + |> Openflow.read() + |> Kernel.elem(1) + |> Kernel.==(barrier) + |> assert() + end + end +end