trema 0.3.2 → 0.3.3

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.
data/Rakefile CHANGED
@@ -54,8 +54,16 @@ begin
54
54
  require "rspec/core"
55
55
  require "rspec/core/rake_task"
56
56
 
57
- RSpec::Core::RakeTask.new( :spec ) do | spec |
58
- spec.pattern = FileList[ "spec/**/*_spec.rb" ]
57
+ RSpec::Core::RakeTask.new do | task |
58
+ task.verbose = $trace
59
+ task.pattern = FileList[ "spec/**/*_spec.rb" ]
60
+ task.rspec_opts = "--format documentation --color"
61
+ end
62
+
63
+ RSpec::Core::RakeTask.new( "spec:actions" ) do | task |
64
+ task.verbose = $trace
65
+ task.pattern = FileList[ "spec/**/*_spec.rb" ]
66
+ task.rspec_opts = "--tag type:actions --format documentation --color"
59
67
  end
60
68
 
61
69
  RSpec::Core::RakeTask.new( "spec:travis" ) do | spec |
@@ -17,7 +17,7 @@
17
17
 
18
18
 
19
19
  module Trema
20
- VERSION = "0.3.2"
20
+ VERSION = "0.3.3"
21
21
  end
22
22
 
23
23
 
data/spec/spec_helper.rb CHANGED
@@ -121,14 +121,14 @@ class Network
121
121
  @th_controller = Thread.start do
122
122
  controller.run!
123
123
  end
124
- sleep 2 # FIXME: wait until controller.up?
124
+ sleep 5 # FIXME: wait until controller.up?
125
125
  end
126
126
 
127
127
 
128
128
  def trema_kill
129
129
  cleanup_current_session
130
130
  @th_controller.join if @th_controller
131
- sleep 2 # FIXME: wait until switch_manager.down?
131
+ sleep 5 # FIXME: wait until switch_manager.down?
132
132
  end
133
133
 
134
134
 
@@ -20,65 +20,63 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
20
  require "trema"
21
21
 
22
22
 
23
- describe SendOutPort, ".new( 1 )" do
24
- subject { SendOutPort.new( 1 ) }
25
- its( :port_number ) { should == 1 }
26
- its( :max_len ) { should == 2 ** 16 - 1 }
27
- its( :to_s ) { should == "SendOutPort: port=1, max_len=65535" }
28
- end
29
-
30
-
31
- describe SendOutPort, ".new( :port_number => number )" do
32
- subject { SendOutPort.new :port_number => port_number }
33
- it_validates "option range", :port_number, 0..( 2 ** 16 - 1 )
23
+ describe SendOutPort, :type => "actions" do
24
+ context "#new( 1 )" do
25
+ subject { SendOutPort.new( 1 ) }
34
26
 
35
- context "when :port_number == 1" do
36
- let( :port_number ) { 1 }
37
27
  its( :port_number ) { should == 1 }
28
+ its( :max_len ) { should == 2 ** 16 - 1 }
38
29
  its( :to_s ) { should == "SendOutPort: port=1, max_len=65535" }
39
30
  end
40
- end
41
31
 
32
+ context "#new( :port_number => number )" do
33
+ subject { SendOutPort.new( :port_number => number ) }
42
34
 
43
- describe SendOutPort, ".new( :port_number => 1, :max_len => number )" do
44
- subject { SendOutPort.new :port_number => 1, :max_len => max_len }
45
- it_validates "option range", :max_len, 0..( 2 ** 16 - 1 )
35
+ context "with port number (1)" do
36
+ let( :number ) { 1 }
37
+ its( :port_number ) { should == 1 }
38
+ its( :to_s ) { should == "SendOutPort: port=1, max_len=65535" }
39
+ end
46
40
 
47
- context "when :max_len == 256" do
48
- let( :max_len ) { 256 }
49
- its( :max_len ) { should == 256 }
50
- its( :to_s ) { should == "SendOutPort: port=1, max_len=256" }
41
+ it_validates "option range", :number, 0..( 2 ** 16 - 1 )
51
42
  end
52
- end
53
43
 
44
+ context "#new( :port_number => 1, :max_len => number )" do
45
+ subject { SendOutPort.new( :port_number => 1, :max_len => max_len ) }
54
46
 
55
- describe SendOutPort, ".new( VALID OPTIONS )" do
56
- context "when an action output is set to #flow_mod(add) " do
57
- it "should have its action set to output:1" do
58
- class FlowModAddController < Controller; end
47
+ context "with :max_len == 256" do
48
+ let( :max_len ) { 256 }
49
+ its( :max_len ) { should == 256 }
50
+ its( :to_s ) { should == "SendOutPort: port=1, max_len=256" }
51
+ end
52
+
53
+ it_validates "option range", :max_len, 0..( 2 ** 16 - 1 )
54
+ end
55
+
56
+ context "when sending a Flow Mod with SendOutPort action" do
57
+ it "should insert a new flow entry with action (output:1)" do
58
+ class TestController < Controller; end
59
59
  network {
60
60
  vswitch { datapath_id 0xabc }
61
- }.run( FlowModAddController ) {
62
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc,
63
- :actions => SendOutPort.new( :port_number => 1 ) )
64
- sleep 2 # FIXME: wait to send_flow_mod_add
61
+ }.run( TestController ) {
62
+ controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => SendOutPort.new( 1 ) )
63
+ sleep 2
65
64
  vswitch( "0xabc" ).should have( 1 ).flows
66
- vswitch( "0xabc" ).flows[0].actions.should match( /output:1/ )
65
+ vswitch( "0xabc" ).flows[ 0 ].actions.should == "output:1"
67
66
  }
68
67
  end
69
68
  end
70
69
 
71
-
72
- context "when multiple output actions assigned to #flow_mod(add)" do
73
- it "should have its actions set to output:1\/output:2" do
74
- class FlowModAddController < Controller; end
70
+ context "when sending a Flow Mod with multiple SendOutPort actions" do
71
+ it "should insert a new flow entry with actions (output:1\/output:2)" do
72
+ class TestController < Controller; end
75
73
  network {
76
74
  vswitch { datapath_id 0xabc }
77
- }.run( FlowModAddController ) {
78
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => [ SendOutPort.new( :port_number => 1 ), SendOutPort.new( :port_number => 2 ) ] )
79
- sleep 2 # FIXME: wait to send_flow_mod_add
75
+ }.run( TestController ) {
76
+ controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => [ SendOutPort.new( 1 ), SendOutPort.new( 2 ) ] )
77
+ sleep 2
80
78
  vswitch( "0xabc" ).should have( 1 ).flows
81
- vswitch( "0xabc" ).flows[0].actions.should match( /output:1\/output:2/ )
79
+ vswitch( "0xabc" ).flows[ 0 ].actions.should match( /output:1\/output:2/ )
82
80
  }
83
81
  end
84
82
  end
@@ -20,56 +20,51 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
20
  require "trema"
21
21
 
22
22
 
23
- describe SetEthDstAddr, %{.new( "52:54:00:a8:ad:8c" )} do
24
- subject { SetEthDstAddr.new( "52:54:00:a8:ad:8c" ) }
25
- its( :mac_address ) { should == Mac.new( "52:54:00:a8:ad:8c" ) }
26
- its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
27
- end
28
-
29
-
30
- describe SetEthDstAddr, %{.new( Mac.new( "52:54:00:a8:ad:8c" ) )} do
31
- subject { SetEthDstAddr.new( Mac.new( "52:54:00:a8:ad:8c" ) )}
32
- its( :mac_address ) { should == Mac.new( "52:54:00:a8:ad:8c" ) }
33
- its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
34
- end
35
-
36
-
37
- describe SetEthDstAddr, %{.new( "INVALID MAC STRING" )} do
38
- it { expect { SetEthDstAddr.new( "INVALID MAC STRING" ) }.to raise_error( ArgumentError ) }
39
- end
23
+ describe SetEthDstAddr, ".new( mac_address )", :type => "actions" do
24
+ subject { SetEthDstAddr.new( mac_address ) }
40
25
 
26
+ context "with mac_address (52:54:00:a8:ad:8c)" do
27
+ let( :mac_address ) { "52:54:00:a8:ad:8c" }
28
+ its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
29
+ its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
30
+ end
41
31
 
42
- describe SetEthDstAddr, ".new( number )" do
43
- subject { SetEthDstAddr.new( mac_address ) }
32
+ context %q{with mac_address (Mac.new("52:54:00:a8:ad:8c"))} do
33
+ let( :mac_address ) { Mac.new("52:54:00:a8:ad:8c") }
34
+ its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
35
+ its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
36
+ end
44
37
 
45
- context "when mac_address == 0x525400a8ad8c" do
38
+ context "with mac_address (0x525400a8ad8c)" do
46
39
  let( :mac_address ) { 0x525400a8ad8c }
47
- its( :mac_address ) { should == Mac.new( "52:54:00:a8:ad:8c" ) }
40
+ its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
41
+ its( :to_s ) { should == "SetEthDstAddr: mac_address=52:54:00:a8:ad:8c" }
48
42
  end
49
43
 
50
- it_validates "option range", :mac_address, 0..0xffffffffffff
51
- end
44
+ context %q{with invalid mac_address ("INVALID MAC STRING")} do
45
+ let( :mac_address ) { "INVALID MAC STRING" }
46
+ it { expect { subject }.to raise_error( ArgumentError ) }
47
+ end
52
48
 
49
+ context "with invalid mac_address ([1, 2, 3])" do
50
+ let( :mac_address ) { [ 1, 2, 3 ] }
51
+ it { expect { subject }.to raise_error( TypeError ) }
52
+ end
53
53
 
54
- describe SetEthDstAddr, ".new( [ 1, 2, 3 ] )" do
55
- it { expect { SetEthDstAddr.new( [ 1, 2, 3 ] ) }.to raise_error( TypeError ) }
56
- end
54
+ it_validates "option range", :mac_address, 0..0xffffffffffff
57
55
 
56
+ context "when sending a Flow Mod with action set to SetEthDstAddr" do
57
+ let( :mac_address ) { "52:54:00:a8:ad:8c" }
58
58
 
59
- describe SetEthDstAddr, ".new( VALID OPTION )" do
60
- context "when sending #flow_mod(add) with action set to mod_dl_dst" do
61
- it "should have a flow with action set to mod_dl_dst" do
62
- class FlowModAddController < Controller; end
59
+ it "should insert a new flow with action set to mod_dl_dst" do
60
+ class TestController < Controller; end
63
61
  network {
64
62
  vswitch { datapath_id 0xabc }
65
- }.run( FlowModAddController ) {
66
- controller( "FlowModAddController" ).send_flow_mod_add(
67
- 0xabc,
68
- :actions => SetEthDstAddr.new( "52:54:00:a8:ad:8c" )
69
- )
70
- sleep 20 # FIXME: wait to send_flow_mod
63
+ }.run( TestController ) {
64
+ controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => subject )
65
+ sleep 2
71
66
  vswitch( "0xabc" ).should have( 1 ).flows
72
- vswitch( "0xabc" ).flows[0].actions.should match( /mod_dl_dst:52:54:00:a8:ad:8c/ )
67
+ vswitch( "0xabc" ).flows[ 0 ].actions.should == "mod_dl_dst:52:54:00:a8:ad:8c"
73
68
  }
74
69
  end
75
70
  end
@@ -20,53 +20,51 @@ require File.join( File.dirname( __FILE__ ), "..", "spec_helper" )
20
20
  require "trema"
21
21
 
22
22
 
23
- describe SetEthSrcAddr, %{.new( "52:54:00:a8:ad:8c" )} do
24
- subject { SetEthSrcAddr.new( "52:54:00:a8:ad:8c" ) }
25
- its( :mac_address ) { should == Mac.new( "52:54:00:a8:ad:8c" ) }
26
- its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
27
- end
28
-
29
-
30
- describe SetEthSrcAddr, %{.new( Mac.new( "52:54:00:a8:ad:8c" ) )} do
31
- subject { SetEthSrcAddr.new( Mac.new( "52:54:00:a8:ad:8c" ) )}
32
- its( :mac_address ) { should == Mac.new( "52:54:00:a8:ad:8c" ) }
33
- its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
34
- end
35
-
36
-
37
- describe SetEthSrcAddr, %{.new( "INVALID MAC STRING" )} do
38
- it { expect { SetEthSrcAddr.new( "INVALID MAC STRING" ) }.to raise_error( ArgumentError ) }
39
- end
23
+ describe SetEthSrcAddr, ".new( mac_address )", :type => "actions" do
24
+ subject { SetEthSrcAddr.new( mac_address ) }
40
25
 
26
+ context "with mac_address (52:54:00:a8:ad:8c)" do
27
+ let( :mac_address ) { "52:54:00:a8:ad:8c" }
28
+ its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
29
+ its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
30
+ end
41
31
 
42
- describe SetEthSrcAddr, ".new( number )" do
43
- subject { SetEthSrcAddr.new( mac_address ) }
32
+ context %q{with mac_address (Mac.new("52:54:00:a8:ad:8c"))} do
33
+ let( :mac_address ) { Mac.new("52:54:00:a8:ad:8c") }
34
+ its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
35
+ its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
36
+ end
44
37
 
45
- context "when mac_address == 0x525400a8ad8c" do
38
+ context "with mac_address (0x525400a8ad8c)" do
46
39
  let( :mac_address ) { 0x525400a8ad8c }
47
- its( :mac_address ) { should == Mac.new( "52:54:00:a8:ad:8c" ) }
40
+ its( "mac_address.to_s" ) { should == "52:54:00:a8:ad:8c" }
41
+ its( :to_s ) { should == "SetEthSrcAddr: mac_address=52:54:00:a8:ad:8c" }
48
42
  end
49
43
 
50
- it_validates "option range", :mac_address, 0..0xffffffffffff
51
- end
44
+ context %q{with invalid mac_address ("INVALID MAC STRING")} do
45
+ let( :mac_address ) { "INVALID MAC STRING" }
46
+ it { expect { subject }.to raise_error( ArgumentError ) }
47
+ end
52
48
 
49
+ context "with invalid mac_address ([1, 2, 3])" do
50
+ let( :mac_address ) { [ 1, 2, 3 ] }
51
+ it { expect { subject }.to raise_error( TypeError ) }
52
+ end
53
53
 
54
- describe SetEthSrcAddr, ".new( [ 1, 2, 3 ] )" do
55
- it { expect { SetEthSrcAddr.new( [ 1, 2, 3 ] ) }.to raise_error( TypeError ) }
56
- end
54
+ it_validates "option range", :mac_address, 0..0xffffffffffff
57
55
 
56
+ context "when sending a Flow Mod with action set to SetEthSrcAddr" do
57
+ let( :mac_address ) { "52:54:00:a8:ad:8c" }
58
58
 
59
- describe SetEthSrcAddr, ".new( VALID OPTION )" do
60
- context "when sending #flow_mod(add) with action set to mod_dl_src" do
61
- it "should have a flow with action set to mod_dl_src" do
62
- class FlowModAddController < Controller; end
59
+ it "should insert a new flow with action set to mod_dl_src" do
60
+ class TestController < Controller; end
63
61
  network {
64
62
  vswitch { datapath_id 0xabc }
65
- }.run( FlowModAddController ) {
66
- controller( "FlowModAddController" ).send_flow_mod_add( 0xabc, :actions => SetEthSrcAddr.new( "52:54:00:a8:ad:8c" ) )
67
- sleep 20 # FIXME: wait to send_flow_mod
63
+ }.run( TestController ) {
64
+ controller( "TestController" ).send_flow_mod_add( 0xabc, :actions => subject )
65
+ sleep 2
68
66
  vswitch( "0xabc" ).should have( 1 ).flows
69
- vswitch( "0xabc" ).flows[0].actions.should match( /mod_dl_src:52:54:00:a8:ad:8c/ )
67
+ vswitch( "0xabc" ).flows[ 0 ].actions.should == "mod_dl_src:52:54:00:a8:ad:8c"
70
68
  }
71
69
  end
72
70
  end
@@ -2565,7 +2565,7 @@ validate_desc_stats_reply( const buffer *message ) {
2565
2565
  assert( message != NULL );
2566
2566
 
2567
2567
  ret = validate_header( message, OFPT_STATS_REPLY,
2568
- offsetof( struct ofp_stats_reply, body ) + sizeof( struct ofp_desc_stats ),
2568
+ offsetof( struct ofp_stats_reply, body ),
2569
2569
  offsetof( struct ofp_stats_reply, body ) + sizeof( struct ofp_desc_stats ) );
2570
2570
  if ( ret < 0 ) {
2571
2571
  return ret;
@@ -2662,7 +2662,7 @@ validate_aggregate_stats_reply( const buffer *message ) {
2662
2662
  assert( message != NULL );
2663
2663
 
2664
2664
  ret = validate_header( message, OFPT_STATS_REPLY,
2665
- offsetof( struct ofp_stats_reply, body ) + sizeof( struct ofp_aggregate_stats_reply ),
2665
+ offsetof( struct ofp_stats_reply, body ),
2666
2666
  offsetof( struct ofp_stats_reply, body ) + sizeof( struct ofp_aggregate_stats_reply ) );
2667
2667
  if ( ret < 0 ) {
2668
2668
  return ret;
@@ -2697,7 +2697,7 @@ validate_table_stats_reply( const buffer *message ) {
2697
2697
  assert( message != NULL );
2698
2698
 
2699
2699
  ret = validate_header( message, OFPT_STATS_REPLY,
2700
- offsetof( struct ofp_stats_reply, body ) + sizeof( struct ofp_table_stats ),
2700
+ offsetof( struct ofp_stats_reply, body ),
2701
2701
  UINT16_MAX );
2702
2702
  if ( ret < 0 ) {
2703
2703
  return ret;
@@ -2863,7 +2863,7 @@ validate_vendor_stats_reply( const buffer *message ) {
2863
2863
  assert( message != NULL );
2864
2864
 
2865
2865
  ret = validate_header( message, OFPT_STATS_REPLY,
2866
- offsetof( struct ofp_stats_reply, body ) + sizeof( uint32_t ),
2866
+ offsetof( struct ofp_stats_reply, body ),
2867
2867
  UINT16_MAX );
2868
2868
  if ( ret < 0 ) {
2869
2869
  return ret;
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trema
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 2
10
- version: 0.3.2
9
+ - 3
10
+ version: 0.3.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Yasuhito Takamiya
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: .
16
16
  cert_chain: []
17
17
 
18
- date: 2013-01-16 00:00:00 Z
18
+ date: 2013-01-17 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  prerelease: false
@@ -101,7 +101,6 @@ extra_rdoc_files:
101
101
  - README.md
102
102
  files:
103
103
  - .gitignore
104
- - .gitmodules
105
104
  - .mono.rant
106
105
  - .travis.yml
107
106
  - .yardopts
@@ -149,9 +148,6 @@ files:
149
148
  - features/trema.show_stats.feature
150
149
  - features/trema.up.feature
151
150
  - features/trema.version.feature
152
- - locale/README.ja.md
153
- - locale/ja/yard.po
154
- - locale/yard.pot
155
151
  - ruby/.gitignore
156
152
  - ruby/blocker.rb
157
153
  - ruby/extconf.rb
data/.gitmodules DELETED
@@ -1,3 +0,0 @@
1
- [submodule "vendor/yard.i18n"]
2
- path = vendor/yard.i18n
3
- url = https://github.com/kou/yard
data/locale/README.ja.md DELETED
@@ -1,19 +0,0 @@
1
- YARD の翻訳作業の進めかた
2
- ====================
3
-
4
- 翻訳は gettext + YARD の仕組みを使っています。基本的にすべて rake コマンドだけでできます。
5
-
6
- 1. YARD で .rb と .c のコメントを書く
7
- 2. rake yard:po で locale/ja/yard.po を更新
8
- 3. locale/ja/yard.po に日本語訳を書く。Emacs だと po-mode が便利。
9
- 4. rake yard:ja で日本語対応した html が [trema]/doc に生成される
10
- 5. html に間違いが無いことを確認したあと、更新した .po などを git commit
11
-
12
- つぎのことをこころがけてください。
13
-
14
- 1. 生成物はそのまま公開されます。わかりやすく書こう (訳語の統一、むずかしい言葉を使わない、など)
15
- 2. 元の英語ドキュメントが足りない場合には、英語のほうを書き足してから翻訳しよう。Floodlight や OpenFaucet のドキュメントが参考になると思います
16
- 3. できれば spec/ のテストと見比べて、ドキュメントに書いてあることがテストされていなければ書き足そう
17
-
18
- すべてを最初から完璧にする必要は無いです。
19
- あとまわしにした箇所は TODO コメントを残す、チケットを切る等々、後で見てわかるように進めてください!