quality: Add test cases for port_desc and port_stats messages

This commit is contained in:
Eishun Kondoh 2019-05-05 23:37:20 +09:00
parent 2e3f772b1f
commit 599f1947db
8 changed files with 153 additions and 31 deletions

View file

@ -325,10 +325,10 @@ defmodule Openflow.Enums do
_class, _reason -> Openflow.Multipart.Table.Request _class, _reason -> Openflow.Multipart.Table.Request
end end
def to_int(Openflow.Multipart.PortStats.Request, :multipart_request_codec) do def to_int(Openflow.Multipart.Port.Request, :multipart_request_codec) do
multipart_request_codec_to_int(Openflow.Multipart.PortStats.Request) multipart_request_codec_to_int(Openflow.Multipart.Port.Request)
catch catch
_class, _reason -> Openflow.Multipart.PortStats.Request _class, _reason -> Openflow.Multipart.Port.Request
end end
def to_int(Openflow.Multipart.Queue.Request, :multipart_request_codec) do 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 _class, _reason -> Openflow.Multipart.Table.Reply
end end
def to_int(Openflow.Multipart.PortStats.Reply, :multipart_reply_codec) do def to_int(Openflow.Multipart.Port.Reply, :multipart_reply_codec) do
multipart_reply_codec_to_int(Openflow.Multipart.PortStats.Reply) multipart_reply_codec_to_int(Openflow.Multipart.Port.Reply)
catch catch
_class, _reason -> Openflow.Multipart.PortStats.Reply _class, _reason -> Openflow.Multipart.Port.Reply
end end
def to_int(Openflow.Multipart.Queue.Reply, :multipart_reply_codec) do 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.Flow.Request), do: 0x1
def multipart_request_codec_to_int(Openflow.Multipart.Aggregate.Request), do: 0x2 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.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.Queue.Request), do: 0x5
def multipart_request_codec_to_int(Openflow.Multipart.Group.Request), do: 0x6 def multipart_request_codec_to_int(Openflow.Multipart.Group.Request), do: 0x6
def multipart_request_codec_to_int(Openflow.Multipart.GroupDesc.Request), do: 0x7 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(0x1), do: Openflow.Multipart.Flow.Request
def multipart_request_codec_to_atom(0x2), do: Openflow.Multipart.Aggregate.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(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(0x5), do: Openflow.Multipart.Queue.Request
def multipart_request_codec_to_atom(0x6), do: Openflow.Multipart.Group.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 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.Flow.Reply), do: 0x1
def multipart_reply_codec_to_int(Openflow.Multipart.Aggregate.Reply), do: 0x2 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.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.Queue.Reply), do: 0x5
def multipart_reply_codec_to_int(Openflow.Multipart.Group.Reply), do: 0x6 def multipart_reply_codec_to_int(Openflow.Multipart.Group.Reply), do: 0x6
def multipart_reply_codec_to_int(Openflow.Multipart.GroupDesc.Reply), do: 0x7 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(0x1), do: Openflow.Multipart.Flow.Reply
def multipart_reply_codec_to_atom(0x2), do: Openflow.Multipart.Aggregate.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(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(0x5), do: Openflow.Multipart.Queue.Reply
def multipart_reply_codec_to_atom(0x6), do: Openflow.Multipart.Group.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 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.Flow.Request, 1},
{Openflow.Multipart.Aggregate.Request, 2}, {Openflow.Multipart.Aggregate.Request, 2},
{Openflow.Multipart.Table.Request, 3}, {Openflow.Multipart.Table.Request, 3},
{Openflow.Multipart.PortStats.Request, 4}, {Openflow.Multipart.Port.Request, 4},
{Openflow.Multipart.Queue.Request, 5}, {Openflow.Multipart.Queue.Request, 5},
{Openflow.Multipart.Group.Request, 6}, {Openflow.Multipart.Group.Request, 6},
{Openflow.Multipart.GroupDesc.Request, 7}, {Openflow.Multipart.GroupDesc.Request, 7},
@ -13561,7 +13561,7 @@ defmodule Openflow.Enums do
{Openflow.Multipart.Flow.Reply, 1}, {Openflow.Multipart.Flow.Reply, 1},
{Openflow.Multipart.Aggregate.Reply, 2}, {Openflow.Multipart.Aggregate.Reply, 2},
{Openflow.Multipart.Table.Reply, 3}, {Openflow.Multipart.Table.Reply, 3},
{Openflow.Multipart.PortStats.Reply, 4}, {Openflow.Multipart.Port.Reply, 4},
{Openflow.Multipart.Queue.Reply, 5}, {Openflow.Multipart.Queue.Reply, 5},
{Openflow.Multipart.Group.Reply, 6}, {Openflow.Multipart.Group.Reply, 6},
{Openflow.Multipart.GroupDesc.Reply, 7}, {Openflow.Multipart.GroupDesc.Reply, 7},

View file

@ -13,10 +13,6 @@ defmodule Openflow.Multipart.PortDesc.Reply do
def ofp_type, do: 18 def ofp_type, do: 18
def new(ports \\ []) do
%Reply{ports: ports}
end
def read(<<ports_bin::bytes>>) do def read(<<ports_bin::bytes>>) do
ports = for <<port_bin::64-bytes <- ports_bin>>, do: Openflow.Port.read(port_bin) ports = for <<port_bin::64-bytes <- ports_bin>>, do: Openflow.Port.read(port_bin)
%Reply{ports: Enum.reverse(ports)} %Reply{ports: Enum.reverse(ports)}

View file

@ -1,4 +1,4 @@
defmodule Openflow.Multipart.PortStats.Reply do defmodule Openflow.Multipart.Port.Reply do
defstruct( defstruct(
version: 4, version: 4,
xid: 0, xid: 0,
@ -13,10 +13,6 @@ defmodule Openflow.Multipart.PortStats.Reply do
def ofp_type, do: 18 def ofp_type, do: 18
def new(ports \\ []) do
%Reply{ports: ports}
end
def read(<<ports_bin::bytes>>) do def read(<<ports_bin::bytes>>) do
ports = Openflow.Multipart.PortStats.read(ports_bin) ports = Openflow.Multipart.PortStats.read(ports_bin)
%Reply{ports: ports} %Reply{ports: ports}

View file

@ -1,4 +1,4 @@
defmodule Openflow.Multipart.PortStats.Request do defmodule Openflow.Multipart.Port.Request do
defstruct( defstruct(
version: 4, version: 4,
xid: 0, xid: 0,
@ -12,11 +12,7 @@ defmodule Openflow.Multipart.PortStats.Request do
def ofp_type, do: 18 def ofp_type, do: 18
def new(port_no) when is_integer(port_no) or is_atom(port_no) do def new(options \\ []) do
%Request{port_number: port_no}
end
def new(options) when is_list(options) do
%Request{ %Request{
xid: options[:xid] || 0, xid: options[:xid] || 0,
port_number: options[:port_no] || :any port_number: options[:port_no] || :any

View file

@ -73,7 +73,7 @@ enums = [
{Openflow.Multipart.Flow.Request, 1}, {Openflow.Multipart.Flow.Request, 1},
{Openflow.Multipart.Aggregate.Request, 2}, {Openflow.Multipart.Aggregate.Request, 2},
{Openflow.Multipart.Table.Request, 3}, {Openflow.Multipart.Table.Request, 3},
{Openflow.Multipart.PortStats.Request, 4}, {Openflow.Multipart.Port.Request, 4},
{Openflow.Multipart.Queue.Request, 5}, {Openflow.Multipart.Queue.Request, 5},
{Openflow.Multipart.Group.Request, 6}, {Openflow.Multipart.Group.Request, 6},
{Openflow.Multipart.GroupDesc.Request, 7}, {Openflow.Multipart.GroupDesc.Request, 7},
@ -90,7 +90,7 @@ enums = [
{Openflow.Multipart.Flow.Reply, 1}, {Openflow.Multipart.Flow.Reply, 1},
{Openflow.Multipart.Aggregate.Reply, 2}, {Openflow.Multipart.Aggregate.Reply, 2},
{Openflow.Multipart.Table.Reply, 3}, {Openflow.Multipart.Table.Reply, 3},
{Openflow.Multipart.PortStats.Reply, 4}, {Openflow.Multipart.Port.Reply, 4},
{Openflow.Multipart.Queue.Reply, 5}, {Openflow.Multipart.Queue.Reply, 5},
{Openflow.Multipart.Group.Reply, 6}, {Openflow.Multipart.Group.Reply, 6},
{Openflow.Multipart.GroupDesc.Reply, 7}, {Openflow.Multipart.GroupDesc.Reply, 7},

View file

@ -32,12 +32,12 @@ defmodule OfpMeterStatsTest do
%Openflow.Multipart.Meter{ %Openflow.Multipart.Meter{
band_stats: [%{byte_band_count: 0, packet_band_count: 0}], band_stats: [%{byte_band_count: 0, packet_band_count: 0}],
byte_in_count: 0, byte_in_count: 0,
duration_nsec: 480000, duration_nsec: 480_000,
duration_sec: 0, duration_sec: 0,
flow_count: 0, flow_count: 0,
meter_id: 100, meter_id: 100,
packet_in_count: 0 packet_in_count: 0
} }
], ],
version: 4, version: 4,
xid: 0 xid: 0

View file

@ -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

View file

@ -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