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.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/.travis.yml +24 -7
  4. data/Gemfile +19 -27
  5. data/Guardfile +6 -0
  6. data/README.md +13 -5
  7. data/Rakefile +418 -415
  8. data/bin/quality +2 -2
  9. data/bin/trema +103 -105
  10. data/bin/trema-config +7 -7
  11. data/build.rb +2 -2
  12. data/cruise.rb +109 -83
  13. data/features/dsl/switch_port_specifier.feature +1 -1
  14. data/features/examples/dumper.feature +9 -41
  15. data/features/examples/hello_trema.feature +1 -1
  16. data/features/examples/learning_switch.feature +7 -7
  17. data/features/examples/list_switches.feature +5 -5
  18. data/features/examples/message.set_config.feature +11 -11
  19. data/features/examples/message.vendor-action.feature +7 -7
  20. data/features/examples/message.vendor-stats-request.feature +1 -1
  21. data/features/examples/multi_learning_switch.feature +7 -7
  22. data/features/examples/openflow_message.echo.feature +15 -15
  23. data/features/examples/openflow_message.features_request.feature +12 -12
  24. data/features/examples/openflow_message.hello.feature +13 -13
  25. data/features/examples/packet_in.feature +8 -8
  26. data/features/examples/patch_panel.feature +1 -1
  27. data/features/examples/repeater_hub.feature +7 -7
  28. data/features/examples/switch_info.feature +16 -16
  29. data/features/examples/switch_monitor.feature +11 -11
  30. data/features/examples/transparent_firewall.feature +73 -0
  31. data/features/handlers/switch_ready.feature +1 -1
  32. data/features/step_definitions/misc_steps.rb +24 -24
  33. data/features/step_definitions/send_packets_steps.rb +2 -2
  34. data/features/step_definitions/stats_steps.rb +6 -6
  35. data/features/support/env.rb +15 -15
  36. data/features/support/hooks.rb +9 -9
  37. data/features/switch_event/add_forward_entry.feature +3 -3
  38. data/features/switch_event/delete_forward_entry.feature +3 -3
  39. data/features/switch_event/dump_forward_entries.feature +2 -2
  40. data/features/switch_event/set_forward_entries.feature +2 -2
  41. data/features/trema_commands/dump_flows.feature +1 -0
  42. data/features/trema_commands/help.feature +1 -0
  43. data/features/trema_commands/help_option.feature +1 -0
  44. data/features/trema_commands/kill.feature +1 -0
  45. data/features/trema_commands/killall.feature +1 -0
  46. data/features/trema_commands/port_down.feature +1 -0
  47. data/features/trema_commands/port_up.feature +1 -0
  48. data/features/trema_commands/reset_stats.feature +1 -0
  49. data/features/trema_commands/run.feature +1 -0
  50. data/features/trema_commands/send_packets.feature +2 -1
  51. data/features/trema_commands/show_stats.feature +1 -0
  52. data/features/trema_commands/up.feature +1 -0
  53. data/features/trema_commands/version.feature +1 -0
  54. data/features/trema_commands/version_option.feature +1 -0
  55. data/rubocop-todo.yml +159 -0
  56. data/ruby/blocker.rb +15 -17
  57. data/ruby/extconf.rb +19 -19
  58. data/ruby/sub-process.rb +29 -29
  59. data/ruby/trema/aggregate-stats-reply.rb +2 -2
  60. data/ruby/trema/app.rb +13 -13
  61. data/ruby/trema/cli.rb +45 -45
  62. data/ruby/trema/command.rb +14 -14
  63. data/ruby/trema/command/dump_flows.rb +5 -5
  64. data/ruby/trema/command/kill.rb +13 -13
  65. data/ruby/trema/command/killall.rb +1 -1
  66. data/ruby/trema/command/netns.rb +3 -3
  67. data/ruby/trema/command/port_down.rb +7 -7
  68. data/ruby/trema/command/port_up.rb +7 -7
  69. data/ruby/trema/command/reset_stats.rb +6 -6
  70. data/ruby/trema/command/ruby.rb +2 -2
  71. data/ruby/trema/command/run.rb +23 -23
  72. data/ruby/trema/command/send_packets.rb +9 -9
  73. data/ruby/trema/command/shell.rb +14 -16
  74. data/ruby/trema/command/show_stats.rb +9 -9
  75. data/ruby/trema/command/up.rb +4 -4
  76. data/ruby/trema/command/version.rb +1 -1
  77. data/ruby/trema/controller.rb +10 -10
  78. data/ruby/trema/custom-switch.rb +4 -4
  79. data/ruby/trema/daemon.rb +21 -21
  80. data/ruby/trema/desc-stats-reply.rb +2 -2
  81. data/ruby/trema/dsl.rb +5 -5
  82. data/ruby/trema/dsl/configuration.rb +7 -7
  83. data/ruby/trema/dsl/context.rb +10 -10
  84. data/ruby/trema/dsl/custom-switch.rb +3 -3
  85. data/ruby/trema/dsl/link.rb +2 -2
  86. data/ruby/trema/dsl/netns.rb +9 -9
  87. data/ruby/trema/dsl/parser.rb +14 -14
  88. data/ruby/trema/dsl/rswitch.rb +3 -3
  89. data/ruby/trema/dsl/run.rb +4 -4
  90. data/ruby/trema/dsl/runner.rb +20 -20
  91. data/ruby/trema/dsl/stanza.rb +5 -5
  92. data/ruby/trema/dsl/switch.rb +14 -14
  93. data/ruby/trema/dsl/syntax.rb +54 -54
  94. data/ruby/trema/dsl/vhost.rb +9 -9
  95. data/ruby/trema/dsl/vswitch.rb +4 -4
  96. data/ruby/trema/enqueue.rb +11 -11
  97. data/ruby/trema/exact-match.rb +1 -1
  98. data/ruby/trema/executables.rb +19 -19
  99. data/ruby/trema/flow-stats-reply.rb +2 -2
  100. data/ruby/trema/flow.rb +8 -8
  101. data/ruby/trema/hardware-switch.rb +2 -2
  102. data/ruby/trema/host.rb +18 -18
  103. data/ruby/trema/link.rb +9 -9
  104. data/ruby/trema/mac.rb +1 -5
  105. data/ruby/trema/match.c +0 -1
  106. data/ruby/trema/monkey-patch/integer.rb +3 -3
  107. data/ruby/trema/monkey-patch/integer/base-conversions.rb +1 -1
  108. data/ruby/trema/monkey-patch/integer/ranges.rb +2 -2
  109. data/ruby/trema/monkey-patch/integer/validators.rb +1 -1
  110. data/ruby/trema/monkey-patch/module.rb +2 -2
  111. data/ruby/trema/monkey-patch/module/class-method.rb +2 -2
  112. data/ruby/trema/monkey-patch/module/deprecation.rb +1 -1
  113. data/ruby/trema/monkey-patch/string.rb +1 -1
  114. data/ruby/trema/monkey-patch/string/inflectors.rb +7 -7
  115. data/ruby/trema/netns.rb +6 -6
  116. data/ruby/trema/network-component.rb +7 -7
  117. data/ruby/trema/ofctl.rb +13 -13
  118. data/ruby/trema/open-vswitch.rb +25 -25
  119. data/ruby/trema/openflow-switch.rb +1 -1
  120. data/ruby/trema/ordered-hash.rb +8 -8
  121. data/ruby/trema/packet-in.c +0 -1
  122. data/ruby/trema/packet-queue.rb +8 -8
  123. data/ruby/trema/packetin-filter.rb +9 -9
  124. data/ruby/trema/path.rb +32 -32
  125. data/ruby/trema/phost.rb +5 -5
  126. data/ruby/trema/port-mod.c +0 -1
  127. data/ruby/trema/port-stats-reply.rb +2 -2
  128. data/ruby/trema/port-status-add.rb +2 -2
  129. data/ruby/trema/port-status-delete.rb +2 -2
  130. data/ruby/trema/port-status-modify.rb +2 -2
  131. data/ruby/trema/port.c +0 -1
  132. data/ruby/trema/process.rb +7 -7
  133. data/ruby/trema/queue-stats-reply.rb +2 -2
  134. data/ruby/trema/ruby-switch.rb +6 -6
  135. data/ruby/trema/send-out-port.rb +11 -11
  136. data/ruby/trema/set-eth-addr.rb +5 -5
  137. data/ruby/trema/set-eth-dst-addr.rb +1 -1
  138. data/ruby/trema/set-eth-src-addr.rb +1 -1
  139. data/ruby/trema/set-ip-addr.rb +6 -6
  140. data/ruby/trema/set-ip-dst-addr.rb +1 -1
  141. data/ruby/trema/set-ip-src-addr.rb +1 -1
  142. data/ruby/trema/set-ip-tos.rb +6 -6
  143. data/ruby/trema/set-transport-dst-port.rb +2 -2
  144. data/ruby/trema/set-transport-port.rb +7 -7
  145. data/ruby/trema/set-transport-src-port.rb +3 -3
  146. data/ruby/trema/set-vlan-priority.rb +6 -6
  147. data/ruby/trema/set-vlan-vid.rb +6 -6
  148. data/ruby/trema/shell.rb +10 -10
  149. data/ruby/trema/shell/down.rb +3 -3
  150. data/ruby/trema/shell/killall.rb +1 -1
  151. data/ruby/trema/shell/link.rb +14 -14
  152. data/ruby/trema/shell/reset_stats.rb +6 -6
  153. data/ruby/trema/shell/run.rb +7 -7
  154. data/ruby/trema/shell/send_packets.rb +3 -3
  155. data/ruby/trema/shell/show_stats.rb +7 -7
  156. data/ruby/trema/shell/up.rb +5 -5
  157. data/ruby/trema/shell/vhost.rb +4 -4
  158. data/ruby/trema/shell/vswitch.rb +7 -7
  159. data/ruby/trema/stats-helper.rb +3 -3
  160. data/ruby/trema/stats-reply.c +0 -1
  161. data/ruby/trema/strip-vlan-header.rb +1 -1
  162. data/ruby/trema/switch-daemon.rb +9 -9
  163. data/ruby/trema/switch-manager.rb +9 -9
  164. data/ruby/trema/switch.rb +7 -7
  165. data/ruby/trema/table-stats-reply.rb +2 -2
  166. data/ruby/trema/timers.rb +12 -12
  167. data/ruby/trema/trema.c +0 -1
  168. data/ruby/trema/tremashark.rb +1 -1
  169. data/ruby/trema/util.rb +25 -27
  170. data/ruby/trema/vendor-action.rb +10 -10
  171. data/ruby/trema/vendor-stats-reply.rb +2 -2
  172. data/ruby/trema/version.rb +1 -1
  173. data/spec/spec_helper.rb +50 -52
  174. data/spec/support/action.rb +9 -12
  175. data/spec/support/mandatory-option.rb +15 -18
  176. data/spec/support/matchers/constant.rb +7 -7
  177. data/spec/support/openflow-message.rb +76 -79
  178. data/spec/support/port-status.rb +7 -10
  179. data/spec/trema/app_spec.rb +27 -27
  180. data/spec/trema/barrier-reply_spec.rb +10 -10
  181. data/spec/trema/barrier-request_spec.rb +35 -35
  182. data/spec/trema/cli_spec.rb +63 -63
  183. data/spec/trema/controller_spec.rb +3 -3
  184. data/spec/trema/default-logger_spec.rb +4 -4
  185. data/spec/trema/dsl/configuration_spec.rb +47 -47
  186. data/spec/trema/dsl/link_spec.rb +11 -11
  187. data/spec/trema/dsl/run_spec.rb +19 -19
  188. data/spec/trema/dsl/runner_spec.rb +91 -91
  189. data/spec/trema/dsl/switch_spec.rb +16 -16
  190. data/spec/trema/dsl/syntax_spec.rb +22 -22
  191. data/spec/trema/dsl/vhost_spec.rb +37 -37
  192. data/spec/trema/dsl/vswitch_spec.rb +21 -21
  193. data/spec/trema/echo-reply_spec.rb +29 -29
  194. data/spec/trema/echo-request_spec.rb +54 -54
  195. data/spec/trema/enqueue_spec.rb +25 -25
  196. data/spec/trema/error_spec.rb +30 -30
  197. data/spec/trema/executables_spec.rb +20 -20
  198. data/spec/trema/features-reply_spec.rb +41 -41
  199. data/spec/trema/features-request_spec.rb +35 -35
  200. data/spec/trema/flow-mod_spec.rb +32 -32
  201. data/spec/trema/flow-removed_spec.rb +62 -62
  202. data/spec/trema/get-config-reply_spec.rb +14 -12
  203. data/spec/trema/get-config-request_spec.rb +35 -35
  204. data/spec/trema/hardware-switch_spec.rb +12 -12
  205. data/spec/trema/hello_spec.rb +17 -17
  206. data/spec/trema/host_spec.rb +71 -71
  207. data/spec/trema/link_spec.rb +13 -13
  208. data/spec/trema/list-switches-reply_spec.rb +10 -10
  209. data/spec/trema/match_spec.rb +41 -41
  210. data/spec/trema/open-vswitch_spec.rb +45 -45
  211. data/spec/trema/openflow-error_spec.rb +67 -65
  212. data/spec/trema/packet-in_spec.rb +450 -446
  213. data/spec/trema/packet-out_spec.rb +42 -42
  214. data/spec/trema/packetin-filter_spec.rb +5 -5
  215. data/spec/trema/port-mod_spec.rb +32 -32
  216. data/spec/trema/port-status-add_spec.rb +3 -3
  217. data/spec/trema/port-status-delete_spec.rb +3 -3
  218. data/spec/trema/port-status-modify_spec.rb +16 -16
  219. data/spec/trema/port-status_spec.rb +2 -2
  220. data/spec/trema/port_spec.rb +21 -21
  221. data/spec/trema/process_spec.rb +22 -22
  222. data/spec/trema/queue-get-config-reply_spec.rb +21 -20
  223. data/spec/trema/queue-get-config-request_spec.rb +24 -24
  224. data/spec/trema/send-out-port_spec.rb +42 -42
  225. data/spec/trema/set-config_spec.rb +31 -31
  226. data/spec/trema/set-eth-addr_spec.rb +21 -21
  227. data/spec/trema/set-ip-addr_spec.rb +29 -29
  228. data/spec/trema/set-ip-tos_spec.rb +26 -26
  229. data/spec/trema/set-transport-dst-port_spec.rb +22 -22
  230. data/spec/trema/set-transport-src-port_spec.rb +22 -22
  231. data/spec/trema/set-vlan-priority_spec.rb +23 -23
  232. data/spec/trema/set-vlan-vid_spec.rb +23 -23
  233. data/spec/trema/shell/vhost_spec.rb +21 -21
  234. data/spec/trema/shell/vswitch_spec.rb +30 -30
  235. data/spec/trema/stats-reply_spec.rb +183 -173
  236. data/spec/trema/stats-request_spec.rb +66 -66
  237. data/spec/trema/strip-vlan-header_spec.rb +11 -11
  238. data/spec/trema/switch-daemon_spec.rb +34 -34
  239. data/spec/trema/switch-disconnected_spec.rb +17 -17
  240. data/spec/trema/switch-manager_spec.rb +6 -6
  241. data/spec/trema/tremashark_spec.rb +4 -4
  242. data/spec/trema/util_spec.rb +35 -35
  243. data/spec/trema/vendor-action_spec.rb +26 -26
  244. data/spec/trema/vendor_spec.rb +27 -27
  245. data/spec/trema_spec.rb +2 -2
  246. data/src/examples/cbench_switch/cbench-switch.rb +3 -3
  247. data/src/examples/dumper/dumper.rb +31 -31
  248. data/src/examples/hello_trema/hello-trema.rb +2 -2
  249. data/src/examples/learning_switch/fdb.rb +14 -14
  250. data/src/examples/learning_switch/learning-switch.rb +12 -10
  251. data/src/examples/learning_switch/learning_switch.c +22 -39
  252. data/src/examples/list_switches/list-switches.rb +3 -3
  253. data/src/examples/match_compare/match-compare.rb +20 -20
  254. data/src/examples/multi_learning_switch/multi-learning-switch.rb +12 -12
  255. data/src/examples/openflow_message/echo.rb +4 -4
  256. data/src/examples/openflow_message/example.rb +7 -7
  257. data/src/examples/openflow_message/features-request.rb +31 -31
  258. data/src/examples/openflow_message/hello.rb +2 -2
  259. data/src/examples/openflow_message/set-config.rb +4 -4
  260. data/src/examples/openflow_message/vendor-action.rb +3 -3
  261. data/src/examples/openflow_message/vendor-stats-request.rb +9 -9
  262. data/src/examples/packet_in/packet-in.rb +2 -2
  263. data/src/examples/patch_panel/patch-panel.rb +9 -9
  264. data/src/examples/repeater_hub/repeater-hub.rb +4 -4
  265. data/src/examples/repeater_hub/repeater-hub_spec.rb +65 -65
  266. data/src/examples/simple_router/arp-table.rb +7 -7
  267. data/src/examples/simple_router/interface.rb +10 -10
  268. data/src/examples/simple_router/routing-table.rb +4 -4
  269. data/src/examples/simple_router/simple-router.rb +3 -3
  270. data/src/examples/switch_info/switch-info.rb +9 -9
  271. data/src/examples/switch_monitor/switch-monitor.rb +4 -4
  272. data/src/examples/traffic_monitor/counter.rb +6 -6
  273. data/src/examples/traffic_monitor/fdb.rb +4 -4
  274. data/src/examples/traffic_monitor/traffic-monitor.rb +12 -12
  275. data/src/examples/transparent_firewall/README.md +61 -0
  276. data/src/examples/transparent_firewall/aggregated-delegated-afrinic.txt +713 -0
  277. data/src/examples/transparent_firewall/aggregated-delegated-apnic.txt +3440 -0
  278. data/src/examples/transparent_firewall/aggregated-delegated-arin.txt +11342 -0
  279. data/src/examples/transparent_firewall/aggregated-delegated-lacnic.txt +1937 -0
  280. data/src/examples/transparent_firewall/aggregated-delegated-ripencc.txt +7329 -0
  281. data/src/examples/transparent_firewall/block-rfc1918.rb +86 -0
  282. data/src/examples/transparent_firewall/pass-delegated.rb +178 -0
  283. data/src/examples/transparent_firewall/regen_aggregated.sh +53 -0
  284. data/src/examples/transparent_firewall/stats-to-cidrs.rb +59 -0
  285. data/src/lib/messenger.c +14 -5
  286. data/src/lib/openflow_message.c +0 -5
  287. data/tasks/rubocop.rake +22 -0
  288. data/trema +1 -1
  289. data/trema-config +1 -1
  290. data/trema.gemspec +22 -22
  291. metadata +30 -16
@@ -15,33 +15,30 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
  #
17
17
 
18
+ require 'rspec'
18
19
 
19
- require "rubygems"
20
- require "rspec"
21
-
22
-
23
- shared_examples_for "option is within range" do | option, range |
20
+ shared_examples_for 'option is within range' do | option, range |
24
21
  context "with #{ option } (#{ range })" do
25
- let( option ) { range.first }
26
- it { expect { subject }.not_to raise_error( ArgumentError ) }
22
+ let(option) { range.first }
23
+ it { expect { subject }.not_to raise_error(ArgumentError) }
27
24
  end
28
25
 
29
26
 
30
27
  context "with #{ option } (< #{ range.first })" do
31
- let( option ) { range.first - 1 }
32
- it { expect { subject }.to raise_error( ArgumentError ) }
28
+ let(option) { range.first - 1 }
29
+ it { expect { subject }.to raise_error(ArgumentError) }
33
30
  end
34
31
 
35
32
 
36
33
  context "with #{ option } (> #{ range.last })" do
37
- let( option ) { range.last + 1 }
38
- it { expect { subject }.to raise_error( ArgumentError ) }
34
+ let(option) { range.last + 1 }
35
+ it { expect { subject }.to raise_error(ArgumentError) }
39
36
  end
40
37
  end
41
38
 
42
39
 
43
40
  RSpec.configure do | config |
44
- config.alias_it_should_behave_like_to :it_validates, "it validates"
41
+ config.alias_it_should_behave_like_to :it_validates, 'it validates'
45
42
  end
46
43
 
47
44
 
@@ -15,35 +15,32 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
  #
17
17
 
18
+ require 'rspec'
18
19
 
19
- require "rubygems"
20
- require "rspec"
21
-
22
-
23
- shared_examples_for "any Openflow message with mandatory options" do | options |
20
+ shared_examples_for 'any Openflow message with mandatory options' do | options |
24
21
  subject do
25
22
  opt_hash = {}
26
- options[ :options ].each do | each |
27
- opt_hash[ each[ :name ] ] = __send__( each[ :name ] )
23
+ options[ :options].each do | each |
24
+ opt_hash[ each[ :name]] = __send__(each[ :name])
28
25
  end
29
- options[ :klass ].new( opt_hash )
26
+ options[ :klass].new(opt_hash)
30
27
  end
31
28
 
32
- options[ :options ].each do | each |
33
- let( each[ :name ] ) { each[ :sample_value ] }
29
+ options[ :options].each do | each |
30
+ let(each[ :name]) { each[ :sample_value] }
34
31
  end
35
32
 
36
33
 
37
- options[ :options ].each do | each |
38
- context "with :#{ each[ :name ] } (#{ each[ :sample_value ] })" do
39
- let( each[ :name ] ) { each[ :sample_value ] }
40
- its( each[ :name ] ) { should == each[ :sample_value ] }
41
- its( each[ :alias ] ) { should == each[ :sample_value ] } if each[ :alias ]
34
+ options[ :options].each do | each |
35
+ context "with :#{ each[ :name] } (#{ each[ :sample_value] })" do
36
+ let(each[ :name]) { each[ :sample_value] }
37
+ its(each[ :name]) { should == each[ :sample_value] }
38
+ its(each[ :alias]) { should == each[ :sample_value] } if each[ :alias]
42
39
  end
43
40
 
44
- context "without :#{ each[ :name ] }" do
45
- let( each[ :name ] ) { nil }
46
- it { expect { subject }.to raise_error( ArgumentError, ":#{ each[ :name ] } is a mandatory option" ) }
41
+ context "without :#{ each[ :name] }" do
42
+ let(each[ :name]) { nil }
43
+ it { expect { subject }.to raise_error(ArgumentError, ":#{ each[ :name] } is a mandatory option") }
47
44
  end
48
45
  end
49
46
  end
@@ -1,19 +1,19 @@
1
1
  RSpec::Matchers.define :have_constant do | const, klass |
2
2
  match do | owner |
3
- const_defined = owner.const_defined?( const )
4
- klass_match = owner.const_get( const ).class == klass unless klass.nil?
5
- klass.nil? ? const_defined : ( const_defined && klass_match )
3
+ const_defined = owner.const_defined?(const)
4
+ klass_match = owner.const_get(const).class == klass unless klass.nil?
5
+ klass.nil? ? const_defined : ( const_defined && klass_match)
6
6
  end
7
7
 
8
8
  failure_message_for_should do | actual |
9
- msg = "constant #{ expected[ 0 ] } not defined in #{ actual }"
10
- msg += " as a #{ expected[ 1 ] }" unless expected[ 1 ].nil?
9
+ msg = "constant #{ expected[ 0] } not defined in #{ actual }"
10
+ msg += " as a #{ expected[ 1] }" unless expected[ 1].nil?
11
11
  msg
12
12
  end
13
13
 
14
14
  failure_message_for_should_not do | actual |
15
- msg = "constant #{ expected[ 0 ] } is defined in #{ actual }"
16
- msg += " as a #{ expected[ 1 ] }" unless expected[ 1 ].nil?
15
+ msg = "constant #{ expected[ 0] } is defined in #{ actual }"
16
+ msg += " as a #{ expected[ 1] }" unless expected[ 1].nil?
17
17
  msg
18
18
  end
19
19
 
@@ -15,157 +15,154 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
  #
17
17
 
18
+ require 'rspec'
18
19
 
19
- require "rubygems"
20
- require "rspec"
21
-
22
-
23
- shared_examples_for "any Openflow message with default transaction ID" do
24
- its( :transaction_id ) { should be_unsigned_32bit }
25
- its( :xid ) { should be_unsigned_32bit }
20
+ shared_examples_for 'any Openflow message with default transaction ID' do
21
+ its(:transaction_id) { should be_unsigned_32bit }
22
+ its(:xid) { should be_unsigned_32bit }
26
23
  end
27
24
 
28
25
 
29
- shared_examples_for "any Openflow message with transaction ID" do
30
- context "transaction_id: -123", :nosudo => true do
31
- let( :transaction_id ) { -123 }
32
- it { expect { subject }.to raise_error( ArgumentError, "Transaction ID must be an unsigned 32-bit integer" ) }
26
+ shared_examples_for 'any Openflow message with transaction ID' do
27
+ context 'transaction_id: -123', :nosudo => true do
28
+ let(:transaction_id) { -123 }
29
+ it { expect { subject }.to raise_error(ArgumentError, 'Transaction ID must be an unsigned 32-bit integer') }
33
30
  end
34
31
 
35
- context "transaction_id: 0", :nosudo => true do
36
- let( :transaction_id ) { 0 }
37
- its( :transaction_id ) { should == 0 }
38
- its( :xid ) { should == 0 }
32
+ context 'transaction_id: 0', :nosudo => true do
33
+ let(:transaction_id) { 0 }
34
+ its(:transaction_id) { should == 0 }
35
+ its(:xid) { should == 0 }
39
36
  end
40
37
 
41
- context "transaction_id: 123", :nosudo => true do
42
- let( :transaction_id ) { 123 }
43
- its( :transaction_id ) { should == 123 }
44
- its( :xid ) { should == 123 }
38
+ context 'transaction_id: 123', :nosudo => true do
39
+ let(:transaction_id) { 123 }
40
+ its(:transaction_id) { should == 123 }
41
+ its(:xid) { should == 123 }
45
42
  end
46
43
 
47
- context "transaction_id: UINT32_MAX", :nosudo => true do
48
- let( :transaction_id ) { 2 ** 32 - 1 }
49
- its( :transaction_id ) { should == 2 ** 32 - 1 }
50
- its( :xid ) { should == 2 ** 32 - 1 }
44
+ context 'transaction_id: UINT32_MAX', :nosudo => true do
45
+ let(:transaction_id) { 2**32 - 1 }
46
+ its(:transaction_id) { should == 2**32 - 1 }
47
+ its(:xid) { should == 2**32 - 1 }
51
48
  end
52
49
 
53
- context "transaction_id: UINT32_MAX + 1", :nosudo => true do
54
- let( :transaction_id ) { 2 ** 32 }
55
- it { expect { subject }.to raise_error( ArgumentError, "Transaction ID must be an unsigned 32-bit integer" ) }
50
+ context 'transaction_id: UINT32_MAX + 1', :nosudo => true do
51
+ let(:transaction_id) { 2**32 }
52
+ it { expect { subject }.to raise_error(ArgumentError, 'Transaction ID must be an unsigned 32-bit integer') }
56
53
  end
57
54
  end
58
55
 
59
56
 
60
- shared_examples_for "any Openflow message with xid" do
61
- context "xid: -123", :nosudo => true do
62
- let( :xid ) { -123 }
63
- it { expect { subject }.to raise_error( ArgumentError, "Transaction ID must be an unsigned 32-bit integer" ) }
57
+ shared_examples_for 'any Openflow message with xid' do
58
+ context 'xid: -123', :nosudo => true do
59
+ let(:xid) { -123 }
60
+ it { expect { subject }.to raise_error(ArgumentError, 'Transaction ID must be an unsigned 32-bit integer') }
64
61
  end
65
62
 
66
- context "xid: 0", :nosudo => true do
67
- let( :xid ) { 0 }
68
- its( :xid ) { should == 0 }
69
- its( :transaction_id ) { should == 0 }
63
+ context 'xid: 0', :nosudo => true do
64
+ let(:xid) { 0 }
65
+ its(:xid) { should == 0 }
66
+ its(:transaction_id) { should == 0 }
70
67
  end
71
68
 
72
- context "xid: 123", :nosudo => true do
73
- let( :xid ) { 123 }
74
- its( :xid ) { should == 123 }
75
- its( :transaction_id ) { should == 123 }
69
+ context 'xid: 123', :nosudo => true do
70
+ let(:xid) { 123 }
71
+ its(:xid) { should == 123 }
72
+ its(:transaction_id) { should == 123 }
76
73
  end
77
74
 
78
- context "xid: UINT32_MAX", :nosudo => true do
79
- let( :xid ) { 2 ** 32 - 1 }
80
- its( :xid ) { should == 2 ** 32 - 1 }
81
- its( :transaction_id ) { should == 2 ** 32 - 1 }
75
+ context 'xid: UINT32_MAX', :nosudo => true do
76
+ let(:xid) { 2**32 - 1 }
77
+ its(:xid) { should == 2**32 - 1 }
78
+ its(:transaction_id) { should == 2**32 - 1 }
82
79
  end
83
80
 
84
- context "xid: UINT32_MAX + 1", :nosudo => true do
85
- let( :xid ) { 2 ** 32 }
86
- it { expect { subject }.to raise_error( ArgumentError, "Transaction ID must be an unsigned 32-bit integer" ) }
81
+ context 'xid: UINT32_MAX + 1', :nosudo => true do
82
+ let(:xid) { 2**32 }
83
+ it { expect { subject }.to raise_error(ArgumentError, 'Transaction ID must be an unsigned 32-bit integer') }
87
84
  end
88
85
  end
89
86
 
90
87
 
91
- shared_examples_for "any Openflow message with user_data" do
92
- context "user_data: nil", :nosudo => true do
93
- let( :user_data ) { nil }
94
- its( :user_data ) { should be_nil }
95
- it_should_behave_like "any Openflow message with default transaction ID"
88
+ shared_examples_for 'any Openflow message with user_data' do
89
+ context 'user_data: nil', :nosudo => true do
90
+ let(:user_data) { nil }
91
+ its(:user_data) { should be_nil }
92
+ it_should_behave_like 'any Openflow message with default transaction ID'
96
93
  end
97
94
 
98
95
 
99
96
  context 'user_data: "USER DATA"', :nosudo => true do
100
- let( :user_data ) { "USER DATA" }
101
- its( :user_data ) { should == "USER DATA" }
102
- it_should_behave_like "any Openflow message with default transaction ID"
97
+ let(:user_data) { 'USER DATA' }
98
+ its(:user_data) { should == 'USER DATA' }
99
+ it_should_behave_like 'any Openflow message with default transaction ID'
103
100
  end
104
101
 
105
102
 
106
- context "user_data: :INVALID_DATA", :nosudo => true do
107
- let( :user_data ) { :INVALID_DATA }
108
- it { expect { subject }.to raise_error( TypeError ) }
103
+ context 'user_data: :INVALID_DATA', :nosudo => true do
104
+ let(:user_data) { :INVALID_DATA }
105
+ it { expect { subject }.to raise_error(TypeError) }
109
106
  end
110
107
  end
111
108
 
112
109
 
113
- shared_examples_for "any OpenFlow message" do | options |
114
- option = options[ :option ]
115
- name = options[ :name ]
116
- size = options[ :size ]
110
+ shared_examples_for 'any OpenFlow message' do | options |
111
+ option = options[ :option]
112
+ name = options[ :name]
113
+ size = options[ :size]
117
114
  case size
118
115
  when 8
119
- let( :uint_max ) { 2 ** 8 - 1 }
116
+ let(:uint_max) { 2**8 - 1 }
120
117
  when 16
121
- let( :uint_max ) { 2 ** 16 - 1 }
118
+ let(:uint_max) { 2**16 - 1 }
122
119
  when 32
123
- let( :uint_max ) { 2 ** 32 - 1 }
120
+ let(:uint_max) { 2**32 - 1 }
124
121
  end
125
122
 
126
123
 
127
124
  context "when its #{ name } is a negative value" do
128
- let( option ) { -1234 }
129
- it "should raise ArgumentError" do
130
- expect { subject }.to raise_error( "#{ name } must be an unsigned #{ size }-bit integer" )
125
+ let(option) { -1234 }
126
+ it 'should raise ArgumentError' do
127
+ expect { subject }.to raise_error("#{ name } must be an unsigned #{ size }-bit integer")
131
128
  end
132
129
  end
133
130
 
134
131
 
135
132
  context "when its #{ name } is zero" do
136
- let( option ) { 0 }
137
- its( option ) { should == 0 }
133
+ let(option) { 0 }
134
+ its(option) { should == 0 }
138
135
  end
139
136
 
140
137
 
141
138
  context "when its #{ name } is 123" do
142
- let( option ) { 123 }
143
- its( option ) { should == 123 }
139
+ let(option) { 123 }
140
+ its(option) { should == 123 }
144
141
  end
145
142
 
146
143
 
147
144
  context "when its #{ name } is UINT#{ size }MAX" do
148
- let( option ) { uint_max }
149
- its( option ) { should == uint_max }
145
+ let(option) { uint_max }
146
+ its(option) { should == uint_max }
150
147
  end
151
148
 
152
149
 
153
150
  context "when its #{ name } is UINT#{ size }_MAX + 1" do
154
- let( option ) { uint_max + 1 }
155
- it "should raise ArgumentError" do
156
- expect { subject }.to raise_error( "#{ name } must be an unsigned #{ size }-bit integer" )
151
+ let(option) { uint_max + 1 }
152
+ it 'should raise ArgumentError' do
153
+ expect { subject }.to raise_error("#{ name } must be an unsigned #{ size }-bit integer")
157
154
  end
158
155
  end
159
156
  end
160
157
 
161
158
 
162
- shared_examples_for "any OpenFlow message with port option" do
163
- it_should_behave_like "any OpenFlow message", :option => :port, :name => "Port", :size => 16
159
+ shared_examples_for 'any OpenFlow message with port option' do
160
+ it_should_behave_like 'any OpenFlow message', :option => :port, :name => 'Port', :size => 16
164
161
  end
165
162
 
166
163
 
167
- shared_examples_for "any OpenFlow message with transaction_id option" do
168
- it_should_behave_like "any OpenFlow message", :option => :transaction_id, :name => "Transaction ID", :size => 32
164
+ shared_examples_for 'any OpenFlow message with transaction_id option' do
165
+ it_should_behave_like 'any OpenFlow message', :option => :transaction_id, :name => 'Transaction ID', :size => 32
169
166
  end
170
167
 
171
168
 
@@ -15,18 +15,15 @@
15
15
  # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
16
  #
17
17
 
18
+ require 'rspec'
18
19
 
19
- require "rubygems"
20
- require "rspec"
21
-
22
-
23
- shared_examples_for "port status message" do | options |
20
+ shared_examples_for 'port status message' do | options |
24
21
  it_should_behave_like(
25
- "any Openflow message with mandatory options",
26
- :klass => options[ :klass ],
27
- :options => [ { :name => :datapath_id, :alias => :dpid, :sample_value => 0xabc },
28
- { :name => :transaction_id, :alias => :xid, :sample_value => 123 },
29
- { :name => :phy_port, :sample_value => "PHY_PORT" } ]
22
+ 'any Openflow message with mandatory options',
23
+ :klass => options[ :klass],
24
+ :options => [{ :name => :datapath_id, :alias => :dpid, :sample_value => 0xabc },
25
+ { :name => :transaction_id, :alias => :xid, :sample_value => 123 },
26
+ { :name => :phy_port, :sample_value => 'PHY_PORT' }]
30
27
  )
31
28
  end
32
29
 
@@ -16,65 +16,65 @@
16
16
  #
17
17
 
18
18
 
19
- require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
- require "trema/app"
19
+ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
20
+ require 'trema/app'
21
21
 
22
22
 
23
23
  module Trema
24
24
  describe App do
25
- context "when running an app" do
26
- it "should run without options" do
27
- stanza = { :path => "/usr/bin/tetris", :name => "NAME" }
28
- app = App.new( stanza )
25
+ context 'when running an app' do
26
+ it 'should run without options' do
27
+ stanza = { :path => '/usr/bin/tetris', :name => 'NAME' }
28
+ app = App.new(stanza)
29
29
 
30
- app.should_receive( :sh ).with( "/usr/bin/tetris --name NAME" )
30
+ app.should_receive(:sh).with('/usr/bin/tetris --name NAME')
31
31
 
32
32
  app.run!
33
33
  end
34
34
 
35
35
 
36
- it "should run with options" do
37
- stanza = { :path => "/usr/bin/tetris", :name => "NAME", :options => [ "OPTION0", "OPTION1" ] }
38
- app = App.new( stanza )
36
+ it 'should run with options' do
37
+ stanza = { :path => '/usr/bin/tetris', :name => 'NAME', :options => ['OPTION0', 'OPTION1'] }
38
+ app = App.new(stanza)
39
39
 
40
- app.should_receive( :sh ).with( "/usr/bin/tetris --name NAME OPTION0 OPTION1" )
40
+ app.should_receive(:sh).with('/usr/bin/tetris --name NAME OPTION0 OPTION1')
41
41
 
42
42
  app.run!
43
43
  end
44
44
  end
45
45
 
46
46
 
47
- context "when daemonizing an app" do
48
- it "should daemonize without options" do
49
- stanza = { :path => "/usr/bin/tetris", :name => "NAME" }
50
- app = App.new( stanza )
47
+ context 'when daemonizing an app' do
48
+ it 'should daemonize without options' do
49
+ stanza = { :path => '/usr/bin/tetris', :name => 'NAME' }
50
+ app = App.new(stanza)
51
51
 
52
- app.should_receive( :sh ).with( "/usr/bin/tetris --name NAME -d" )
52
+ app.should_receive(:sh).with('/usr/bin/tetris --name NAME -d')
53
53
 
54
54
  app.daemonize!
55
55
  end
56
56
 
57
57
 
58
- it "should daemonize with options" do
59
- stanza = { :path => "/usr/bin/tetris", :name => "NAME", :options => [ "OPTION0", "OPTION1" ] }
60
- app = App.new( stanza )
58
+ it 'should daemonize with options' do
59
+ stanza = { :path => '/usr/bin/tetris', :name => 'NAME', :options => ['OPTION0', 'OPTION1'] }
60
+ app = App.new(stanza)
61
61
 
62
- app.should_receive( :sh ).with( "/usr/bin/tetris --name NAME -d OPTION0 OPTION1" )
62
+ app.should_receive(:sh).with('/usr/bin/tetris --name NAME -d OPTION0 OPTION1')
63
63
 
64
64
  app.daemonize!
65
65
  end
66
66
  end
67
67
 
68
68
 
69
- context "when shutting an app down" do
70
- it "should send a signal to kill" do
71
- process = mock( "process" )
72
- Trema::Process.stub!( :read ).and_return( process )
69
+ context 'when shutting an app down' do
70
+ it 'should send a signal to kill' do
71
+ process = mock('process')
72
+ Trema::Process.stub!(:read).and_return(process)
73
73
 
74
- process.should_receive( :kill! )
74
+ process.should_receive(:kill!)
75
75
 
76
- stanza = { :path => "/usr/bin/tetris", :name => "NAME" }
77
- App.new( stanza ).shutdown!
76
+ stanza = { :path => '/usr/bin/tetris', :name => 'NAME' }
77
+ App.new(stanza).shutdown!
78
78
  end
79
79
  end
80
80
  end