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/bin/quality
CHANGED
data/bin/trema
CHANGED
|
@@ -19,16 +19,16 @@
|
|
|
19
19
|
#
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
$LOAD_PATH.unshift File.expand_path(
|
|
22
|
+
$LOAD_PATH.unshift File.expand_path(File.join File.dirname(__FILE__), '..', 'ruby')
|
|
23
23
|
|
|
24
|
-
require
|
|
25
|
-
require
|
|
24
|
+
require 'rubygems'
|
|
25
|
+
require 'bundler/setup'
|
|
26
26
|
|
|
27
|
-
require
|
|
28
|
-
require
|
|
29
|
-
require
|
|
30
|
-
require
|
|
31
|
-
require
|
|
27
|
+
require 'gli'
|
|
28
|
+
require 'trema/command'
|
|
29
|
+
require 'trema/util'
|
|
30
|
+
require 'trema/version'
|
|
31
|
+
require 'trema/default_openflow_channel_port'
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class BinTrema
|
|
@@ -38,34 +38,34 @@ class BinTrema
|
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def initialize
|
|
41
|
-
program_desc
|
|
41
|
+
program_desc 'Trema command-line tool'
|
|
42
42
|
|
|
43
43
|
|
|
44
|
-
desc
|
|
44
|
+
desc 'Displays the current runtime version'
|
|
45
45
|
version Trema::VERSION
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
desc
|
|
49
|
-
switch [
|
|
48
|
+
desc 'Be verbose'
|
|
49
|
+
switch [:v, :verbose], :negatable => false
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
desc
|
|
53
|
-
arg_name
|
|
52
|
+
desc 'Runs a trema application'
|
|
53
|
+
arg_name 'controller'
|
|
54
54
|
command :run do | c |
|
|
55
|
-
c.desc
|
|
56
|
-
c.switch [
|
|
55
|
+
c.desc 'Runs as a daemon'
|
|
56
|
+
c.switch [:d, :daemonize], :negatable => false
|
|
57
57
|
|
|
58
|
-
c.desc
|
|
59
|
-
c.switch [
|
|
58
|
+
c.desc 'Enables Trema wireshark plugin'
|
|
59
|
+
c.switch [:s, :tremashark], :negatable => false
|
|
60
60
|
|
|
61
61
|
c.desc "Overrides the default openflow channel port #{Trema::DEFAULT_OPENFLOW_CHANNEL_PORT}"
|
|
62
|
-
c.flag [
|
|
62
|
+
c.flag [:p, :port]
|
|
63
63
|
|
|
64
|
-
c.desc
|
|
65
|
-
c.flag [
|
|
64
|
+
c.desc 'Specifies emulated network configuration'
|
|
65
|
+
c.flag [:c, :conf]
|
|
66
66
|
|
|
67
|
-
c.desc
|
|
68
|
-
c.switch [
|
|
67
|
+
c.desc 'Disables initial flow cleanup for a connected switch'
|
|
68
|
+
c.switch [:r, :no_flow_cleanup], :negatable => false
|
|
69
69
|
|
|
70
70
|
c.action do | global_options, options, args |
|
|
71
71
|
trema_run options
|
|
@@ -73,11 +73,11 @@ class BinTrema
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
|
|
76
|
-
desc
|
|
77
|
-
arg_name
|
|
76
|
+
desc 'Terminates a trema process'
|
|
77
|
+
arg_name 'name'
|
|
78
78
|
command :kill do | c |
|
|
79
79
|
c.action do | global_options, options, args |
|
|
80
|
-
help_now!(
|
|
80
|
+
help_now!('name is required') if args.empty?
|
|
81
81
|
args.each do | each |
|
|
82
82
|
trema_kill each
|
|
83
83
|
end
|
|
@@ -85,16 +85,16 @@ class BinTrema
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
|
|
88
|
-
desc
|
|
89
|
-
arg_name
|
|
88
|
+
desc 'Starts a killed trema process again'
|
|
89
|
+
arg_name 'name'
|
|
90
90
|
command :up do | c |
|
|
91
91
|
c.action do | global_options, options, args |
|
|
92
|
-
trema_up args[ 0
|
|
92
|
+
trema_up args[ 0]
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
desc
|
|
97
|
+
desc 'Terminates all trema processes'
|
|
98
98
|
command :killall do | c |
|
|
99
99
|
c.action do
|
|
100
100
|
trema_killall
|
|
@@ -102,112 +102,112 @@ class BinTrema
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
|
|
105
|
-
desc
|
|
105
|
+
desc 'Sends UDP packets to destination host'
|
|
106
106
|
command :send_packets do | c |
|
|
107
|
-
c.desc
|
|
108
|
-
c.flag [
|
|
107
|
+
c.desc 'host that sends packets'
|
|
108
|
+
c.flag [:s, :source]
|
|
109
109
|
|
|
110
|
-
c.desc
|
|
111
|
-
c.flag [
|
|
110
|
+
c.desc 'host that receives packets'
|
|
111
|
+
c.flag [:d, :dest]
|
|
112
112
|
|
|
113
|
-
c.desc
|
|
113
|
+
c.desc 'number of times to increment the IP source address'
|
|
114
114
|
c.default_value nil
|
|
115
|
-
c.flag [
|
|
115
|
+
c.flag [:inc_ip_src]
|
|
116
116
|
|
|
117
|
-
c.desc
|
|
117
|
+
c.desc 'number of times to increment the IP destination address'
|
|
118
118
|
c.default_value nil
|
|
119
|
-
c.flag [
|
|
119
|
+
c.flag [:inc_ip_dst]
|
|
120
120
|
|
|
121
|
-
c.desc
|
|
122
|
-
c.flag [
|
|
121
|
+
c.desc 'set the initial UDP source port'
|
|
122
|
+
c.flag [:tp_src]
|
|
123
123
|
|
|
124
|
-
c.desc
|
|
124
|
+
c.desc 'number of times to increment the UDP source port'
|
|
125
125
|
c.default_value nil
|
|
126
|
-
c.flag [
|
|
126
|
+
c.flag [:inc_tp_src]
|
|
127
127
|
|
|
128
|
-
c.desc
|
|
129
|
-
c.flag [
|
|
128
|
+
c.desc 'set the initial UDP destination port'
|
|
129
|
+
c.flag [:tp_dst]
|
|
130
130
|
|
|
131
|
-
c.desc
|
|
131
|
+
c.desc 'number of times to increment the UDP destination port'
|
|
132
132
|
c.default_value nil
|
|
133
|
-
c.flag [
|
|
133
|
+
c.flag [:inc_tp_dst]
|
|
134
134
|
|
|
135
|
-
c.desc
|
|
136
|
-
c.flag [
|
|
135
|
+
c.desc 'send packet rate - packets per second'
|
|
136
|
+
c.flag [:pps]
|
|
137
137
|
|
|
138
|
-
c.desc
|
|
139
|
-
c.flag [
|
|
138
|
+
c.desc 'number of packets to send'
|
|
139
|
+
c.flag [:n_pkts]
|
|
140
140
|
|
|
141
|
-
c.desc
|
|
142
|
-
c.flag [
|
|
141
|
+
c.desc 'time duration to send packets'
|
|
142
|
+
c.flag [:duration]
|
|
143
143
|
|
|
144
|
-
c.desc
|
|
145
|
-
c.flag [
|
|
144
|
+
c.desc 'length of UDP payload'
|
|
145
|
+
c.flag [:length]
|
|
146
146
|
|
|
147
|
-
c.desc
|
|
147
|
+
c.desc 'increment UDP payload'
|
|
148
148
|
c.default_value nil
|
|
149
|
-
c.flag [
|
|
149
|
+
c.flag [:inc_payload]
|
|
150
150
|
|
|
151
151
|
c.action do | global_options, options, args |
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
fail '--source option is mandatory' if options[ :source].nil?
|
|
153
|
+
fail '--dest option is mandatory' if options[ :dest].nil?
|
|
154
154
|
|
|
155
|
-
trema_send_packets options[ :source
|
|
155
|
+
trema_send_packets options[ :source], options[ :dest], options
|
|
156
156
|
end
|
|
157
157
|
end
|
|
158
158
|
|
|
159
159
|
|
|
160
160
|
desc "Brings a switch's specified port up"
|
|
161
161
|
command :port_up do | c |
|
|
162
|
-
c.desc
|
|
163
|
-
c.flag [
|
|
162
|
+
c.desc 'switch name'
|
|
163
|
+
c.flag [:s, :switch]
|
|
164
164
|
|
|
165
|
-
c.desc
|
|
166
|
-
c.flag [
|
|
165
|
+
c.desc 'port'
|
|
166
|
+
c.flag [:p, :port]
|
|
167
167
|
|
|
168
168
|
c.action do | global_options, options, args |
|
|
169
|
-
|
|
170
|
-
|
|
169
|
+
fail '--switch option is mandatory' if options[ :switch].nil?
|
|
170
|
+
fail '--port option is mandatory' if options[ :port].nil?
|
|
171
171
|
|
|
172
|
-
trema_port_up options[ :switch
|
|
172
|
+
trema_port_up options[ :switch], options[ :port]
|
|
173
173
|
end
|
|
174
174
|
end
|
|
175
175
|
|
|
176
176
|
|
|
177
177
|
desc "Brings a switch's specified port down"
|
|
178
178
|
command :port_down do | c |
|
|
179
|
-
c.desc
|
|
180
|
-
c.flag [
|
|
179
|
+
c.desc 'switch name'
|
|
180
|
+
c.flag [:s, :switch]
|
|
181
181
|
|
|
182
|
-
c.desc
|
|
183
|
-
c.flag [
|
|
182
|
+
c.desc 'port'
|
|
183
|
+
c.flag [:p, :port]
|
|
184
184
|
|
|
185
185
|
c.action do | global_options, options, args |
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
fail '--switch option is mandatory' if options[ :switch].nil?
|
|
187
|
+
fail '--port option is mandatory' if options[ :port].nil?
|
|
188
188
|
|
|
189
|
-
trema_port_down options[ :switch
|
|
189
|
+
trema_port_down options[ :switch], options[ :port]
|
|
190
190
|
end
|
|
191
191
|
end
|
|
192
192
|
|
|
193
193
|
|
|
194
|
-
desc
|
|
195
|
-
arg_name
|
|
194
|
+
desc 'Shows stats of packets'
|
|
195
|
+
arg_name 'host'
|
|
196
196
|
command :show_stats do | c |
|
|
197
|
-
c.desc
|
|
198
|
-
c.switch [
|
|
199
|
-
c.desc
|
|
200
|
-
c.switch [
|
|
197
|
+
c.desc 'Show stats of packets sent'
|
|
198
|
+
c.switch [:t, :tx], :negatable => false
|
|
199
|
+
c.desc 'Show stats of packets received'
|
|
200
|
+
c.switch [:r, :rx], :negatable => false
|
|
201
201
|
|
|
202
202
|
c.action do | global_options, options, args |
|
|
203
|
-
help_now!(
|
|
204
|
-
trema_show_stats args[ 0
|
|
203
|
+
help_now!('host is required') if args.empty?
|
|
204
|
+
trema_show_stats args[ 0], options[ :tx], options[ :rx]
|
|
205
205
|
end
|
|
206
206
|
end
|
|
207
207
|
|
|
208
208
|
|
|
209
|
-
desc
|
|
210
|
-
arg_name
|
|
209
|
+
desc 'Resets stats of packets'
|
|
210
|
+
arg_name 'hosts...'
|
|
211
211
|
command :reset_stats do | c |
|
|
212
212
|
c.action do | global_options, options, args |
|
|
213
213
|
hosts = args
|
|
@@ -221,21 +221,21 @@ class BinTrema
|
|
|
221
221
|
end
|
|
222
222
|
|
|
223
223
|
|
|
224
|
-
desc
|
|
225
|
-
arg_name
|
|
224
|
+
desc 'Print all flow entries'
|
|
225
|
+
arg_name 'switches...'
|
|
226
226
|
command :dump_flows do | c |
|
|
227
227
|
c.action do | global_options, options, args |
|
|
228
|
-
help_now!(
|
|
228
|
+
help_now!('switches is required') if args.empty?
|
|
229
229
|
trema_dump_flows args
|
|
230
230
|
end
|
|
231
231
|
end
|
|
232
232
|
|
|
233
233
|
|
|
234
|
-
desc
|
|
235
|
-
arg_name
|
|
234
|
+
desc 'Opens a new shell in the specified network namespace'
|
|
235
|
+
arg_name 'name'
|
|
236
236
|
command :netns do | c |
|
|
237
237
|
c.action do | global_options, options, args |
|
|
238
|
-
trema_netns args[ 0
|
|
238
|
+
trema_netns args[ 0]
|
|
239
239
|
end
|
|
240
240
|
end
|
|
241
241
|
|
|
@@ -248,7 +248,7 @@ class BinTrema
|
|
|
248
248
|
end
|
|
249
249
|
|
|
250
250
|
|
|
251
|
-
desc
|
|
251
|
+
desc 'Displays the current runtime version'
|
|
252
252
|
command :version do | c |
|
|
253
253
|
c.action do
|
|
254
254
|
trema_version
|
|
@@ -260,18 +260,18 @@ class BinTrema
|
|
|
260
260
|
|
|
261
261
|
|
|
262
262
|
pre do | global, command, options, args |
|
|
263
|
-
$verbose = global[ :verbose
|
|
263
|
+
$verbose = global[ :verbose]
|
|
264
264
|
|
|
265
|
-
if global[ :version
|
|
265
|
+
if global[ :version]
|
|
266
266
|
trema_version
|
|
267
267
|
exit_now! nil, 0
|
|
268
268
|
end
|
|
269
269
|
|
|
270
270
|
assert_trema_is_built
|
|
271
271
|
|
|
272
|
-
if FileTest.exist?(
|
|
272
|
+
if FileTest.exist?(Trema.tmp) && !FileTest.writable?(Trema.tmp)
|
|
273
273
|
# Trema is system widely installed with gem command
|
|
274
|
-
sh "sudo chmod
|
|
274
|
+
sh "sudo chmod a+w -R #{ Trema.tmp }"
|
|
275
275
|
end
|
|
276
276
|
|
|
277
277
|
FileUtils.mkdir_p Trema.log
|
|
@@ -290,21 +290,19 @@ class BinTrema
|
|
|
290
290
|
end
|
|
291
291
|
|
|
292
292
|
|
|
293
|
-
def start
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
puts each
|
|
300
|
-
end
|
|
301
|
-
exit
|
|
293
|
+
def start(argv)
|
|
294
|
+
run argv
|
|
295
|
+
rescue
|
|
296
|
+
puts $!
|
|
297
|
+
$!.backtrace.each do | each |
|
|
298
|
+
puts each
|
|
302
299
|
end
|
|
300
|
+
exit
|
|
303
301
|
end
|
|
304
302
|
end
|
|
305
303
|
|
|
306
304
|
|
|
307
|
-
exit BinTrema.new.start(
|
|
305
|
+
exit BinTrema.new.start(ARGV)
|
|
308
306
|
|
|
309
307
|
|
|
310
308
|
### Local variables:
|
data/bin/trema-config
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
#
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
$LOAD_PATH.unshift(
|
|
22
|
+
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../ruby'))
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
require
|
|
26
|
-
require
|
|
27
|
-
require
|
|
25
|
+
require 'fileutils'
|
|
26
|
+
require 'optparse'
|
|
27
|
+
require 'trema/path'
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
$opts = OptionParser.new
|
|
@@ -32,10 +32,10 @@ $opts = OptionParser.new
|
|
|
32
32
|
FileUtils.cd Trema.home do
|
|
33
33
|
$opts.banner = "Usage: #{ File.basename $0 } [OPTIONS ...]"
|
|
34
34
|
|
|
35
|
-
$opts.on(
|
|
35
|
+
$opts.on('-c', '--cflags') do
|
|
36
36
|
$cflags = true
|
|
37
37
|
end
|
|
38
|
-
$opts.on(
|
|
38
|
+
$opts.on('-l', '--libs') do
|
|
39
39
|
$libs = true
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -48,7 +48,7 @@ FileUtils.cd Trema.home do
|
|
|
48
48
|
if $libs
|
|
49
49
|
output << "-L#{ Trema.objects }/lib -ltrema -lrt -lpthread -lsqlite3 -ldl"
|
|
50
50
|
end
|
|
51
|
-
print output.join(
|
|
51
|
+
print output.join(' ')
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
|
data/build.rb
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
#
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
Dir.chdir File.dirname(
|
|
23
|
-
result = system(
|
|
22
|
+
Dir.chdir File.dirname(__FILE__) do
|
|
23
|
+
result = system("bundle exec rake #{ ARGV.join ' ' }")
|
|
24
24
|
abort "#{ $0 } aborted!" unless result
|
|
25
25
|
end
|
|
26
26
|
|
data/cruise.rb
CHANGED
|
@@ -31,18 +31,16 @@ $coverage_threshold = 70.1
|
|
|
31
31
|
# Load libraries
|
|
32
32
|
################################################################################
|
|
33
33
|
|
|
34
|
-
$LOAD_PATH.unshift(
|
|
34
|
+
$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/ruby'))
|
|
35
35
|
|
|
36
|
-
require
|
|
37
|
-
|
|
38
|
-
require
|
|
39
|
-
require
|
|
40
|
-
require
|
|
41
|
-
require
|
|
42
|
-
require
|
|
43
|
-
require
|
|
44
|
-
require "sub-process"
|
|
45
|
-
require "trema/path"
|
|
36
|
+
require 'English'
|
|
37
|
+
require 'blocker'
|
|
38
|
+
require 'fileutils'
|
|
39
|
+
require 'find'
|
|
40
|
+
require 'optparse'
|
|
41
|
+
require 'stringio'
|
|
42
|
+
require 'sub-process'
|
|
43
|
+
require 'trema/path'
|
|
46
44
|
|
|
47
45
|
|
|
48
46
|
include FileUtils
|
|
@@ -53,18 +51,18 @@ include FileUtils
|
|
|
53
51
|
################################################################################
|
|
54
52
|
|
|
55
53
|
def path_string
|
|
56
|
-
paths = ENV[
|
|
57
|
-
paths << Gem::bindir unless paths.include?(
|
|
58
|
-
paths.join
|
|
54
|
+
paths = ENV[ 'PATH'].split(':')
|
|
55
|
+
paths << Gem::bindir unless paths.include?(Gem::bindir)
|
|
56
|
+
paths.join ':'
|
|
59
57
|
end
|
|
60
58
|
|
|
61
59
|
|
|
62
|
-
def sh
|
|
63
|
-
ENV[
|
|
64
|
-
ENV[
|
|
60
|
+
def sh(cmd)
|
|
61
|
+
ENV[ 'LC_ALL'] = 'C'
|
|
62
|
+
ENV[ 'PATH'] = path_string
|
|
65
63
|
puts cmd if $verbose
|
|
66
|
-
unless system(
|
|
67
|
-
|
|
64
|
+
unless system(cmd)
|
|
65
|
+
fail "Command '#{ cmd }' failed!"
|
|
68
66
|
end
|
|
69
67
|
end
|
|
70
68
|
|
|
@@ -81,7 +79,7 @@ class Testee
|
|
|
81
79
|
attr_writer :lines
|
|
82
80
|
|
|
83
81
|
|
|
84
|
-
def initialize
|
|
82
|
+
def initialize(path)
|
|
85
83
|
@path = path
|
|
86
84
|
@lines = 0
|
|
87
85
|
@coverage = 0.0
|
|
@@ -89,7 +87,7 @@ class Testee
|
|
|
89
87
|
|
|
90
88
|
|
|
91
89
|
def name
|
|
92
|
-
File.basename(
|
|
90
|
+
File.basename(@path)
|
|
93
91
|
end
|
|
94
92
|
|
|
95
93
|
|
|
@@ -98,15 +96,15 @@ class Testee
|
|
|
98
96
|
|
|
99
97
|
n = 0
|
|
100
98
|
in_comment = false
|
|
101
|
-
File.open(
|
|
102
|
-
next if /^\s
|
|
103
|
-
next if /^\s
|
|
104
|
-
next if /^\s
|
|
105
|
-
if /^\s
|
|
99
|
+
File.open(@path, 'r').each_line do | l |
|
|
100
|
+
next if /^\s+\/\// =~ l # comments starting with //
|
|
101
|
+
next if /^\s*$/ =~ l # empty lines
|
|
102
|
+
next if /^\s*\/\*.*\*\// =~ l # /* ... */
|
|
103
|
+
if /^\s*\/\*/ =~ l # /*
|
|
106
104
|
in_comment = true
|
|
107
105
|
next
|
|
108
106
|
end
|
|
109
|
-
if /^\s
|
|
107
|
+
if /^\s*\*\// =~ l # */
|
|
110
108
|
in_comment = false
|
|
111
109
|
next
|
|
112
110
|
end
|
|
@@ -122,14 +120,14 @@ class Testee
|
|
|
122
120
|
end
|
|
123
121
|
|
|
124
122
|
|
|
125
|
-
def coverage=
|
|
123
|
+
def coverage=(value)
|
|
126
124
|
if value > @coverage
|
|
127
125
|
@coverage = value
|
|
128
126
|
end
|
|
129
127
|
end
|
|
130
128
|
|
|
131
129
|
|
|
132
|
-
def <=>
|
|
130
|
+
def <=>(other)
|
|
133
131
|
@name <=> other.name
|
|
134
132
|
end
|
|
135
133
|
end
|
|
@@ -137,7 +135,7 @@ end
|
|
|
137
135
|
|
|
138
136
|
def testees
|
|
139
137
|
$c_files.delete_if do | key, value |
|
|
140
|
-
File.basename(
|
|
138
|
+
File.basename(key) == 'trema_wrapper.c'
|
|
141
139
|
end
|
|
142
140
|
end
|
|
143
141
|
|
|
@@ -155,38 +153,38 @@ end
|
|
|
155
153
|
|
|
156
154
|
|
|
157
155
|
def lines_total
|
|
158
|
-
testees.values.inject(
|
|
156
|
+
testees.values.inject(0) do | r, each |
|
|
159
157
|
r += each.lines
|
|
160
158
|
end
|
|
161
159
|
end
|
|
162
160
|
|
|
163
161
|
|
|
164
162
|
def lines_tested
|
|
165
|
-
testees.values.inject(
|
|
163
|
+
testees.values.inject(0) do | r, each |
|
|
166
164
|
r += each.lines_tested
|
|
167
165
|
end
|
|
168
166
|
end
|
|
169
167
|
|
|
170
168
|
|
|
171
169
|
def coverage
|
|
172
|
-
sprintf(
|
|
170
|
+
sprintf('%3.1f', lines_tested / lines_total * 100.0).to_f
|
|
173
171
|
end
|
|
174
172
|
|
|
175
173
|
|
|
176
174
|
def diff_coverage_threshold
|
|
177
|
-
sprintf(
|
|
175
|
+
sprintf('%3.1f', ( $coverage_threshold - coverage).abs).to_f
|
|
178
176
|
end
|
|
179
177
|
|
|
180
178
|
|
|
181
|
-
def gcov
|
|
179
|
+
def gcov(gcda, dir)
|
|
182
180
|
file = nil
|
|
183
181
|
|
|
184
182
|
cmd = "gcov #{ gcda } -o #{ dir } -n"
|
|
185
183
|
SubProcess.create do | shell |
|
|
186
184
|
shell.on_stdout do | l |
|
|
187
|
-
file = File.expand_path(
|
|
188
|
-
testee = $c_files[ file
|
|
189
|
-
if /^Lines executed:(.*)% of (.*)
|
|
185
|
+
file = File.expand_path($1) if /^File '(.*)'/ =~ l
|
|
186
|
+
testee = $c_files[ file]
|
|
187
|
+
if /^Lines executed:(.*)% of (.*)$/ =~ l && testee
|
|
190
188
|
testee.coverage = $1.to_f
|
|
191
189
|
testee.lines = $2.to_i
|
|
192
190
|
end
|
|
@@ -195,7 +193,7 @@ def gcov gcda, dir
|
|
|
195
193
|
$stderr.puts l
|
|
196
194
|
end
|
|
197
195
|
shell.on_failure do
|
|
198
|
-
|
|
196
|
+
fail "'#{ cmd }' failed."
|
|
199
197
|
end
|
|
200
198
|
shell.exec cmd
|
|
201
199
|
end
|
|
@@ -203,17 +201,17 @@ end
|
|
|
203
201
|
|
|
204
202
|
|
|
205
203
|
def measure_coverage
|
|
206
|
-
Find.find(
|
|
207
|
-
if /\.c
|
|
208
|
-
path = File.expand_path(
|
|
209
|
-
$c_files[ path
|
|
204
|
+
Find.find('src/lib', 'src/packetin_filter', 'src/switch_manager', 'src/tremashark', 'unittests') do | f |
|
|
205
|
+
if /\.c$/ =~ f
|
|
206
|
+
path = File.expand_path(f)
|
|
207
|
+
$c_files[ path] = Testee.new(path)
|
|
210
208
|
end
|
|
211
209
|
end
|
|
212
|
-
Dir.glob(
|
|
213
|
-
gcov each,
|
|
210
|
+
Dir.glob('unittests/objects/*.gcda').each do | each |
|
|
211
|
+
gcov each, 'unittests/objects'
|
|
214
212
|
end
|
|
215
|
-
Dir.glob(
|
|
216
|
-
gcov each,
|
|
213
|
+
Dir.glob('objects/unittests/*.gcda').each do | each |
|
|
214
|
+
gcov each, 'objects/unittests'
|
|
217
215
|
end
|
|
218
216
|
end
|
|
219
217
|
|
|
@@ -222,8 +220,8 @@ end
|
|
|
222
220
|
# Summaries
|
|
223
221
|
################################################################################
|
|
224
222
|
|
|
225
|
-
def banner
|
|
226
|
-
|
|
223
|
+
def banner(message)
|
|
224
|
+
<<-EOF
|
|
227
225
|
#{ message }
|
|
228
226
|
================================================================================
|
|
229
227
|
EOF
|
|
@@ -242,8 +240,8 @@ end
|
|
|
242
240
|
|
|
243
241
|
|
|
244
242
|
def coverage_threshold_error
|
|
245
|
-
|
|
246
|
-
#{ banner(
|
|
243
|
+
<<-EOF
|
|
244
|
+
#{ banner('ERROR') }
|
|
247
245
|
Oops...
|
|
248
246
|
Overall coverage DECREASED to #{ coverage }% !!!
|
|
249
247
|
|
|
@@ -253,8 +251,8 @@ end
|
|
|
253
251
|
|
|
254
252
|
|
|
255
253
|
def update_coverage_threshold_message
|
|
256
|
-
|
|
257
|
-
#{ banner(
|
|
254
|
+
<<-EOF
|
|
255
|
+
#{ banner('WARNING') }
|
|
258
256
|
Congratulations !
|
|
259
257
|
Overall coverage INCREASED to #{ coverage }% !
|
|
260
258
|
|
|
@@ -274,24 +272,26 @@ def show_summary
|
|
|
274
272
|
puts <<-EOF
|
|
275
273
|
|
|
276
274
|
|
|
277
|
-
#{ banner(
|
|
275
|
+
#{ banner('Coverage details') }
|
|
278
276
|
#{ coverage_ranking }
|
|
279
277
|
|
|
280
|
-
#{ banner(
|
|
281
|
-
- Total execution time = #{ ( Time.now - $start_time
|
|
278
|
+
#{ banner('Summary') }
|
|
279
|
+
- Total execution time = #{ ( Time.now - $start_time).to_i } seconds
|
|
282
280
|
- Overall coverage = #{ coverage }% (#{ files_not_tested.size }/#{ testees.size } files not yet tested)
|
|
283
281
|
|
|
284
282
|
|
|
285
283
|
EOF
|
|
286
284
|
|
|
287
|
-
if (
|
|
285
|
+
if (coverage < $coverage_threshold) && ( diff_coverage_threshold > delta_coverage_threshold)
|
|
288
286
|
puts coverage_threshold_error
|
|
289
|
-
puts
|
|
290
|
-
|
|
291
|
-
|
|
287
|
+
puts
|
|
288
|
+
puts
|
|
289
|
+
exit(-1)
|
|
290
|
+
elsif (coverage > $coverage_threshold) && ( diff_coverage_threshold > delta_coverage_threshold)
|
|
292
291
|
puts update_coverage_threshold_message
|
|
293
|
-
puts
|
|
294
|
-
|
|
292
|
+
puts
|
|
293
|
+
puts
|
|
294
|
+
exit(-1)
|
|
295
295
|
end
|
|
296
296
|
end
|
|
297
297
|
|
|
@@ -300,31 +300,44 @@ end
|
|
|
300
300
|
# Tests
|
|
301
301
|
################################################################################
|
|
302
302
|
|
|
303
|
-
def test
|
|
303
|
+
def test(message)
|
|
304
304
|
puts message
|
|
305
305
|
cd Trema.home do
|
|
306
|
-
sh
|
|
306
|
+
sh 'bundle exec rake clean'
|
|
307
307
|
begin
|
|
308
308
|
yield
|
|
309
309
|
ensure
|
|
310
|
-
sh
|
|
310
|
+
sh './trema killall' rescue nil
|
|
311
311
|
end
|
|
312
312
|
end
|
|
313
313
|
end
|
|
314
314
|
|
|
315
315
|
|
|
316
|
-
def
|
|
317
|
-
test
|
|
318
|
-
sh
|
|
319
|
-
sh "bundle exec rake spec"
|
|
316
|
+
def run_unit_tests
|
|
317
|
+
test 'Running unit tests ...' do
|
|
318
|
+
sh 'bundle exec rake unittests'
|
|
320
319
|
end
|
|
321
320
|
measure_coverage
|
|
322
321
|
end
|
|
323
322
|
|
|
324
323
|
|
|
325
|
-
def
|
|
326
|
-
test
|
|
327
|
-
sh
|
|
324
|
+
def run_rspec
|
|
325
|
+
test 'Running rspec ...' do
|
|
326
|
+
sh 'bundle exec rake spec'
|
|
327
|
+
end
|
|
328
|
+
measure_coverage
|
|
329
|
+
end
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def run_ruby_acceptance_tests
|
|
333
|
+
test 'Running acceptance tests ...' do
|
|
334
|
+
sh 'bundle exec rake features'
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
def run_all_acceptance_tests
|
|
339
|
+
test 'Running acceptance tests ...' do
|
|
340
|
+
sh 'bundle exec rake features:all'
|
|
328
341
|
end
|
|
329
342
|
end
|
|
330
343
|
|
|
@@ -335,22 +348,26 @@ end
|
|
|
335
348
|
|
|
336
349
|
$options = OptionParser.new
|
|
337
350
|
|
|
338
|
-
$options.on(
|
|
351
|
+
$options.on('-u', '--unit-test-only') do
|
|
339
352
|
$unit_test_only = true
|
|
340
353
|
end
|
|
341
354
|
|
|
342
|
-
$options.on(
|
|
355
|
+
$options.on('-a', '--acceptance-test-only') do
|
|
343
356
|
$acceptance_test_only = true
|
|
344
357
|
end
|
|
345
358
|
|
|
346
|
-
$options.
|
|
359
|
+
$options.on('-A', '--all') do
|
|
360
|
+
$all = true
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
$options.separator ''
|
|
347
364
|
|
|
348
|
-
$options.on(
|
|
365
|
+
$options.on('-h', '--help') do
|
|
349
366
|
puts $options.to_s
|
|
350
367
|
exit
|
|
351
368
|
end
|
|
352
369
|
|
|
353
|
-
$options.on(
|
|
370
|
+
$options.on('-v', '--verbose') do
|
|
354
371
|
$verbose = true
|
|
355
372
|
end
|
|
356
373
|
|
|
@@ -359,9 +376,9 @@ $options.parse! ARGV
|
|
|
359
376
|
|
|
360
377
|
def init_cruise
|
|
361
378
|
FileUtils.rm_f File.expand_path(File.join(File.dirname(__FILE__), 'Gemfile.lock'))
|
|
362
|
-
sh
|
|
363
|
-
sh
|
|
364
|
-
sh
|
|
379
|
+
sh 'bundle install'
|
|
380
|
+
sh 'bundle update'
|
|
381
|
+
sh 'bundle exec rake clobber'
|
|
365
382
|
end
|
|
366
383
|
|
|
367
384
|
|
|
@@ -369,9 +386,18 @@ Blocker.start do
|
|
|
369
386
|
$start_time = Time.now
|
|
370
387
|
cd Trema.home do
|
|
371
388
|
init_cruise
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
389
|
+
unless $acceptance_test_only
|
|
390
|
+
run_unit_tests if $all
|
|
391
|
+
run_rspec
|
|
392
|
+
end
|
|
393
|
+
unless $unit_test_only
|
|
394
|
+
if $all
|
|
395
|
+
run_all_acceptance_tests
|
|
396
|
+
else
|
|
397
|
+
run_ruby_acceptance_tests
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
show_summary if ((not $acceptance_test_only) && $all)
|
|
375
401
|
end
|
|
376
402
|
end
|
|
377
403
|
|