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
|
@@ -16,20 +16,20 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
21
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
|
20
|
+
require 'trema/dsl/syntax'
|
|
21
|
+
require 'trema/packetin-filter'
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
describe Trema::DSL::Syntax do
|
|
25
|
-
before(
|
|
26
|
-
@context = mock(
|
|
27
|
-
@syntax = Trema::DSL::Syntax.new(
|
|
25
|
+
before(:each) do
|
|
26
|
+
@context = mock('context', :port => 6653, :dump_to => nil)
|
|
27
|
+
@syntax = Trema::DSL::Syntax.new(@context)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
it "should recognize 'port' directive" do
|
|
32
|
-
@context.should_receive(
|
|
32
|
+
@context.should_receive(:port=).with(1234).once
|
|
33
33
|
|
|
34
34
|
@syntax.instance_eval do
|
|
35
35
|
port 1234
|
|
@@ -38,65 +38,65 @@ describe Trema::DSL::Syntax do
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
it "should recognize 'link' directive" do
|
|
41
|
-
@context.stub!(
|
|
42
|
-
Trema::Link.should_receive(
|
|
41
|
+
@context.stub!(:links).and_return([mock('link')])
|
|
42
|
+
Trema::Link.should_receive(:add).with(an_instance_of(Trema::Link)).once
|
|
43
43
|
|
|
44
44
|
@syntax.instance_eval do
|
|
45
|
-
link
|
|
45
|
+
link 'PEER0', 'PEER1'
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
it "should recognize 'switch' directive" do
|
|
51
|
-
Trema::OpenflowSwitch.should_receive(
|
|
51
|
+
Trema::OpenflowSwitch.should_receive(:add).with(an_instance_of(HardwareSwitch)).once
|
|
52
52
|
|
|
53
53
|
@syntax.instance_eval do
|
|
54
|
-
switch { dpid
|
|
54
|
+
switch { dpid '0xabc' }
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
it "should recognize 'vswitch' directive" do
|
|
60
|
-
Trema::OpenflowSwitch.should_receive(
|
|
60
|
+
Trema::OpenflowSwitch.should_receive(:add).with(an_instance_of(OpenVswitch)).once
|
|
61
61
|
|
|
62
62
|
@syntax.instance_eval do
|
|
63
|
-
vswitch { dpid
|
|
63
|
+
vswitch { dpid '0xabc' }
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
it "should recognize 'vhost' directive" do
|
|
69
|
-
Trema::Host.should_receive(
|
|
69
|
+
Trema::Host.should_receive(:add).with(an_instance_of(Trema::Host)).once
|
|
70
70
|
|
|
71
71
|
@syntax.instance_eval do
|
|
72
|
-
vhost {
|
|
72
|
+
vhost {}
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
it "should recognize 'filter' directive" do
|
|
78
|
-
Trema::PacketinFilter.should_receive(
|
|
78
|
+
Trema::PacketinFilter.should_receive(:add).with(an_instance_of(Trema::PacketinFilter)).once
|
|
79
79
|
|
|
80
80
|
@syntax.instance_eval do
|
|
81
|
-
filter :lldp =>
|
|
81
|
+
filter :lldp => 'LLDP RULE', :packet_in => 'PACKET-IN RULE'
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
it "should recognize 'event' directive" do
|
|
87
|
-
Trema::SwitchManager.should_receive(
|
|
87
|
+
Trema::SwitchManager.should_receive(:add).with(an_instance_of(Trema::SwitchManager)).once
|
|
88
88
|
|
|
89
89
|
@syntax.instance_eval do
|
|
90
|
-
event
|
|
90
|
+
event 'RULE'
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
it "should recognize 'run' directive" do
|
|
96
|
-
Trema::App.should_receive(
|
|
96
|
+
Trema::App.should_receive(:add).with(an_instance_of(Trema::App)).once
|
|
97
97
|
|
|
98
98
|
@syntax.instance_eval do
|
|
99
|
-
run(
|
|
99
|
+
run('My App') {}
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
end
|
|
@@ -16,42 +16,42 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
|
20
|
+
require 'trema/dsl/vhost'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
module Trema
|
|
24
24
|
module DSL
|
|
25
25
|
describe Vhost do
|
|
26
26
|
describe :name do
|
|
27
|
-
context
|
|
27
|
+
context 'when name empty' do
|
|
28
28
|
before { @vhost = Vhost.new }
|
|
29
29
|
|
|
30
|
-
subject { @vhost[ :name
|
|
30
|
+
subject { @vhost[ :name] }
|
|
31
31
|
|
|
32
|
-
context
|
|
32
|
+
context 'and IP address empty' do
|
|
33
33
|
it { should be_nil }
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
context
|
|
37
|
-
before { @vhost.ip
|
|
36
|
+
context 'and IP address is 192.168.100.100' do
|
|
37
|
+
before { @vhost.ip '192.168.100.100' }
|
|
38
38
|
|
|
39
|
-
specify { should ==
|
|
39
|
+
specify { should == '192.168.100.100' }
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
context "when name is \"Yutaro's host\"" do
|
|
45
|
-
before { @vhost = Vhost.new(
|
|
45
|
+
before { @vhost = Vhost.new("Yutaro's host") }
|
|
46
46
|
|
|
47
|
-
subject { @vhost[ :name
|
|
47
|
+
subject { @vhost[ :name] }
|
|
48
48
|
|
|
49
|
-
context
|
|
49
|
+
context 'and ip address empty' do
|
|
50
50
|
it { should == "Yutaro's host" }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
|
-
context
|
|
54
|
-
before { @vhost.ip
|
|
53
|
+
context 'and ip address 192.168.100.100' do
|
|
54
|
+
before { @vhost.ip '192.168.100.100' }
|
|
55
55
|
|
|
56
56
|
it { should == "Yutaro's host" }
|
|
57
57
|
end
|
|
@@ -60,76 +60,76 @@ module Trema
|
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
describe :promisc do
|
|
63
|
-
before { @vhost = Vhost.new(
|
|
63
|
+
before { @vhost = Vhost.new("Yutaro's host") }
|
|
64
64
|
|
|
65
|
-
subject { @vhost[ :promisc
|
|
65
|
+
subject { @vhost[ :promisc] }
|
|
66
66
|
|
|
67
|
-
context
|
|
68
|
-
before { @vhost.promisc
|
|
67
|
+
context 'when promisc off' do
|
|
68
|
+
before { @vhost.promisc 'off' }
|
|
69
69
|
|
|
70
70
|
it { should be_false }
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
|
|
74
|
-
context
|
|
75
|
-
before { @vhost.promisc
|
|
74
|
+
context 'when promisc no' do
|
|
75
|
+
before { @vhost.promisc 'no' }
|
|
76
76
|
|
|
77
77
|
it { should be_false }
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
context
|
|
82
|
-
before { @vhost.promisc
|
|
81
|
+
context 'when promisc on' do
|
|
82
|
+
before { @vhost.promisc 'on' }
|
|
83
83
|
|
|
84
84
|
it { should be_true }
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
context
|
|
89
|
-
before { @vhost.promisc
|
|
88
|
+
context 'when promisc yes' do
|
|
89
|
+
before { @vhost.promisc 'yes' }
|
|
90
90
|
|
|
91
91
|
it { should be_true }
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
|
|
95
|
-
context
|
|
95
|
+
context 'when promisc INVALID_VALUE' do
|
|
96
96
|
specify do
|
|
97
|
-
expect { @vhost.promisc
|
|
97
|
+
expect { @vhost.promisc 'INVALID_VALUE' }.to raise_error(Trema::DSL::SyntaxError)
|
|
98
98
|
end
|
|
99
99
|
end
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
describe :netmask do
|
|
104
|
-
before { @vhost = Vhost.new(
|
|
104
|
+
before { @vhost = Vhost.new("Yutaro's host") }
|
|
105
105
|
|
|
106
|
-
subject { @vhost[ :netmask
|
|
106
|
+
subject { @vhost[ :netmask] }
|
|
107
107
|
|
|
108
|
-
context
|
|
108
|
+
context 'when netmask empty' do
|
|
109
109
|
it { should be_nil }
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
-
context
|
|
113
|
-
before { @vhost.netmask
|
|
112
|
+
context 'when netmask is 255.255.255.0' do
|
|
113
|
+
before { @vhost.netmask '255.255.255.0' }
|
|
114
114
|
|
|
115
|
-
it { should ==
|
|
115
|
+
it { should == '255.255.255.0' }
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
|
|
120
120
|
describe :mac do
|
|
121
|
-
before { @vhost = Vhost.new(
|
|
121
|
+
before { @vhost = Vhost.new("Yutaro's host") }
|
|
122
122
|
|
|
123
|
-
subject { @vhost[ :mac
|
|
123
|
+
subject { @vhost[ :mac] }
|
|
124
124
|
|
|
125
|
-
context
|
|
125
|
+
context 'when mac empty' do
|
|
126
126
|
it { should be_nil }
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
-
context
|
|
130
|
-
before { @vhost.mac
|
|
129
|
+
context 'when mac is 00:00:00:01:00:01' do
|
|
130
|
+
before { @vhost.mac '00:00:00:01:00:01' }
|
|
131
131
|
|
|
132
|
-
it { should ==
|
|
132
|
+
it { should == '00:00:00:01:00:01' }
|
|
133
133
|
end
|
|
134
134
|
end
|
|
135
135
|
end
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
#
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
require File.join(
|
|
20
|
-
require
|
|
19
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper')
|
|
20
|
+
require 'trema/dsl/vswitch'
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
module Trema
|
|
@@ -28,44 +28,44 @@ module Trema
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
context
|
|
32
|
-
it
|
|
33
|
-
expect { @vswitch.dpid
|
|
31
|
+
context 'when parsing "vswitch { ... }"' do
|
|
32
|
+
it 'recognizes "dpid DATAPATH_ID" directive' do
|
|
33
|
+
expect { @vswitch.dpid '0xabc' }.not_to raise_error
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
it
|
|
38
|
-
expect { @vswitch.datapath_id
|
|
37
|
+
it 'recognizes "datapath_id DATAPATH_ID" directive' do
|
|
38
|
+
expect { @vswitch.datapath_id '0xabc' }.not_to raise_error
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
it
|
|
43
|
-
expect { @vswitch.ports
|
|
42
|
+
it 'recognizes "ports PORT_NUMBERS" directive' do
|
|
43
|
+
expect { @vswitch.ports '0-4' }.not_to raise_error
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
it
|
|
48
|
-
expect { @vswitch.ip
|
|
47
|
+
it 'recognizes "ip IP_ADDRESS" directive' do
|
|
48
|
+
expect { @vswitch.ip '192.168.0.1' }.not_to raise_error
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
context
|
|
54
|
-
it
|
|
55
|
-
@vswitch.dpid
|
|
56
|
-
expect(
|
|
53
|
+
context 'when getting the attributes of a vswitch' do
|
|
54
|
+
it 'returns its dpid in long format' do
|
|
55
|
+
@vswitch.dpid '0xabc'
|
|
56
|
+
expect(@vswitch[ :dpid_long]).to eq('0000000000000abc')
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
it
|
|
61
|
-
@vswitch.dpid
|
|
62
|
-
expect(
|
|
60
|
+
it 'returns its dpid in short format' do
|
|
61
|
+
@vswitch.dpid '0xabc'
|
|
62
|
+
expect(@vswitch[ :dpid_short]).to eq('0xabc')
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
it
|
|
67
|
-
@vswitch.ip
|
|
68
|
-
expect(
|
|
66
|
+
it 'returns its ip address' do
|
|
67
|
+
@vswitch.ip '192.168.0.1'
|
|
68
|
+
expect(@vswitch[ :ip]).to eq('192.168.0.1')
|
|
69
69
|
end
|
|
70
70
|
end
|
|
71
71
|
end
|
|
@@ -16,63 +16,63 @@
|
|
|
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 EchoReply,
|
|
25
|
-
it_should_behave_like
|
|
26
|
-
its(
|
|
24
|
+
describe EchoReply, '.new' do
|
|
25
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
26
|
+
its(:user_data) { should be_nil }
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
describe EchoReply,
|
|
31
|
-
subject { EchoReply.new(
|
|
32
|
-
it_should_behave_like
|
|
33
|
-
its(
|
|
30
|
+
describe EchoReply, '.new(nil)' do
|
|
31
|
+
subject { EchoReply.new(nil) }
|
|
32
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
33
|
+
its(:user_data) { should be_nil }
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
describe EchoReply,
|
|
38
|
-
subject { EchoReply.new(
|
|
39
|
-
it_should_behave_like
|
|
37
|
+
describe EchoReply, '.new(transaction_id)' do
|
|
38
|
+
subject { EchoReply.new(transaction_id) }
|
|
39
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
describe EchoReply,
|
|
44
|
-
subject { EchoReply.new(
|
|
45
|
-
it_should_behave_like
|
|
43
|
+
describe EchoReply, '.new(:transaction_id => value)' do
|
|
44
|
+
subject { EchoReply.new(:transaction_id => transaction_id) }
|
|
45
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
describe EchoReply,
|
|
50
|
-
subject { EchoReply.new(
|
|
51
|
-
it_should_behave_like
|
|
49
|
+
describe EchoReply, '.new(:xid => value)' do
|
|
50
|
+
subject { EchoReply.new(:xid => xid) }
|
|
51
|
+
it_should_behave_like 'any Openflow message with xid'
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
describe EchoReply,
|
|
56
|
-
subject { EchoReply.new(
|
|
57
|
-
it_should_behave_like
|
|
55
|
+
describe EchoReply, '.new(:user_data => value)' do
|
|
56
|
+
subject { EchoReply.new(:user_data => user_data) }
|
|
57
|
+
it_should_behave_like 'any Openflow message with user_data'
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
describe EchoReply,
|
|
62
|
-
subject { EchoReply.new(
|
|
61
|
+
describe EchoReply, '.new(:transaction_id => value, :user_data => value)' do
|
|
62
|
+
subject { EchoReply.new(:transaction_id => transaction_id, :user_data => user_data) }
|
|
63
63
|
|
|
64
64
|
context 'transaction_id: 123, user_data: "USER DATA"' do
|
|
65
|
-
let(
|
|
66
|
-
let(
|
|
67
|
-
its(
|
|
68
|
-
its(
|
|
69
|
-
its(
|
|
65
|
+
let(:transaction_id) { 123 }
|
|
66
|
+
let(:user_data) { 'USER DATA' }
|
|
67
|
+
its(:transaction_id) { should == 123 }
|
|
68
|
+
its(:xid) { should == 123 }
|
|
69
|
+
its(:user_data) { should == 'USER DATA' }
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
|
|
74
74
|
describe EchoReply, '.new("INVALID OPTION")' do
|
|
75
|
-
it { expect { EchoReply.new
|
|
75
|
+
it { expect { EchoReply.new 'INVALID OPTION' }.to raise_error(TypeError) }
|
|
76
76
|
end
|
|
77
77
|
end
|
|
78
78
|
|
|
@@ -16,107 +16,107 @@
|
|
|
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 'echo reply message' do
|
|
24
24
|
class EchoReplyController < 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('echo') { datapath_id 0xabc }
|
|
29
|
+
end.run(EchoReplyController) do
|
|
30
|
+
controller('EchoReplyController').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.echo.log'))).to include('OFPT_ECHO_REPLY')
|
|
33
|
+
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
module Trema
|
|
39
|
-
describe EchoRequest,
|
|
40
|
-
it_should_behave_like
|
|
41
|
-
it_should_behave_like
|
|
42
|
-
its(
|
|
39
|
+
describe EchoRequest, '.new' do
|
|
40
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
41
|
+
it_should_behave_like 'echo reply message'
|
|
42
|
+
its(:user_data) { should be_nil }
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
describe EchoRequest,
|
|
47
|
-
subject { EchoRequest.new(
|
|
48
|
-
it_should_behave_like
|
|
49
|
-
it_should_behave_like
|
|
50
|
-
its(
|
|
46
|
+
describe EchoRequest, '.new(nil)' do
|
|
47
|
+
subject { EchoRequest.new(nil) }
|
|
48
|
+
it_should_behave_like 'any Openflow message with default transaction ID'
|
|
49
|
+
it_should_behave_like 'echo reply message'
|
|
50
|
+
its(:user_data) { should be_nil }
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
describe EchoRequest,
|
|
55
|
-
subject { EchoRequest.new(
|
|
56
|
-
it_should_behave_like
|
|
54
|
+
describe EchoRequest, '.new(transaction_id)' do
|
|
55
|
+
subject { EchoRequest.new(transaction_id) }
|
|
56
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
57
57
|
|
|
58
|
-
context
|
|
59
|
-
let(
|
|
60
|
-
it_should_behave_like
|
|
58
|
+
context 'when sent to a switch' do
|
|
59
|
+
let(:transaction_id) { 123 }
|
|
60
|
+
it_should_behave_like 'echo reply message'
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
describe EchoRequest,
|
|
66
|
-
subject { EchoRequest.new(
|
|
67
|
-
it_should_behave_like
|
|
65
|
+
describe EchoRequest, '.new(:transaction_id => value)' do
|
|
66
|
+
subject { EchoRequest.new(:transaction_id => transaction_id) }
|
|
67
|
+
it_should_behave_like 'any Openflow message with transaction ID'
|
|
68
68
|
|
|
69
|
-
context
|
|
70
|
-
let(
|
|
71
|
-
it_should_behave_like
|
|
69
|
+
context 'when sent to a switch' do
|
|
70
|
+
let(:transaction_id) { 123 }
|
|
71
|
+
it_should_behave_like 'echo reply message'
|
|
72
72
|
end
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
describe EchoRequest,
|
|
77
|
-
subject { EchoRequest.new(
|
|
78
|
-
it_should_behave_like
|
|
76
|
+
describe EchoRequest, '.new(:xid => value)' do
|
|
77
|
+
subject { EchoRequest.new(:xid => xid) }
|
|
78
|
+
it_should_behave_like 'any Openflow message with xid'
|
|
79
79
|
|
|
80
|
-
context
|
|
81
|
-
let(
|
|
82
|
-
it_should_behave_like
|
|
80
|
+
context 'when sent to a switch' do
|
|
81
|
+
let(:xid) { 123 }
|
|
82
|
+
it_should_behave_like 'echo reply message'
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
|
|
87
|
-
describe EchoRequest,
|
|
88
|
-
subject { EchoRequest.new(
|
|
89
|
-
it_should_behave_like
|
|
87
|
+
describe EchoRequest, '.new(:user_data => value)' do
|
|
88
|
+
subject { EchoRequest.new(:user_data => user_data) }
|
|
89
|
+
it_should_behave_like 'any Openflow message with user_data'
|
|
90
90
|
|
|
91
|
-
context
|
|
92
|
-
let(
|
|
93
|
-
it_should_behave_like
|
|
91
|
+
context 'when sent to a switch' do
|
|
92
|
+
let(:user_data) { 'USER DATA' }
|
|
93
|
+
it_should_behave_like 'echo reply message'
|
|
94
94
|
end
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
|
|
98
|
-
describe EchoRequest,
|
|
99
|
-
subject { EchoRequest.new(
|
|
98
|
+
describe EchoRequest, '.new(:transaction_id => value, :user_data => value)' do
|
|
99
|
+
subject { EchoRequest.new(:transaction_id => transaction_id, :user_data => user_data) }
|
|
100
100
|
|
|
101
101
|
context 'transaction_id: 123, user_data: "USER DATA"', :nosudo => true do
|
|
102
|
-
let(
|
|
103
|
-
let(
|
|
102
|
+
let(:transaction_id) { 123 }
|
|
103
|
+
let(:user_data) { 'USER DATA' }
|
|
104
104
|
|
|
105
|
-
its(
|
|
106
|
-
its(
|
|
107
|
-
its(
|
|
105
|
+
its(:transaction_id) { should == 123 }
|
|
106
|
+
its(:xid) { should == 123 }
|
|
107
|
+
its(:user_data) { should == 'USER DATA' }
|
|
108
108
|
end
|
|
109
109
|
|
|
110
|
-
context
|
|
111
|
-
let(
|
|
112
|
-
let(
|
|
113
|
-
it_should_behave_like
|
|
110
|
+
context 'when sent to a switch' do
|
|
111
|
+
let(:transaction_id) { 123 }
|
|
112
|
+
let(:user_data) { 'USER DATA' }
|
|
113
|
+
it_should_behave_like 'echo reply message'
|
|
114
114
|
end
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
describe EchoRequest, '.new("INVALID OPTION")' do
|
|
119
|
-
it { expect { EchoRequest.new
|
|
119
|
+
it { expect { EchoRequest.new 'INVALID OPTION' }.to raise_error(TypeError) }
|
|
120
120
|
end
|
|
121
121
|
end
|
|
122
122
|
|