ospfv2 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +674 -0
  3. data/LICENSE.txt +53 -0
  4. data/README +50 -0
  5. data/bin/ospfv2 +112 -105
  6. data/changelog.txt +7 -0
  7. data/gemspec +17 -0
  8. data/lib/ie/external_route.rb +9 -0
  9. data/lib/ie/id.rb +3 -4
  10. data/lib/ie/ie.rb +12 -0
  11. data/lib/ie/ls_age.rb +35 -5
  12. data/lib/ie/ls_type.rb +40 -37
  13. data/lib/ie/opaque_id.rb +46 -0
  14. data/lib/ie/opaque_type.rb +96 -0
  15. data/lib/ie/options.rb +5 -3
  16. data/lib/ie/router_link.rb +30 -7
  17. data/lib/ie/router_link_type.rb +116 -27
  18. data/lib/ie/sequence_number.rb +7 -3
  19. data/lib/infra/ospf_common.rb +1 -12
  20. data/lib/infra/ospf_io.rb +14 -8
  21. data/lib/infra/ospf_socket.rb +14 -14
  22. data/lib/infra/parse_options.rb +69 -25
  23. data/lib/ls_db/advertised_routers.rb +1 -1
  24. data/lib/ls_db/link_state_database.rb +74 -39
  25. data/lib/ls_db/link_state_database_build.rb +3 -3
  26. data/lib/ls_db/link_state_database_links.rb +7 -2
  27. data/lib/ls_db/lsdb_ios.rb +59 -0
  28. data/lib/lsa/external.rb +35 -2
  29. data/lib/lsa/lsa.rb +128 -35
  30. data/lib/lsa/lsa_factory.rb +20 -7
  31. data/lib/lsa/network.rb +44 -9
  32. data/lib/lsa/router.rb +14 -2
  33. data/lib/lsa/summary.rb +16 -3
  34. data/lib/lsa/tlv/color.rb +47 -0
  35. data/lib/lsa/tlv/link.rb +122 -0
  36. data/lib/lsa/tlv/link_id.rb +55 -0
  37. data/lib/lsa/tlv/link_type.rb +44 -0
  38. data/lib/lsa/tlv/local_interface.rb +56 -0
  39. data/lib/lsa/tlv/maximum_bandwidth.rb +55 -0
  40. data/lib/lsa/tlv/maximum_reservable_bandwidth.rb +52 -0
  41. data/lib/lsa/tlv/remote_interface.rb +58 -0
  42. data/lib/lsa/tlv/router_address.rb +57 -0
  43. data/lib/lsa/tlv/tlv.rb +32 -0
  44. data/lib/lsa/tlv/tlv_factory.rb +72 -0
  45. data/lib/lsa/tlv/traffic_engineering_metric.rb +52 -0
  46. data/lib/lsa/tlv/unreserved_bandwidth.rb +55 -0
  47. data/lib/lsa/traffic_engineering.rb +95 -0
  48. data/lib/neighbor/neighbor.rb +9 -9
  49. data/lib/packet/link_state_update.rb +16 -14
  50. data/lib/packet/ospf_packet.rb +13 -9
  51. data/test/unit/ie/au_type_test.rb +18 -0
  52. data/test/unit/ie/external_route_test.rb +51 -0
  53. data/test/unit/ie/id_test.rb +22 -0
  54. data/test/unit/ie/interface_mtu_test.rb +23 -0
  55. data/test/unit/ie/ls_age_test.rb +46 -0
  56. data/test/unit/ie/ls_type_test.rb +41 -0
  57. data/test/unit/ie/metric_test.rb +24 -0
  58. data/test/unit/ie/mt_metric_test.rb +27 -0
  59. data/test/unit/ie/opaque_id_test.rb +22 -0
  60. data/test/unit/ie/opaque_type_test.rb +22 -0
  61. data/test/unit/ie/options_test.rb +142 -0
  62. data/test/unit/ie/ospf_version_test.rb +0 -0
  63. data/test/unit/ie/packet_type_test.rb +33 -0
  64. data/test/unit/ie/router_link_factory_test.rb +26 -0
  65. data/test/unit/ie/router_link_test.rb +276 -0
  66. data/test/unit/ie/router_link_type_test.rb +24 -0
  67. data/test/unit/ie/sequence_number_test.rb +31 -0
  68. data/test/unit/ie/tos_metric_test.rb +27 -0
  69. data/test/unit/infra/ospf_common_test.rb +42 -0
  70. data/test/unit/infra/parse_options_test.rb +58 -0
  71. data/test/unit/infra/timer_test.rb +94 -0
  72. data/test/unit/ls_db/all +10 -0
  73. data/test/unit/ls_db/link_state_database_build_test.rb +140 -0
  74. data/test/unit/ls_db/link_state_database_links_tests.rb +74 -0
  75. data/test/unit/ls_db/link_state_database_test.rb +444 -0
  76. data/test/unit/ls_db/links_test.rb +49 -0
  77. data/test/unit/lsa/all +10 -0
  78. data/test/unit/lsa/external_test.rb +218 -0
  79. data/test/unit/lsa/lsa_factory_test.rb +314 -0
  80. data/test/unit/lsa/lsa_test.rb +191 -0
  81. data/test/unit/lsa/network_test.rb +107 -0
  82. data/test/unit/lsa/router_test.rb +614 -0
  83. data/test/unit/lsa/summary_test.rb +135 -0
  84. data/test/unit/lsa/tlv/color_test.rb +39 -0
  85. data/test/unit/lsa/tlv/link_id_test.rb +14 -0
  86. data/test/unit/lsa/tlv/link_test.rb +413 -0
  87. data/test/unit/lsa/tlv/link_type_test.rb +16 -0
  88. data/test/unit/lsa/tlv/local_interface_test.rb +15 -0
  89. data/test/unit/lsa/tlv/maximum_bandwidth_test.rb +14 -0
  90. data/test/unit/lsa/tlv/maximum_reservable_bandwidth_test.rb +13 -0
  91. data/test/unit/lsa/tlv/remote_interface_test.rb +14 -0
  92. data/test/unit/lsa/tlv/router_address_test.rb +16 -0
  93. data/test/unit/lsa/tlv/tlv_factory_test.rb +89 -0
  94. data/test/unit/lsa/tlv/traffic_engineering_metric_test.rb +15 -0
  95. data/test/unit/lsa/traffic_engineering_test.rb +65 -0
  96. data/test/unit/neighbor/neighbor_test.rb +82 -0
  97. data/test/unit/packet/all +10 -0
  98. data/test/unit/packet/database_description_test.rb +114 -0
  99. data/test/unit/packet/hello_test.rb +107 -0
  100. data/test/unit/packet/link_state_ack_test.rb +64 -0
  101. data/test/unit/packet/link_state_request_test.rb +168 -0
  102. data/test/unit/packet/link_state_update_test.rb +62 -0
  103. data/test/unit/packet/ospf_packet_test.rb +91 -0
  104. metadata +106 -51
  105. data/lib/infra/to_s.rb +0 -38
  106. data/lib/lsa/lsa_base.rb +0 -430
  107. data/lib/lsa/opaque.rb +0 -143
@@ -0,0 +1,191 @@
1
+ require "test/unit"
2
+
3
+ require_relative "../../../lib/lsa/lsa"
4
+ # require_relative "lsa/lsa"
5
+
6
+ class TestPacketLsa < Test::Unit::TestCase
7
+ include OSPFv2
8
+ def test_new
9
+ assert Lsa.new
10
+ assert_equal '0000000100000000000000008000000195d30014', Lsa.new.to_shex
11
+ hdr = Lsa.new :advertising_router=> '1.1.1.1',
12
+ :ls_type => :router,
13
+ :ls_id => '2.2.2.2',
14
+ :options => 7,
15
+ :ls_age => 0xffff
16
+
17
+ assert_equal 'AdvertisingRouter: 1.1.1.1', hdr.advertising_router.to_s
18
+ assert_equal 'LsId: 2.2.2.2', hdr.ls_id.to_s
19
+ assert_equal 'LsType: router', hdr.ls_type.to_s
20
+ assert_equal 7, hdr.options.to_i
21
+ assert_equal 'Options: 0x7 [MC,E,V6]', hdr.options.to_s
22
+ assert_equal 'ffff0701020202020101010180000001b1a40014', hdr.to_shex
23
+ assert_equal hdr.to_shex, Lsa.new_ntop(hdr.encode).to_shex
24
+ assert_equal hdr.to_shex, Lsa.new_ntop(hdr).to_shex
25
+ assert_equal [1, 33686018, 16843009], hdr.key
26
+ hdr.advertising_router='2.2.2.2'
27
+ assert_equal '2.2.2.2',hdr.header_lsa.advertising_router.to_hash
28
+ hdr.ls_id='2.2.2.2'
29
+ assert_equal '2.2.2.2',hdr.header_lsa.advertising_router.to_hash
30
+ # puts hdr
31
+ end
32
+
33
+ def test_newer
34
+
35
+ lsa1 = Lsa.new :advertising_router=> '1.1.1.1',
36
+ :ls_type => :router,
37
+ :ls_id => '2.2.2.2',
38
+ :options => 7,
39
+ :ls_age => 0xffff
40
+ lsa2 = Lsa.new :advertising_router=> '1.1.1.1',
41
+ :ls_type => :router,
42
+ :ls_id => '2.2.2.2',
43
+ :options => 7,
44
+ :ls_age => 0xffff
45
+
46
+ lsa1.instance_eval { @_csum = [0].pack('n') }
47
+ lsa2.instance_eval { @_csum = [0].pack('n') }
48
+
49
+ assert (lsa1 <=> lsa2)
50
+ lsa1.ls_age=2
51
+ assert (lsa1 > lsa2)
52
+ lsa2.ls_age=3
53
+ assert (lsa1 == lsa2)
54
+ lsa1.sequence_number + 1
55
+ assert lsa1 > lsa2
56
+ lsa2.sequence_number + 1
57
+ assert (lsa1 == lsa2)
58
+ lsa1.instance_eval { @_csum = [0xabcd].pack('n') }
59
+ assert (lsa1 > lsa2)
60
+ lsa2.instance_eval { @_csum = [0xabcd].pack('n') }
61
+ lsa2.ls_age= 900 + 3
62
+ assert (lsa1 > lsa2)
63
+
64
+ end
65
+
66
+ def test_refresh
67
+ advrs = LSDB::AdvertisedRouters.new
68
+ advrs << '1.1.1.1'
69
+ lsa = Lsa.new :advertising_router=> '1.1.1.1',
70
+ :ls_type => :router,
71
+ :ls_id => '2.2.2.2',
72
+ :options => 7,
73
+ :ls_age => 0xffff
74
+ lsa.ls_age = 13
75
+ assert_equal '0x80000001', lsa.sequence_number.to_s
76
+ assert_equal 13, lsa.ls_age.to_i
77
+ lsa.refresh advrs, 4
78
+ lsa.refresh advrs, 4
79
+ lsa.refresh advrs, 4
80
+ lsa.refresh advrs, 4
81
+ lsa.refresh advrs, 4
82
+ assert_equal '0x80000002', lsa.sequence_number.to_s
83
+ assert_equal 0, lsa.ls_age.to_i
84
+ advrs - '1.1.1.1'
85
+ lsa.ls_age = 13
86
+ lsa.refresh advrs, 4
87
+ assert_equal '0x80000002', lsa.sequence_number.to_s
88
+ assert_equal 13, lsa.ls_age.to_i
89
+ advrs << '1.1.1.1'
90
+ lsa.refresh advrs, 4
91
+ assert_equal '0x80000003', lsa.sequence_number.to_s
92
+ assert_equal 0, lsa.ls_age.to_i
93
+ end
94
+
95
+ def test_maxage
96
+ lsa = Lsa.new :advertising_router=> '1.1.1.1',
97
+ :ls_type => :router,
98
+ :ls_id => '2.2.2.2',
99
+ :options => 7
100
+ assert ! lsa.maxaged?
101
+ lsa.maxage
102
+ assert lsa.maxaged?
103
+ end
104
+
105
+ def test_to_s_junos
106
+ lsa = Lsa.new :advertising_router=> '1.1.1.1',
107
+ :ls_type => :router,
108
+ :ls_id => '2.2.2.2',
109
+ :options => 7
110
+ # puts lsa.to_s_junos
111
+ end
112
+
113
+ end
114
+
115
+ __END__
116
+
117
+
118
+ #TODO: see if these test should be implemented and delete them otherwise.
119
+
120
+ def test_compare_equal
121
+ header1 = LSA_Header.new(Ospf::LSA_Header.new({:length=>0xffff,
122
+ :lsage => 1,
123
+ :options => 0xee,
124
+ :lstype => 0xdd,
125
+ :lsid => "254.254.254.254",
126
+ :advr => "253.253.253.253",
127
+ :seqn => 0x12345678,
128
+ :csum => 0xdead,
129
+ :length =>0xef
130
+ }).enc)
131
+ header2 = LSA_Header.new(Ospf::LSA_Header.new(
132
+ {:length=>0xffff,
133
+ :lsage => 1,
134
+ :options => 0xee,
135
+ :lstype => 0xdd,
136
+ :lsid => "254.254.254.254",
137
+ :advr => "253.253.253.253",
138
+ :seqn => 0x12345678,
139
+ :csum => 0xdead,
140
+ :length =>0xef
141
+ }).enc)
142
+ assert_equal(0, header1 <=> header2)
143
+ end
144
+ def test_compare_greater
145
+ header1 = LSA_Header.new(Ospf::LSA_Header.new({:length=>0xffff,
146
+ :lsage => 1,
147
+ :options => 0xee,
148
+ :lstype => 0xdd,
149
+ :lsid => "254.254.254.254",
150
+ :advr => "253.253.253.253",
151
+ :seqn => 0x12345678,
152
+ :csum => 0xdead,
153
+ :length =>0xef
154
+ }).enc)
155
+ header2 = LSA_Header.new(Ospf::LSA_Header.new(
156
+ {:length=>0xffff,
157
+ :lsage => 222,
158
+ :options => 0xee,
159
+ :lstype => 0xbb,
160
+ :lsid => "251.254.254.254",
161
+ :advr => "253.253.253.253",
162
+ :seqn => 0x12345678,
163
+ :csum => 0xdead,
164
+ :length =>0xef
165
+ }).enc)
166
+ assert_equal(1, header1 <=> header2)
167
+ end
168
+ def test_compare_smaller
169
+ header1 = LSA_Header.new(Ospf::LSA_Header.new({:length=>0xffff,
170
+ :lsage => 1,
171
+ :options => 0xee,
172
+ :lstype => 0xdd,
173
+ :lsid => "254.254.254.254",
174
+ :advr => "253.253.253.253",
175
+ :seqn => 0x12345678,
176
+ :csum => 0xdead,
177
+ :length =>0xef
178
+ }).enc)
179
+ header2 = LSA_Header.new(Ospf::LSA_Header.new(
180
+ {:length=>0xffff,
181
+ :lsage => 2,
182
+ :options => 0xdd,
183
+ :lstype => 0xbb,
184
+ :lsid => "254.254.254.254",
185
+ :advr => "253.255.255.253",
186
+ :seqn => 0x12345678,
187
+ :csum => 0xdead,
188
+ :length =>0xef
189
+ }).enc)
190
+ assert_equal(1, header1 <=> header2)
191
+ end
@@ -0,0 +1,107 @@
1
+ require "test/unit"
2
+
3
+ require "lsa/network"
4
+
5
+ class TestLasNetwork < Test::Unit::TestCase
6
+ include OSPFv2
7
+ def setup
8
+ $style = :default
9
+ end
10
+ def tests
11
+ assert Network.new
12
+ assert_equal '000000020000000000000000800000018fd4001800000000', Network.new.to_shex
13
+ assert_equal '000000020000000000000000800000018fd40018ffffff00', Network.new(:network_mask => '255.255.255.0').to_shex
14
+ net = Network.new :network_mask => '255.255.255.0', :ls_id=>'192.168.0.1', :advertising_router => '1.1.1.1'
15
+ to_s_headerhex = net.to_shex
16
+ assert_equal 4*5,net.encode_header.size
17
+ net << '1.1.1.1'
18
+ net << '2.2.2.2'
19
+ net << '3.3.3.3'
20
+ assert_equal 3, net.attached_routers.size
21
+ assert_equal '00000002c0a8000101010101800000011bb60024ffffff00010101010202020203030303', net.to_shex
22
+ net1 = Network.new_ntop ['00000002c0a8000101010101800000011bb60024ffffff00010101010202020203030303'].pack('H*')
23
+ assert_equal net.to_shex, net1.to_shex
24
+ assert_equal net.to_shex, Network.new(net1.to_hash).to_shex
25
+ end
26
+ def test_hash
27
+ end
28
+ def test_to_s
29
+ net = Network.new :network_mask => '255.255.255.0', :ls_id=>'192.168.0.1', :advertising_router => '1.1.1.1'
30
+ net << '1.1.1.1'
31
+ net << '2.2.2.2'
32
+ net << '3.3.3.3'
33
+ assert_match(/NetworkMask: 255.255.255.0/, net.to_s_verbose)
34
+ assert_match(/AttachRouter: 1.1.1.1/, net.to_s_verbose)
35
+ assert_match(/AttachRouter: 2.2.2.2/, net.to_s_verbose)
36
+ assert_match(/AttachRouter: 3.3.3.3/, net.to_s_verbose)
37
+ end
38
+ def test_to_s_junos
39
+ $style = :junos
40
+ net = Network.new :network_mask => '255.255.255.0', :ls_id=>'192.168.0.1', :advertising_router => '1.1.1.1'
41
+ net << '1.1.1.1'
42
+ net << '2.2.2.2'
43
+ net << '3.3.3.3'
44
+
45
+ assert_no_match /\s\smask 255.255.255.0/, net.to_s
46
+ assert_no_match /\s\sattached router 1.1.1.1/, net.to_s
47
+ assert_no_match /\s\sattached router 3.3.3.3/, net.to_s
48
+ assert_match /\s\smask 255.255.255.0/, net.to_s_junos_verbose
49
+ assert_match /\s\sattached router 1.1.1.1/, net.to_s_junos_verbose
50
+ assert_match /\s\sattached router 3.3.3.3/, net.to_s_junos_verbose
51
+ assert_equal 'Network 192.168.0.1 1.1.1.1 0x80000001 0 0x00 0x1bb6 36', net.to_s_junos
52
+ end
53
+
54
+ def test_to_s_ios
55
+ net = Network.new :network_mask => '255.255.255.0', :ls_id=>'192.168.0.1', :advertising_router => '1.1.1.1'
56
+ net << '1.1.1.1'
57
+ net << '2.2.2.2'
58
+ net << '3.3.3.3'
59
+
60
+ # puts net.to_s_ios
61
+ # puts net.to_s_ios_verbose
62
+ end
63
+
64
+
65
+ end
66
+
67
+ __END__
68
+
69
+
70
+ R1#show ip ospf database network
71
+
72
+ OSPF Router with ID (1.1.1.1) (Process ID 1)
73
+
74
+ Net Link States (Area 0)
75
+
76
+ Routing Bit Set on this LSA
77
+ LS age: 612
78
+ Options: (No TOS-capability, DC)
79
+ LS Type: Network Links
80
+ Link State ID: 192.168.0.2 (address of Designated Router)
81
+ Advertising Router: 2.2.2.2
82
+ LS Seq Number: 80000015
83
+ Checksum: 0xEBBA
84
+ Length: 32
85
+ Network Mask: /24
86
+ Attached Router: 2.2.2.2
87
+ Attached Router: 1.1.1.1
88
+
89
+ R1#
90
+
91
+
92
+
93
+
94
+ Net Link States (Area 0)
95
+
96
+ LS age: 806
97
+ Options: 0x22 [DC,E]
98
+ LS Type: Network Links
99
+ Link State ID: 192.168.0.2
100
+ Advertising Router: 2.2.2.2
101
+ LS Seq Number: 80000015
102
+ Checksum: 0xEBBA
103
+ Length: 32
104
+ Network Mask: 255.255.255.0
105
+ Attached Router 2.2.2.2
106
+ Attached Router 1.1.1.1
107
+
@@ -0,0 +1,614 @@
1
+ require "test/unit"
2
+
3
+ require "lsa/router"
4
+ require "lsa/lsa_factory"
5
+
6
+ class TestLsaRouter < Test::Unit::TestCase
7
+ include OSPFv2
8
+ def setup
9
+ @rlsa = Router.new()
10
+ @rlsa << @rlink1 = RouterLink.new_point_to_point(:link_id=>'1.1.1.1', :link_data=>'255.255.255.255', :metric=>11)
11
+ @rlsa << @rlink2 = RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>12)
12
+ @rlsa << @rlink22 = RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>122)
13
+ @rlsa << @rlink3 = RouterLink.new_point_to_point(:link_id=>'1.1.1.3', :link_data=>'255.255.255.255', :metric=>13)
14
+ @rlsa << @rlink4 = RouterLink.new_transit_network(:link_id=>'1.1.1.4', :link_data=>'255.255.255.255', :metric=>14)
15
+ @rlsa << @rlink5 = RouterLink.new_point_to_point(:link_id=>'1.1.1.5', :link_data=>'255.255.255.255', :metric=>15)
16
+ end
17
+
18
+ def test_init_RouterLink
19
+ _link1 = {:router_link_type=>1, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
20
+ _link2 = {:router_link_type=>2, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
21
+ _link3 = {:router_link_type=>3, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
22
+ _link = {:router_link_type=>3, :metric=>1, :link_data=>"255.255.255.240", :link_id=>"192.168.8.0"}
23
+
24
+ assert_equal("RouterLink:\n LinkId: 192.168.8.0\n LinkData: 255.255.255.240\n RouterLinkType: stub_network\n Metric: 1", RouterLink.new(_link3).to_s)
25
+ assert_equal("c0a80800fffffff003000001", RouterLink.new(_link3).to_shex)
26
+ assert_equal(:stub_network, RouterLink.new(_link3).to_hash[:router_link_type])
27
+ assert_equal(1, RouterLink.new(_link3).to_hash[:metric])
28
+ assert_equal("255.255.255.240", RouterLink.new(_link3).to_hash[:link_data])
29
+ assert_equal("192.168.8.0", RouterLink.new(_link3).to_hash[:link_id])
30
+ link = RouterLink.new(_link3)
31
+ assert_equal(link.encode, RouterLink.new(link.encode).encode)
32
+ assert_equal(:transit_network, RouterLink.new(_link2).to_hash[:router_link_type])
33
+ assert_equal(:point_to_point, RouterLink.new(_link1).to_hash[:router_link_type])
34
+ end
35
+
36
+ def tests
37
+ assert Router.new
38
+ assert_equal '000000010000000000000000800000019dc7001800000000', Router.new.to_shex
39
+
40
+ rlsa = Router.new :advertising_router => '1.1.1.1', :link_id => '2.2.2.2'
41
+
42
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.1', :link_data=>'255.255.255.255', :metric=>11)
43
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>12)
44
+
45
+ r = Router.new_ntop(rlsa.encode)
46
+ assert_equal rlsa.to_shex, r.to_shex
47
+ assert_equal OSPFv2::Router, r.class
48
+ assert_equal '1.1.1.1', rlsa.to_hash[:advertising_router]
49
+ end
50
+
51
+ def test_nwveb
52
+ r = Router.new :link_id=> '1.0.0.0', :link_data=> '255.255.255.0'
53
+ rl = RouterLink::StubNetwork.new(:link_data=>'2.2.2.2')
54
+ r << RouterLink::StubNetwork.new(:link_data=>'2.2.2.2')
55
+ r << RouterLink::PointToPoint.new(:link_data=>'2.2.2.2', :link_id=>'1.1.1.1', :metric=>255)
56
+ assert_equal 0, r.nwveb
57
+
58
+ r.set_abr
59
+ assert r.abr?
60
+ assert ! r.asbr?
61
+ assert ! r.vl?
62
+ assert ! r.wild?
63
+ assert ! r.nssa?
64
+ assert_equal 1, r.nwveb
65
+ # puts r
66
+
67
+ r.set_asbr
68
+ assert r.abr?
69
+ assert r.asbr?
70
+ assert ! r.vl?
71
+ assert ! r.wild?
72
+ assert ! r.nssa?
73
+ assert_equal 3, r.nwveb
74
+ # puts r
75
+
76
+ r.set_vl
77
+ r.unset_abr
78
+ assert ! r.abr?
79
+ assert r.asbr?
80
+ assert r.vl?
81
+ assert ! r.wild?
82
+ assert ! r.nssa?
83
+ assert_equal 6, r.nwveb
84
+ # puts r
85
+
86
+ r.set_wild
87
+ r.unset_asbr
88
+ assert ! r.abr?
89
+ assert ! r.asbr?
90
+ assert r.vl?
91
+ assert r.wild?
92
+ assert ! r.nssa?
93
+ assert_equal 12, r.nwveb
94
+
95
+ r.set_nssa
96
+ r.unset_vl
97
+ assert ! r.abr?
98
+ assert ! r.asbr?
99
+ assert ! r.vl?
100
+ assert r.wild?
101
+ assert r.nssa?
102
+ assert_equal 24, r.nwveb
103
+
104
+ r.unset_wild
105
+ r.unset_nssa
106
+ assert_equal 0, r.nwveb
107
+
108
+ end
109
+
110
+
111
+ def _test_hash
112
+
113
+
114
+
115
+
116
+ end
117
+
118
+
119
+ def test_args_to_key
120
+ assert_equal [1,'1.1.1.3'], @rlsa.args_to_key(:point_to_point, '1.1.1.3')
121
+ assert_equal [1,'1.1.1.3'], @rlsa.args_to_key(1,'1.1.1.3')
122
+ assert_equal [1,'1.1.1.3'], @rlsa.args_to_key(@rlsa.links[3])
123
+ end
124
+
125
+ def test_index
126
+ assert_equal 'Metric: 13', @rlsa[1,'1.1.1.3'].metric.to_s
127
+ end
128
+
129
+ def test_has?
130
+ assert @rlsa.has_link?(:point_to_point,'1.1.1.3')
131
+ assert ! @rlsa.has_link?(:point_to_point,'1.1.1.4')
132
+ assert @rlsa.has_link?(2,'1.1.1.4')
133
+ assert ! @rlsa.has_link?(:stub_network,'9.9.9.9')
134
+ end
135
+
136
+ def test_delete_link
137
+ rlsa = Router.new()
138
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.1', :link_data=>'255.255.255.255', :metric=>11)
139
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>12)
140
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>122)
141
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.3', :link_data=>'255.255.255.255', :metric=>13)
142
+ rlsa << RouterLink.new_transit_network(:link_id=>'1.1.1.4', :link_data=>'255.255.255.255', :metric=>14)
143
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.5', :link_data=>'255.255.255.255', :metric=>15)
144
+ rlsa << RouterLink.new_stub_network(:link_id=>'192.168.0.0', :link_data=>'255.255.255.0', :metric=>15)
145
+ assert_equal 7, rlsa.links.size
146
+ assert rlsa.has_link?(:transit_network,'1.1.1.4')
147
+ assert rlsa.has_link?(2,'1.1.1.4')
148
+ rlsa.delete(2,'1.1.1.4')
149
+ assert ! rlsa.has_link?(2,'1.1.1.4')
150
+ assert_equal 6, rlsa.links.size
151
+ rlsa.delete(:point_to_point,'1.1.1.1')
152
+ assert ! rlsa.has_link?(1,'1.1.1.1')
153
+ assert_equal 5, rlsa.links.size
154
+ end
155
+
156
+ def test_lookup
157
+ rlsa = Router.new()
158
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.1', :link_data=>'255.255.255.255', :metric=>11)
159
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>12)
160
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>122)
161
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.3', :link_data=>'255.255.255.255', :metric=>13)
162
+ rlsa << RouterLink.new_transit_network(:link_id=>'1.1.1.4', :link_data=>'255.255.255.255', :metric=>14)
163
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.5', :link_data=>'255.255.255.255', :metric=>15)
164
+ rlsa << RouterLink.new_stub_network(:link_id=>'192.168.0.0', :link_data=>'255.255.255.0', :metric=>15)
165
+
166
+ # puts rlsa
167
+ # puts rlsa.to_s_junos
168
+
169
+ assert rlsa.lookup(1,'1.1.1.1')
170
+ assert rlsa.lookup(:point_to_point,'1.1.1.1')
171
+ assert_equal RouterLink::PointToPoint, rlsa.lookup(1,'1.1.1.1').class
172
+ assert rlsa.lookup(1,'1.1.1.1')
173
+ assert rlsa[:point_to_point,'1.1.1.1']
174
+ assert rlsa[1,'1.1.1.1']
175
+ assert ! rlsa.lookup(2,'1.1.1.1')
176
+
177
+ assert rlsa.lookup(3,'192.168.0.0')
178
+ assert rlsa.lookup(:stub_network,'192.168.0.0')
179
+ assert rlsa[:stub_network,'192.168.0.0']
180
+ assert rlsa[3,'192.168.0.0']
181
+ assert ! rlsa[1,'192.168.0.0']
182
+
183
+ end
184
+
185
+ def test_lookup
186
+ rlsa = Router.new()
187
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.1', :link_data=>'255.255.255.255', :metric=>11)
188
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>12)
189
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.2', :link_data=>'255.255.255.255', :metric=>122)
190
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.3', :link_data=>'255.255.255.255', :metric=>13)
191
+ rlsa << RouterLink.new_transit_network(:link_id=>'1.1.1.4', :link_data=>'255.255.255.255', :metric=>14)
192
+ rlsa << RouterLink.new_point_to_point(:link_id=>'1.1.1.5', :link_data=>'255.255.255.255', :metric=>15)
193
+ rlsa << RouterLink.new_stub_network(:link_id=>'192.168.0.0', :link_data=>'255.255.255.0', :metric=>15)
194
+
195
+ assert_equal 7, rlsa.links.size
196
+ assert rlsa.lookup(1,'1.1.1.1')
197
+ rlsa.delete(rlsa.lookup(:point_to_point,'1.1.1.1'))
198
+ assert_equal 6, rlsa.links.size
199
+ rlsa.delete(rlsa.lookup(:point_to_point,'1.1.1.2'))
200
+ assert_equal 4, rlsa.links.size
201
+ rlsa.delete(rlsa.lookup(:point_to_point,'1.1.1.3'))
202
+ rlsa.delete(rlsa.lookup(:point_to_point,'1.1.1.5'))
203
+ assert_equal 2, rlsa.links.size
204
+
205
+ end
206
+
207
+ end
208
+
209
+ __END__
210
+
211
+
212
+ class RouterLSA_Test < Test::Unit::TestCase # :nodoc:
213
+ include Ospf
214
+
215
+
216
+ assert_equal(6, lsa.links.size)
217
+ assert_equal(Array, lsa.links.class)
218
+ assert_equal("10.255.8.6", lsa.to_hash[:lsid])
219
+ assert_equal("10.255.8.6", lsa.to_hash[:advr])
220
+ assert_equal(0x22, lsa.to_hash[:options])
221
+ assert_equal(0x8000016b, lsa.to_hash[:seqn])
222
+ assert_equal(0xe3f5, lsa.to_hash[:csum])
223
+ link = lsa.lookup(3,'10.254.241.0')
224
+ assert_match(/type: stub id: 10.254.241.0/,link.to_s)
225
+ end
226
+ def test_init_RouterLink_mt_id
227
+ rlsa = "
228
+ 00 01 22 01 0a ff 08 02 0a ff 08 02 80 00 00 03
229
+ 99 c4 00 40 00 00 00 02 02 02 02 02 0a fe e9 e9
230
+ 01 02 00 01 21 00 00 14 22 00 00 ff 0a fe e9 00
231
+ ff ff ff 00 03 02 00 01 21 00 00 14 22 00 00 ff
232
+ "
233
+ lsa = Ospf::RouterLSA.new([rlsa.split.join].pack('H*'))
234
+
235
+ assert_match(/bits 0x0, link count 2\n\s*id 2.2.2.2, data 10.254.233.233, Type Point-to-point \(1\)\n\s*Topology /,lsa.to_s_junos_style(:detailed))
236
+
237
+ assert_equal(rlsa.split.join, lsa.to_shex)
238
+ assert_equal(2, lsa.links.size)
239
+ assert_equal("10.255.8.2", lsa.to_hash[:lsid])
240
+ assert_equal("10.255.8.2", lsa.to_hash[:advr])
241
+ assert_equal(0x22, lsa.to_hash[:options])
242
+ assert_equal(0x80000003, lsa.to_hash[:seqn])
243
+ assert_equal(0x99c4, lsa.to_hash[:csum])
244
+
245
+ assert_equal(33,lsa.to_hash[:links][0][:mt_id][0][:id])
246
+ assert_equal(34,lsa.to_hash[:links][0][:mt_id][1][:id])
247
+ assert_equal(20,lsa.to_hash[:links][0][:mt_id][0][:metric])
248
+ assert_equal(255,lsa.to_hash[:links][0][:mt_id][1][:metric])
249
+
250
+ end
251
+ def test_nwveb
252
+ lsa = Ospf::RouterLSA.new()
253
+ lsa.setABR
254
+ assert_equal(1, lsa.to_hash[:nwveb])
255
+ lsa.setVL
256
+ assert_equal(5, lsa.to_hash[:nwveb])
257
+ lsa.setASBR
258
+ assert_equal(7, lsa.to_hash[:nwveb])
259
+ lsa.setWr
260
+ assert_equal(15, lsa.to_hash[:nwveb])
261
+ lsa.setNt
262
+ assert_equal(31, lsa.to_hash[:nwveb])
263
+ lsa.setABR
264
+ lsa.setVL
265
+ lsa.setASBR
266
+ lsa.setNt
267
+ lsa.setWr
268
+ assert_equal(true,lsa.isWr?)
269
+ assert_equal(true,lsa.isNt?)
270
+ assert_equal(true,lsa.isABR?)
271
+ assert_equal(true,lsa.isASBR?)
272
+ assert_equal(true,lsa.isVL?)
273
+
274
+ assert_equal(31, lsa.to_hash[:nwveb])
275
+ lsa.unsetNt
276
+ assert_equal(15, lsa.to_hash[:nwveb])
277
+ lsa.unsetWr
278
+ assert_equal(7, lsa.to_hash[:nwveb])
279
+ lsa.unsetABR
280
+ assert_equal(6, lsa.to_hash[:nwveb])
281
+ lsa.unsetVL
282
+ assert_equal(2, lsa.to_hash[:nwveb])
283
+ lsa.unsetASBR
284
+ assert_equal(0, lsa.to_hash[:nwveb])
285
+ assert_equal(false,lsa.isABR?)
286
+ assert_equal(false,lsa.isASBR?)
287
+ assert_equal(false,lsa.isVL?)
288
+
289
+ lsa.unsetABR
290
+ lsa.unsetVL
291
+ lsa.unsetASBR
292
+ assert_equal(0, lsa.to_hash[:nwveb])
293
+ end
294
+
295
+ def test_has?
296
+ assert @rlsa.has?(:point_to_point,'1.1.1.3')
297
+ assert ! @rlsa.has?(:stub_network,'9.9.9.9'))
298
+ end
299
+
300
+
301
+ # def test_add
302
+ # rlsa = RouterLSA.new()
303
+ # rlsa << rlink1 = RouterLink.p2p({:id=>'1.1.1.1', :data=>'255.255.255.255', :metric=>11,})
304
+ # assert_equal(false, rlsa.has?(1,'2.2.2.2'))
305
+ # assert_equal(1,rlsa.links.compact.size)
306
+ # rlsa << {:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>11, :type=>1}
307
+ # assert_equal(2,rlsa.links.compact.size)
308
+ # rlsa << {:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>11, :type=>1}
309
+ # assert_equal(3,rlsa.links.compact.size)
310
+ # end
311
+
312
+ end
313
+
314
+
315
+
316
+
317
+ require 'test/unit'
318
+ require 'pp'
319
+ require 'lsa_router'
320
+
321
+ class LSA_RouterLinkTest < Test::Unit::TestCase # :nodoc:
322
+ include Ospf
323
+ def setup
324
+ @rlink1 = RouterLink.p2p({:id=>'1.1.1.1', :data=>'255.255.255.255', :metric=>11,})
325
+ @rlink2 = RouterLink.p2p({:id=>'1.1.1.2', :data=>'255.255.255.255', :metric=>12,})
326
+ @rlink3 = RouterLink.p2p({:id=>'1.1.1.3', :data=>'255.255.255.255', :metric=>13,})
327
+ @rlink4 = RouterLink.p2p({:id=>'1.1.1.4', :data=>'255.255.255.255', :metric=>14,})
328
+ @rlink5 = RouterLink.p2p({:id=>'1.1.1.5', :data=>'255.255.255.255', :metric=>15,})
329
+ end
330
+ def test_init_RouterLink_Factory_hash
331
+ _link1 = {:type=>1, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
332
+ _link2 = {:type=>2, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
333
+ _link3 = {:type=>3, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
334
+ _link4 = {:type=>4, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
335
+ assert_match(/LinkP2P$/, RouterLink_Factory.create(_link1).class.to_s)
336
+ assert_match(/LinkTransit$/, RouterLink_Factory.create(_link2).class.to_s)
337
+ assert_match(/LinkStub$/, RouterLink_Factory.create(_link3).class.to_s)
338
+ assert_match(/LinkVL$/, RouterLink_Factory.create(_link4).class.to_s)
339
+ assert_raise(ArgumentError) { RouterLink_Factory.create({:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>11,}) }
340
+ end
341
+ def test_init_RouterLink_Factory_string
342
+ _link1 = {:type=>1, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
343
+ _link2 = {:type=>2, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
344
+ _link3 = {:type=>3, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
345
+ _link4 = {:type=>4, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
346
+ slink1 = RouterLink.new(_link1).enc
347
+ slink2 = RouterLink.new(_link2).enc
348
+ slink3 = RouterLink.new(_link3).enc
349
+ slink4 = RouterLink.new(_link4).enc
350
+ assert_match(/LinkP2P$/, RouterLink_Factory.create(slink1).class.to_s)
351
+ assert_match(/LinkTransit$/, RouterLink_Factory.create(slink2).class.to_s)
352
+ assert_match(/LinkStub$/, RouterLink_Factory.create(slink3).class.to_s)
353
+ assert_match(/LinkVL$/, RouterLink_Factory.create(slink4).class.to_s)
354
+ end
355
+ def test_init_RouterLink
356
+ _link1 = {:type=>1, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
357
+ _link2 = {:type=>2, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
358
+ _link3 = {:type=>3, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
359
+ _link = {:type=>3, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
360
+ assert_equal("type: stub id: 192.168.8.0 data: 255.255.255.240 metric: 1", RouterLink.new(_link3).to_s)
361
+ assert_equal("c0a80800fffffff003000001", RouterLink.new(_link3).to_shex)
362
+ assert_equal(3, RouterLink.new(_link3).to_hash[:type])
363
+ assert_equal(1, RouterLink.new(_link3).to_hash[:metric])
364
+ assert_equal("255.255.255.240", RouterLink.new(_link3).to_hash[:data])
365
+ assert_equal("192.168.8.0", RouterLink.new(_link3).to_hash[:id])
366
+ link = RouterLink.new(_link3)
367
+ assert_equal(link.enc, RouterLink.new(link.enc).enc)
368
+ assert_equal(2, RouterLink.new(_link2).to_hash[:type])
369
+ assert_equal(1, RouterLink.new(_link1).to_hash[:type])
370
+ end
371
+
372
+ def test_RouterLink_to_s_junos_style
373
+ _link1 = {:type=>1, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
374
+ _link2 = {:type=>2, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
375
+ _link3 = {:type=>3, :metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
376
+ assert_equal(" id 192.168.8.0, data 255.255.255.240, Type Point-to-point (1)\n Topology count: 0, Default metric: 1", RouterLink.new(_link1).to_s_junos_style)
377
+ assert_equal(" id 192.168.8.0, data 255.255.255.240, Type Transit (2)\n Topology count: 0, Default metric: 1", RouterLink.new(_link2).to_s_junos_style)
378
+ assert_equal(" id 192.168.8.0, data 255.255.255.240, Type Stub (3)\n Topology count: 0, Default metric: 1", RouterLink.new(_link3).to_s_junos_style)
379
+ end
380
+
381
+ def test_init_RouterLink_mt
382
+ _link1 = {:type=>1, :metric=>1,:mt_id=>[{:metric=>20, :id=>33}, {:metric=>255, :id=>34}], :data=>"10.254.233.233",:id=>"2.2.2.2"}
383
+ _link2 = {:type=>3, :metric=>1,:mt_id=>[{:metric=>20, :id=>33}, {:metric=>255, :id=>34}], :data=>"255.255.255.0", :id=>"10.254.233.0"}
384
+ _link3 = {:type=>1, :metric=>1,:mt_id=>[[33,20],[34,255]], :data=>"10.254.233.233",:id=>"2.2.2.2"}
385
+ _link4 = {:type=>1, :metric=>1, :data=>"10.254.233.233",:id=>"2.2.2.2"}
386
+ assert_equal(33, RouterLink.new(_link1).to_hash[:mt_id][0][:id])
387
+ assert_equal(20, RouterLink.new(_link1).to_hash[:mt_id][0][:metric])
388
+
389
+ assert_equal("020202020afee9e90102000121000014220000ff", RouterLink.new(_link1).to_shex)
390
+ assert_equal("020202020afee9e90102000121000014220000ff", RouterLink.new(RouterLink.new(_link1).enc).to_shex)
391
+ assert_equal("020202020afee9e90102000121000014220000ff", RouterLink.new(RouterLink.new(_link3).enc).to_shex)
392
+
393
+ rlink = RouterLink.new(_link4)
394
+ rlink << [33,20]
395
+ rlink << [34,255]
396
+ assert_equal("020202020afee9e90102000121000014220000ff", rlink.to_shex)
397
+
398
+ rlink = RouterLink.new(_link4)
399
+ rlink << MT.new([33,20])
400
+ rlink << MT.new([34,255])
401
+ assert_equal("020202020afee9e90102000121000014220000ff", rlink.to_shex)
402
+ rlink = RouterLink.new(_link4)
403
+ rlink << [33,20] << [34,255]
404
+ assert_equal("020202020afee9e90102000121000014220000ff", rlink.to_shex)
405
+ rlink = RouterLink.new(_link4)
406
+ assert_raise(ArgumentError) { rlink << [33] }
407
+ assert_raise(ArgumentError) { rlink << [33,100,1] }
408
+
409
+ end
410
+ def test_init_RouterLinkP2P
411
+ _link = {:metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
412
+ assert_equal("type: p2p id: 192.168.8.0 data: 255.255.255.240 metric: 1", RouterLinkP2P.new(_link).to_s)
413
+ assert_equal("c0a80800fffffff001000001", RouterLinkP2P.new(_link).to_shex)
414
+ assert_equal(1, RouterLinkP2P.new(_link).to_hash[:type])
415
+ assert_equal(1, RouterLinkP2P.new(_link).to_hash[:metric])
416
+ assert_equal("255.255.255.240", RouterLinkP2P.new(_link).to_hash[:data])
417
+ assert_equal("192.168.8.0", RouterLinkP2P.new(_link).to_hash[:id])
418
+ link = RouterLinkP2P.new(_link)
419
+ assert_equal(link.enc, RouterLinkP2P.new(link.to_hash).enc)
420
+ end
421
+ def test_init_RouterLinkTransit
422
+ _link = {:metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
423
+ assert_equal("type: transit id: 192.168.8.0 data: 255.255.255.240 metric: 1", RouterLinkTransit.new(_link).to_s)
424
+ assert_equal("c0a80800fffffff002000001", RouterLinkTransit.new(_link).to_shex)
425
+ assert_equal(2, RouterLinkTransit.new(_link).to_hash[:type])
426
+ assert_equal(1, RouterLinkTransit.new(_link).to_hash[:metric])
427
+ assert_equal("255.255.255.240", RouterLinkTransit.new(_link).to_hash[:data])
428
+ assert_equal("192.168.8.0", RouterLinkTransit.new(_link).to_hash[:id])
429
+ link = RouterLinkTransit.new(_link)
430
+ assert_equal(link.enc, RouterLinkTransit.new(link.to_hash).enc)
431
+ end
432
+ def test_init_RouterLinkStub
433
+ _link = {:metric=>1, :data=>"255.255.255.240", :id=>"192.168.8.0"}
434
+ assert_equal("type: stub id: 192.168.8.0 data: 255.255.255.240 metric: 1", RouterLinkStub.new(_link).to_s)
435
+ assert_equal("c0a80800fffffff003000001", RouterLinkStub.new(_link).to_shex)
436
+ assert_equal(3, RouterLinkStub.new(_link).to_hash[:type])
437
+ assert_equal(1, RouterLinkStub.new(_link).to_hash[:metric])
438
+ assert_equal("255.255.255.240", RouterLinkStub.new(_link).to_hash[:data])
439
+ assert_equal("192.168.8.0", RouterLinkStub.new(_link).to_hash[:id])
440
+ assert_equal("stub", RouterLinkStub.new().type_to_s)
441
+
442
+ link = RouterLinkStub.new(_link)
443
+ assert_equal(link.enc, RouterLinkStub.new(link.to_hash).enc)
444
+ end
445
+ def test_RouterLink_type_to_s
446
+ assert_equal("p2p", RouterLink.type_to_s[1])
447
+ assert_equal("transit", RouterLink.type_to_s[2])
448
+ assert_equal("stub", RouterLink.type_to_s[3])
449
+ assert_equal("vl", RouterLink.type_to_s[4])
450
+ end
451
+ def test_RouterLink_type_to_i
452
+ assert_equal(3, RouterLink.type_to_i["stub"])
453
+ assert_equal(1, RouterLink.type_to_i["p2p"])
454
+ assert_equal(2, RouterLink.type_to_i["transit"])
455
+ assert_equal(nil, RouterLink.type_to_i["bogus"])
456
+ end
457
+ def test_key
458
+ assert_equal([1,'1.1.1.1'],@rlink1.key)
459
+ assert_equal([1,'1.1.1.3'],@rlink3.key)
460
+ end
461
+ def test_init_RouterLinkVL
462
+ end
463
+ end
464
+
465
+ class RouterLSA_Test < Test::Unit::TestCase # :nodoc:
466
+ include Ospf
467
+
468
+ def setup
469
+ @rlsa = RouterLSA.new()
470
+ @rlsa << @rlink1 = RouterLink.p2p({:id=>'1.1.1.1', :data=>'255.255.255.255', :metric=>11,})
471
+ @rlsa << @rlink2 = RouterLink.p2p({:id=>'1.1.1.2', :data=>'255.255.255.255', :metric=>12,})
472
+ @rlsa << @rlink22 = RouterLink.p2p({:id=>'1.1.1.2', :data=>'255.255.255.255', :metric=>122,})
473
+ @rlsa << @rlink3 = RouterLink.p2p({:id=>'1.1.1.3', :data=>'255.255.255.255', :metric=>13,})
474
+ @rlsa << @rlink4 = RouterLink.p2p({:id=>'1.1.1.4', :data=>'255.255.255.255', :metric=>14,})
475
+ @rlsa << @rlink5 = RouterLink.p2p({:id=>'1.1.1.5', :data=>'255.255.255.255', :metric=>15,})
476
+ end
477
+ def test_init_RouterLink
478
+ rlsa = "
479
+ 00 01 22 01 0a ff 08 06 0a ff 08 06 80 00 01 6b
480
+ e3 f5 00 60 00 00 00 06 c0 a8 08 00 ff ff ff f0
481
+ 03 00 00 01 01 01 01 01 0a fe f1 f1 01 00 00 01
482
+ 0a fe f1 00 ff ff ff 00 03 00 00 01 c0 a8 fe f1
483
+ ff ff ff ff 03 00 00 00 0a ff 08 06 ff ff ff ff
484
+ 03 00 00 00 c0 a8 08 3c ff ff ff fc 03 00 00 01
485
+ "
486
+ lsa = Ospf::RouterLSA.new([rlsa.split.join].pack('H*'))
487
+ assert_equal(rlsa.split.join, lsa.to_shex)
488
+
489
+ assert_equal(6, lsa.links.size)
490
+ assert_equal(Array, lsa.links.class)
491
+ assert_equal("10.255.8.6", lsa.to_hash[:lsid])
492
+ assert_equal("10.255.8.6", lsa.to_hash[:advr])
493
+ assert_equal(0x22, lsa.to_hash[:options])
494
+ assert_equal(0x8000016b, lsa.to_hash[:seqn])
495
+ assert_equal(0xe3f5, lsa.to_hash[:csum])
496
+ link = lsa.lookup(3,'10.254.241.0')
497
+ assert_match(/type: stub id: 10.254.241.0/,link.to_s)
498
+ end
499
+ def test_init_RouterLink_mt_id
500
+ rlsa = "
501
+ 00 01 22 01 0a ff 08 02 0a ff 08 02 80 00 00 03
502
+ 99 c4 00 40 00 00 00 02 02 02 02 02 0a fe e9 e9
503
+ 01 02 00 01 21 00 00 14 22 00 00 ff 0a fe e9 00
504
+ ff ff ff 00 03 02 00 01 21 00 00 14 22 00 00 ff
505
+ "
506
+ lsa = Ospf::RouterLSA.new([rlsa.split.join].pack('H*'))
507
+
508
+ assert_match(/bits 0x0, link count 2\n\s*id 2.2.2.2, data 10.254.233.233, Type Point-to-point \(1\)\n\s*Topology /,lsa.to_s_junos_style(:detailed))
509
+
510
+ assert_equal(rlsa.split.join, lsa.to_shex)
511
+ assert_equal(2, lsa.links.size)
512
+ assert_equal("10.255.8.2", lsa.to_hash[:lsid])
513
+ assert_equal("10.255.8.2", lsa.to_hash[:advr])
514
+ assert_equal(0x22, lsa.to_hash[:options])
515
+ assert_equal(0x80000003, lsa.to_hash[:seqn])
516
+ assert_equal(0x99c4, lsa.to_hash[:csum])
517
+
518
+ assert_equal(33,lsa.to_hash[:links][0][:mt_id][0][:id])
519
+ assert_equal(34,lsa.to_hash[:links][0][:mt_id][1][:id])
520
+ assert_equal(20,lsa.to_hash[:links][0][:mt_id][0][:metric])
521
+ assert_equal(255,lsa.to_hash[:links][0][:mt_id][1][:metric])
522
+
523
+ end
524
+ def test_nwveb
525
+ lsa = Ospf::RouterLSA.new()
526
+ lsa.setABR
527
+ assert_equal(1, lsa.to_hash[:nwveb])
528
+ lsa.setVL
529
+ assert_equal(5, lsa.to_hash[:nwveb])
530
+ lsa.setASBR
531
+ assert_equal(7, lsa.to_hash[:nwveb])
532
+ lsa.setWr
533
+ assert_equal(15, lsa.to_hash[:nwveb])
534
+ lsa.setNt
535
+ assert_equal(31, lsa.to_hash[:nwveb])
536
+ lsa.setABR
537
+ lsa.setVL
538
+ lsa.setASBR
539
+ lsa.setNt
540
+ lsa.setWr
541
+ assert_equal(true,lsa.isWr?)
542
+ assert_equal(true,lsa.isNt?)
543
+ assert_equal(true,lsa.isABR?)
544
+ assert_equal(true,lsa.isASBR?)
545
+ assert_equal(true,lsa.isVL?)
546
+
547
+ assert_equal(31, lsa.to_hash[:nwveb])
548
+ lsa.unsetNt
549
+ assert_equal(15, lsa.to_hash[:nwveb])
550
+ lsa.unsetWr
551
+ assert_equal(7, lsa.to_hash[:nwveb])
552
+ lsa.unsetABR
553
+ assert_equal(6, lsa.to_hash[:nwveb])
554
+ lsa.unsetVL
555
+ assert_equal(2, lsa.to_hash[:nwveb])
556
+ lsa.unsetASBR
557
+ assert_equal(0, lsa.to_hash[:nwveb])
558
+ assert_equal(false,lsa.isABR?)
559
+ assert_equal(false,lsa.isASBR?)
560
+ assert_equal(false,lsa.isVL?)
561
+
562
+ lsa.unsetABR
563
+ lsa.unsetVL
564
+ lsa.unsetASBR
565
+ assert_equal(0, lsa.to_hash[:nwveb])
566
+ end
567
+
568
+ def test_lookup
569
+ assert_equal(RouterLink,@rlsa.lookup(1,'1.1.1.1')[0].class)
570
+ assert_equal(2,@rlsa.lookup(@rlink2).size)
571
+ assert_equal(12,@rlsa.lookup(@rlink2)[0].metric)
572
+ assert_equal(122,@rlsa.lookup(@rlink2)[1].metric)
573
+ assert_equal('1.1.1.5',@rlsa.lookup(@rlink5.key)[0].to_hash[:id])
574
+ assert_equal('1.1.1.3',@rlsa.lookup(@rlink3.key)[0].to_hash[:id])
575
+ assert_equal('1.1.1.3',@rlsa.lookup(@rlink3)[0].to_hash[:id])
576
+ end
577
+ def test_has?
578
+ assert_equal(true,@rlsa.has?(1,'1.1.1.3'))
579
+ assert_equal(false,@rlsa.has?(1,'9.9.9.9'))
580
+ end
581
+ def test_add
582
+ rlsa = RouterLSA.new()
583
+ rlsa << rlink1 = RouterLink.p2p({:id=>'1.1.1.1', :data=>'255.255.255.255', :metric=>11,})
584
+ assert_equal(false, rlsa.has?(1,'2.2.2.2'))
585
+ assert_equal(1,rlsa.links.compact.size)
586
+ rlsa << {:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>11, :type=>1}
587
+ assert_equal(2,rlsa.links.compact.size)
588
+ rlsa << {:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>11, :type=>1}
589
+ assert_equal(3,rlsa.links.compact.size)
590
+ end
591
+ def test_delete
592
+ rlsa = RouterLSA.new()
593
+ rlsa << rlink1 = RouterLink.p2p({:id=>'1.1.1.1', :data=>'255.255.255.255', :metric=>11,})
594
+ rlsa << {:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>121, :type=>1}
595
+ rlsa << {:id=>'2.2.2.2', :data=>'255.255.255.255', :metric=>122, :type=>1}
596
+ rlsa << {:id=>'3.3.3.3', :data=>'255.255.255.255', :metric=>13, :type=>1}
597
+ rlsa << {:id=>'4.4.4.4', :data=>'255.255.255.255', :metric=>14, :type=>1}
598
+ assert_equal(5,rlsa.links.compact.size)
599
+ rlsa.delete(1,'4.4.4.4')
600
+ assert_equal(4,rlsa.links.compact.size)
601
+ assert_equal(false,rlsa.has?(1,'4.4.4.4'))
602
+ rlsa.delete(1,'2.2.2.2')
603
+ assert_equal(3,rlsa.links.size)
604
+ assert_equal(true,rlsa.has?(1,'2.2.2.2'))
605
+ assert_equal(122, rlsa.lookup(1,'2.2.2.2')[0].metric)
606
+ rlsa.delete(1,'2.2.2.2')
607
+ rlsa.delete(1,'3.3.3.3')
608
+ assert_equal(1,rlsa.links.size)
609
+ rlsa.delete(rlink1)
610
+ assert_equal([], rlsa.links)
611
+ end
612
+ end
613
+
614
+ __END__