phut 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fad4e339b0567eea737186ddc07e11e497cbe39
4
- data.tar.gz: d02b67ed0f66b6996d3d6f0d2145ab101f12e71b
3
+ metadata.gz: c4f3795a4ddd93016e7806acc680a6965fba9326
4
+ data.tar.gz: 85718cdee25a39e9c98459b130905424e82ca650
5
5
  SHA512:
6
- metadata.gz: 737c98a5b5ca84e1eefb335ae109a7f000e370216dc48aca7070e84bacfaab65cc2eb51357110fae28fca43fb34877de72571782303cd1ae92b30386b90b3e37
7
- data.tar.gz: 5b8c95ba65bcea39de90f4d93866b8bf79e6b2ac1d979aaba6247ea705676015826c7d0801a9501a947c5c9aeb70465cf12f672521b612414781384e9c09bd2f
6
+ metadata.gz: 168f91c85e0689c8748c78c85d884772a31e3b03292284d6e641c5f776b0a0ddd013cec6c9d8a985df9b529aee489fee71f9fe79f59972971f6aefbb6fd20fcc
7
+ data.tar.gz: e6e37c6265e7061bc2f5cb50410d8a7f8c438e7be62cb642719d00e242d5e1d9444aad60491c57c6eb6c4c45adf804c8bccb24b0d1ecca224d6b6690012a3850
data/.travis.yml CHANGED
@@ -12,8 +12,6 @@ rvm:
12
12
 
13
13
  before_install:
14
14
  - gem update bundler
15
- - sudo apt-get update -qq
16
- - sudo apt-get install libpcap-dev -qq
17
15
 
18
16
  matrix:
19
17
  allow_failures:
data/CHANGELOG.md CHANGED
@@ -3,6 +3,11 @@
3
3
  ## develop (unreleased)
4
4
 
5
5
 
6
+ ## 0.3.0 (3/17/2015)
7
+ ### Changes
8
+ * [#20](https://github.com/trema/phut/pull/20): Use apt installed version of Open vSwitch.
9
+
10
+
6
11
  ## 0.2.4 (3/12/2015)
7
12
  ### Misc
8
13
  * Pio 0.18.2.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
2
2
 
3
3
  require 'rake/clean'
4
4
 
5
- task default: :openvswitch
5
+ task default: :test
6
6
  task test: [:spec, :cucumber, :quality]
7
7
  task quality: [:rubocop, :reek, :flog]
8
8
  task travis: [:spec, 'cucumber:travis', :quality]
data/bin/phut CHANGED
@@ -38,6 +38,9 @@ module Phut
38
38
  Pry::Commands.block_command 'vswitch' do |dpid|
39
39
  Phut::OpenVswitch.new(dpid).run
40
40
  end
41
+ Pry::Commands.block_command 'dump_flows' do |dpid|
42
+ puts Phut::OpenVswitch.new(dpid).dump_flows
43
+ end
41
44
  Pry::Commands.block_command 'kill' do |dpid|
42
45
  Phut::OpenVswitch.new(dpid).shutdown
43
46
  end
@@ -6,7 +6,7 @@ Feature: The vswitch DSL directive.
6
6
  vswitch { dpid '0xabc' }
7
7
  """
8
8
  When I do phut run "network.conf"
9
- Then a vswitch named "0xabc" launches
9
+ Then a vswitch named "0xabc" should be running
10
10
 
11
11
  @sudo
12
12
  Scenario: phut run with "vswitch { dpid NUMBER }"
@@ -15,7 +15,7 @@ Feature: The vswitch DSL directive.
15
15
  vswitch { dpid 0xabc }
16
16
  """
17
17
  When I do phut run "network.conf"
18
- Then a vswitch named "0xabc" launches
18
+ Then a vswitch named "0xabc" should be running
19
19
 
20
20
  @sudo
21
21
  Scenario: phut run with "vswitch { datapath_id STRING }"
@@ -24,7 +24,7 @@ Feature: The vswitch DSL directive.
24
24
  vswitch { datapath_id '0xabc' }
25
25
  """
26
26
  When I do phut run "network.conf"
27
- Then a vswitch named "0xabc" launches
27
+ Then a vswitch named "0xabc" should be running
28
28
 
29
29
  @sudo
30
30
  Scenario: phut run with "vswitch { datapath_id NUMBER }"
@@ -33,7 +33,7 @@ Feature: The vswitch DSL directive.
33
33
  vswitch { datapath_id 0xabc }
34
34
  """
35
35
  When I do phut run "network.conf"
36
- Then a vswitch named "0xabc" launches
36
+ Then a vswitch named "0xabc" should be running
37
37
 
38
38
  @sudo
39
39
  Scenario: phut run with "vswitch(alias) { ... }"
@@ -42,4 +42,4 @@ Feature: The vswitch DSL directive.
42
42
  vswitch('my_switch') { datapath_id '0xabc' }
43
43
  """
44
44
  When I do phut run "network.conf"
45
- Then a vswitch named "my_switch" launches
45
+ Then a vswitch named "my_switch" should be running
@@ -1,5 +1,4 @@
1
1
  Feature: phut command
2
-
3
2
  Scenario: phut --version
4
3
  When I successfully run `phut --version`
5
4
  Then the output should match /\d+\.\d+\.\d+/
@@ -1,37 +1,43 @@
1
1
  Feature: Shell
2
2
  Background:
3
3
  Given I run `phut -v` interactively
4
- And I type "pid_dir '.'"
5
- And I type "log_dir '.'"
6
- And I type "socket_dir '.'"
4
+ And I wait for stdout to contain "phut>"
7
5
 
8
6
  @shell
9
7
  Scenario: vswitch NUMBER
10
8
  When I type "vswitch 0xabc"
11
9
  And I type "quit"
12
- Then a file named "open_vswitch.0xabc.pid" should exist
13
- And a file named "open_vswitch.0xabc.log" should exist
10
+ And I run `sleep 1`
11
+ Then a vswitch named "0xabc" should be running
14
12
 
15
13
  @shell
16
14
  Scenario: vswitch STRING
17
15
  When I type "vswitch '0xabc'"
18
16
  And I type "quit"
19
- Then a file named "open_vswitch.0xabc.pid" should exist
20
- And a file named "open_vswitch.0xabc.log" should exist
17
+ And I run `sleep 1`
18
+ Then a vswitch named "0xabc" should be running
19
+
20
+ @shell
21
+ Scenario: dump_flows
22
+ Given I type "vswitch '0xabc'"
23
+ When I type "dump_flows 0xabc"
24
+ And I type "quit"
25
+ And I run `sleep 1`
26
+ Then the output should contain "NXST_FLOW reply"
21
27
 
22
28
  @shell
23
29
  Scenario: vswitch twice and fail
24
30
  And I type "vswitch 0xabc"
25
31
  When I type "vswitch 0xabc"
26
32
  And I type "quit"
27
- Then the output should contain "already running!"
33
+ Then the output should contain "Open vSwitch (dpid = 0xabc) is already running!"
28
34
 
29
35
  @shell
30
36
  Scenario: Kill and .pid is deleted
31
37
  And I type "vswitch 0xabc"
32
38
  When I type "kill 0xabc"
33
39
  And I type "quit"
34
- Then a file named "open_vswitch.0xabc.pid" should not exist
40
+ Then a vswitch named "0xabc" should not be running
35
41
 
36
42
  @shell
37
43
  Scenario: Kill without run and fail
@@ -6,11 +6,12 @@ When(/^I do phut run "(.*?)"$/) do |file_name|
6
6
  step %(I run `phut -v run #{run_opts} #{@config_file}`)
7
7
  end
8
8
 
9
- Then(/^a vswitch named "(.*?)" launches$/) do |name|
10
- in_current_dir do
11
- pid_file = File.join(File.expand_path(@pid_dir), "open_vswitch.#{name}.pid")
12
- step %(a file named "#{pid_file}" should exist)
13
- end
9
+ Then(/^a vswitch named "(.*?)" should be running$/) do |name|
10
+ expect(system("sudo ovs-vsctl br-exists #{name}")).to be(true)
11
+ end
12
+
13
+ Then(/^a vswitch named "(.*?)" should not be running$/) do |name|
14
+ expect(system("sudo ovs-vsctl br-exists #{name}")).to be(false)
14
15
  end
15
16
 
16
17
  Then(/^a vhost named "(.*?)" launches$/) do |name|
@@ -11,10 +11,6 @@ Before('@sudo') do
11
11
  @aruba_timeout_seconds = 10
12
12
  end
13
13
 
14
- Before('@shell') do
15
- fail 'sudo authentication failed' unless system 'sudo -v'
16
- end
17
-
18
14
  After('@sudo') do
19
15
  in_current_dir do
20
16
  Phut.pid_dir = @pid_dir
@@ -24,11 +20,12 @@ After('@sudo') do
24
20
  end
25
21
  end
26
22
 
23
+ Before('@shell') do
24
+ fail 'sudo authentication failed' unless system 'sudo -v'
25
+ end
26
+
27
27
  After('@shell') do
28
- in_current_dir do
29
- Dir.glob(File.join(Dir.getwd, '*.pid')).each do |each|
30
- pid = IO.read(each).to_i
31
- run "sudo kill #{pid}"
32
- end
28
+ `sudo ovs-vsctl list-br`.split("\n").each do |each|
29
+ run "sudo ovs-vsctl del-br #{each}"
33
30
  end
34
31
  end
@@ -28,8 +28,8 @@ module Phut
28
28
 
29
29
  def run
30
30
  links.each(&:run)
31
- vswitches.each(&:run)
32
31
  vhosts.each { |each| each.run vhosts }
32
+ vswitches.each(&:run)
33
33
  end
34
34
 
35
35
  def stop
@@ -7,11 +7,6 @@ module Phut
7
7
  class OpenVswitch
8
8
  include ShellRunner
9
9
 
10
- OPENFLOWD =
11
- "#{Phut.root}/vendor/openvswitch-1.2.2.trema1/tests/test-openflowd"
12
- OFCTL =
13
- "#{Phut.root}/vendor/openvswitch-1.2.2.trema1/utilities/ovs-ofctl"
14
-
15
10
  attr_reader :dpid
16
11
  alias_method :datapath_id, :dpid
17
12
  attr_writer :interfaces
@@ -31,17 +26,25 @@ module Phut
31
26
  "vswitch (name = #{name}, dpid = #{format('%#x', @dpid)})"
32
27
  end
33
28
 
29
+ # rubocop:disable AbcSize
34
30
  def run
35
- sh "sudo #{OPENFLOWD} #{options.join ' '}"
31
+ sh "sudo ovs-vsctl add-br #{name}"
32
+ sh "sudo /sbin/sysctl -w net.ipv6.conf.#{name}.disable_ipv6=1 -q"
33
+ @interfaces.each { |each| sh "sudo ovs-vsctl add-port #{name} #{each}" }
34
+ sh "sudo ovs-vsctl set-controller #{name} tcp:127.0.0.1:6633"\
35
+ " -- set controller #{name} connection-mode=out-of-band"
36
+ sh "sudo ovs-vsctl set bridge #{name} protocols=OpenFlow10" \
37
+ " other-config:datapath-id=#{dpid_zero_filled}"
38
+ sh "sudo ovs-vsctl set-fail-mode #{name} secure"
36
39
  rescue
37
40
  raise "Open vSwitch (dpid = #{@dpid}) is already running!"
38
41
  end
39
42
  alias_method :start, :run
43
+ # rubocop:enable AbcSize
40
44
 
41
45
  def stop
42
46
  fail "Open vSwitch (dpid = #{@dpid}) is not running!" unless running?
43
- pid = IO.read(pid_file).chomp
44
- sh "sudo kill #{pid}"
47
+ sh "sudo ovs-vsctl del-br #{name}"
45
48
  end
46
49
  alias_method :shutdown, :stop
47
50
 
@@ -51,19 +54,19 @@ module Phut
51
54
  end
52
55
 
53
56
  def bring_port_up(port_number)
54
- sh "sudo #{OFCTL} mod-port #{network_device} #{port_number} up"
57
+ sh "sudo ovs-ofctl mod-port #{name} #{port_number} up"
55
58
  end
56
59
 
57
60
  def bring_port_down(port_number)
58
- sh "sudo #{OFCTL} mod-port #{network_device} #{port_number} down"
61
+ sh "sudo ovs-ofctl mod-port #{name} #{port_number} down"
59
62
  end
60
63
 
61
64
  def dump_flows
62
- `sudo #{OFCTL} dump-flows #{network_device}`
65
+ `sudo ovs-ofctl dump-flows #{name}`
63
66
  end
64
67
 
65
68
  def running?
66
- FileTest.exists?(pid_file)
69
+ system "sudo ovs-vsctl br-exists #{name}"
67
70
  end
68
71
 
69
72
  private
@@ -73,44 +76,13 @@ module Phut
73
76
  start
74
77
  end
75
78
 
76
- def pid_file
77
- "#{Phut.pid_dir}/open_vswitch.#{name}.pid"
78
- end
79
-
80
79
  def network_device
81
80
  "vsw_#{name}"
82
81
  end
83
82
 
84
- # rubocop:disable MethodLength
85
- def options
86
- %W(--detach
87
- --out-of-band
88
- --fail=closed
89
- --inactivity-probe=180
90
- --rate-limit=40000
91
- --burst-limit=20000
92
- --pidfile=#{pid_file}
93
- --verbose=ANY:file:#{logging_level}
94
- --verbose=ANY:console:err
95
- --log-file=#{Phut.log_dir}/open_vswitch.#{name}.log
96
- --datapath-id=#{dpid_zero_filled}
97
- --unixctl=#{Phut.socket_dir}/open_vswitch.#{name}.ctl
98
- netdev@#{network_device} tcp:127.0.0.1:6633) +
99
- ports_option
100
- end
101
- # rubocop:enable MethodLength
102
-
103
83
  def dpid_zero_filled
104
84
  hex = format('%x', @dpid)
105
85
  '0' * (16 - hex.length) + hex
106
86
  end
107
-
108
- def logging_level
109
- @logger.level == Logger::DEBUG ? 'dbg' : 'info'
110
- end
111
-
112
- def ports_option
113
- @interfaces.empty? ? [] : ["--ports=#{@interfaces.join(',')}"]
114
- end
115
87
  end
116
88
  end
data/lib/phut/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # Base module.
2
2
  module Phut
3
- VERSION = '0.2.4'
3
+ VERSION = '0.3.0'
4
4
  end
data/phut.gemspec CHANGED
@@ -18,8 +18,6 @@ Gem::Specification.new do |gem|
18
18
  gem.executables = %w(phut vhost)
19
19
  gem.files = `git ls-files`.split("\n")
20
20
 
21
- gem.extensions = ['Rakefile']
22
-
23
21
  gem.extra_rdoc_files = ['README.md']
24
22
  gem.test_files = `git ls-files -- {spec,features}/*`.split("\n")
25
23
 
@@ -34,8 +32,8 @@ Gem::Specification.new do |gem|
34
32
  gem.add_development_dependency 'yard', '~> 0.8.7.6'
35
33
 
36
34
  # Development
37
- gem.add_development_dependency 'byebug', '~> 3.5.1'
38
- gem.add_development_dependency 'guard', '~> 2.12.4'
35
+ gem.add_development_dependency 'byebug', '~> 4.0.2'
36
+ gem.add_development_dependency 'guard', '~> 2.12.5'
39
37
  gem.add_development_dependency 'guard-bundler', '~> 2.1.0'
40
38
  gem.add_development_dependency 'guard-cucumber', '~> 1.5.4'
41
39
  gem.add_development_dependency 'guard-rspec', '~> 4.5.0'
@@ -48,7 +46,7 @@ Gem::Specification.new do |gem|
48
46
  gem.add_development_dependency 'cucumber', '~> 1.3.19'
49
47
  gem.add_development_dependency 'flog', '~> 4.3.2'
50
48
  gem.add_development_dependency 'rake'
51
- gem.add_development_dependency 'reek', '~> 2.0.1'
49
+ gem.add_development_dependency 'reek', '~> 2.0.2'
52
50
  gem.add_development_dependency 'rspec', '~> 3.2.0'
53
51
  gem.add_development_dependency 'rspec-given', '~> 3.7.0'
54
52
  gem.add_development_dependency 'rubocop', '~> 0.29.1'
@@ -13,7 +13,8 @@ describe Phut::OpenVswitch do
13
13
  describe '#run' do
14
14
  When { vswitch.run }
15
15
  Then do
16
- expect(vswitch).to have_received(:sh).with(/test-openflowd/)
16
+ expect(vswitch).to(have_received(:sh).
17
+ with('sudo ovs-vsctl add-br 0xabc'))
17
18
  end
18
19
  end
19
20
  end
data/tasks/cucumber.rake CHANGED
@@ -1,10 +1,8 @@
1
1
  begin
2
2
  require 'cucumber/rake/task'
3
3
 
4
- task cucumber: :openvswitch
5
4
  Cucumber::Rake::Task.new
6
5
 
7
- task 'cucumber:travis' => :openvswitch
8
6
  Cucumber::Rake::Task.new('cucumber:travis') do |task|
9
7
  task.cucumber_opts = '--tags ~@sudo --tags ~@shell'
10
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhito Takamiya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-12 00:00:00.000000000 Z
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - ~>
88
88
  - !ruby/object:Gem::Version
89
- version: 3.5.1
89
+ version: 4.0.2
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
- version: 3.5.1
96
+ version: 4.0.2
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: guard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ~>
102
102
  - !ruby/object:Gem::Version
103
- version: 2.12.4
103
+ version: 2.12.5
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: 2.12.4
110
+ version: 2.12.5
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: guard-bundler
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -254,14 +254,14 @@ dependencies:
254
254
  requirements:
255
255
  - - ~>
256
256
  - !ruby/object:Gem::Version
257
- version: 2.0.1
257
+ version: 2.0.2
258
258
  type: :development
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
262
  - - ~>
263
263
  - !ruby/object:Gem::Version
264
- version: 2.0.1
264
+ version: 2.0.2
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: rspec
267
267
  requirement: !ruby/object:Gem::Requirement
@@ -310,8 +310,7 @@ email:
310
310
  executables:
311
311
  - phut
312
312
  - vhost
313
- extensions:
314
- - Rakefile
313
+ extensions: []
315
314
  extra_rdoc_files:
316
315
  - README.md
317
316
  files:
@@ -360,15 +359,10 @@ files:
360
359
  - tasks/cucumber.rake
361
360
  - tasks/flog.rake
362
361
  - tasks/gem.rake
363
- - tasks/openvswitch.rake
364
362
  - tasks/reek.rake
365
363
  - tasks/relish.rake
366
364
  - tasks/rspec.rake
367
365
  - tasks/rubocop.rake
368
- - vendor/.gitignore
369
- - vendor/README.md
370
- - vendor/openvswitch-1.2.2.trema1.tar.gz
371
- - vendor/openvswitch-1.2.2_librt-check.diff
372
366
  homepage: http://github.com/trema/phut
373
367
  licenses:
374
368
  - GPL3
@@ -1,26 +0,0 @@
1
- require 'phut'
2
- require 'tmpdir'
3
-
4
- def openvswitch_srcdir
5
- File.join Phut.root, 'vendor/openvswitch-1.2.2.trema1'
6
- end
7
-
8
- desc 'Build Open vSwitch'
9
- task openvswitch: Phut::OpenVswitch::OPENFLOWD
10
-
11
- file Phut::OpenVswitch::OPENFLOWD do
12
- sh 'tar xzf ./vendor/openvswitch-1.2.2.trema1.tar.gz -C vendor'
13
- cd openvswitch_srcdir do
14
- sh "./configure --with-rundir=#{Dir.tmpdir}"
15
- sh 'make'
16
- end
17
- end
18
-
19
- task clean: 'openvswitch:clean'
20
- task 'openvswitch:clean' do
21
- FileTest.exist?(openvswitch_srcdir) && cd(openvswitch_srcdir) do
22
- sh 'make clean'
23
- end
24
- end
25
-
26
- CLOBBER.include(openvswitch_srcdir) if FileTest.exists?(openvswitch_srcdir)