trema 0.8.4 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +6 -0
  4. data/bin/trema +12 -4
  5. data/features/.nav +6 -0
  6. data/features/api/logging.feature +10 -3
  7. data/features/api/send_flow_mod_add.feature +8 -3
  8. data/features/handlers/barrier_reply.feature +6 -1
  9. data/features/handlers/description_stats_reply.feature +6 -1
  10. data/features/handlers/echo_reply.feature +6 -1
  11. data/features/handlers/hello_failed.feature +6 -1
  12. data/features/handlers/packet_in.feature +8 -3
  13. data/features/handlers/start.feature +6 -1
  14. data/features/handlers/switch_disconnected.feature +6 -1
  15. data/features/handlers/switch_ready.feature +6 -1
  16. data/features/logger/debug.feature +10 -4
  17. data/features/logger/error.feature +10 -4
  18. data/features/logger/fatal.feature +10 -4
  19. data/features/logger/info.feature +10 -4
  20. data/features/logger/warn.feature +10 -4
  21. data/features/step_definitions/dump_flows_steps.rb +6 -8
  22. data/features/step_definitions/rest_api_steps.rb +3 -3
  23. data/features/step_definitions/show_stats_steps.rb +3 -1
  24. data/features/step_definitions/trema_steps.rb +17 -8
  25. data/features/support/hooks.rb +3 -6
  26. data/features/trema_delete_link/delete_link.feature +7 -0
  27. data/features/trema_dump_flows/dump_flows.feature +49 -0
  28. data/features/trema_killall/all_option.feature +6 -1
  29. data/features/trema_killall/killall.feature +6 -1
  30. data/features/trema_killall/socket_dir_option.feature +7 -0
  31. data/features/trema_netns/README.md +5 -0
  32. data/features/trema_netns/netns.feature +55 -0
  33. data/features/trema_run/conf_option.feature +8 -3
  34. data/features/trema_run/daemonize_option.feature +6 -1
  35. data/features/trema_run/log_dir_option.feature +7 -3
  36. data/features/trema_run/logging_level_option.feature +7 -2
  37. data/features/trema_run/openflow13_option.feature +9 -4
  38. data/features/trema_run/pid_dir_option.feature +7 -3
  39. data/features/trema_run/port_option.feature +8 -3
  40. data/features/trema_run/run.feature +7 -0
  41. data/features/trema_run/socket_dir_option.feature +13 -11
  42. data/features/trema_start/start.feature +10 -5
  43. data/features/trema_stop/stop.feature +8 -3
  44. data/lib/trema/version.rb +1 -1
  45. data/spec/spec_helper.rb +1 -1
  46. data/trema.gemspec +8 -8
  47. metadata +21 -19
  48. data/.ruby-version +0 -1
@@ -1,6 +1,11 @@
1
1
  Feature: Trema::Controller#logger.warn
2
2
  Background:
3
- Given a file named "hello.rb" with:
3
+ Given I set the environment variables to:
4
+ | variable | value |
5
+ | TREMA_LOG_DIR | . |
6
+ | TREMA_PID_DIR | . |
7
+ | TREMA_SOCKET_DIR | . |
8
+ And a file named "hello.rb" with:
4
9
  """ruby
5
10
  class Hello < Trema::Controller
6
11
  def start(_args)
@@ -12,6 +17,7 @@ Feature: Trema::Controller#logger.warn
12
17
  @sudo
13
18
  Scenario: the default logging level
14
19
  When I trema run "hello.rb" interactively
20
+ And sleep 2
15
21
  And I trema killall "Hello"
16
22
  Then the output should contain "Konnichi Wa"
17
23
  And the file "Hello.log" should contain "WARN -- : Konnichi Wa"
@@ -19,7 +25,7 @@ Feature: Trema::Controller#logger.warn
19
25
  @sudo
20
26
  Scenario: --logging_level warn
21
27
  When I run `trema run hello.rb --logging_level warn` interactively
22
- And I run `sleep 3`
28
+ And sleep 2
23
29
  And I trema killall "Hello"
24
30
  Then the output should contain "Konnichi Wa"
25
31
  And the file "Hello.log" should contain "WARN -- : Konnichi Wa"
@@ -27,7 +33,7 @@ Feature: Trema::Controller#logger.warn
27
33
  @sudo
28
34
  Scenario: -v
29
35
  When I run `trema -v run hello.rb` interactively
30
- And I run `sleep 3`
36
+ And sleep 2
31
37
  And I trema killall "Hello"
32
38
  Then the output should contain "Konnichi Wa"
33
39
  And the file "Hello.log" should contain "WARN -- : Konnichi Wa"
@@ -35,7 +41,7 @@ Feature: Trema::Controller#logger.warn
35
41
  @sudo
36
42
  Scenario: --verbose
37
43
  When I run `trema --verbose run hello.rb` interactively
38
- And I run `sleep 3`
44
+ And sleep 2
39
45
  And I trema killall "Hello"
40
46
  Then the output should contain "Konnichi Wa"
41
47
  And the file "Hello.log" should contain "WARN -- : Konnichi Wa"
@@ -1,13 +1,11 @@
1
- # rubocop:disable LineLength
2
-
3
- Then(/^the switch "(.*?)" has (\d+) flow entr(?:y|ies)$/) do |switch, num_entries|
4
- command = "trema dump_flows #{switch} -S."
5
- step "I run `#{command}`"
6
- expect(output_from(command).split("\n").size - 1).to eq(num_entries.to_i)
1
+ Then(/^the switch "(.*?)" has (\d+) flow entr(?:y|ies)$/) do |switch, number|
2
+ # FIXME: Read TREMA_SOCKET_DIR in trema dump_flows
3
+ command = "trema dump_flows #{switch} -S ."
4
+ step "I successfully run `#{command}`"
5
+ dump_flows = aruba.command_monitor.find(Aruba.platform.detect_ruby(command))
6
+ expect(dump_flows.output.split("\n").size - 1).to eq(number.to_i)
7
7
  end
8
8
 
9
9
  Then(/^the switch "(.*?)" has no flow entry$/) do |switch|
10
10
  step %(the switch "#{switch}" has 0 flow entry)
11
11
  end
12
-
13
- # rubocop:enable LineLength
@@ -9,18 +9,18 @@ begin
9
9
  end
10
10
 
11
11
  Given(/^I send a GET request for "([^\"]*)"$/) do |path|
12
- in_current_dir { get path }
12
+ cd('.') { get path }
13
13
  end
14
14
 
15
15
  # rubocop:disable LineLength
16
16
  Given(/^I send a POST request for "([^\"]*)" with body "([^\"]*)"$/) do |path, body|
17
- in_current_dir { post path, Object.instance_eval(body) }
17
+ cd('.') { post path, Object.instance_eval(body) }
18
18
  end
19
19
  # rubocop:enable LineLength
20
20
 
21
21
  # rubocop:disable LineLength
22
22
  Given(/^I send a DELETE request for "([^\"]*)" with body "([^\"]*)"$/) do |path, body|
23
- in_current_dir { delete path, Object.instance_eval(body) }
23
+ cd('.') { delete path, Object.instance_eval(body) }
24
24
  end
25
25
  # rubocop:enable LineLength
26
26
 
@@ -29,10 +29,12 @@ Then(/^the number of packets received by "(.*?)" should be:$/) do |host_name, ta
29
29
  command = "trema show_stats #{host_name}"
30
30
  step "I run `#{command}`"
31
31
 
32
+ output = aruba.command_monitor.find(Aruba.platform.detect_ruby(command)).output
33
+
32
34
  result = Hash.new(0)
33
35
  cd('.') do
34
36
  received = false
35
- output_from(command).split("\n").each do |each|
37
+ output.split("\n").each do |each|
36
38
  case each
37
39
  when /Packets sent/
38
40
  next
@@ -26,14 +26,14 @@ When(/^I trema run "([^"]*)"$/) do |controller_file|
26
26
  step %(I run `trema run #{controller_path} -d`)
27
27
  end
28
28
 
29
+ Given(/^I trema run "([^"]*)" with args "([^"]*)"$/) do |controller, args|
30
+ controller_path = File.join('..', '..', controller)
31
+ step %(I successfully run `trema run #{controller_path} #{args}`)
32
+ step %(sleep 10)
33
+ end
34
+
29
35
  When(/^I trema run "([^"]*)" interactively$/) do |controller_file|
30
- controller_path = if controller_file.include?('/')
31
- File.join '..', '..', controller_file
32
- else
33
- controller_file
34
- end
35
- step %(I run `trema run #{controller_path}` interactively)
36
- step %(I successfully run `sleep 3`)
36
+ step %(I run `trema run #{controller_file}` interactively)
37
37
  end
38
38
 
39
39
  # rubocop:disable LineLength
@@ -50,7 +50,7 @@ When(/^I trema run "([^"]*)"( interactively)? with the configuration "([^"]*)"$/
50
50
  else
51
51
  step %(I successfully run `trema run #{run_arguments} -d`)
52
52
  end
53
- step %(I successfully run `sleep 3`)
53
+ step %(sleep 10)
54
54
  end
55
55
  # rubocop:enable LineLength
56
56
 
@@ -58,6 +58,11 @@ When(/^I trema killall "([^"]*)"$/) do |controller_name|
58
58
  step %(I successfully run `trema killall #{controller_name}`)
59
59
  end
60
60
 
61
+ When(/^I delete the link between "([^"]*)" and "([^"]*)"$/) do |peer1, peer2|
62
+ step %(I successfully run `trema delete_link #{peer1} #{peer2}`)
63
+ step %(sleep 3)
64
+ end
65
+
61
66
  # rubocop:disable LineLength
62
67
  Then(/^the log file "([^"]*)" should contain following messages:$/) do |log_file, messages|
63
68
  step %(a file named "#{log_file}" should exist)
@@ -70,3 +75,7 @@ end
70
75
  Then(/^the command returns immediately$/) do
71
76
  # noop
72
77
  end
78
+
79
+ When(/^sleep (\d+)$/) do |time|
80
+ sleep time.to_i
81
+ end
@@ -3,14 +3,11 @@ Before do
3
3
  end
4
4
 
5
5
  Before('@sudo') do
6
- ENV['TREMA_LOG_DIR'] = '.'
7
- ENV['TREMA_PID_DIR'] = '.'
8
- ENV['TREMA_SOCKET_DIR'] = '.'
9
6
  fail 'sudo authentication failed' unless system 'sudo -v'
10
- @aruba_timeout_seconds = 10
7
+ @aruba_timeout_seconds = 15
11
8
  end
12
9
 
13
10
  After do
14
- run "trema killall --all -S #{ENV['TREMA_SOCKET_DIR']}"
15
- sleep 5
11
+ run 'trema killall --all -S .'
12
+ sleep 10
16
13
  end
@@ -1,4 +1,11 @@
1
1
  Feature: delete_link
2
+ Background:
3
+ Given I set the environment variables to:
4
+ | variable | value |
5
+ | TREMA_LOG_DIR | . |
6
+ | TREMA_PID_DIR | . |
7
+ | TREMA_SOCKET_DIR | . |
8
+
2
9
  @sudo
3
10
  Scenario: trema delete_link 0xabc host1
4
11
  Given a file named "packet_in_controller.rb" with:
@@ -0,0 +1,49 @@
1
+ Feature: dump_flows
2
+ Background:
3
+ Given I set the environment variables to:
4
+ | variable | value |
5
+ | TREMA_LOG_DIR | . |
6
+ | TREMA_PID_DIR | . |
7
+ | TREMA_SOCKET_DIR | . |
8
+ And a file named "noop_controller.rb" with:
9
+ """ruby
10
+ class NoopController < Trema::Controller; end
11
+ """
12
+ And a file named "flow_mod_controller.rb" with:
13
+ """ruby
14
+ class FlowModController < Trema::Controller
15
+ def switch_ready(datapath_id)
16
+ send_flow_mod_add(datapath_id, match: Match.new)
17
+ end
18
+ end
19
+ """
20
+ And a file named "trema.conf" with:
21
+ """ruby
22
+ vswitch { datapath_id 0xabc }
23
+ """
24
+
25
+ @sudo
26
+ Scenario: dump_flows (no flow entries)
27
+ Given I trema run "noop_controller.rb" with the configuration "trema.conf"
28
+ When I successfully run `trema dump_flows 0xabc`
29
+ Then the output from "trema dump_flows 0xabc" should not contain "actions=drop"
30
+
31
+ @sudo
32
+ Scenario: dump_flows (one flow entry)
33
+ Given I trema run "flow_mod_controller.rb" with the configuration "trema.conf"
34
+ When I successfully run `trema dump_flows 0xabc`
35
+ Then the output from "trema dump_flows 0xabc" should contain "actions=drop"
36
+
37
+ @sudo
38
+ Scenario: dump_flows OpenFlow 1.3 (no flow entries)
39
+ Given I use OpenFlow 1.3
40
+ And I trema run "noop_controller.rb" with the configuration "trema.conf"
41
+ When I successfully run `trema dump_flows 0xabc`
42
+ Then the output from "trema dump_flows 0xabc" should not contain "actions=drop"
43
+
44
+ @sudo
45
+ Scenario: dump_flows OpenFlow 1.3 (one flow entry)
46
+ Given I use OpenFlow 1.3
47
+ And I trema run "flow_mod_controller.rb" with the configuration "trema.conf"
48
+ When I successfully run `trema dump_flows 0xabc`
49
+ Then the output from "trema dump_flows 0xabc" should contain "actions=drop"
@@ -4,7 +4,12 @@ Feature: --all option
4
4
 
5
5
  @sudo
6
6
  Scenario: killall --all
7
- Given a file named "null_controller.rb" with:
7
+ Given I set the environment variables to:
8
+ | variable | value |
9
+ | TREMA_LOG_DIR | . |
10
+ | TREMA_PID_DIR | . |
11
+ | TREMA_SOCKET_DIR | . |
12
+ And a file named "null_controller.rb" with:
8
13
  """ruby
9
14
  class NullController < Trema::Controller; end
10
15
  """
@@ -1,7 +1,12 @@
1
1
  Feature: killall
2
2
  @sudo
3
3
  Scenario: killall controller_name
4
- Given a file named "null_controller.rb" with:
4
+ Given I set the environment variables to:
5
+ | variable | value |
6
+ | TREMA_LOG_DIR | . |
7
+ | TREMA_PID_DIR | . |
8
+ | TREMA_SOCKET_DIR | . |
9
+ And a file named "null_controller.rb" with:
5
10
  """ruby
6
11
  class NullController < Trema::Controller; end
7
12
  """
@@ -2,6 +2,13 @@ Feature: -S (--socket_dir) option
2
2
 
3
3
  -S (--socket_dir) option specifies the location to find socket files
4
4
 
5
+ Background:
6
+ Given I set the environment variables to:
7
+ | variable | value |
8
+ | TREMA_LOG_DIR | . |
9
+ | TREMA_PID_DIR | . |
10
+ | TREMA_SOCKET_DIR | . |
11
+
5
12
  @sudo
6
13
  Scenario: -S option
7
14
  Given a file named "null_controller.rb" with:
@@ -0,0 +1,5 @@
1
+ `trema netns` command opens a new shell or runs a command in the specified network namespace.
2
+
3
+ ```
4
+ trema [global options] netns name [command]
5
+ ```
@@ -0,0 +1,55 @@
1
+ Feature: netns
2
+ Background:
3
+ Given I set the environment variables to:
4
+ | variable | value |
5
+ | TREMA_LOG_DIR | . |
6
+ | TREMA_PID_DIR | . |
7
+ | TREMA_SOCKET_DIR | . |
8
+ And a file named "simple_hub.rb" with:
9
+ """ruby
10
+ class SimpleHub < Trema::Controller
11
+ def switch_ready(dpid)
12
+ send_flow_mod_add(
13
+ dpid,
14
+ match: Match.new,
15
+ actions: SendOutPort.new(:flood)
16
+ )
17
+ end
18
+ end
19
+ """
20
+ And a file named "simple_hub.conf" with:
21
+ """ruby
22
+ vswitch('simple_hub') { dpid 0x1 }
23
+ netns('host1') {
24
+ ip '192.168.1.2'
25
+ netmask '255.255.255.0'
26
+ route net: '0.0.0.0', gateway: '192.168.1.1'
27
+ }
28
+ netns('host2') {
29
+ ip '192.168.1.3'
30
+ netmask '255.255.255.0'
31
+ route net: '0.0.0.0', gateway: '192.168.1.1'
32
+ }
33
+ link 'simple_hub', 'host1'
34
+ link 'simple_hub', 'host2'
35
+ """
36
+ And I trema run "simple_hub.rb" with the configuration "simple_hub.conf"
37
+
38
+ @sudo
39
+ Scenario: netns namespece
40
+ When I run `trema netns host1` interactively
41
+ And I type "ip addr"
42
+ And I type "exit"
43
+ Then the stdout should contain "192.168.1.2"
44
+
45
+ @sudo
46
+ Scenario Outline: netns namespece command
47
+ When I run `<command>`
48
+ Then the stdout should contain "<output>"
49
+ Examples:
50
+ |command |output |
51
+ |trema netns host1 ip add show host1 |192.168.1.2 |
52
+ |trema netns host1 -- ping -c1 192.168.1.3|1 packets transmitted, 1 received, |
53
+ |trema netns host1 "ping -c1 192.168.1.3" |1 packets transmitted, 1 received, |
54
+ |trema netns host1 "ip addr \| grep 127" |127.0.0.1 |
55
+ |trema netns host1 ls $PWD |simple_hub.conf |
@@ -3,7 +3,12 @@ Feature: -c (--conf) option
3
3
  -c (--conf) option specifies emulated network configuration
4
4
 
5
5
  Background:
6
- Given a file named "hello.rb" with:
6
+ Given I set the environment variables to:
7
+ | variable | value |
8
+ | TREMA_LOG_DIR | . |
9
+ | TREMA_PID_DIR | . |
10
+ | TREMA_SOCKET_DIR | . |
11
+ And a file named "hello.rb" with:
7
12
  """ruby
8
13
  class Hello < Trema::Controller
9
14
  def switch_ready(dpid)
@@ -19,13 +24,13 @@ Feature: -c (--conf) option
19
24
  @sudo
20
25
  Scenario: -c option
21
26
  When I successfully run `trema run hello.rb -c trema.conf -d`
22
- And I run `sleep 5`
27
+ And sleep 5
23
28
  Then the file "Hello.log" should contain "Hello 0xabc!"
24
29
 
25
30
  @sudo
26
31
  Scenario: --conf option
27
32
  When I successfully run `trema run hello.rb --conf trema.conf -d`
28
- And I run `sleep 5`
33
+ And sleep 5
29
34
  Then the file "Hello.log" should contain "Hello 0xabc!"
30
35
 
31
36
  @sudo
@@ -3,7 +3,12 @@ Feature: -d (--daemonize) option
3
3
  -d (--daemonize) runs a controller as a daemon
4
4
 
5
5
  Background:
6
- Given a file named "null_controller.rb" with:
6
+ Given I set the environment variables to:
7
+ | variable | value |
8
+ | TREMA_LOG_DIR | . |
9
+ | TREMA_PID_DIR | . |
10
+ | TREMA_SOCKET_DIR | . |
11
+ And a file named "null_controller.rb" with:
7
12
  """ruby
8
13
  class NullController < Trema::Controller; end
9
14
  """
@@ -3,7 +3,11 @@ Feature: -L (--log_dir) option
3
3
  -L (--log_dir) option specifies the location to put log files
4
4
 
5
5
  Background:
6
- Given a file named "null_controller.rb" with:
6
+ Given I set the environment variables to:
7
+ | variable | value |
8
+ | TREMA_PID_DIR | . |
9
+ | TREMA_SOCKET_DIR | . |
10
+ And a file named "null_controller.rb" with:
7
11
  """ruby
8
12
  class NullController < Trema::Controller; end
9
13
  """
@@ -12,14 +16,14 @@ Feature: -L (--log_dir) option
12
16
  Scenario: -L option
13
17
  Given a directory named "log"
14
18
  When I successfully run `trema run null_controller.rb -L log -d`
15
- And I run `sleep 3`
19
+ And sleep 3
16
20
  Then a file named "log/NullController.log" should exist
17
21
 
18
22
  @sudo
19
23
  Scenario: --log_dir option
20
24
  Given a directory named "log"
21
25
  When I successfully run `trema run null_controller.rb --log_dir log -d`
22
- And I run `sleep 3`
26
+ And sleep 3
23
27
  Then a file named "log/NullController.log" should exist
24
28
 
25
29
  @sudo
@@ -1,6 +1,11 @@
1
1
  Feature: -l (--logging_level) option
2
2
  Background:
3
- Given a file named "hello.rb" with:
3
+ Given I set the environment variables to:
4
+ | variable | value |
5
+ | TREMA_LOG_DIR | . |
6
+ | TREMA_PID_DIR | . |
7
+ | TREMA_SOCKET_DIR | . |
8
+ And a file named "hello.rb" with:
4
9
  """ruby
5
10
  class Hello < Trema::Controller
6
11
  def start(_args)
@@ -17,7 +22,7 @@ Feature: -l (--logging_level) option
17
22
  @sudo
18
23
  Scenario: --logging_level debug
19
24
  When I run `trema run hello.rb --logging_level debug -d`
20
- And I run `sleep 3`
25
+ And sleep 3
21
26
  And the file "Hello.log" should contain "DEBUG -- : Konnichi Wa"
22
27
 
23
28
  @sudo
@@ -3,7 +3,12 @@ Feature: --openflow13 option
3
3
  Use --openflow13 option to enable OpenFlow 1.3
4
4
 
5
5
  Background:
6
- Given a file named "openflow_version.rb" with:
6
+ Given I set the environment variables to:
7
+ | variable | value |
8
+ | TREMA_LOG_DIR | . |
9
+ | TREMA_PID_DIR | . |
10
+ | TREMA_SOCKET_DIR | . |
11
+ And a file named "openflow_version.rb" with:
7
12
  """ruby
8
13
  class OpenflowVersion < Trema::Controller
9
14
  def switch_ready(dpid)
@@ -23,17 +28,17 @@ Feature: --openflow13 option
23
28
  @sudo
24
29
  Scenario: --openflow13 option
25
30
  When I successfully run `trema run openflow_version.rb --openflow13 -c trema.conf -d`
26
- And I run `sleep 5`
31
+ And sleep 5
27
32
  Then the file "OpenflowVersion.log" should contain "ofp_version = 4"
28
33
 
29
34
  @sudo
30
35
  Scenario: --no-openflow13 option
31
36
  When I successfully run `trema run openflow_version.rb --no-openflow13 -c trema.conf -d`
32
- And I run `sleep 5`
37
+ And sleep 5
33
38
  Then the file "OpenflowVersion.log" should contain "ofp_version = 1"
34
39
 
35
40
  @sudo
36
41
  Scenario: the default OpenFlow version is 1.0
37
42
  When I successfully run `trema run openflow_version.rb -c trema.conf -d`
38
- And I run `sleep 5`
43
+ And sleep 5
39
44
  Then the file "OpenflowVersion.log" should contain "ofp_version = 1"