phut 0.2.4 → 0.3.0

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 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)