trema 0.4.6 → 0.4.7
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.travis.yml +24 -7
- data/Gemfile +19 -27
- data/Guardfile +6 -0
- data/README.md +13 -5
- data/Rakefile +418 -415
- data/bin/quality +2 -2
- data/bin/trema +103 -105
- data/bin/trema-config +7 -7
- data/build.rb +2 -2
- data/cruise.rb +109 -83
- data/features/dsl/switch_port_specifier.feature +1 -1
- data/features/examples/dumper.feature +9 -41
- data/features/examples/hello_trema.feature +1 -1
- data/features/examples/learning_switch.feature +7 -7
- data/features/examples/list_switches.feature +5 -5
- data/features/examples/message.set_config.feature +11 -11
- data/features/examples/message.vendor-action.feature +7 -7
- data/features/examples/message.vendor-stats-request.feature +1 -1
- data/features/examples/multi_learning_switch.feature +7 -7
- data/features/examples/openflow_message.echo.feature +15 -15
- data/features/examples/openflow_message.features_request.feature +12 -12
- data/features/examples/openflow_message.hello.feature +13 -13
- data/features/examples/packet_in.feature +8 -8
- data/features/examples/patch_panel.feature +1 -1
- data/features/examples/repeater_hub.feature +7 -7
- data/features/examples/switch_info.feature +16 -16
- data/features/examples/switch_monitor.feature +11 -11
- data/features/examples/transparent_firewall.feature +73 -0
- data/features/handlers/switch_ready.feature +1 -1
- data/features/step_definitions/misc_steps.rb +24 -24
- data/features/step_definitions/send_packets_steps.rb +2 -2
- data/features/step_definitions/stats_steps.rb +6 -6
- data/features/support/env.rb +15 -15
- data/features/support/hooks.rb +9 -9
- data/features/switch_event/add_forward_entry.feature +3 -3
- data/features/switch_event/delete_forward_entry.feature +3 -3
- data/features/switch_event/dump_forward_entries.feature +2 -2
- data/features/switch_event/set_forward_entries.feature +2 -2
- data/features/trema_commands/dump_flows.feature +1 -0
- data/features/trema_commands/help.feature +1 -0
- data/features/trema_commands/help_option.feature +1 -0
- data/features/trema_commands/kill.feature +1 -0
- data/features/trema_commands/killall.feature +1 -0
- data/features/trema_commands/port_down.feature +1 -0
- data/features/trema_commands/port_up.feature +1 -0
- data/features/trema_commands/reset_stats.feature +1 -0
- data/features/trema_commands/run.feature +1 -0
- data/features/trema_commands/send_packets.feature +2 -1
- data/features/trema_commands/show_stats.feature +1 -0
- data/features/trema_commands/up.feature +1 -0
- data/features/trema_commands/version.feature +1 -0
- data/features/trema_commands/version_option.feature +1 -0
- data/rubocop-todo.yml +159 -0
- data/ruby/blocker.rb +15 -17
- data/ruby/extconf.rb +19 -19
- data/ruby/sub-process.rb +29 -29
- data/ruby/trema/aggregate-stats-reply.rb +2 -2
- data/ruby/trema/app.rb +13 -13
- data/ruby/trema/cli.rb +45 -45
- data/ruby/trema/command.rb +14 -14
- data/ruby/trema/command/dump_flows.rb +5 -5
- data/ruby/trema/command/kill.rb +13 -13
- data/ruby/trema/command/killall.rb +1 -1
- data/ruby/trema/command/netns.rb +3 -3
- data/ruby/trema/command/port_down.rb +7 -7
- data/ruby/trema/command/port_up.rb +7 -7
- data/ruby/trema/command/reset_stats.rb +6 -6
- data/ruby/trema/command/ruby.rb +2 -2
- data/ruby/trema/command/run.rb +23 -23
- data/ruby/trema/command/send_packets.rb +9 -9
- data/ruby/trema/command/shell.rb +14 -16
- data/ruby/trema/command/show_stats.rb +9 -9
- data/ruby/trema/command/up.rb +4 -4
- data/ruby/trema/command/version.rb +1 -1
- data/ruby/trema/controller.rb +10 -10
- data/ruby/trema/custom-switch.rb +4 -4
- data/ruby/trema/daemon.rb +21 -21
- data/ruby/trema/desc-stats-reply.rb +2 -2
- data/ruby/trema/dsl.rb +5 -5
- data/ruby/trema/dsl/configuration.rb +7 -7
- data/ruby/trema/dsl/context.rb +10 -10
- data/ruby/trema/dsl/custom-switch.rb +3 -3
- data/ruby/trema/dsl/link.rb +2 -2
- data/ruby/trema/dsl/netns.rb +9 -9
- data/ruby/trema/dsl/parser.rb +14 -14
- data/ruby/trema/dsl/rswitch.rb +3 -3
- data/ruby/trema/dsl/run.rb +4 -4
- data/ruby/trema/dsl/runner.rb +20 -20
- data/ruby/trema/dsl/stanza.rb +5 -5
- data/ruby/trema/dsl/switch.rb +14 -14
- data/ruby/trema/dsl/syntax.rb +54 -54
- data/ruby/trema/dsl/vhost.rb +9 -9
- data/ruby/trema/dsl/vswitch.rb +4 -4
- data/ruby/trema/enqueue.rb +11 -11
- data/ruby/trema/exact-match.rb +1 -1
- data/ruby/trema/executables.rb +19 -19
- data/ruby/trema/flow-stats-reply.rb +2 -2
- data/ruby/trema/flow.rb +8 -8
- data/ruby/trema/hardware-switch.rb +2 -2
- data/ruby/trema/host.rb +18 -18
- data/ruby/trema/link.rb +9 -9
- data/ruby/trema/mac.rb +1 -5
- data/ruby/trema/match.c +0 -1
- data/ruby/trema/monkey-patch/integer.rb +3 -3
- data/ruby/trema/monkey-patch/integer/base-conversions.rb +1 -1
- data/ruby/trema/monkey-patch/integer/ranges.rb +2 -2
- data/ruby/trema/monkey-patch/integer/validators.rb +1 -1
- data/ruby/trema/monkey-patch/module.rb +2 -2
- data/ruby/trema/monkey-patch/module/class-method.rb +2 -2
- data/ruby/trema/monkey-patch/module/deprecation.rb +1 -1
- data/ruby/trema/monkey-patch/string.rb +1 -1
- data/ruby/trema/monkey-patch/string/inflectors.rb +7 -7
- data/ruby/trema/netns.rb +6 -6
- data/ruby/trema/network-component.rb +7 -7
- data/ruby/trema/ofctl.rb +13 -13
- data/ruby/trema/open-vswitch.rb +25 -25
- data/ruby/trema/openflow-switch.rb +1 -1
- data/ruby/trema/ordered-hash.rb +8 -8
- data/ruby/trema/packet-in.c +0 -1
- data/ruby/trema/packet-queue.rb +8 -8
- data/ruby/trema/packetin-filter.rb +9 -9
- data/ruby/trema/path.rb +32 -32
- data/ruby/trema/phost.rb +5 -5
- data/ruby/trema/port-mod.c +0 -1
- data/ruby/trema/port-stats-reply.rb +2 -2
- data/ruby/trema/port-status-add.rb +2 -2
- data/ruby/trema/port-status-delete.rb +2 -2
- data/ruby/trema/port-status-modify.rb +2 -2
- data/ruby/trema/port.c +0 -1
- data/ruby/trema/process.rb +7 -7
- data/ruby/trema/queue-stats-reply.rb +2 -2
- data/ruby/trema/ruby-switch.rb +6 -6
- data/ruby/trema/send-out-port.rb +11 -11
- data/ruby/trema/set-eth-addr.rb +5 -5
- data/ruby/trema/set-eth-dst-addr.rb +1 -1
- data/ruby/trema/set-eth-src-addr.rb +1 -1
- data/ruby/trema/set-ip-addr.rb +6 -6
- data/ruby/trema/set-ip-dst-addr.rb +1 -1
- data/ruby/trema/set-ip-src-addr.rb +1 -1
- data/ruby/trema/set-ip-tos.rb +6 -6
- data/ruby/trema/set-transport-dst-port.rb +2 -2
- data/ruby/trema/set-transport-port.rb +7 -7
- data/ruby/trema/set-transport-src-port.rb +3 -3
- data/ruby/trema/set-vlan-priority.rb +6 -6
- data/ruby/trema/set-vlan-vid.rb +6 -6
- data/ruby/trema/shell.rb +10 -10
- data/ruby/trema/shell/down.rb +3 -3
- data/ruby/trema/shell/killall.rb +1 -1
- data/ruby/trema/shell/link.rb +14 -14
- data/ruby/trema/shell/reset_stats.rb +6 -6
- data/ruby/trema/shell/run.rb +7 -7
- data/ruby/trema/shell/send_packets.rb +3 -3
- data/ruby/trema/shell/show_stats.rb +7 -7
- data/ruby/trema/shell/up.rb +5 -5
- data/ruby/trema/shell/vhost.rb +4 -4
- data/ruby/trema/shell/vswitch.rb +7 -7
- data/ruby/trema/stats-helper.rb +3 -3
- data/ruby/trema/stats-reply.c +0 -1
- data/ruby/trema/strip-vlan-header.rb +1 -1
- data/ruby/trema/switch-daemon.rb +9 -9
- data/ruby/trema/switch-manager.rb +9 -9
- data/ruby/trema/switch.rb +7 -7
- data/ruby/trema/table-stats-reply.rb +2 -2
- data/ruby/trema/timers.rb +12 -12
- data/ruby/trema/trema.c +0 -1
- data/ruby/trema/tremashark.rb +1 -1
- data/ruby/trema/util.rb +25 -27
- data/ruby/trema/vendor-action.rb +10 -10
- data/ruby/trema/vendor-stats-reply.rb +2 -2
- data/ruby/trema/version.rb +1 -1
- data/spec/spec_helper.rb +50 -52
- data/spec/support/action.rb +9 -12
- data/spec/support/mandatory-option.rb +15 -18
- data/spec/support/matchers/constant.rb +7 -7
- data/spec/support/openflow-message.rb +76 -79
- data/spec/support/port-status.rb +7 -10
- data/spec/trema/app_spec.rb +27 -27
- data/spec/trema/barrier-reply_spec.rb +10 -10
- data/spec/trema/barrier-request_spec.rb +35 -35
- data/spec/trema/cli_spec.rb +63 -63
- data/spec/trema/controller_spec.rb +3 -3
- data/spec/trema/default-logger_spec.rb +4 -4
- data/spec/trema/dsl/configuration_spec.rb +47 -47
- data/spec/trema/dsl/link_spec.rb +11 -11
- data/spec/trema/dsl/run_spec.rb +19 -19
- data/spec/trema/dsl/runner_spec.rb +91 -91
- data/spec/trema/dsl/switch_spec.rb +16 -16
- data/spec/trema/dsl/syntax_spec.rb +22 -22
- data/spec/trema/dsl/vhost_spec.rb +37 -37
- data/spec/trema/dsl/vswitch_spec.rb +21 -21
- data/spec/trema/echo-reply_spec.rb +29 -29
- data/spec/trema/echo-request_spec.rb +54 -54
- data/spec/trema/enqueue_spec.rb +25 -25
- data/spec/trema/error_spec.rb +30 -30
- data/spec/trema/executables_spec.rb +20 -20
- data/spec/trema/features-reply_spec.rb +41 -41
- data/spec/trema/features-request_spec.rb +35 -35
- data/spec/trema/flow-mod_spec.rb +32 -32
- data/spec/trema/flow-removed_spec.rb +62 -62
- data/spec/trema/get-config-reply_spec.rb +14 -12
- data/spec/trema/get-config-request_spec.rb +35 -35
- data/spec/trema/hardware-switch_spec.rb +12 -12
- data/spec/trema/hello_spec.rb +17 -17
- data/spec/trema/host_spec.rb +71 -71
- data/spec/trema/link_spec.rb +13 -13
- data/spec/trema/list-switches-reply_spec.rb +10 -10
- data/spec/trema/match_spec.rb +41 -41
- data/spec/trema/open-vswitch_spec.rb +45 -45
- data/spec/trema/openflow-error_spec.rb +67 -65
- data/spec/trema/packet-in_spec.rb +450 -446
- data/spec/trema/packet-out_spec.rb +42 -42
- data/spec/trema/packetin-filter_spec.rb +5 -5
- data/spec/trema/port-mod_spec.rb +32 -32
- data/spec/trema/port-status-add_spec.rb +3 -3
- data/spec/trema/port-status-delete_spec.rb +3 -3
- data/spec/trema/port-status-modify_spec.rb +16 -16
- data/spec/trema/port-status_spec.rb +2 -2
- data/spec/trema/port_spec.rb +21 -21
- data/spec/trema/process_spec.rb +22 -22
- data/spec/trema/queue-get-config-reply_spec.rb +21 -20
- data/spec/trema/queue-get-config-request_spec.rb +24 -24
- data/spec/trema/send-out-port_spec.rb +42 -42
- data/spec/trema/set-config_spec.rb +31 -31
- data/spec/trema/set-eth-addr_spec.rb +21 -21
- data/spec/trema/set-ip-addr_spec.rb +29 -29
- data/spec/trema/set-ip-tos_spec.rb +26 -26
- data/spec/trema/set-transport-dst-port_spec.rb +22 -22
- data/spec/trema/set-transport-src-port_spec.rb +22 -22
- data/spec/trema/set-vlan-priority_spec.rb +23 -23
- data/spec/trema/set-vlan-vid_spec.rb +23 -23
- data/spec/trema/shell/vhost_spec.rb +21 -21
- data/spec/trema/shell/vswitch_spec.rb +30 -30
- data/spec/trema/stats-reply_spec.rb +183 -173
- data/spec/trema/stats-request_spec.rb +66 -66
- data/spec/trema/strip-vlan-header_spec.rb +11 -11
- data/spec/trema/switch-daemon_spec.rb +34 -34
- data/spec/trema/switch-disconnected_spec.rb +17 -17
- data/spec/trema/switch-manager_spec.rb +6 -6
- data/spec/trema/tremashark_spec.rb +4 -4
- data/spec/trema/util_spec.rb +35 -35
- data/spec/trema/vendor-action_spec.rb +26 -26
- data/spec/trema/vendor_spec.rb +27 -27
- data/spec/trema_spec.rb +2 -2
- data/src/examples/cbench_switch/cbench-switch.rb +3 -3
- data/src/examples/dumper/dumper.rb +31 -31
- data/src/examples/hello_trema/hello-trema.rb +2 -2
- data/src/examples/learning_switch/fdb.rb +14 -14
- data/src/examples/learning_switch/learning-switch.rb +12 -10
- data/src/examples/learning_switch/learning_switch.c +22 -39
- data/src/examples/list_switches/list-switches.rb +3 -3
- data/src/examples/match_compare/match-compare.rb +20 -20
- data/src/examples/multi_learning_switch/multi-learning-switch.rb +12 -12
- data/src/examples/openflow_message/echo.rb +4 -4
- data/src/examples/openflow_message/example.rb +7 -7
- data/src/examples/openflow_message/features-request.rb +31 -31
- data/src/examples/openflow_message/hello.rb +2 -2
- data/src/examples/openflow_message/set-config.rb +4 -4
- data/src/examples/openflow_message/vendor-action.rb +3 -3
- data/src/examples/openflow_message/vendor-stats-request.rb +9 -9
- data/src/examples/packet_in/packet-in.rb +2 -2
- data/src/examples/patch_panel/patch-panel.rb +9 -9
- data/src/examples/repeater_hub/repeater-hub.rb +4 -4
- data/src/examples/repeater_hub/repeater-hub_spec.rb +65 -65
- data/src/examples/simple_router/arp-table.rb +7 -7
- data/src/examples/simple_router/interface.rb +10 -10
- data/src/examples/simple_router/routing-table.rb +4 -4
- data/src/examples/simple_router/simple-router.rb +3 -3
- data/src/examples/switch_info/switch-info.rb +9 -9
- data/src/examples/switch_monitor/switch-monitor.rb +4 -4
- data/src/examples/traffic_monitor/counter.rb +6 -6
- data/src/examples/traffic_monitor/fdb.rb +4 -4
- data/src/examples/traffic_monitor/traffic-monitor.rb +12 -12
- data/src/examples/transparent_firewall/README.md +61 -0
- data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +713 -0
- data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +3440 -0
- data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +11342 -0
- data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +1937 -0
- data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +7329 -0
- data/src/examples/transparent_firewall/block-rfc1918.rb +86 -0
- data/src/examples/transparent_firewall/pass-delegated.rb +178 -0
- data/src/examples/transparent_firewall/regen_aggregated.sh +53 -0
- data/src/examples/transparent_firewall/stats-to-cidrs.rb +59 -0
- data/src/lib/messenger.c +14 -5
- data/src/lib/openflow_message.c +0 -5
- data/tasks/rubocop.rake +22 -0
- data/trema +1 -1
- data/trema-config +1 -1
- data/trema.gemspec +22 -22
- metadata +30 -16
data/spec/trema/enqueue_spec.rb
CHANGED
|
@@ -16,54 +16,54 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
20
|
+
require 'trema'
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
describe Enqueue,
|
|
24
|
-
it { expect { Enqueue.new(
|
|
23
|
+
describe Enqueue, '.new( :port_number => 1 )' do
|
|
24
|
+
it { expect { Enqueue.new(:port_number => 1) }.to raise_error(ArgumentError) }
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
describe Enqueue,
|
|
29
|
-
it { expect { Enqueue.new(
|
|
28
|
+
describe Enqueue, '.new( :queue_id => 1 )' do
|
|
29
|
+
it { expect { Enqueue.new(:queue_id => 1) }.to raise_error(ArgumentError) }
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
describe Enqueue,
|
|
33
|
+
describe Enqueue, '.new( :port_number => number, :queue_id => 1 )' do
|
|
34
34
|
subject { Enqueue.new :port_number => port_number, :queue_id => 1 }
|
|
35
|
-
it_validates
|
|
35
|
+
it_validates 'option is within range', :port_number, 0..( 2**16 - 1)
|
|
36
36
|
|
|
37
|
-
context
|
|
38
|
-
let(
|
|
39
|
-
its(
|
|
37
|
+
context 'when :port_number == 1' do
|
|
38
|
+
let(:port_number) { 1 }
|
|
39
|
+
its(:port_number) { should == 1 }
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
describe Enqueue,
|
|
44
|
+
describe Enqueue, '.new( :port_number => 1, :queue_id => number )' do
|
|
45
45
|
subject { Enqueue.new :port_number => 1, :queue_id => queue_id }
|
|
46
|
-
it_validates
|
|
46
|
+
it_validates 'option is within range', :queue_id, 0..( 2**32 - 1)
|
|
47
47
|
|
|
48
|
-
context
|
|
49
|
-
let(
|
|
50
|
-
its(
|
|
48
|
+
context 'when :queue_id == 256' do
|
|
49
|
+
let(:queue_id) { 256 }
|
|
50
|
+
its(:queue_id) { should == 256 }
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
describe Enqueue,
|
|
56
|
-
context
|
|
57
|
-
it
|
|
55
|
+
describe Enqueue, '.new( VALID OPTIONS )' do
|
|
56
|
+
context 'when sending #flow_mod(add) with action set to enqueue' do
|
|
57
|
+
it 'should have a flow with action set to enqueue' do
|
|
58
58
|
class FlowModAddController < Controller; end
|
|
59
|
-
network
|
|
59
|
+
network do
|
|
60
60
|
vswitch { datapath_id 0xabc }
|
|
61
|
-
|
|
62
|
-
controller(
|
|
61
|
+
end.run(FlowModAddController) do
|
|
62
|
+
controller('FlowModAddController').send_flow_mod_add(0xabc, :actions => Enqueue.new(:port_number => 1, :queue_id => 123))
|
|
63
63
|
sleep 2 # FIXME: wait to send_flow_mod
|
|
64
|
-
expect(
|
|
65
|
-
expect(
|
|
66
|
-
|
|
64
|
+
expect(vswitch('0xabc')).to have(1).flows
|
|
65
|
+
expect(vswitch('0xabc').flows[0].actions).to match(/enqueue:1q123/)
|
|
66
|
+
end
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
end
|
data/spec/trema/error_spec.rb
CHANGED
|
@@ -16,60 +16,60 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
20
|
+
require 'trema'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
module Trema
|
|
24
|
-
describe Error,
|
|
25
|
-
it { expect { subject }.to raise_error(
|
|
24
|
+
describe Error, '.new', :nosudo => true do
|
|
25
|
+
it { expect { subject }.to raise_error(ArgumentError, 'Type and code are mandatory options') }
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
describe Error,
|
|
30
|
-
it { expect { subject }.to raise_error(
|
|
29
|
+
describe Error, '.new(nil)', :nosudo => true do
|
|
30
|
+
it { expect { subject }.to raise_error(ArgumentError, 'Type and code are mandatory options') }
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
describe Error,
|
|
35
|
-
subject { Error.new(
|
|
36
|
-
it { expect { subject }.to raise_error(
|
|
34
|
+
describe Error, '.new(:type => value)', :nosudo => true do
|
|
35
|
+
subject { Error.new(:type => OFPET_BAD_REQUEST) }
|
|
36
|
+
it { expect { subject }.to raise_error(ArgumentError, 'Code is a mandatory option') }
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
describe Error,
|
|
41
|
-
subject { Error.new(
|
|
42
|
-
it { expect { subject }.to raise_error(
|
|
40
|
+
describe Error, '.new(:code => value)', :nosudo => true do
|
|
41
|
+
subject { Error.new(:code => OFPBRC_BAD_TYPE) }
|
|
42
|
+
it { expect { subject }.to raise_error(ArgumentError, 'Type is a mandatory option') }
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
describe Error,
|
|
47
|
-
subject { Error.new(
|
|
48
|
-
it_should_behave_like
|
|
49
|
-
its(
|
|
50
|
-
its(
|
|
51
|
-
its(
|
|
46
|
+
describe Error, '.new(:type => value, :code => value)' do
|
|
47
|
+
subject { Error.new(:type => OFPET_BAD_REQUEST, :code => OFPBRC_BAD_TYPE) }
|
|
48
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
49
|
+
its(:error_type) { should == OFPET_BAD_REQUEST }
|
|
50
|
+
its(:code) { should == OFPBRC_BAD_TYPE }
|
|
51
|
+
its(:data) { should be_nil }
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
describe Error,
|
|
56
|
-
subject { Error.new(
|
|
57
|
-
it_should_behave_like
|
|
55
|
+
describe Error, '.new(:type => value, :code => value, :transaction_id => value)' do
|
|
56
|
+
subject { Error.new(:type => OFPET_BAD_REQUEST, :code => OFPBRC_BAD_TYPE, :transaction_id => transaction_id) }
|
|
57
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
describe Error,
|
|
62
|
-
subject { Error.new(
|
|
63
|
-
it_should_behave_like
|
|
61
|
+
describe Error, '.new(:type => value, :code => value, :xid => value)' do
|
|
62
|
+
subject { Error.new(:type => OFPET_BAD_REQUEST, :code => OFPBRC_BAD_TYPE, :xid => xid) }
|
|
63
|
+
it_should_behave_like 'any Openflow message with xid'
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
describe Error,
|
|
68
|
-
subject { Error.new(
|
|
69
|
-
it_should_behave_like
|
|
70
|
-
its(
|
|
71
|
-
its(
|
|
72
|
-
its(
|
|
67
|
+
describe Error, '.new(:type => value, :code => value, :data => value)' do
|
|
68
|
+
subject { Error.new(:type => OFPET_BAD_REQUEST, :code => OFPBRC_BAD_TYPE, :data => 'deadbeef') }
|
|
69
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
70
|
+
its(:error_type) { should == OFPET_BAD_REQUEST }
|
|
71
|
+
its(:code) { should == OFPBRC_BAD_TYPE }
|
|
72
|
+
its(:data) { should == 'deadbeef' }
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
@@ -16,33 +16,33 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
20
|
+
require 'trema/executables'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
describe Trema::Executables do
|
|
24
24
|
subject { Trema::Executables }
|
|
25
25
|
|
|
26
|
-
its ( :cli
|
|
27
|
-
its ( :ovs_ofctl
|
|
28
|
-
its ( :ovs_openflowd
|
|
29
|
-
its ( :packet_capture
|
|
30
|
-
its ( :packetin_filter
|
|
31
|
-
its ( :phost
|
|
32
|
-
its ( :stdin_relay
|
|
33
|
-
its ( :switch
|
|
34
|
-
its ( :switch_manager
|
|
35
|
-
its ( :syslog_relay
|
|
36
|
-
its ( :tremashark
|
|
37
|
-
|
|
38
|
-
context
|
|
39
|
-
before { FileTest.stub!(
|
|
40
|
-
its ( :compiled?
|
|
26
|
+
its ( :cli) { should be_a(String) }
|
|
27
|
+
its ( :ovs_ofctl) { should be_a(String) }
|
|
28
|
+
its ( :ovs_openflowd) { should be_a(String) }
|
|
29
|
+
its ( :packet_capture) { should be_a(String) }
|
|
30
|
+
its ( :packetin_filter) { should be_a(String) }
|
|
31
|
+
its ( :phost) { should be_a(String) }
|
|
32
|
+
its ( :stdin_relay) { should be_a(String) }
|
|
33
|
+
its ( :switch) { should be_a(String) }
|
|
34
|
+
its ( :switch_manager) { should be_a(String) }
|
|
35
|
+
its ( :syslog_relay) { should be_a(String) }
|
|
36
|
+
its ( :tremashark) { should be_a(String) }
|
|
37
|
+
|
|
38
|
+
context 'when Trema is compiled' do
|
|
39
|
+
before { FileTest.stub!(:executable?).and_return(true) }
|
|
40
|
+
its ( :compiled?) { should be_true }
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
context
|
|
44
|
-
before { FileTest.stub!(
|
|
45
|
-
its ( :compiled?
|
|
43
|
+
context 'when Trema is not compiled' do
|
|
44
|
+
before { FileTest.stub!(:executable?).and_return(false) }
|
|
45
|
+
its ( :compiled?) { should be_false }
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
20
|
+
require 'trema'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
module Trema
|
|
24
|
-
describe FeaturesReply,
|
|
25
|
-
it { expect { subject }.to raise_error(
|
|
24
|
+
describe FeaturesReply, '.new' do
|
|
25
|
+
it { expect { subject }.to raise_error(ArgumentError) }
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
describe FeaturesReply,
|
|
30
|
-
subject
|
|
29
|
+
describe FeaturesReply, '.new(options...)' do
|
|
30
|
+
subject do
|
|
31
31
|
valid_options = {
|
|
32
32
|
:datapath_id => 123,
|
|
33
33
|
:transaction_id => 1234,
|
|
@@ -35,51 +35,51 @@ module Trema
|
|
|
35
35
|
:n_tables => 2,
|
|
36
36
|
:capabilities => 135,
|
|
37
37
|
:actions => 2047,
|
|
38
|
-
:ports => [
|
|
38
|
+
:ports => ['port #0', 'port #1', 'port #2']
|
|
39
39
|
}
|
|
40
|
-
FeaturesReply.new(
|
|
41
|
-
|
|
40
|
+
FeaturesReply.new(valid_options)
|
|
41
|
+
end
|
|
42
42
|
|
|
43
|
-
its(
|
|
44
|
-
its(
|
|
45
|
-
its(
|
|
46
|
-
its(
|
|
47
|
-
its(
|
|
48
|
-
its(
|
|
49
|
-
its(
|
|
50
|
-
its(
|
|
43
|
+
its(:datapath_id) { should == 123 }
|
|
44
|
+
its(:transaction_id) { should == 1234 }
|
|
45
|
+
its(:xid) { should == 1234 }
|
|
46
|
+
its(:n_buffers) { should == 256 }
|
|
47
|
+
its(:n_tables) { should == 2 }
|
|
48
|
+
its(:capabilities) { should == 135 }
|
|
49
|
+
its(:actions) { should == 2047 }
|
|
50
|
+
its('ports.size') { should == 3 }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
describe FeaturesReply,
|
|
55
|
-
subject
|
|
56
|
-
FeaturesReply.new(
|
|
54
|
+
describe FeaturesReply, '.new(options...) (No :datapath_id)' do
|
|
55
|
+
subject do
|
|
56
|
+
FeaturesReply.new({
|
|
57
57
|
# :datapath_id => 123,
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
it { expect { subject }.to raise_error(
|
|
58
|
+
:transaction_id => 1234,
|
|
59
|
+
:n_buffers => 256,
|
|
60
|
+
:n_tables => 2,
|
|
61
|
+
:capabilities => 135,
|
|
62
|
+
:actions => 2047,
|
|
63
|
+
:ports => ['port #0', 'port #1', 'port #2']
|
|
64
|
+
})
|
|
65
|
+
end
|
|
66
|
+
it { expect { subject }.to raise_error(ArgumentError, ':datapath_id is a mandatory option') }
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
describe FeaturesReply,
|
|
71
|
-
subject
|
|
72
|
-
FeaturesReply.new(
|
|
73
|
-
|
|
70
|
+
describe FeaturesReply, '.new(options...) (No :transaction_id)' do
|
|
71
|
+
subject do
|
|
72
|
+
FeaturesReply.new({
|
|
73
|
+
:datapath_id => 123,
|
|
74
74
|
# :transaction_id => 1234,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
it { expect { subject }.to raise_error(
|
|
75
|
+
:n_buffers => 256,
|
|
76
|
+
:n_tables => 2,
|
|
77
|
+
:capabilities => 135,
|
|
78
|
+
:actions => 2047,
|
|
79
|
+
:ports => ['port #0', 'port #1', 'port #2']
|
|
80
|
+
})
|
|
81
|
+
end
|
|
82
|
+
it { expect { subject }.to raise_error(ArgumentError, ':transaction_id is a mandatory option') }
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
|
|
@@ -16,72 +16,72 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
20
|
+
require 'trema'
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
shared_examples_for
|
|
23
|
+
shared_examples_for 'features request message' do
|
|
24
24
|
class FeaturesRequestController < Controller; end
|
|
25
25
|
|
|
26
26
|
it "should be logged to the switch's log", :sudo => true do
|
|
27
|
-
network
|
|
28
|
-
vswitch(
|
|
29
|
-
|
|
30
|
-
controller(
|
|
27
|
+
network do
|
|
28
|
+
vswitch('features-request') { datapath_id 0xabc }
|
|
29
|
+
end.run(FeaturesRequestController) do
|
|
30
|
+
controller('FeaturesRequestController').send_message(0xabc, subject)
|
|
31
31
|
sleep 2 # FIXME: wait to send_message
|
|
32
|
-
expect(
|
|
33
|
-
|
|
32
|
+
expect(IO.read(File.join(Trema.log, 'openflowd.features-request.log'))).to include('OFPT_FEATURES_REQUEST')
|
|
33
|
+
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
module Trema
|
|
39
|
-
describe FeaturesRequest,
|
|
40
|
-
it_should_behave_like
|
|
41
|
-
it_should_behave_like
|
|
39
|
+
describe FeaturesRequest, '.new' do
|
|
40
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
41
|
+
it_should_behave_like 'features request message'
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
describe FeaturesRequest,
|
|
46
|
-
subject { FeaturesRequest.new(
|
|
47
|
-
it_should_behave_like
|
|
48
|
-
it_should_behave_like
|
|
45
|
+
describe FeaturesRequest, '.new(nil)' do
|
|
46
|
+
subject { FeaturesRequest.new(nil) }
|
|
47
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
48
|
+
it_should_behave_like 'features request message'
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
describe FeaturesRequest,
|
|
53
|
-
subject { FeaturesRequest.new(
|
|
54
|
-
it_should_behave_like
|
|
55
|
-
context
|
|
56
|
-
let(
|
|
57
|
-
it_should_behave_like
|
|
52
|
+
describe FeaturesRequest, '.new(transaction_id)' do
|
|
53
|
+
subject { FeaturesRequest.new(transaction_id) }
|
|
54
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
55
|
+
context 'when sent to a switch' do
|
|
56
|
+
let(:transaction_id) { 123 }
|
|
57
|
+
it_should_behave_like 'features request message'
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
describe FeaturesRequest,
|
|
63
|
-
subject { FeaturesRequest.new(
|
|
64
|
-
it_should_behave_like
|
|
65
|
-
context
|
|
66
|
-
let(
|
|
67
|
-
it_should_behave_like
|
|
62
|
+
describe FeaturesRequest, '.new(:transaction_id => value)' do
|
|
63
|
+
subject { FeaturesRequest.new(:transaction_id => transaction_id) }
|
|
64
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
65
|
+
context 'when sent to a switch' do
|
|
66
|
+
let(:transaction_id) { 123 }
|
|
67
|
+
it_should_behave_like 'features request message'
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
describe FeaturesRequest,
|
|
73
|
-
subject { FeaturesRequest.new(
|
|
74
|
-
it_should_behave_like
|
|
72
|
+
describe FeaturesRequest, '.new(:xid => value)' do
|
|
73
|
+
subject { FeaturesRequest.new(:xid => xid) }
|
|
74
|
+
it_should_behave_like 'any Openflow message with xid'
|
|
75
75
|
|
|
76
|
-
context
|
|
77
|
-
let(
|
|
78
|
-
it_should_behave_like
|
|
76
|
+
context 'when sent to a switch' do
|
|
77
|
+
let(:xid) { 123 }
|
|
78
|
+
it_should_behave_like 'features request message'
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
describe FeaturesRequest, '.new("INVALID OPTION")', :nosudo => true do
|
|
84
|
-
it { expect { FeaturesRequest.new
|
|
84
|
+
it { expect { FeaturesRequest.new 'INVALID OPTION' }.to raise_error(TypeError) }
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
|
data/spec/trema/flow-mod_spec.rb
CHANGED
|
@@ -16,70 +16,70 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
|
20
|
+
require 'trema'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
module Trema
|
|
24
|
-
describe FlowMod,
|
|
25
|
-
it_should_behave_like
|
|
24
|
+
describe FlowMod, '.new', :nosudo => true do
|
|
25
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
describe FlowMod,
|
|
30
|
-
subject { FlowMod.new(
|
|
31
|
-
it_should_behave_like
|
|
29
|
+
describe FlowMod, '.new(nil)', :nosudo => true do
|
|
30
|
+
subject { FlowMod.new(nil) }
|
|
31
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
|
|
35
|
-
describe FlowMod,
|
|
36
|
-
subject { FlowMod.new(
|
|
37
|
-
it_should_behave_like
|
|
35
|
+
describe FlowMod, '.new(transaction_id)', :nosudo => true do
|
|
36
|
+
subject { FlowMod.new(transaction_id) }
|
|
37
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
describe FlowMod,
|
|
42
|
-
subject { FlowMod.new(
|
|
43
|
-
it_should_behave_like
|
|
41
|
+
describe FlowMod, '.new(:transaction_id => value)', :nosudo => true do
|
|
42
|
+
subject { FlowMod.new(:transaction_id => transaction_id) }
|
|
43
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
describe FlowMod,
|
|
48
|
-
subject { FlowMod.new(
|
|
49
|
-
it_should_behave_like
|
|
47
|
+
describe FlowMod, '.new(:xid => value)', :nosudo => true do
|
|
48
|
+
subject { FlowMod.new(:xid => xid) }
|
|
49
|
+
it_should_behave_like 'any Openflow message with xid'
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
describe FlowMod,
|
|
54
|
-
subject { FlowMod.new(
|
|
53
|
+
describe FlowMod, '.new(:command => value)', :nosudo => true do
|
|
54
|
+
subject { FlowMod.new(:command => command) }
|
|
55
55
|
|
|
56
|
-
context
|
|
57
|
-
let(
|
|
58
|
-
its(
|
|
56
|
+
context 'command: 0', :nosudo => true do
|
|
57
|
+
let(:command) { 0 }
|
|
58
|
+
its(:command) { should == 0 }
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
# TODO: boundary test.
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
describe FlowMod,
|
|
66
|
-
subject { FlowMod.new(
|
|
65
|
+
describe FlowMod, '.new(:idle_timeout => value)', :nosudo => true do
|
|
66
|
+
subject { FlowMod.new(:idle_timeout => idle_timeout) }
|
|
67
67
|
|
|
68
|
-
context
|
|
69
|
-
let(
|
|
70
|
-
its(
|
|
68
|
+
context 'idle_timeout: 0', :nosudo => true do
|
|
69
|
+
let(:idle_timeout) { 0 }
|
|
70
|
+
its(:idle_timeout) { should == 0 }
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
# TODO: boundary test.
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
describe FlowMod,
|
|
78
|
-
subject { FlowMod.new(
|
|
77
|
+
describe FlowMod, '.new(:hard_timeout => value)', :nosudo => true do
|
|
78
|
+
subject { FlowMod.new(:hard_timeout => hard_timeout) }
|
|
79
79
|
|
|
80
|
-
context
|
|
81
|
-
let(
|
|
82
|
-
its(
|
|
80
|
+
context 'hard_timeout: 0', :nosudo => true do
|
|
81
|
+
let(:hard_timeout) { 0 }
|
|
82
|
+
its(:hard_timeout) { should == 0 }
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
# TODO: boundary test.
|
|
@@ -87,7 +87,7 @@ module Trema
|
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
describe FlowMod, '.new("INVALID OPTION")', :nosudo => true do
|
|
90
|
-
it { expect { FlowMod.new
|
|
90
|
+
it { expect { FlowMod.new 'INVALID OPTION' }.to raise_error(TypeError) }
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
|