From 599f1947db5678e5a8897c8b2a8f604d6c6f94a3 Mon Sep 17 00:00:00 2001 From: Eishun Kondoh Date: Sun, 5 May 2019 23:37:20 +0900 Subject: [PATCH] quality: Add test cases for port_desc and port_stats messages --- lib/openflow/enums.ex | 24 +++---- lib/openflow/multipart/port_desc/reply.ex | 4 -- lib/openflow/multipart/port_stats/reply.ex | 6 +- lib/openflow/multipart/port_stats/request.ex | 8 +-- priv/openflow_enum_gen.exs | 4 +- test/lib/openflow/ofp_meter_stats_test.exs | 4 +- .../lib/openflow/ofp_port_desc_stats_test.exs | 62 ++++++++++++++++ test/lib/openflow/ofp_port_stats_test.exs | 72 +++++++++++++++++++ 8 files changed, 153 insertions(+), 31 deletions(-) create mode 100644 test/lib/openflow/ofp_port_desc_stats_test.exs create mode 100644 test/lib/openflow/ofp_port_stats_test.exs diff --git a/lib/openflow/enums.ex b/lib/openflow/enums.ex index c5e1be0..398a0e3 100644 --- a/lib/openflow/enums.ex +++ b/lib/openflow/enums.ex @@ -325,10 +325,10 @@ defmodule Openflow.Enums do _class, _reason -> Openflow.Multipart.Table.Request end - def to_int(Openflow.Multipart.PortStats.Request, :multipart_request_codec) do - multipart_request_codec_to_int(Openflow.Multipart.PortStats.Request) + def to_int(Openflow.Multipart.Port.Request, :multipart_request_codec) do + multipart_request_codec_to_int(Openflow.Multipart.Port.Request) catch - _class, _reason -> Openflow.Multipart.PortStats.Request + _class, _reason -> Openflow.Multipart.Port.Request end def to_int(Openflow.Multipart.Queue.Request, :multipart_request_codec) do @@ -419,10 +419,10 @@ defmodule Openflow.Enums do _class, _reason -> Openflow.Multipart.Table.Reply end - def to_int(Openflow.Multipart.PortStats.Reply, :multipart_reply_codec) do - multipart_reply_codec_to_int(Openflow.Multipart.PortStats.Reply) + def to_int(Openflow.Multipart.Port.Reply, :multipart_reply_codec) do + multipart_reply_codec_to_int(Openflow.Multipart.Port.Reply) catch - _class, _reason -> Openflow.Multipart.PortStats.Reply + _class, _reason -> Openflow.Multipart.Port.Reply end def to_int(Openflow.Multipart.Queue.Reply, :multipart_reply_codec) do @@ -10941,7 +10941,7 @@ defmodule Openflow.Enums do def multipart_request_codec_to_int(Openflow.Multipart.Flow.Request), do: 0x1 def multipart_request_codec_to_int(Openflow.Multipart.Aggregate.Request), do: 0x2 def multipart_request_codec_to_int(Openflow.Multipart.Table.Request), do: 0x3 - def multipart_request_codec_to_int(Openflow.Multipart.PortStats.Request), do: 0x4 + def multipart_request_codec_to_int(Openflow.Multipart.Port.Request), do: 0x4 def multipart_request_codec_to_int(Openflow.Multipart.Queue.Request), do: 0x5 def multipart_request_codec_to_int(Openflow.Multipart.Group.Request), do: 0x6 def multipart_request_codec_to_int(Openflow.Multipart.GroupDesc.Request), do: 0x7 @@ -10957,7 +10957,7 @@ defmodule Openflow.Enums do def multipart_request_codec_to_atom(0x1), do: Openflow.Multipart.Flow.Request def multipart_request_codec_to_atom(0x2), do: Openflow.Multipart.Aggregate.Request def multipart_request_codec_to_atom(0x3), do: Openflow.Multipart.Table.Request - def multipart_request_codec_to_atom(0x4), do: Openflow.Multipart.PortStats.Request + def multipart_request_codec_to_atom(0x4), do: Openflow.Multipart.Port.Request def multipart_request_codec_to_atom(0x5), do: Openflow.Multipart.Queue.Request def multipart_request_codec_to_atom(0x6), do: Openflow.Multipart.Group.Request def multipart_request_codec_to_atom(0x7), do: Openflow.Multipart.GroupDesc.Request @@ -10973,7 +10973,7 @@ defmodule Openflow.Enums do def multipart_reply_codec_to_int(Openflow.Multipart.Flow.Reply), do: 0x1 def multipart_reply_codec_to_int(Openflow.Multipart.Aggregate.Reply), do: 0x2 def multipart_reply_codec_to_int(Openflow.Multipart.Table.Reply), do: 0x3 - def multipart_reply_codec_to_int(Openflow.Multipart.PortStats.Reply), do: 0x4 + def multipart_reply_codec_to_int(Openflow.Multipart.Port.Reply), do: 0x4 def multipart_reply_codec_to_int(Openflow.Multipart.Queue.Reply), do: 0x5 def multipart_reply_codec_to_int(Openflow.Multipart.Group.Reply), do: 0x6 def multipart_reply_codec_to_int(Openflow.Multipart.GroupDesc.Reply), do: 0x7 @@ -10989,7 +10989,7 @@ defmodule Openflow.Enums do def multipart_reply_codec_to_atom(0x1), do: Openflow.Multipart.Flow.Reply def multipart_reply_codec_to_atom(0x2), do: Openflow.Multipart.Aggregate.Reply def multipart_reply_codec_to_atom(0x3), do: Openflow.Multipart.Table.Reply - def multipart_reply_codec_to_atom(0x4), do: Openflow.Multipart.PortStats.Reply + def multipart_reply_codec_to_atom(0x4), do: Openflow.Multipart.Port.Reply def multipart_reply_codec_to_atom(0x5), do: Openflow.Multipart.Queue.Reply def multipart_reply_codec_to_atom(0x6), do: Openflow.Multipart.Group.Reply def multipart_reply_codec_to_atom(0x7), do: Openflow.Multipart.GroupDesc.Reply @@ -13542,7 +13542,7 @@ defmodule Openflow.Enums do {Openflow.Multipart.Flow.Request, 1}, {Openflow.Multipart.Aggregate.Request, 2}, {Openflow.Multipart.Table.Request, 3}, - {Openflow.Multipart.PortStats.Request, 4}, + {Openflow.Multipart.Port.Request, 4}, {Openflow.Multipart.Queue.Request, 5}, {Openflow.Multipart.Group.Request, 6}, {Openflow.Multipart.GroupDesc.Request, 7}, @@ -13561,7 +13561,7 @@ defmodule Openflow.Enums do {Openflow.Multipart.Flow.Reply, 1}, {Openflow.Multipart.Aggregate.Reply, 2}, {Openflow.Multipart.Table.Reply, 3}, - {Openflow.Multipart.PortStats.Reply, 4}, + {Openflow.Multipart.Port.Reply, 4}, {Openflow.Multipart.Queue.Reply, 5}, {Openflow.Multipart.Group.Reply, 6}, {Openflow.Multipart.GroupDesc.Reply, 7}, diff --git a/lib/openflow/multipart/port_desc/reply.ex b/lib/openflow/multipart/port_desc/reply.ex index 6025dab..a491d69 100644 --- a/lib/openflow/multipart/port_desc/reply.ex +++ b/lib/openflow/multipart/port_desc/reply.ex @@ -13,10 +13,6 @@ defmodule Openflow.Multipart.PortDesc.Reply do def ofp_type, do: 18 - def new(ports \\ []) do - %Reply{ports: ports} - end - def read(<>) do ports = for <>, do: Openflow.Port.read(port_bin) %Reply{ports: Enum.reverse(ports)} diff --git a/lib/openflow/multipart/port_stats/reply.ex b/lib/openflow/multipart/port_stats/reply.ex index 880c639..8d78e70 100644 --- a/lib/openflow/multipart/port_stats/reply.ex +++ b/lib/openflow/multipart/port_stats/reply.ex @@ -1,4 +1,4 @@ -defmodule Openflow.Multipart.PortStats.Reply do +defmodule Openflow.Multipart.Port.Reply do defstruct( version: 4, xid: 0, @@ -13,10 +13,6 @@ defmodule Openflow.Multipart.PortStats.Reply do def ofp_type, do: 18 - def new(ports \\ []) do - %Reply{ports: ports} - end - def read(<>) do ports = Openflow.Multipart.PortStats.read(ports_bin) %Reply{ports: ports} diff --git a/lib/openflow/multipart/port_stats/request.ex b/lib/openflow/multipart/port_stats/request.ex index ba85c04..0851a3d 100644 --- a/lib/openflow/multipart/port_stats/request.ex +++ b/lib/openflow/multipart/port_stats/request.ex @@ -1,4 +1,4 @@ -defmodule Openflow.Multipart.PortStats.Request do +defmodule Openflow.Multipart.Port.Request do defstruct( version: 4, xid: 0, @@ -12,11 +12,7 @@ defmodule Openflow.Multipart.PortStats.Request do def ofp_type, do: 18 - def new(port_no) when is_integer(port_no) or is_atom(port_no) do - %Request{port_number: port_no} - end - - def new(options) when is_list(options) do + def new(options \\ []) do %Request{ xid: options[:xid] || 0, port_number: options[:port_no] || :any diff --git a/priv/openflow_enum_gen.exs b/priv/openflow_enum_gen.exs index 98e8d85..a60701a 100644 --- a/priv/openflow_enum_gen.exs +++ b/priv/openflow_enum_gen.exs @@ -73,7 +73,7 @@ enums = [ {Openflow.Multipart.Flow.Request, 1}, {Openflow.Multipart.Aggregate.Request, 2}, {Openflow.Multipart.Table.Request, 3}, - {Openflow.Multipart.PortStats.Request, 4}, + {Openflow.Multipart.Port.Request, 4}, {Openflow.Multipart.Queue.Request, 5}, {Openflow.Multipart.Group.Request, 6}, {Openflow.Multipart.GroupDesc.Request, 7}, @@ -90,7 +90,7 @@ enums = [ {Openflow.Multipart.Flow.Reply, 1}, {Openflow.Multipart.Aggregate.Reply, 2}, {Openflow.Multipart.Table.Reply, 3}, - {Openflow.Multipart.PortStats.Reply, 4}, + {Openflow.Multipart.Port.Reply, 4}, {Openflow.Multipart.Queue.Reply, 5}, {Openflow.Multipart.Group.Reply, 6}, {Openflow.Multipart.GroupDesc.Reply, 7}, diff --git a/test/lib/openflow/ofp_meter_stats_test.exs b/test/lib/openflow/ofp_meter_stats_test.exs index 1070c81..1637d2b 100644 --- a/test/lib/openflow/ofp_meter_stats_test.exs +++ b/test/lib/openflow/ofp_meter_stats_test.exs @@ -32,12 +32,12 @@ defmodule OfpMeterStatsTest do %Openflow.Multipart.Meter{ band_stats: [%{byte_band_count: 0, packet_band_count: 0}], byte_in_count: 0, - duration_nsec: 480000, + duration_nsec: 480_000, duration_sec: 0, flow_count: 0, meter_id: 100, packet_in_count: 0 -} + } ], version: 4, xid: 0 diff --git a/test/lib/openflow/ofp_port_desc_stats_test.exs b/test/lib/openflow/ofp_port_desc_stats_test.exs new file mode 100644 index 0000000..80bdff2 --- /dev/null +++ b/test/lib/openflow/ofp_port_desc_stats_test.exs @@ -0,0 +1,62 @@ +defmodule OfpPortDescTest do + use ExUnit.Case + + describe "Openflow.Multipart.PortDesc.Request" do + test "with default values" do + desc = Openflow.Multipart.PortDesc.Request.new(0) + + desc + |> Openflow.to_binary() + |> Openflow.read() + |> Kernel.elem(1) + |> Kernel.==(desc) + |> assert() + end + end + + describe "Openflow.Multipart.PortDesc.Reply" do + test "with test packet_data" do + port_desc_stats = + "test/packet_data/4-54-ofp_port_desc_reply.packet" + |> File.read!() + |> Openflow.read() + |> Kernel.elem(1) + + %Openflow.Multipart.PortDesc.Reply{ + aux_id: nil, + datapath_id: nil, + flags: [], + ports: [ + %Openflow.Port{ + advertised_features: [:copper, :autoneg], + config: [], + current_features: [:"100mb_fd", :copper, :autoneg], + current_speed: 5000, + hw_addr: "f20ba47df8ea", + max_speed: 5000, + name: "Port6", + number: 6, + peer_features: [:"100mb_fd", :copper, :autoneg], + state: [:live], + supported_features: [:"100mb_fd", :copper, :autoneg] + }, + %Openflow.Port{ + advertised_features: [:copper, :autoneg], + config: [], + current_features: [:"100mb_fd", :copper, :autoneg], + current_speed: 5000, + hw_addr: "f20ba4d03f70", + max_speed: 5000, + name: "Port7", + number: 7, + peer_features: [:"100mb_fd", :copper, :autoneg], + state: [:live], + supported_features: [:"100mb_fd", :copper, :autoneg] + } + ], + version: 4, + xid: 0 + } = port_desc_stats + end + end +end diff --git a/test/lib/openflow/ofp_port_stats_test.exs b/test/lib/openflow/ofp_port_stats_test.exs new file mode 100644 index 0000000..ef3fddf --- /dev/null +++ b/test/lib/openflow/ofp_port_stats_test.exs @@ -0,0 +1,72 @@ +defmodule OfpPortStatsTest do + use ExUnit.Case + + describe "Openflow.Multipart.Port.Request" do + test "with default values" do + port_stats = + %Openflow.Multipart.Port.Request{} + |> Map.to_list() + |> Openflow.Multipart.Port.Request.new() + |> Openflow.to_binary() + |> Openflow.read() + |> Kernel.elem(1) + + assert port_stats.xid == 0 + assert port_stats.port_number == :any + end + end + + describe "Openflow.Multipart.Port.Reply" do + test "with test packet_data" do + port_stats = + "test/packet_data/4-30-ofp_port_stats_reply.packet" + |> File.read!() + |> Openflow.read() + |> Kernel.elem(1) + + %Openflow.Multipart.Port.Reply{ + aux_id: nil, + datapath_id: nil, + flags: [], + ports: [ + %Openflow.Multipart.PortStats{ + collisions: 0, + duration_nsec: 0, + duration_sec: 0, + port_number: 7, + rx_bytes: 0, + rx_crc_err: 0, + rx_dropped: 0, + rx_errors: 0, + rx_frame_err: 0, + rx_over_err: 0, + rx_packets: 0, + tx_bytes: 336, + tx_dropped: 0, + tx_errors: 0, + tx_packets: 4 + }, + %Openflow.Multipart.PortStats{ + collisions: 0, + duration_nsec: 0, + duration_sec: 0, + port_number: 6, + rx_bytes: 336, + rx_crc_err: 0, + rx_dropped: 0, + rx_errors: 0, + rx_frame_err: 0, + rx_over_err: 0, + rx_packets: 4, + tx_bytes: 336, + tx_dropped: 0, + tx_errors: 0, + tx_packets: 4 + } + ], + version: 4, + xid: 0 + } = port_stats + end + end +end