quality: Add test cases for get_async messages

This commit is contained in:
Eishun Kondoh 2019-04-28 14:00:44 +09:00
parent 42dd435b63
commit c592d9f7c5
8 changed files with 458 additions and 33 deletions

View file

@ -6,41 +6,89 @@ defmodule Openflow.GetAsync.Reply 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
@type t :: %Reply{
version: 4,
datapath_id: String.t() | nil,
aux_id: 0..0xF,
xid: 0..0xFFFFFFFF,
packet_in_mask_master: [Openflow.Packet.reason()],
packet_in_mask_slave: [Openflow.Packet.reason()],
port_status_mask_master: [Openflow.Packet.reason()],
port_status_mask_slave: [Openflow.Packet.reason()],
flow_removed_mask_master: [Openflow.Packet.reason()],
flow_removed_mask_slave: [Openflow.Packet.reason()]
}
@spec ofp_type() :: 27
def ofp_type, do: 27
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
@spec new(
xid: 0..0xFFFFFFFF,
packet_in_mask_master: [Openflow.Packet.reason()],
packet_in_mask_slave: [Openflow.Packet.reason()],
port_status_mask_master: [Openflow.Packet.reason()],
port_status_mask_slave: [Openflow.Packet.reason()],
flow_removed_mask_master: [Openflow.Packet.reason()],
flow_removed_mask_slave: [Openflow.Packet.reason()]
) :: t()
def new(options \\ []) do
%Reply{
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: 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
@spec read(<<_::192>>) :: t()
def read(<<
pin_mask_master::32,
pin_mask_slave::32,
ps_mask_master::32,
ps_mask_slave::32,
fr_mask_master::32,
fr_mask_slave::32
>>) do
%Reply{
packet_in_mask_master: Enums.int_to_flags(pin_mask_master, :packet_in_reason_mask),
packet_in_mask_slave: Enums.int_to_flags(pin_mask_slave, :packet_in_reason_mask),
port_status_mask_master: Enums.int_to_flags(ps_mask_master, :port_reason_mask),
port_status_mask_slave: Enums.int_to_flags(ps_mask_slave, :port_reason_mask),
flow_removed_mask_master: Enums.int_to_flags(fr_mask_master, :flow_removed_reason_mask),
flow_removed_mask_slave: Enums.int_to_flags(fr_mask_slave, :flow_removed_reason_mask)
}
end
@spec to_binary(t()) :: <<_::192>>
def to_binary(%Reply{
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