From c62eaeb42af96049407d019a866bcc662aee3da7 Mon Sep 17 00:00:00 2001 From: Eishun Kondoh Date: Wed, 8 May 2019 11:08:02 +0900 Subject: [PATCH] quality: Add testcases for set_async message handler --- lib/openflow/set_async.ex | 63 +++++++++++++++------------------- test/lib/tres/handler_test.exs | 26 ++++++++++++++ 2 files changed, 54 insertions(+), 35 deletions(-) diff --git a/lib/openflow/set_async.ex b/lib/openflow/set_async.ex index f42095b..c33c540 100644 --- a/lib/openflow/set_async.ex +++ b/lib/openflow/set_async.ex @@ -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( - <> - ) 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 - <> + << + 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 diff --git a/test/lib/tres/handler_test.exs b/test/lib/tres/handler_test.exs index b811c74..8a2848c 100644 --- a/test/lib/tres/handler_test.exs +++ b/test/lib/tres/handler_test.exs @@ -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(