openflow-protocol 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/messages/echo_reply.rb +6 -0
  3. data/lib/openflow-protocol/version.rb +5 -0
  4. data/spec/actions/action_enqueue_spec.rb +30 -0
  5. data/spec/actions/action_output_spec.rb +29 -0
  6. data/spec/actions/action_set_destination_port_spec.rb +26 -0
  7. data/spec/actions/action_set_ip_destination_spec.rb +25 -0
  8. data/spec/actions/action_set_ip_source_spec.rb +25 -0
  9. data/spec/actions/action_set_ip_tos_spec.rb +26 -0
  10. data/spec/actions/action_set_mac_destination_spec.rb +26 -0
  11. data/spec/actions/action_set_mac_source_spec.rb +26 -0
  12. data/spec/actions/action_set_source_port_spec.rb +26 -0
  13. data/spec/actions/action_set_vlan_id_spec.rb +26 -0
  14. data/spec/actions/action_set_vlan_pcp_spec.rb +26 -0
  15. data/spec/actions/action_strip_vlan_spec.rb +17 -0
  16. data/spec/actions/action_vendor_spec.rb +25 -0
  17. data/spec/actions/actions_spec.rb +33 -0
  18. data/spec/messages/barrier_reply_spec.rb +25 -0
  19. data/spec/messages/barrier_request_spec.rb +25 -0
  20. data/spec/messages/echo_reply_spec.rb +44 -0
  21. data/spec/messages/echo_request_spec.rb +53 -0
  22. data/spec/messages/error_spec.rb +56 -0
  23. data/spec/messages/features_reply_spec.rb +204 -0
  24. data/spec/messages/features_request_spec.rb +25 -0
  25. data/spec/messages/flow_mod_spec.rb +139 -0
  26. data/spec/messages/flow_removed_spec.rb +109 -0
  27. data/spec/messages/get_config_reply_spec.rb +39 -0
  28. data/spec/messages/get_config_request_spec.rb +25 -0
  29. data/spec/messages/hello_spec.rb +25 -0
  30. data/spec/messages/packet_in_spec.rb +76 -0
  31. data/spec/messages/packet_out_spec.rb +56 -0
  32. data/spec/messages/parser_spec.rb +43 -0
  33. data/spec/messages/port_mod_spec.rb +64 -0
  34. data/spec/messages/port_status_spec.rb +52 -0
  35. data/spec/messages/set_config_spec.rb +39 -0
  36. data/spec/messages/statistics_reply_spec.rb +411 -0
  37. data/spec/messages/statistics_request_spec.rb +355 -0
  38. data/spec/messages/vendor_spec.rb +56 -0
  39. data/spec/spec_helper.rb +7 -0
  40. data/spec/statistics/aggregate_statistics_reply_spec.rb +31 -0
  41. data/spec/statistics/aggregate_statistics_request_spec.rb +46 -0
  42. data/spec/statistics/description_statistics_spec.rb +38 -0
  43. data/spec/statistics/flow_statistics_reply_spec.rb +74 -0
  44. data/spec/statistics/flow_statistics_request_spec.rb +46 -0
  45. data/spec/statistics/port_statistics_reply_spec.rb +81 -0
  46. data/spec/statistics/port_statistics_request_spec.rb +19 -0
  47. data/spec/statistics/queue_statistics_reply_spec.rb +42 -0
  48. data/spec/statistics/queue_statistics_request_spec.rb +26 -0
  49. data/spec/statistics/table_statistics_spec.rb +54 -0
  50. data/spec/statistics/vendor_statistics_spec.rb +25 -0
  51. data/spec/structs/match_spec.rb +143 -0
  52. data/spec/structs/physical_port_spec.rb +63 -0
  53. data/spec/structs/port_number_spec.rb +19 -0
  54. metadata +109 -8
@@ -0,0 +1,109 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFFlowRemoved do
4
+ it 'should read binary' do
5
+ msg = OFFlowRemoved.read [
6
+ 1, 11, 0, 88, 0, 0, 0, 1, # header
7
+
8
+ # match
9
+ 0, 0x30, 0x20, 0x4f, # wildcards
10
+ 0, 0, # in_port
11
+ 0, 0, 0, 0, 0, 0, # mac_source
12
+ 0, 0, 0, 0, 0, 0, # mac_destination
13
+ 0xff, 0xff, # vlan_id
14
+ 0, # vlan_pcp
15
+ 0, # padding
16
+ 8, 0, # mac_protocol
17
+ 0, # ip_tos
18
+ 6, # ip_protocol
19
+ 0, 0, # padding
20
+ 0, 0, 0, 0, # ip_source
21
+ 192, 168, 0, 2, # ip_destination
22
+ 0, 0, # source_port
23
+ 0x0b, 0xb8, # destination_port
24
+
25
+ 0, 0, 0, 0, 0, 0, 0, 1, # cookie
26
+ 0x0b, 0xb8, # priority
27
+ 0, # reason
28
+ 0, # padding
29
+ 0, 0, 0, 50, # duration_seconds
30
+ 0, 0, 0, 10, # duration_nanoseconds
31
+ 0, 100, # idle_timeout
32
+ 0, 0, # padding
33
+ 0, 0, 0, 0, 0, 0, 0, 10, # packet_count
34
+ 0, 0, 0, 0, 0, 0, 0, 80 # byte_count
35
+ ].pack('C*')
36
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
37
+ expect(msg.type).to eq(:flow_removed)
38
+ expect(msg.len).to eq(88)
39
+ expect(msg.xid).to eq(1)
40
+ expect(msg.match.ip_destination).to eq('192.168.0.2')
41
+ expect(msg.cookie).to eq(1)
42
+ expect(msg.priority).to eq(3000)
43
+ expect(msg.reason).to eq(:idle_timeout)
44
+ expect(msg.duration_seconds).to eq(50)
45
+ expect(msg.duration_nanoseconds).to eq(10)
46
+ expect(msg.idle_timeout).to eq(100)
47
+ expect(msg.packet_count).to eq(10)
48
+ expect(msg.byte_count).to eq(80)
49
+ end
50
+ it 'should initialize with default values' do
51
+ msg = OFFlowRemoved.new
52
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
53
+ expect(msg.type).to eq(:flow_removed)
54
+ expect(msg.len).to eq(88)
55
+ expect(msg.xid).to eq(0)
56
+ expect(msg.match.ip_destination).to eq('0.0.0.0')
57
+ expect(msg.cookie).to eq(0)
58
+ expect(msg.priority).to eq(0)
59
+ expect(msg.reason).to eq(:idle_timeout)
60
+ expect(msg.duration_seconds).to eq(0)
61
+ expect(msg.duration_nanoseconds).to eq(0)
62
+ expect(msg.idle_timeout).to eq(0)
63
+ expect(msg.packet_count).to eq(0)
64
+ expect(msg.byte_count).to eq(0)
65
+ end
66
+ it 'should initialize with some values' do
67
+ msg = OFFlowRemoved.new(
68
+ xid: 1,
69
+ match: {
70
+ wildcards: {
71
+ in_port: true,
72
+ mac_source: true,
73
+ mac_destination: true,
74
+ vlan_id: true,
75
+ vlan_pcp: true,
76
+ ip_tos: true,
77
+ ip_source_all: true,
78
+ ip_destination: 16,
79
+ destination_port: true
80
+ },
81
+ mac_protocol: :ipv4,
82
+ ip_protocol: :tcp,
83
+ ip_destination: '192.168.0.2',
84
+ destination_port: 3000
85
+ },
86
+ cookie: 1,
87
+ priority: 3000,
88
+ reason: :idle_timeout,
89
+ duration_seconds: 50,
90
+ duration_nanoseconds: 10,
91
+ idle_timeout: 100,
92
+ packet_count: 10,
93
+ byte_count: 80
94
+ )
95
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
96
+ expect(msg.type).to eq(:flow_removed)
97
+ expect(msg.len).to eq(88)
98
+ expect(msg.xid).to eq(1)
99
+ expect(msg.match.ip_destination).to eq('192.168.0.2')
100
+ expect(msg.cookie).to eq(1)
101
+ expect(msg.priority).to eq(3000)
102
+ expect(msg.reason).to eq(:idle_timeout)
103
+ expect(msg.duration_seconds).to eq(50)
104
+ expect(msg.duration_nanoseconds).to eq(10)
105
+ expect(msg.idle_timeout).to eq(100)
106
+ expect(msg.packet_count).to eq(10)
107
+ expect(msg.byte_count).to eq(80)
108
+ end
109
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFGetConfigReply do
4
+ it 'should read binary' do
5
+ msg = OFGetConfigReply.read [
6
+ 1, 8, 0, 12, 0, 0, 0, 1, # header
7
+ 0, 0, # flags
8
+ 0, 0xff # miss_send_length
9
+ ].pack('C*')
10
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
11
+ expect(msg.type).to eq(:get_config_reply)
12
+ expect(msg.len).to eq(12)
13
+ expect(msg.xid).to eq(1)
14
+ expect(msg.flags).to eq(:fragments_normal)
15
+ expect(msg.miss_send_length).to eq(0xff)
16
+ end
17
+ it 'should initialize with default values' do
18
+ msg = OFGetConfigReply.new
19
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
20
+ expect(msg.type).to eq(:get_config_reply)
21
+ expect(msg.len).to eq(12)
22
+ expect(msg.xid).to eq(0)
23
+ expect(msg.flags).to eq(:fragments_normal)
24
+ expect(msg.miss_send_length).to eq(0)
25
+ end
26
+ it 'should initialize with some values' do
27
+ msg = OFGetConfigReply.new(
28
+ xid: 1,
29
+ flags: :fragments_normal,
30
+ miss_send_length: 0xff
31
+ )
32
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
33
+ expect(msg.type).to eq(:get_config_reply)
34
+ expect(msg.len).to eq(12)
35
+ expect(msg.xid).to eq(1)
36
+ expect(msg.flags).to eq(:fragments_normal)
37
+ expect(msg.miss_send_length).to eq(0xff)
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFGetConfigRequest do
4
+ it 'should read binary' do
5
+ msg = OFGetConfigRequest.read [1, 7, 0, 8, 0, 0, 0, 1].pack('C*')
6
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
7
+ expect(msg.type).to eq(:get_config_request)
8
+ expect(msg.len).to eq(8)
9
+ expect(msg.xid).to eq(1)
10
+ end
11
+ it 'should initialize with default values' do
12
+ msg = OFGetConfigRequest.new
13
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
14
+ expect(msg.type).to eq(:get_config_request)
15
+ expect(msg.len).to eq(8)
16
+ expect(msg.xid).to eq(0)
17
+ end
18
+ it 'should initialize with some values' do
19
+ msg = OFGetConfigRequest.new(xid: 1)
20
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
21
+ expect(msg.type).to eq(:get_config_request)
22
+ expect(msg.len).to eq(8)
23
+ expect(msg.xid).to eq(1)
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFHello do
4
+ it 'should read binary' do
5
+ msg = OFHello.read [1, 0, 0, 8, 0, 0, 0, 1].pack('C*')
6
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
7
+ expect(msg.type).to eq(:hello)
8
+ expect(msg.len).to eq(8)
9
+ expect(msg.xid).to eq(1)
10
+ end
11
+ it 'should initialize with default values' do
12
+ msg = OFHello.new
13
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
14
+ expect(msg.type).to eq(:hello)
15
+ expect(msg.len).to eq(8)
16
+ expect(msg.xid).to eq(0)
17
+ end
18
+ it 'should initialize with some values' do
19
+ msg = OFHello.new(xid: 1)
20
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
21
+ expect(msg.type).to eq(:hello)
22
+ expect(msg.len).to eq(8)
23
+ expect(msg.xid).to eq(1)
24
+ end
25
+ end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFPacketIn do
4
+ it 'should read binary' do
5
+ msg = OFPacketIn.read [
6
+ 1, 10, 0, 64, 0, 0, 0, 1, # header
7
+ 0, 0, 0, 1, # buffer_id
8
+ 0, 46, # total_length
9
+ 0, 1, # in_port
10
+ 0, # reason
11
+ 0, # padding
12
+ # 1, 2 # data
13
+
14
+ # ethernet
15
+ 0, 0, 0, 0, 0, 2, # mac_destination
16
+ 0, 0, 0, 0, 0, 1, # mac_source
17
+ 0x81, 0, # protocol
18
+
19
+ # vlan
20
+ 0x20, 1, # pcp & cfi & vlan_id
21
+ 8, 6, # protocol
22
+
23
+ # arp
24
+ 0, 1, # hardware
25
+ 8, 0, # protocol
26
+ 6, # hardware_length
27
+ 4, # protocol_length
28
+ 0, 2, # operation
29
+ 0, 0, 0, 0, 0, 1, # mac_source
30
+ 192, 168, 0, 1, # ip_source
31
+ 0, 0, 0, 0, 0, 2, # mac_destination
32
+ 192, 168, 0, 2 # ip_destination
33
+ ].pack('C*')
34
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
35
+ expect(msg.type).to eq(:packet_in)
36
+ expect(msg.len).to eq(64)
37
+ expect(msg.xid).to eq(1)
38
+ expect(msg.buffer_id).to eq(1)
39
+ expect(msg.total_length).to eq(46)
40
+ expect(msg.in_port).to eq(1)
41
+ expect(msg.reason).to eq(:no_match)
42
+ expect(msg.data.length).to eq(46)
43
+ expect(msg.parsed_data.length).to eq(46)
44
+ expect(msg.parsed_data.mac_destination).to eq('00:00:00:00:00:02')
45
+ end
46
+ it 'should initialize with default values' do
47
+ msg = OFPacketIn.new
48
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
49
+ expect(msg.type).to eq(:packet_in)
50
+ expect(msg.len).to eq(18)
51
+ expect(msg.xid).to eq(0)
52
+ expect(msg.buffer_id).to eq(:none)
53
+ expect(msg.total_length).to eq(0)
54
+ expect(msg.in_port).to eq(:none)
55
+ expect(msg.reason).to eq(:no_match)
56
+ expect(msg.data).to be_empty
57
+ end
58
+ it 'should initialize with some values' do
59
+ msg = OFPacketIn.new(
60
+ xid: 1,
61
+ buffer_id: 1,
62
+ in_port: 1,
63
+ reason: :no_match,
64
+ data: [1, 2].pack('C*')
65
+ )
66
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
67
+ expect(msg.type).to eq(:packet_in)
68
+ expect(msg.len).to eq(20)
69
+ expect(msg.xid).to eq(1)
70
+ expect(msg.buffer_id).to eq(1)
71
+ expect(msg.total_length).to eq(2)
72
+ expect(msg.in_port).to eq(1)
73
+ expect(msg.reason).to eq(:no_match)
74
+ expect(msg.data.length).to eq(2)
75
+ end
76
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFPacketOut do
4
+ it 'should read binary' do
5
+ msg = OFPacketOut.read [
6
+ 1, 13, 0, 26, 0, 0, 0, 1, # header
7
+ 0xff, 0xff, 0xff, 0xff, # buffer_id
8
+ 0, 1, # in_port
9
+ 0, 8, # actions_length
10
+ # actions
11
+ # output
12
+ 0, 0, 0, 8, # header
13
+ 0, 1, # port
14
+ 0xff, 0xff, # max_length
15
+ # data
16
+ 1, 2
17
+ ].pack('C*')
18
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
19
+ expect(msg.type).to eq(:packet_out)
20
+ expect(msg.len).to eq(26)
21
+ expect(msg.xid).to eq(1)
22
+ expect(msg.buffer_id).to eq(:none)
23
+ expect(msg.in_port).to eq(1)
24
+ expect(msg.actions.length).to eq(1)
25
+ expect(msg.actions.first.type).to eq(:output)
26
+ expect(msg.data.length).to eq(2)
27
+ end
28
+ it 'should initialize with default values' do
29
+ msg = OFPacketOut.new
30
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
31
+ expect(msg.type).to eq(:packet_out)
32
+ expect(msg.len).to eq(16)
33
+ expect(msg.xid).to eq(0)
34
+ expect(msg.buffer_id).to eq(:none)
35
+ expect(msg.in_port).to eq(:none)
36
+ expect(msg.actions).to be_empty
37
+ expect(msg.data).to be_empty
38
+ end
39
+ it 'should initialize with some values' do
40
+ msg = OFPacketOut.new(
41
+ xid: 1,
42
+ in_port: 1,
43
+ actions: [OFActionOutput.new(port: 1)],
44
+ data: [1, 2].pack('C*')
45
+ )
46
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
47
+ expect(msg.type).to eq(:packet_out)
48
+ expect(msg.len).to eq(26)
49
+ expect(msg.xid).to eq(1)
50
+ expect(msg.buffer_id).to eq(:none)
51
+ expect(msg.in_port).to eq(1)
52
+ expect(msg.actions.length).to eq(1)
53
+ expect(msg.actions.first.type).to eq(:output)
54
+ expect(msg.data.length).to eq(2)
55
+ end
56
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFParser do
4
+ let(:hello_msg) { [1, 0, 0, 8, 0, 0, 0, 1].pack('C*') }
5
+ let(:packet_out_msg) {
6
+ [
7
+ 1, 13, 0, 26, 0, 0, 0, 1, # header
8
+ 0xff, 0xff, 0xff, 0xff, # buffer_id
9
+ 0, 1, # in_port
10
+ 0, 8, # actions_length
11
+ # actions
12
+ # output
13
+ 0, 0, 0, 8, # header
14
+ 0, 1, # port
15
+ 0xff, 0xff, # max_length
16
+ # data
17
+ 1, 2
18
+ ].pack('C*')
19
+ }
20
+
21
+ it 'should read binary Hello Message' do
22
+ msg = OFParser.read(hello_msg)
23
+ expect(msg.class).to be(OFHello)
24
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
25
+ expect(msg.type).to eq(:hello)
26
+ expect(msg.len).to eq(8)
27
+ expect(msg.xid).to eq(1)
28
+ end
29
+
30
+ it 'should read binary PacketOut Message' do
31
+ msg = OFParser.read(packet_out_msg)
32
+ expect(msg.class).to be(OFPacketOut)
33
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
34
+ expect(msg.type).to eq(:packet_out)
35
+ expect(msg.len).to eq(26)
36
+ expect(msg.xid).to eq(1)
37
+ expect(msg.buffer_id).to eq(:none)
38
+ expect(msg.in_port).to eq(1)
39
+ expect(msg.actions.length).to eq(1)
40
+ expect(msg.actions.first.type).to eq(:output)
41
+ expect(msg.data.length).to eq(2)
42
+ end
43
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFPortMod do
4
+ it 'should read binary' do
5
+ msg = OFPortMod.read [
6
+ 1, 15, 0, 32, 0, 0, 0, 1, # header
7
+ 0, 1, # port_number
8
+ 0, 0, 0, 0, 0, 1, # hardware_address
9
+ 0, 0, 0, 3, # config
10
+ 0, 0, 0, 1, # mask
11
+ 0, 0, 0, 3, # advertise
12
+ 0, 0, 0, 0 # padding
13
+ ].pack('C*')
14
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
15
+ expect(msg.type).to eq(:port_mod)
16
+ expect(msg.len).to eq(32)
17
+ expect(msg.xid).to eq(1)
18
+ expect(msg.port_number).to eq(1)
19
+ expect(msg.hardware_address).to eq('00:00:00:00:00:01')
20
+ expect(msg.config).to eq([:port_down, :no_spanning_tree])
21
+ expect(msg.mask).to eq([:port_down])
22
+ expect(msg.advertise).to eq([
23
+ :port_10mb_half_duplex,
24
+ :port_10mb_full_duplex
25
+ ])
26
+ end
27
+ it 'should initialize with default values' do
28
+ msg = OFPortMod.new
29
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
30
+ expect(msg.type).to eq(:port_mod)
31
+ expect(msg.len).to eq(32)
32
+ expect(msg.xid).to eq(0)
33
+ expect(msg.port_number).to eq(:none)
34
+ expect(msg.hardware_address).to eq('00:00:00:00:00:00')
35
+ expect(msg.config).to be_empty
36
+ expect(msg.mask).to be_empty
37
+ expect(msg.advertise).to be_empty
38
+ end
39
+ it 'should initialize with some values' do
40
+ msg = OFPortMod.new(
41
+ xid: 1,
42
+ port_number: 1,
43
+ hardware_address: '00:00:00:00:00:01',
44
+ config: [:port_down, :no_spanning_tree],
45
+ mask: [:port_down],
46
+ advertise: [
47
+ :port_10mb_half_duplex,
48
+ :port_10mb_full_duplex
49
+ ]
50
+ )
51
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
52
+ expect(msg.type).to eq(:port_mod)
53
+ expect(msg.len).to eq(32)
54
+ expect(msg.xid).to eq(1)
55
+ expect(msg.port_number).to eq(1)
56
+ expect(msg.hardware_address).to eq('00:00:00:00:00:01')
57
+ expect(msg.config).to eq([:port_down, :no_spanning_tree])
58
+ expect(msg.mask).to eq([:port_down])
59
+ expect(msg.advertise).to eq([
60
+ :port_10mb_half_duplex,
61
+ :port_10mb_full_duplex
62
+ ])
63
+ end
64
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe OFPortStatus do
4
+ it 'should read binary' do
5
+ msg = OFPortStatus.read [
6
+ 1, 12, 0, 64, 0, 0, 0, 1, # header
7
+ 1, # reason
8
+ 0, 0, 0, 0, 0, 0, 0, # padding
9
+ # port
10
+ 0, 1, # port_number
11
+ 0, 0, 0, 0, 0, 1, # hardware_address
12
+ 112, 111, 114, 116, # name
13
+ 45, 49, 0, 0,
14
+ 0, 0, 0, 0,
15
+ 0, 0, 0, 0,
16
+ 0, 0, 0, 1, # config
17
+ 0, 0, 0, 1, # state
18
+ 0, 0, 0x0f, 0xff, # current_features
19
+ 0, 0, 0x0f, 0xff, # advertised_features
20
+ 0, 0, 0x0f, 0xff, # supported_features
21
+ 0, 0, 0x0f, 0xff # peer_features
22
+ ].pack('C*')
23
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
24
+ expect(msg.type).to eq(:port_status)
25
+ expect(msg.len).to eq(64)
26
+ expect(msg.xid).to eq(1)
27
+ expect(msg.reason).to eq(:delete)
28
+ expect(msg.desc.port_number).to eq(1)
29
+ end
30
+ it 'should initialize with default values' do
31
+ msg = OFPortStatus.new
32
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
33
+ expect(msg.type).to eq(:port_status)
34
+ expect(msg.len).to eq(64)
35
+ expect(msg.xid).to eq(0)
36
+ expect(msg.reason).to eq(:add)
37
+ expect(msg.desc.port_number).to eq(0)
38
+ end
39
+ it 'should initialize with some values' do
40
+ msg = OFPortStatus.new(
41
+ xid: 1,
42
+ reason: :delete,
43
+ desc: OFPhysicalPort.new(port_number: 1)
44
+ )
45
+ expect(msg.version).to eq(OFMessage::OFP_VERSION)
46
+ expect(msg.type).to eq(:port_status)
47
+ expect(msg.len).to eq(64)
48
+ expect(msg.xid).to eq(1)
49
+ expect(msg.reason).to eq(:delete)
50
+ expect(msg.desc.port_number).to eq(1)
51
+ end
52
+ end