quality: Add testcases for set_async message handler

This commit is contained in:
Eishun Kondoh 2019-05-08 11:08:02 +09:00
parent 40767e9871
commit c62eaeb42a
2 changed files with 54 additions and 35 deletions

View file

@ -6,53 +6,46 @@ defmodule Openflow.SetAsync do
datapath_id: nil,
# virtual field
aux_id: 0,
packet_in_mask_master: 0,
packet_in_mask_slave: 0,
port_status_mask_master: 0,
port_status_mask_slave: 0,
flow_removed_mask_master: 0,
flow_removed_mask_slave: 0
packet_in_mask_master: [],
packet_in_mask_slave: [],
port_status_mask_master: [],
port_status_mask_slave: [],
flow_removed_mask_master: [],
flow_removed_mask_slave: []
)
alias __MODULE__
alias Openflow.Enums
def ofp_type, do: 28
def new(options \\ []) do
%SetAsync{
xid: options[:xid] || 0,
packet_in_mask_master: options[:packet_in_mask_master],
packet_in_mask_slave: options[:packet_in_mask_slave],
port_status_mask_master: options[:port_status_mask_master],
port_status_mask_slave: options[:port_status_mask_slave],
flow_removed_mask_master: options[:flow_removed_mask_master],
flow_removed_mask_slave: options[:flow_removed_mask_slave]
}
end
def read(
<<packet_in_mask_master::32, packet_in_mask_slave::32, port_status_mask_master::32,
port_status_mask_slave::32, flow_removed_mask_master::32, flow_removed_mask_slave::32>>
) do
%SetAsync{
packet_in_mask_master: packet_in_mask_master,
packet_in_mask_slave: packet_in_mask_slave,
port_status_mask_master: port_status_mask_master,
port_status_mask_slave: port_status_mask_slave,
flow_removed_mask_master: flow_removed_mask_master,
flow_removed_mask_slave: flow_removed_mask_slave
xid: Keyword.get(options, :xid, 0),
packet_in_mask_master: Keyword.get(options, :packet_in_mask_master, []),
packet_in_mask_slave: Keyword.get(options, :packet_in_mask_slave, []),
port_status_mask_master: Keyword.get(options, :port_status_mask_master, []),
port_status_mask_slave: Keyword.get(options, :port_status_mask_slave, []),
flow_removed_mask_master: Keyword.get(options, :flow_removed_mask_master, []),
flow_removed_mask_slave: Keyword.get(options, :flow_removed_mask_slave, [])
}
end
def to_binary(%SetAsync{
packet_in_mask_master: packet_in_mask_master,
packet_in_mask_slave: packet_in_mask_slave,
port_status_mask_master: port_status_mask_master,
port_status_mask_slave: port_status_mask_slave,
flow_removed_mask_master: flow_removed_mask_master,
flow_removed_mask_slave: flow_removed_mask_slave
packet_in_mask_master: pin_mask_master,
packet_in_mask_slave: pin_mask_slave,
port_status_mask_master: ps_mask_master,
port_status_mask_slave: ps_mask_slave,
flow_removed_mask_master: fr_mask_master,
flow_removed_mask_slave: fr_mask_slave
}) do
<<packet_in_mask_master::32, packet_in_mask_slave::32, port_status_mask_master::32,
port_status_mask_slave::32, flow_removed_mask_master::32, flow_removed_mask_slave::32>>
<<
Enums.flags_to_int(pin_mask_master, :packet_in_reason_mask)::32,
Enums.flags_to_int(pin_mask_slave, :packet_in_reason_mask)::32,
Enums.flags_to_int(ps_mask_master, :port_reason_mask)::32,
Enums.flags_to_int(ps_mask_slave, :port_reason_mask)::32,
Enums.flags_to_int(fr_mask_master, :flow_removed_reason_mask)::32,
Enums.flags_to_int(fr_mask_slave, :flow_removed_reason_mask)::32
>>
end
end

View file

@ -17,6 +17,32 @@ defmodule Tres.HanderTest do
end
end
describe "Openflow AsyncConfig message" do
test "with master and slave config" do
send_message(
Openflow.SetAsync.new(
flow_removed_mask_master: [:idle_timeout, :hard_timeout, :delete, :group_delete],
flow_removed_mask_slave: [],
packet_in_mask_master: [:no_match, :action],
packet_in_mask_slave: [],
port_status_mask_master: [:add, :delete, :modify],
port_status_mask_slave: []
)
)
send_message(Openflow.GetAsync.Request.new())
%Openflow.GetAsync.Reply{
flow_removed_mask_master: [:idle_timeout, :hard_timeout, :delete, :group_delete],
flow_removed_mask_slave: [],
packet_in_mask_master: [:no_match, :action],
packet_in_mask_slave: [],
port_status_mask_master: [:add, :delete, :modify],
port_status_mask_slave: []
} = get_message()
end
end
describe "Openflow standard PacketIn message" do
test "with arp_packet" do
send_message(