bgp4r 0.0.10 → 0.0.11

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/bgp/common.rb CHANGED
@@ -82,7 +82,6 @@ class IPAddr
82
82
 
83
83
  end
84
84
 
85
-
86
85
  class Object
87
86
  def to_shex(*args)
88
87
  self.respond_to?(:encode) ? self.encode(*args).unpack('H*')[0] : ""
@@ -69,11 +69,11 @@ module BGP
69
69
  @seqn = seqn
70
70
  @cap = cap
71
71
  elsif args.size==1 && args.is_a?(String)
72
- else
73
- parse args[0]
74
- end
72
+ else
73
+ parse args[0]
74
+ end
75
75
  end
76
-
76
+
77
77
  def encode
78
78
  [@o1,@seqn, @cap.encode].pack('CNa*')
79
79
  end
@@ -142,7 +142,7 @@ module BGP
142
142
  parse args[0]
143
143
  else
144
144
  @msg_type=CAPABILITY
145
- add *args
145
+ add(*args)
146
146
  end
147
147
  end
148
148
 
@@ -20,7 +20,7 @@
20
20
  # along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
21
21
  #++
22
22
 
23
- module BGP
23
+ module ::BGP
24
24
 
25
25
  # http://www.iana.org/assignments/bgp-parameters/bgp-parameters.xhtml#bgp-parameters-1
26
26
 
@@ -90,6 +90,7 @@ module BGP
90
90
  ! has_no_path_attribute?
91
91
  end
92
92
  end
93
+
93
94
  end
94
95
 
95
96
  load "../../test/messages/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
@@ -1,21 +1,9 @@
1
- module BGP
2
-
3
- begin
4
- unless const_defined? :VERSION
5
- BGP.const_set('VERSION', Gem.loaded_specs['bgp4r'].version.to_s)
6
- end
7
- rescue
8
- end
9
-
10
- %w{ update keepalive open notification capabity}.each do |m|
11
- autoload "#{m}".capitalize.to_sym, "bgp/messages/#{m}"
12
- end
13
- autoload :Route_refresh, 'bgp/messages/route_refresh'
14
- autoload :Orf_route_refresh, 'bgp/messages/route_refresh'
15
- autoload :Prefix_orf, 'bgp/orfs/prefix_orf'
16
-
17
- end
18
-
19
-
20
-
1
+ require 'bgp/messages/message'
2
+ require 'bgp/messages/keepalive'
3
+ require 'bgp/messages/update'
4
+ require 'bgp/messages/capability'
5
+ require 'bgp/messages/notification'
6
+ require 'bgp/messages/open'
7
+ require 'bgp/messages/route_refresh'
8
+ require 'bgp/orfs/prefix_orf'
21
9
  require 'bgp/messages/markers'
@@ -108,7 +108,7 @@ class Notification < Message
108
108
  msg = self.encode
109
109
  s = "Notification (#{NOTIFICATION}), length: #{msg.size}: "
110
110
  s += "#{Notification.code_to_s(@code)} (#{@code}), #{Notification.code_to_s(@code, @subcode)} (#{@subcode}) "
111
- s += "\ndata: [#{@data}]" if @data.size>0
111
+ s += "\ndata: [#{@data}]" if @data and @data.size>0
112
112
  s
113
113
  end
114
114
 
@@ -40,14 +40,13 @@
40
40
  require 'bgp/messages/message'
41
41
  require 'bgp/path_attributes/path_attribute'
42
42
 
43
- module BGP
44
-
45
- class Update < Message
43
+ class BGP::Update < BGP::Message
44
+ include BGP
46
45
  def as4byte?
47
46
  @as4byte ||= false
48
47
  end
49
48
  alias as4byte as4byte?
50
-
49
+
51
50
  def initialize(*args)
52
51
  if args[0].is_a?(String) and args[0].is_packed?
53
52
  @as4byte=false
@@ -59,7 +58,7 @@ class Update < Message
59
58
  set(*args)
60
59
  end
61
60
  end
62
-
61
+
63
62
  def set(*args)
64
63
  args.each { |arg|
65
64
  if arg.is_a?(Withdrawn)
@@ -71,19 +70,19 @@ class Update < Message
71
70
  end
72
71
  }
73
72
  end
74
-
73
+
75
74
  def withdrawn=(val)
76
75
  @withdrawn=val if val.is_a?(Withdrawn)
77
76
  end
78
-
77
+
79
78
  def nlri=(val)
80
79
  @nlri=val if val.is_a?(Nlri)
81
80
  end
82
-
81
+
83
82
  def path_attribute=(val)
84
83
  @path_attribute=val if val.is_a?(Path_attribute)
85
84
  end
86
-
85
+
87
86
  def encode(as4byte=false)
88
87
  @as4byte=as4byte
89
88
  withdrawn, path_attribute, nlri = '', '', ''
@@ -92,13 +91,13 @@ class Update < Message
92
91
  nlri = @nlri.encode if defined? @nlri and @nlri
93
92
  super([withdrawn.size, withdrawn, path_attribute.size, path_attribute, nlri].pack('na*na*a*'))
94
93
  end
95
-
94
+
96
95
  def encode4
97
96
  encode(true)
98
97
  end
99
-
98
+
100
99
  attr_reader :path_attribute, :nlri, :withdrawn
101
-
100
+
102
101
  # CHANGED ME: NO DEFAULT HERE, the factory calling us has to tell what it is giving us.
103
102
  def parse(s, as4byte=false)
104
103
  @as4byte=as4byte
@@ -110,7 +109,7 @@ class Update < Message
110
109
  self.path_attribute=Path_attribute.new(enc_path_attribute, as4byte) if len>0
111
110
  self.nlri = Nlri.new(update) if update.size>0
112
111
  end
113
-
112
+
114
113
  def <<(val)
115
114
  if val.is_a?(Attr)
116
115
  @path_attribute ||= Path_attribute.new
@@ -137,7 +136,7 @@ class Update < Message
137
136
  s << @nlri.to_s if defined?(@nlri) and @nlri
138
137
  "Update Message (#{UPDATE}), #{as4byte ? "4 bytes AS, " : ''}length: #{msg.size}\n " + s.join("\n") + "\n" + msg.hexlify.join("\n") + "\n"
139
138
  end
140
-
139
+
141
140
  def self.withdrawn(u)
142
141
  if u.nlri and u.nlri.size>0
143
142
  Update.new(Withdrawn.new(*(u.nlri.nlris.collect { |n| n.to_s})))
@@ -149,4 +148,4 @@ class Update < Message
149
148
  end
150
149
  end
151
150
 
152
- end
151
+ load "../../test/messages/#{ File.basename($0.gsub(/.rb/,'_test.rb'))}" if __FILE__ == $0
@@ -1,29 +1,23 @@
1
- require 'net/telnet'
1
+ #require 'net/telnet'
2
2
  require 'bgp4r'
3
3
 
4
-
5
4
  class LiveFeed
6
- def initialize
7
- @host = '129.82.138.6'
8
- @port = '50001'
9
- @timeout = 10
5
+ def self.open
6
+ new.open
10
7
  end
11
-
12
8
  def open
13
-
9
+ @host = '129.82.138.6'
10
+ @port = '50001'
14
11
  @buf = ''
15
12
  @queue = Queue.new
16
13
 
17
14
  th = Thread.new do
18
- feed = Net::Telnet.new('Host'=> @host,
19
- 'Port' => @port,
20
- 'Timeout'=> 5,
21
- 'Telnetmode' => false)
15
+ @feed = TCPSocket.new @host, @port
22
16
  loop do
23
- @buf += feed.recv(2000)
17
+ @buf += @feed.recv(5000)
24
18
  end
25
19
  end
26
- Thread.new do
20
+ @th=Thread.new do
27
21
  loop do
28
22
  pos = (@buf =~ /<OCTETS length=.*>([^<]*)<\/OCTETS>/)
29
23
  if pos
@@ -33,17 +27,18 @@ class LiveFeed
33
27
  end
34
28
  end
35
29
  end
30
+ self
31
+ end
32
+ def close
33
+ @th.kill
34
+ @feed.close
36
35
  end
37
-
38
36
  def read
39
37
  @queue.deq
40
38
  end
41
-
42
39
  alias msg read
43
40
  alias readmessage read
44
-
45
- end
46
-
47
-
48
41
 
42
+ end
43
+ #
49
44
 
data/bgp/nlris/label.rb CHANGED
@@ -37,7 +37,7 @@ module BGP
37
37
  end
38
38
  end
39
39
  def encode(bottom=1)
40
- n = (@label <<4) | (@exp & 0x7)<<1 |(bottom &0x1)
40
+ n = (@label << 4) | ((@exp & 0x7)<< 1) |(bottom & 0x1)
41
41
  o1 = (n & 0xff0000) >> 16
42
42
  o2 = (n & 0x00ff00) >> 8
43
43
  o3 = (n & 0x0000ff)
data/bgp/nlris/nlris.rb CHANGED
@@ -1,32 +1,8 @@
1
- #--
2
- # Copyright 2008, 2009, 2010 Jean-Michel Esnault.
3
- # All rights reserved.
4
- # See LICENSE.txt for permissions.
5
- #
6
- #
7
- # This file is part of BGP4R.
8
- #
9
- # BGP4R is free software: you can redistribute it and/or modify
10
- # it under the terms of the GNU General Public License as published by
11
- # the Free Software Foundation, either version 3 of the License, or
12
- # (at your option) any later version.
13
- #
14
- # BGP4R is distributed in the hope that it will be useful,
15
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- # GNU General Public License for more details.
18
- #
19
- # You should have received a copy of the GNU General Public License
20
- # along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
21
- #++
22
-
23
- module BGP
24
- end
25
-
26
- %w{ nlri prefix labeled vpn rd }.each do |n|
27
- BGP.autoload n.capitalize.to_sym,"bgp/nlris/#{n}"
28
- end
29
-
30
- BGP.autoload :Inet_unicast, "bgp/nlris/inet"
31
- BGP.autoload :Inet_multicast, "bgp/nlris/inet"
32
- BGP.autoload :Withdrawn, "bgp/nlris/nlri"
1
+ %w{
2
+ nlri
3
+ prefix
4
+ inet
5
+ labeled
6
+ vpn
7
+ rd
8
+ }.each { |n| require "bgp/nlris/#{n}" }
data/bgp/nlris/vpn.rb CHANGED
@@ -52,10 +52,17 @@ module BGP
52
52
  @prefix.ipv6?
53
53
  end
54
54
  def parse(s, afi=1)
55
+ # p "-----------"
56
+ # p s.unpack('H*')
57
+ # p afi
55
58
  nbits = s.slice!(0,1).unpack('C')[0]
56
59
  rd,vpn = s.slice!(0,(7+nbits)/8).unpack("a8a*")
57
60
  @rd = Rd.new(rd.is_packed)
58
- @prefix= Prefix.new([nbits-64,vpn].pack('Ca*'), afi)
61
+ # p @rd
62
+ # p nbits
63
+ # p vpn.unpack('H*')
64
+ raise if nbits-64==0
65
+ @prefix= Prefix.new([nbits-64,vpn].pack('Ca*'), afi) if nbits-64>0
59
66
  end
60
67
  def nexthop
61
68
  @prefix.nexthop
@@ -1,8 +1,12 @@
1
- require 'bgp/optional_parameters/capability'
2
1
 
3
- %w{ mbgp orf route_refresh as4 graceful_restart dynamic }.each do |c|
4
- BGP::OPT_PARM::CAP.autoload "#{c}".capitalize.to_sym,"bgp/optional_parameters/#{c}"
5
- end
2
+ require 'bgp/optional_parameters/capability'
3
+ require 'bgp/optional_parameters/dynamic'
4
+ require 'bgp/optional_parameters/graceful_restart'
5
+ require 'bgp/optional_parameters/mbgp'
6
+ require 'bgp/optional_parameters/optional_parameter'
7
+ require 'bgp/optional_parameters/orf'
8
+ require 'bgp/optional_parameters/route_refresh'
9
+ require 'bgp/optional_parameters/as4'
6
10
 
7
11
  module BGP::OPT_PARM
8
12
  module DYN_CAP
@@ -1,22 +1,17 @@
1
-
2
- module BGP
3
- %w{
4
- origin next_hop
5
- local_pref
6
- multi_exit_disc
7
- as_path
8
- communities
9
- aggregator
10
- atomic_aggregate
11
- originator_id
12
- cluster_list
13
- mp_reach
14
- mp_unreach
15
- extended_communities
16
- path_attribute
17
- }.each do |attr|
18
- autoload attr.capitalize.to_sym,"bgp/path_attributes/#{attr}"
19
- end
20
- autoload :As4_path, 'bgp/path_attributes/as_path'
1
+ %w{
2
+ origin next_hop
3
+ local_pref
4
+ multi_exit_disc
5
+ as_path
6
+ communities
7
+ aggregator
8
+ atomic_aggregate
9
+ originator_id
10
+ cluster_list
11
+ mp_reach
12
+ mp_unreach
13
+ extended_communities
14
+ path_attribute
15
+ }.each do |attr|
16
+ require "bgp/path_attributes/#{attr}"
21
17
  end
22
-
@@ -147,6 +147,12 @@ module BGP
147
147
 
148
148
  %w{ no_export no_advertise no_export_sub_confed no_peer }.each do |wkc|
149
149
  define_method("has_#{wkc}?") do
150
+ has? Community.const_get(wkc.upcase)
151
+ end
152
+ end
153
+
154
+ %w{ no_export no_advertise no_export_sub_confed no_peer }.each do |wkc|
155
+ define_method("does_not_have_#{wkc}?") do
150
156
  ! has? Community.const_get(wkc.upcase)
151
157
  end
152
158
  end
@@ -20,7 +20,6 @@
20
20
  # along with BGP4R. If not, see <http://www.gnu.org/licenses/>.
21
21
  #++
22
22
 
23
- require 'bgp4r'
24
23
  require 'bgp/path_attributes/attribute'
25
24
 
26
25
  module BGP
data/bgp4r.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bgp4r}
8
- s.version = "0.0.10"
8
+ s.version = "0.0.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jean-Michel Esnault"]
12
- s.date = %q{2010-10-30}
12
+ s.date = %q{2011-01-08}
13
13
  s.description = %q{BGP4R is a BGP-4 ruby library to create, send, and receive BGP messages in an object oriented manner}
14
14
  s.email = %q{jesnault@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -89,6 +89,8 @@ Gem::Specification.new do |s|
89
89
  "test/messages/open_test.rb",
90
90
  "test/messages/route_refresh_test.rb",
91
91
  "test/messages/update_test.rb",
92
+ "test/misc/live_feed_test.rb",
93
+ "test/misc/misc.rb",
92
94
  "test/neighbor_test.rb",
93
95
  "test/nlris/ext_nlri_test.rb",
94
96
  "test/nlris/inet_test.rb",
@@ -139,6 +141,9 @@ Gem::Specification.new do |s|
139
141
  "test/messages/open_test.rb",
140
142
  "test/messages/route_refresh_test.rb",
141
143
  "test/messages/update_test.rb",
144
+ "test/misc",
145
+ "test/misc/live_feed_test.rb",
146
+ "test/misc/misc.rb",
142
147
  "test/neighbor_test.rb",
143
148
  "test/nlris",
144
149
  "test/nlris/ext_nlri_test.rb",
@@ -70,18 +70,18 @@ class TestBgpMessagesCapability < Test::Unit::TestCase
70
70
  include BGP::OPT_PARM
71
71
  def test_capability_1
72
72
  cap_msg = BGP::Capability.new
73
- assert_equal 'ffffffffffffffffffffffffffffffff001306', cap_msg.to_shex
73
+ assert_equal('ffffffffffffffffffffffffffffffff001306', cap_msg.to_shex)
74
74
  cap_msg << BGP::Capability::Revision.advertise( 10, DYN_CAP::Mbgp.new(1,1))
75
- assert_match /^(ff){16}001f06000000000a01000400010001/, cap_msg.to_shex
75
+ assert_match(/^(ff){16}001f06000000000a01000400010001/, cap_msg.to_shex)
76
76
  cap_msg << BGP::Capability::Revision.advertise( 20, DYN_CAP::Mbgp.new(1,2))
77
- assert_match /^(ff){16}002b06\s*000000000a01000400010001\s*000000001401000400010002/, cap_msg.to_shex
77
+ assert_match(/^(ff){16}002b06\s*000000000a01000400010001\s*000000001401000400010002/, cap_msg.to_shex)
78
78
  end
79
79
  def test_capability_2
80
80
  cap_msg = BGP::Capability.new(
81
81
  BGP::Capability::Revision.advertise( 10, DYN_CAP::Mbgp.new(1,1)),
82
82
  BGP::Capability::Revision.advertise( 20, DYN_CAP::Mbgp.new(1,2))
83
83
  )
84
- assert_match /^(ff){16}002b06\s*000000000a01000400010001\s*000000001401000400010002/, cap_msg.to_shex
84
+ assert_match(/^(ff){16}002b06\s*000000000a01000400010001\s*000000001401000400010002/, cap_msg.to_shex)
85
85
  end
86
86
  def test_capability_3
87
87
 
@@ -23,11 +23,12 @@
23
23
  require 'test/unit'
24
24
  require 'bgp4r'
25
25
  require 'bgp/messages/markers'
26
+ require 'bgp/nlris/nlris'
26
27
  class End_of_rib_markers_Test < Test::Unit::TestCase
27
28
  include BGP
28
29
  def test_end_of_rib_maker_messages
29
- assert_match /(ff){16}00170200000000/, Update.end_of_rib_marker.to_shex
30
- assert_match /(ff){16}001d0200000006800f03000104/, Update.end_of_rib_marker(:afi=>1, :safi=>4).to_shex
31
- assert_match /(ff){16}001d0200000006800f03000180/, Update.end_of_rib_marker(:afi=>1, :safi=>128).to_shex
30
+ assert_match(/(ff){16}00170200000000/, Update.end_of_rib_marker.to_shex)
31
+ assert_match(/(ff){16}001d0200000006800f03000104/, Update.end_of_rib_marker(:afi=>1, :safi=>4).to_shex)
32
+ assert_match(/(ff){16}001d0200000006800f03000180/, Update.end_of_rib_marker(:afi=>1, :safi=>128).to_shex)
32
33
  end
33
34
  end
@@ -36,10 +36,10 @@ class Notification_Test < Test::Unit::TestCase
36
36
  assert_equal('Invalid Capability Length', Notification.code_to_s(7,2))
37
37
  assert_equal('Malformed Capability Value', Notification.code_to_s(7,3))
38
38
  notif = BGP::Notification.new(1,1)
39
- assert_match /^(ff){16}0015030101$/, notif.to_shex
39
+ assert_match(/^(ff){16}0015030101$/, notif.to_shex)
40
40
  assert_equal(notif.encode, Notification.new(notif).encode)
41
41
  notif = BGP::Notification.new(2,2,'some data')
42
- assert_match /(ff){16}001e030202736f6d652064617461/, notif.to_shex
42
+ assert_match(/(ff){16}001e030202736f6d652064617461/, notif.to_shex)
43
43
  assert_equal(notif.encode, Notification.new(notif).encode)
44
44
  s = 'ffffffffffffffffffffffffffffffff001e030202736f6d652064617461'
45
45
  m = Message.factory([s].pack('H*'))
@@ -128,7 +128,7 @@ class Update_Test < Test::Unit::TestCase
128
128
  "
129
129
  end
130
130
 
131
- def test_7
131
+ def test_8
132
132
  s = 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0072020000001F4001010040020A0204212C051319351AFE400304557200D9C00804212C045C175D76D6175D76DE1659299C175929981659235C16592D6417592D6417592D6617592D6217C3D228185D73241859284417C3FE84165C727015592190'
133
133
  m = Update.new([s].pack('H*'), true)
134
134
  pa = m.path_attribute
@@ -140,12 +140,15 @@ class Update_Test < Test::Unit::TestCase
140
140
  assert_equal '100 556533011 422910718', pa[As_path].as_path
141
141
  end
142
142
 
143
- # def test_8
144
- # s = 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF002302000C16D403741755C68816D408300000'
145
- # m = Update.new([s].pack('H*'))
146
- # end
147
- #
148
- # def test_9
143
+ def test_9
144
+ s = 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF002302000C16D403741755C68816D408300000'
145
+ m = Update.new([s].pack('H*'))
146
+ assert m.withdrawn, "Should contain withdrawn routes."
147
+ assert_equal 3,m.withdrawn.nlris.size
148
+ end
149
+
150
+ #--
151
+ # def test_10
149
152
  # s = 'ffff ffff ffff ffff ffff ffff ffff ffff
150
153
  # 005f 0200 0000 4440 0101 0040 020e 0206
151
154
  # 0064 212c 232a 0ddd 53f9 5ba0 4003 0428
@@ -154,8 +157,9 @@ class Update_Test < Test::Unit::TestCase
154
157
  # 000d dd00 0053 f900 0302 9e18 5bd9 c5
155
158
  # '.split.join
156
159
  # m = Update.new([s].pack('H*'))
157
- # p m
160
+ # p m.path_attribute[:next_hop]
161
+ # p m.path_attribute[:as_path]
158
162
  # end
159
-
163
+ #++
160
164
 
161
165
  end
@@ -0,0 +1,16 @@
1
+ require "test/unit"
2
+ require "bgp/misc/live_feed"
3
+
4
+ class TestBgpMiscLiveFeed < Test::Unit::TestCase
5
+ def test_feed
6
+ feed = LiveFeed.open
7
+ n=0
8
+ loop do
9
+ n+=1
10
+ break if n>20
11
+ msg_shex = feed.read.unpack('H*')[0]
12
+ assert_match( /ff{16}....(02|04|05|01)/, msg_shex)
13
+ end
14
+ feed.close
15
+ end
16
+ end
data/test/misc/misc.rb ADDED
@@ -0,0 +1,13 @@
1
+ require "test/unit"
2
+
3
+ require "bgp4r"
4
+
5
+ class TestBgp4r < Test::Unit::TestCase
6
+ def test_1
7
+ s = "ffffffffffffffffffffffffffffffff0084020000006d400101024002008004040000000040050400000064c00804282b4e87c010080002282b00007530800a080000000100000004800904513411d2800e310001800c0000000000000000513411d2007401c4f100000c8f00126cdcac14b0907801c53100000c8f00126cdcac14b092"
8
+ msg = BGP::Message.factory([s].pack('H*'))
9
+ assert_equal BGP::Update, msg.class
10
+ end
11
+ def test_2
12
+ end
13
+ end
@@ -92,34 +92,6 @@ class Withdrawn_Test < Test::Unit::TestCase
92
92
  end
93
93
  end
94
94
 
95
- class Nlri_Test < Test::Unit::TestCase
96
- include BGP
97
- def test_1
98
- nlri1 = Nlri.new
99
- nlri1 << Nlri::Ip4.new('20.0.0.0/15')
100
- nlri1 << '20.0.0.0/17'
101
- nlri1 << '20.0.0.0/24'
102
- s = '0f140010140011140000'
103
- nlri2 = Nlri.new([s].pack('H*'))
104
- assert_equal('0f140010140011140000', nlri2.to_shex)
105
- assert_raise(ArgumentError) { nlri2.to_shex(true) }
106
- assert_equal(3,nlri2.nlris.size)
107
-
108
- end
109
-
110
- def test_2
111
- nlri1 = Nlri.new
112
- nlri1 << Nlri::Ip4.new('20.0.0.0/15')
113
- nlri1 << '20.0.0.0/17'
114
- nlri1 << '20.0.0.0/24'
115
- s = '0f140010140011140000'
116
- nlri2 = Nlri.new([s].pack('H*'))
117
- assert_equal('0f140010140011140000', nlri2.to_shex)
118
- assert_raise(ArgumentError) { nlri2.to_shex(true) }
119
- assert_equal(3,nlri2.nlris.size)
120
- end
121
- end
122
-
123
95
  class Prefix_Test < Test::Unit::TestCase
124
96
  include BGP
125
97
  def test_1
@@ -130,23 +102,10 @@ class Prefix_Test < Test::Unit::TestCase
130
102
  assert(Prefix.new('192.168.0.0/16').ipv4?)
131
103
  assert_equal('10c0a8',Prefix.new('192.168.0.0/16').to_shex)
132
104
  assert_equal('402009000400040000',Prefix.new('2009:4:4::/64').to_shex)
133
- assert('402009000400040000',Prefix.new('2009:4:4::/64').ipv6?)
105
+ assert Prefix.new('2009:4:4::/64').ipv6?
134
106
  assert_equal('2009:4:4::/64',Prefix.new('2009:4:4::/64').to_s)
135
107
  end
136
108
  end
137
- class Inet_unicast_Test < Test::Unit::TestCase
138
- include BGP
139
- def test_1
140
- assert_equal(1,Inet_unicast.new('192.168.0.0/16').afi)
141
- assert_equal(1,Inet_unicast.new('192.168.0.0/16').safi)
142
- assert_equal(2,Inet_unicast.new('2009:4:4::/64').afi)
143
- assert_equal(1,Inet_unicast.new('2009:4:4::/64').safi)
144
- assert_equal(1,Inet_multicast.new('192.168.0.0/16').afi)
145
- assert_equal(2,Inet_multicast.new('192.168.0.0/16').safi)
146
- assert_equal(2,Inet_multicast.new('2009:4:4::/64').afi)
147
- assert_equal(2,Inet_multicast.new('2009:4:4::/64').safi)
148
- end
149
- end
150
109
 
151
110
  class Vpn_Test < Test::Unit::TestCase
152
111
  include BGP
@@ -30,21 +30,21 @@ class Optional_parameter_Test < Test::Unit::TestCase
30
30
  def octet.encode
31
31
  [0xab].pack('C')
32
32
  end
33
- assert_match /^(ff){16}011b01040064007801010101fe(ab){254}$/,
34
- Open.new(4, 100, 120, '1.1.1.1', *([octet]*254)).to_shex
35
- assert_match /^(ff){16}011c01040064007801010101ff(ab){255}$/,
36
- Open.new(4, 100, 120, '1.1.1.1', *([octet]*255)).to_shex
37
- assert_match /^(ff){16}012001040064007801010101ffff0100(ab){256}$/,
38
- Open.new(4, 100, 120, '1.1.1.1', *([octet]*256)).to_shex
39
- assert_match /^(ff){16}012101040064007801010101ffff0101(ab){257}$/,
40
- Open.new(4, 100, 120, '1.1.1.1', *([octet]*257)).to_shex
33
+ assert_match(/^(ff){16}011b01040064007801010101fe(ab){254}$/,
34
+ Open.new(4, 100, 120, '1.1.1.1', *([octet]*254)).to_shex)
35
+ assert_match(/^(ff){16}011c01040064007801010101ff(ab){255}$/,
36
+ Open.new(4, 100, 120, '1.1.1.1', *([octet]*255)).to_shex)
37
+ assert_match(/^(ff){16}012001040064007801010101ffff0100(ab){256}$/,
38
+ Open.new(4, 100, 120, '1.1.1.1', *([octet]*256)).to_shex)
39
+ assert_match(/^(ff){16}012101040064007801010101ffff0101(ab){257}$/,
40
+ Open.new(4, 100, 120, '1.1.1.1', *([octet]*257)).to_shex)
41
41
  end
42
42
  def test_draft_ietf_idr_ext_opt_param_01_parsing
43
43
  mbgp = OPT_PARM::CAP::Mbgp.new(1,1)
44
44
  open1 = Open.new(4, 100, 120, '1.1.1.1', *[mbgp]*100)
45
45
  open2 = Open.new(4, 100, 120, '1.1.1.1', *[mbgp]*10)
46
- assert_match /^(ff){16}034001040064007801010101\s*ffff0320\s*0206010400010001/, open1.to_shex
47
- assert_match /^(ff){16}006d01040064007801010101\s*50\s*0206010400010001/, open2.to_shex
46
+ assert_match(/^(ff){16}034001040064007801010101\s*ffff0320\s*0206010400010001/, open1.to_shex)
47
+ assert_match(/^(ff){16}006d01040064007801010101\s*50\s*0206010400010001/, open2.to_shex)
48
48
  assert_equal Open.new(open1).to_shex, open1.to_shex
49
49
  assert_equal Open.new(open2).to_shex, open2.to_shex
50
50
  end
@@ -79,12 +79,13 @@ class Communities_Test < Test::Unit::TestCase
79
79
  assert Communities.new("145:60 145:10 145:30 145:20").has?('145:60')
80
80
  end
81
81
  def test_4
82
- assert Communities.new("145:60 145:10").has_no_export?
83
- assert Communities.new("145:60 145:10").has_no_advertise?
84
- assert Communities.new("145:60 145:10").has_no_export_sub_confed?
85
- assert ! Communities.new("145:60 145:10").add(:no_export_sub_confed).has_no_export_sub_confed?
86
- assert ! Communities.new("145:60 145:10").add(:no_export).has_no_export?
87
- assert ! Communities.new("145:60 145:10").add(:no_advertise).has_no_advertise?
82
+ assert ! Communities.new("145:60 145:10").has_no_export?, "Not expexted to contain [no_export] community"
83
+ assert Communities.new("145:60 145:10").does_not_have_no_export?, "Not expexted to contain [no_export] community"
84
+ assert ! Communities.new("145:60 145:10").has_no_advertise? , 'Not expected to contain [no_advertise] community'
85
+ assert ! Communities.new("145:60 145:10").has_no_export_sub_confed?, 'Not expected to contain [no_export_sub_confed] community'
86
+ assert Communities.new("145:60 145:10").add(:no_export_sub_confed).has_no_export_sub_confed?, 'expected to contain [no_export_sub_confed]'
87
+ assert Communities.new("145:60 145:10").add(:no_export).has_no_export?, 'expected to contain [no_export]'
88
+ assert Communities.new("145:60 145:10").add(:no_advertise).has_no_advertise?, 'expected to contain [no_advertise]'
88
89
  end
89
90
  end
90
91
 
@@ -40,12 +40,4 @@ class Local_pref_Test < Test::Unit::TestCase
40
40
  lp1 = Local_pref.new(lp)
41
41
  assert_equal(lp.encode, lp1.encode)
42
42
  end
43
- def test_3
44
- lp = Local_pref.new(200)
45
- assert_equal 200, lp.to_i
46
- lp + 13
47
- assert_equal 213, lp.to_i
48
- lp + -13
49
- assert_equal 200, lp.to_i
50
- end
51
43
  end
@@ -43,12 +43,4 @@ class Multi_exit_disc_Test < Test::Unit::TestCase
43
43
  mp1 = Multi_exit_disc.new(mp)
44
44
  assert_equal(mp.encode, mp.encode)
45
45
  end
46
- def test_3
47
- med = Multi_exit_disc.new(200)
48
- assert_equal 200, med.to_i
49
- med + 13
50
- assert_equal 213, med.to_i
51
- med + -13
52
- assert_equal 200, med.to_i
53
- end
54
46
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 10
9
- version: 0.0.10
8
+ - 11
9
+ version: 0.0.11
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jean-Michel Esnault
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-30 00:00:00 -07:00
17
+ date: 2011-01-08 00:00:00 -08:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -100,6 +100,8 @@ files:
100
100
  - test/messages/open_test.rb
101
101
  - test/messages/route_refresh_test.rb
102
102
  - test/messages/update_test.rb
103
+ - test/misc/live_feed_test.rb
104
+ - test/misc/misc.rb
103
105
  - test/neighbor_test.rb
104
106
  - test/nlris/ext_nlri_test.rb
105
107
  - test/nlris/inet_test.rb
@@ -173,6 +175,8 @@ test_files:
173
175
  - test/messages/open_test.rb
174
176
  - test/messages/route_refresh_test.rb
175
177
  - test/messages/update_test.rb
178
+ - test/misc/live_feed_test.rb
179
+ - test/misc/misc.rb
176
180
  - test/neighbor_test.rb
177
181
  - test/nlris/ext_nlri_test.rb
178
182
  - test/nlris/inet_test.rb