cisco_node_utils 1.0.1 → 1.1.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.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rubocop.yml +81 -1
  4. data/.travis.yml +9 -0
  5. data/CHANGELOG.md +72 -6
  6. data/CONTRIBUTING.md +32 -7
  7. data/README.md +70 -7
  8. data/Rakefile +17 -0
  9. data/bin/check_metric_limits.rb +109 -0
  10. data/bin/git/hooks/commit-msg/enforce_style +81 -0
  11. data/bin/git/hooks/hook_lib +108 -0
  12. data/bin/git/hooks/hooks-wrapper +38 -0
  13. data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
  14. data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
  15. data/bin/git/hooks/post-flow-release-start/update-version +19 -0
  16. data/bin/git/hooks/post-merge/update-hooks +6 -0
  17. data/bin/git/hooks/post-rewrite/update-hooks +6 -0
  18. data/bin/git/hooks/pre-commit/rubocop +20 -0
  19. data/bin/git/hooks/pre-commit/validate-diffs +31 -0
  20. data/bin/git/hooks/pre-push/check-changelog +24 -0
  21. data/bin/git/hooks/pre-push/rubocop +7 -0
  22. data/bin/git/update-hooks +65 -0
  23. data/cisco_node_utils.gemspec +9 -3
  24. data/docs/README-develop-best-practices.md +404 -0
  25. data/docs/README-develop-node-utils-APIs.md +215 -365
  26. data/docs/README-maintainers.md +33 -3
  27. data/docs/template-router.rb +89 -91
  28. data/docs/template-test_router.rb +52 -55
  29. data/lib/.rubocop.yml +18 -0
  30. data/lib/cisco_node_utils.rb +2 -19
  31. data/lib/cisco_node_utils/README_YAML.md +1 -9
  32. data/lib/cisco_node_utils/bgp.rb +664 -0
  33. data/lib/cisco_node_utils/bgp_af.rb +530 -0
  34. data/lib/cisco_node_utils/bgp_neighbor.rb +425 -0
  35. data/lib/cisco_node_utils/bgp_neighbor_af.rb +709 -0
  36. data/lib/cisco_node_utils/cisco_cmn_utils.rb +59 -25
  37. data/lib/cisco_node_utils/command_reference.rb +72 -74
  38. data/lib/cisco_node_utils/command_reference_common.yaml +174 -9
  39. data/lib/cisco_node_utils/command_reference_common_bgp.yaml +535 -0
  40. data/lib/cisco_node_utils/command_reference_n7k.yaml +4 -0
  41. data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -9
  42. data/lib/cisco_node_utils/configparser_lib.rb +152 -147
  43. data/lib/cisco_node_utils/dns_domain.rb +79 -0
  44. data/lib/cisco_node_utils/domain_name.rb +71 -0
  45. data/lib/cisco_node_utils/interface.rb +167 -161
  46. data/lib/cisco_node_utils/interface_ospf.rb +78 -81
  47. data/lib/cisco_node_utils/name_server.rb +64 -0
  48. data/lib/cisco_node_utils/node.rb +154 -198
  49. data/lib/cisco_node_utils/node_util.rb +61 -0
  50. data/lib/cisco_node_utils/ntp_config.rb +65 -0
  51. data/lib/cisco_node_utils/ntp_server.rb +76 -0
  52. data/lib/cisco_node_utils/platform.rb +174 -165
  53. data/lib/cisco_node_utils/radius_global.rb +146 -0
  54. data/lib/cisco_node_utils/radius_server.rb +295 -0
  55. data/lib/cisco_node_utils/router_ospf.rb +59 -63
  56. data/lib/cisco_node_utils/router_ospf_vrf.rb +226 -210
  57. data/lib/cisco_node_utils/snmpcommunity.rb +52 -58
  58. data/lib/cisco_node_utils/snmpgroup.rb +22 -23
  59. data/lib/cisco_node_utils/snmpserver.rb +99 -103
  60. data/lib/cisco_node_utils/snmpuser.rb +294 -274
  61. data/lib/cisco_node_utils/syslog_server.rb +92 -0
  62. data/lib/cisco_node_utils/syslog_settings.rb +69 -0
  63. data/lib/cisco_node_utils/tacacs_server.rb +137 -133
  64. data/lib/cisco_node_utils/tacacs_server_host.rb +84 -87
  65. data/lib/cisco_node_utils/version.rb +2 -1
  66. data/lib/cisco_node_utils/vlan.rb +28 -31
  67. data/lib/cisco_node_utils/vrf.rb +80 -0
  68. data/lib/cisco_node_utils/vtp.rb +100 -97
  69. data/lib/cisco_node_utils/yum.rb +15 -17
  70. data/tests/.rubocop.yml +15 -0
  71. data/tests/basetest.rb +81 -36
  72. data/tests/ciscotest.rb +38 -78
  73. data/{lib/cisco_node_utils → tests}/platform_info.rb +12 -8
  74. data/{lib/cisco_node_utils → tests}/platform_info.yaml +1 -1
  75. data/tests/test_bgp_af.rb +920 -0
  76. data/tests/test_bgp_neighbor.rb +403 -0
  77. data/tests/test_bgp_neighbor_af.rb +589 -0
  78. data/tests/test_command_config.rb +65 -62
  79. data/tests/test_command_reference.rb +31 -45
  80. data/tests/test_dns_domain.rb +113 -0
  81. data/tests/test_domain_name.rb +86 -0
  82. data/tests/test_interface.rb +424 -548
  83. data/tests/test_interface_ospf.rb +248 -432
  84. data/tests/test_interface_svi.rb +56 -79
  85. data/tests/test_interface_switchport.rb +196 -272
  86. data/tests/test_name_server.rb +85 -0
  87. data/tests/test_node.rb +7 -6
  88. data/tests/test_node_ext.rb +133 -186
  89. data/tests/test_ntp_config.rb +49 -0
  90. data/tests/test_ntp_server.rb +74 -0
  91. data/tests/test_platform.rb +58 -37
  92. data/tests/test_radius_global.rb +78 -0
  93. data/tests/test_radius_server.rb +185 -0
  94. data/tests/test_router_bgp.rb +838 -0
  95. data/tests/test_router_ospf.rb +49 -80
  96. data/tests/test_router_ospf_vrf.rb +274 -392
  97. data/tests/test_snmpcommunity.rb +128 -172
  98. data/tests/test_snmpgroup.rb +12 -14
  99. data/tests/test_snmpserver.rb +160 -189
  100. data/tests/test_snmpuser.rb +568 -717
  101. data/tests/test_syslog_server.rb +88 -0
  102. data/tests/test_syslog_settings.rb +54 -0
  103. data/tests/test_tacacs_server.rb +113 -148
  104. data/tests/test_tacacs_server_host.rb +108 -161
  105. data/tests/test_vlan.rb +63 -79
  106. data/tests/test_vrf.rb +92 -0
  107. data/tests/test_vtp.rb +108 -126
  108. data/tests/test_yum.rb +47 -41
  109. metadata +92 -56
  110. data/.rubocop_todo.yml +0 -293
  111. data/docs/.rubocop.yml +0 -13
  112. data/docs/template-feature.rb +0 -45
  113. data/docs/template-test_feature.rb +0 -51
  114. data/tests/test_all_cisco.rb +0 -46
@@ -12,272 +12,206 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require File.expand_path("../ciscotest", __FILE__)
16
- require File.expand_path("../../lib/cisco_node_utils/cisco_cmn_utils", __FILE__)
17
- require File.expand_path("../../lib/cisco_node_utils/interface_ospf", __FILE__)
18
- require File.expand_path("../../lib/cisco_node_utils/router_ospf", __FILE__)
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/cisco_cmn_utils'
17
+ require_relative '../lib/cisco_node_utils/interface_ospf'
18
+ require_relative '../lib/cisco_node_utils/router_ospf'
19
19
 
20
20
  include Cisco
21
21
 
22
+ # TestInterfaceOspf - Minitest for InterfaceOspf node utility class.
22
23
  class TestInterfaceOspf < CiscoTestCase
23
- def routerospf_router_destroy(router)
24
- router.destroy
24
+ def setup
25
+ super
26
+ config 'no feature ospf'
25
27
  end
26
28
 
27
- def routerospf_routers_destroy(routers)
28
- routers.each { |name, router|
29
- routerospf_router_destroy(router)
30
- }
29
+ def teardown
30
+ config 'no feature ospf'
31
+ super
31
32
  end
32
33
 
33
34
  def interface_switchport_enable(ifname, enable)
34
- @device.cmd("configure terminal")
35
- @device.cmd("interface #{ifname}")
36
35
  if enable == true
37
- @device.cmd("switchport")
36
+ config("interface #{ifname}", 'switchport')
38
37
  else
39
- @device.cmd("no switchport")
38
+ config("interface #{ifname}", 'no switchport')
40
39
  end
41
- @device.cmd("end")
42
- node.cache_flush
43
- end
44
-
45
- def interfaceospf_interface_destroy(interface)
46
- interface.destroy
47
- end
48
-
49
- def interfaceospf_interfaces_destroy(interfaces)
50
- interfaces.each { |name, interface|
51
- interfaceospf_interface_destroy(interface)
52
- }
53
40
  end
54
41
 
55
- def get_interfaceospf_match_line(name, pattern)
56
- s = @device.cmd("show run interface all | " +
57
- "sec \"interface .#{name[1..-1]}$\" | no-more")
58
- line = pattern.match(s)
59
- line
42
+ def show_cmd(name)
43
+ "show run interface #{name} all | no-more"
60
44
  end
61
45
 
62
- def create_routerospf(ospfname="ospfTest")
63
- @device.cmd("configure terminal")
64
- @device.cmd("feature ospf")
65
- @device.cmd("end")
66
- node.cache_flush
67
- routerospf = RouterOspf.new(ospfname, false)
46
+ def create_routerospf(ospfname='ospfTest')
47
+ config('feature ospf')
48
+ RouterOspf.new(ospfname, false)
68
49
  end
69
50
 
70
- def create_interfaceospf(routerospf, ifname=interfaces[0], area="0.0.0.0")
51
+ def create_interfaceospf(routerospf, ifname=interfaces[0], area='0.0.0.0')
52
+ @default_show_command = show_cmd(ifname)
71
53
  interface_switchport_enable(ifname, false)
72
- interfaceospf = InterfaceOspf.new(ifname, routerospf.name, area)
73
- end
74
-
75
- def interface_ethernet_default(ethernet_id=interfaces_id[0])
76
- @device.cmd("configure terminal")
77
- @device.cmd("default interface ethernet #{ethernet_id}")
78
- @device.cmd("end")
79
- node.cache_flush
54
+ InterfaceOspf.new(ifname, routerospf.name, area)
80
55
  end
81
56
 
82
57
  def test_get_set_area
83
58
  # setup a loopback to use
84
- @device.cmd("configure terminal")
85
- @device.cmd("interface loopback12")
86
- @device.cmd("end")
87
- node.cache_flush
59
+ config('interface loopback12')
88
60
 
89
- int_ospf = InterfaceOspf.new("loopback12", "12", "0.0.0.0")
61
+ int_ospf = InterfaceOspf.new('loopback12', '12', '0.0.0.0')
90
62
 
91
63
  # test invalid
92
64
  assert_raises(CliError) do
93
- int_ospf.area = "Blue"
65
+ int_ospf.area = 'Blue'
94
66
  end
95
67
 
96
68
  # test get/set ip address form
97
- int_ospf.area = "0.0.0.4"
98
- assert_equal(int_ospf.area, "0.0.0.4")
69
+ int_ospf.area = '0.0.0.4'
70
+ assert_equal(int_ospf.area, '0.0.0.4')
99
71
 
100
72
  # test get/set integer form.
101
73
  # Note: the area getter will munge the value to dotted decimal.
102
- int_ospf.area = "3"
103
- assert_equal(int_ospf.area, "0.0.0.3")
74
+ int_ospf.area = '3'
75
+ assert_equal(int_ospf.area, '0.0.0.3')
104
76
 
105
77
  # cleanup
106
- int_ospf.destroy
107
- @device.cmd("configure terminal")
108
- @device.cmd("no interface loopback12")
109
- @device.cmd("end")
110
- node.cache_flush
78
+ config('no interface loopback12')
111
79
  end
112
80
 
113
81
  def test_interfaceospf_collection_empty
114
- @device.cmd("configure terminal")
115
- @device.cmd("no feature ospf")
116
- @device.cmd("feature ospf")
117
- @device.cmd("router ospf TestOSPF")
118
- @device.cmd("end")
119
- node.cache_flush
82
+ config('no feature ospf', 'feature ospf', 'router ospf TestOSPF')
120
83
 
121
84
  routers = RouterOspf.routers()
122
- routers.each do |name, router|
85
+ routers.each_value do |router|
123
86
  interfaces = InterfaceOspf.interfaces(router.name)
124
87
  assert_empty(interfaces,
125
- "InterfaceOspf collection is not empty")
88
+ 'InterfaceOspf collection is not empty')
126
89
  end
127
- routerospf_routers_destroy(routers)
128
90
  end
129
91
 
130
92
  def test_interfaceospf_collection_not_empty
131
93
  ifname1 = interfaces[1].downcase
132
94
  ifname2 = interfaces[2].downcase
133
- ospf1 = "TestOSPF"
134
- ospf2 = "bxb300"
95
+ ospf1 = 'TestOSPF'
96
+ ospf2 = 'bxb300'
135
97
  # pre-configure
136
98
  interface_switchport_enable(ifname1, false)
137
99
  interface_switchport_enable(ifname2, false)
138
- @device.cmd("configure terminal")
139
- @device.cmd("no feature ospf")
140
- @device.cmd("feature ospf")
141
- @device.cmd("router ospf #{ospf1}")
142
- @device.cmd("interface #{ifname1}")
143
- @device.cmd("ip router ospf #{ospf1} area 0.0.0.0")
144
- @device.cmd("router ospf #{ospf2}")
145
- @device.cmd("interface #{ifname2}")
146
- @device.cmd("ip router ospf #{ospf2} area 10.6.6.1")
147
- @device.cmd("end")
148
- node.cache_flush
100
+ config('no feature ospf',
101
+ 'feature ospf',
102
+ "router ospf #{ospf1}",
103
+ "interface #{ifname1}",
104
+ "ip router ospf #{ospf1} area 0.0.0.0",
105
+ "router ospf #{ospf2}",
106
+ "interface #{ifname2}",
107
+ "ip router ospf #{ospf2} area 10.6.6.1",
108
+ )
149
109
 
150
110
  routers = RouterOspf.routers()
151
111
  # validate the collection
152
- routers.each do |name, router|
112
+ routers.each_value do |router|
153
113
  interfaces = InterfaceOspf.interfaces(router.name)
154
114
  refute_empty(interfaces,
155
- "InterfaceOspf collection is empty")
156
- assert_equal(1, interfaces.size(),
115
+ 'InterfaceOspf collection is empty')
116
+ assert_equal(1, interfaces.size,
157
117
  "InterfaceOspf collection (#{interfaces}) size is not 1")
158
- interfaces.each do | ifname, interface|
118
+ interfaces.each do |ifname, interface|
159
119
  pattern = (/\s+ip router ospf #{router.name} area #{interface.area}/)
160
- line = get_interfaceospf_match_line(ifname, pattern)
161
- refute_nil(line, "Error: ip router ospf #{router.name} " +
162
- "area #{interface.area} not found under #{ifname}")
120
+ assert_show_match(command: show_cmd(ifname),
121
+ pattern: pattern)
163
122
  # using default check, since not configured anything
164
- assert_equal(node.config_get_default("interface_ospf", "cost"),
123
+ assert_equal(node.config_get_default('interface_ospf', 'cost'),
165
124
  interface.cost,
166
- "Error: get cost failed")
167
- assert_equal(node.config_get_default("interface_ospf",
168
- "hello_interval"),
125
+ 'Error: get cost failed')
126
+ assert_equal(node.config_get_default('interface_ospf',
127
+ 'hello_interval'),
169
128
  interface.hello_interval,
170
- "Error: get hello interval failed")
171
- assert_equal(node.config_get_default("interface_ospf",
172
- "dead_interval"),
129
+ 'Error: get hello interval failed')
130
+ assert_equal(node.config_get_default('interface_ospf',
131
+ 'dead_interval'),
173
132
  interface.dead_interval,
174
- "Error: get dead interval failed")
175
- assert_equal(node.config_get_default("interface_ospf",
176
- "passive_interface"),
133
+ 'Error: get dead interval failed')
134
+ assert_equal(node.config_get_default('interface_ospf',
135
+ 'passive_interface'),
177
136
  interface.passive_interface,
178
- "Error: passive interface get failed")
179
- assert_equal(node.config_get_default("interface_ospf",
180
- "message_digest"),
137
+ 'Error: passive interface get failed')
138
+ assert_equal(node.config_get_default('interface_ospf',
139
+ 'message_digest'),
181
140
  interface.message_digest,
182
- "Error: message digest get failed")
183
- assert_equal(node.config_get_default("interface_ospf",
184
- "message_digest_key_id"),
141
+ 'Error: message digest get failed')
142
+ assert_equal(node.config_get_default('interface_ospf',
143
+ 'message_digest_key_id'),
185
144
  interface.message_digest_key_id,
186
- "Error: message digest key get failed")
145
+ 'Error: message digest key get failed')
187
146
  end
188
- interfaceospf_interfaces_destroy(interfaces)
189
147
  end
190
- routerospf_routers_destroy(routers)
191
- interface_ethernet_default(interfaces_id[2])
192
- interface_ethernet_default(interfaces_id[1])
193
148
  end
194
149
 
195
150
  def test_interfaceospf_create_routerospf_nil
196
151
  assert_raises(TypeError) do
197
- ospf = InterfaceOspf.new(interfaces[0], nil, "0.0.0.0")
152
+ InterfaceOspf.new(interfaces[0], nil, '0.0.0.0')
198
153
  end
199
154
  end
200
155
 
201
156
  def test_interfaceospf_create_interface_name_zero_length
202
- name = "ospfTest"
157
+ name = 'ospfTest'
203
158
  ospf = RouterOspf.new(name)
204
159
  assert_raises(ArgumentError) do
205
- interface = InterfaceOspf.new("", ospf.name, "0.0.0.0")
160
+ InterfaceOspf.new('', ospf.name, '0.0.0.0')
206
161
  end
207
- routerospf_router_destroy(ospf)
208
162
  end
209
163
 
210
164
  def test_interfaceospf_create_interface_area_zero_length
211
- name = "ospfTest"
165
+ name = 'ospfTest'
212
166
  ospf = RouterOspf.new(name)
213
167
  assert_raises(ArgumentError) do
214
- interface = InterfaceOspf.new(interfaces[0], ospf.name, "")
168
+ InterfaceOspf.new(interfaces[0], ospf.name, '')
215
169
  end
216
- routerospf_router_destroy(ospf)
217
170
  end
218
171
 
219
172
  def test_routerospf_create_valid
220
173
  ospf = create_routerospf
221
174
  ifname = interfaces[1]
222
- area = "0.0.0.0"
175
+ area = '0.0.0.0'
223
176
  interface_switchport_enable(ifname, false)
224
177
  interface = InterfaceOspf.new(ifname, ospf.name, area)
225
178
  pattern = (/\s+ip router ospf #{ospf.name} area #{area}/)
226
- line = get_interfaceospf_match_line(ifname, pattern)
227
- refute_nil(line, "Error: 'ip router ospf #{ospf.name} area #{area}' " +
228
- "not configured")
179
+ assert_show_match(command: show_cmd(ifname),
180
+ pattern: pattern)
229
181
  assert_equal(ifname.downcase, interface.interface.name,
230
- "Error: interface name get value mismatch ")
182
+ 'Error: interface name get value mismatch ')
231
183
  assert_equal(area, interface.area,
232
- "Error: area get value mismatch ")
233
- interfaceospf_interface_destroy(interface)
234
- routerospf_router_destroy(ospf)
235
- interface_ethernet_default(interfaces_id[1])
184
+ 'Error: area get value mismatch ')
236
185
  end
237
186
 
238
187
  def test_interfaceospf_destroy
239
188
  ifname = interfaces[1]
240
- area = "0.0.0.0"
189
+ area = '0.0.0.0'
241
190
  ospf = create_routerospf
242
191
  interface = create_interfaceospf(ospf, ifname, area)
243
192
  interface.destroy
244
- pattern = (/\s+ip router ospf #{ospf.name} area #{area}/)
245
- line = get_interfaceospf_match_line(ifname, pattern)
246
- assert_nil(line, "Error: 'ip router ospf #{ospf.name} area #{area}' " +
247
- "not destroyed")
193
+ refute_show_match(pattern: /\s+ip router ospf #{ospf.name} area #{area}/,
194
+ msg: "'ip router ospf #{ospf.name} area #{area}' " \
195
+ 'not destroyed')
248
196
  # check all the attributes are set to default.
249
- pattern = (/^\s+ip ospf cost \S+/)
250
- line = get_interfaceospf_match_line(ifname, pattern)
251
- assert_nil(line,
252
- "Error: 'ip ospf #{ospf.name} cost' not removed")
197
+ refute_show_match(pattern: /^\s+ip ospf cost \S+/,
198
+ msg: "'cost' not removed")
253
199
 
254
- pattern = (/^\s+ip ospf hello-interval \S+/)
255
- line = get_interfaceospf_match_line(ifname, pattern)
256
- assert_nil(line,
257
- "Error: 'ip ospf #{ospf.name} hello-interval' not removed")
200
+ refute_show_match(pattern: /^\s+ip ospf hello-interval \S+/,
201
+ msg: "'hello-interval' not removed")
258
202
 
259
203
  # with default CLI still shows the value
260
- pattern = (/^\s+ip ospf dead-interval \S+/)
261
- line = get_interfaceospf_match_line(ifname, pattern)
262
- assert_nil(line,
263
- "Error: 'ip ospf #{ospf.name} dead-interval' not removed")
264
-
265
- pattern = (/^\s+ip ospf passive-interface/)
266
- line = get_interfaceospf_match_line(ifname, pattern)
267
- assert_nil(line,
268
- "Error: 'ip ospf #{ospf.name} passive interface' not removed")
269
-
270
- routerospf_router_destroy(ospf)
271
- interface_ethernet_default(interfaces_id[1])
204
+ refute_show_match(pattern: /^\s+ip ospf dead-interval \S+/,
205
+ msg: "'dead-interval' not removed")
206
+
207
+ refute_show_match(pattern: /^\s+ip ospf passive-interface/,
208
+ msg: "'passive interface' not removed")
272
209
  end
273
210
 
274
211
  def test_routerospf_get_parent
275
212
  ospf = create_routerospf
276
213
  interface = create_interfaceospf(ospf)
277
214
  assert_equal(ospf.name, interface.ospf_name)
278
- interfaceospf_interface_destroy(interface)
279
- routerospf_router_destroy(ospf)
280
- interface_ethernet_default()
281
215
  end
282
216
 
283
217
  def test_interfaceospf_cost_invalid_range
@@ -285,15 +219,12 @@ class TestInterfaceOspf < CiscoTestCase
285
219
  interface = create_interfaceospf(ospf)
286
220
  # upper range
287
221
  assert_raises(CliError) do
288
- interface.cost = 65536
222
+ interface.cost = 65_536
289
223
  end
290
224
  # lower range just removes the config.
291
225
  # assert_raises(RuntimeError) do
292
226
  # interface.cost = 0
293
227
  # end
294
- interfaceospf_interface_destroy(interface)
295
- routerospf_router_destroy(ospf)
296
- interface_ethernet_default()
297
228
  end
298
229
 
299
230
  def test_interfaceospf_cost
@@ -302,21 +233,14 @@ class TestInterfaceOspf < CiscoTestCase
302
233
  cost = 1000
303
234
  # set with value
304
235
  interface.cost = cost
305
- pattern = (/\s+ip ospf cost #{cost}/)
306
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
307
- refute_nil(line,
308
- "Error: cost missing in CLI")
236
+ assert_show_match(pattern: /\s+ip ospf cost #{cost}/,
237
+ msg: 'Error: cost missing in CLI')
309
238
  assert_equal(cost, interface.cost,
310
- "Error: cost get value mismatch")
239
+ 'Error: cost get value mismatch')
311
240
  # set default
312
241
  interface.cost = interface.default_cost
313
- pattern = (/\s+ip ospf cost(.*)/)
314
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
315
- assert_nil(line,
316
- "Error: default cost set failed")
317
- interfaceospf_interface_destroy(interface)
318
- routerospf_router_destroy(ospf)
319
- interface_ethernet_default()
242
+ refute_show_match(pattern: /\s+ip ospf cost(.*)/,
243
+ msg: 'Error: default cost set failed')
320
244
  end
321
245
 
322
246
  def test_interfaceospf_hello_interval_invalid_range
@@ -324,15 +248,12 @@ class TestInterfaceOspf < CiscoTestCase
324
248
  interface = create_interfaceospf(ospf)
325
249
  # upper range
326
250
  assert_raises(CliError) do
327
- interface.hello_interval = 65536
251
+ interface.hello_interval = 65_536
328
252
  end
329
253
  # lower range
330
254
  assert_raises(CliError) do
331
255
  interface.hello_interval = 0
332
256
  end
333
- interfaceospf_interface_destroy(interface)
334
- routerospf_router_destroy(ospf)
335
- interface_ethernet_default()
336
257
  end
337
258
 
338
259
  def test_interfaceospf_hello_interval
@@ -341,42 +262,32 @@ class TestInterfaceOspf < CiscoTestCase
341
262
  interval = 90
342
263
  # set with value
343
264
  interface.hello_interval = interval
344
- pattern = (/\s+ip ospf hello-interval #{interval}/)
345
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
346
- refute_nil(line,
347
- "Error: hello-interval missing in CLI")
265
+ assert_show_match(pattern: /\s+ip ospf hello-interval #{interval}/,
266
+ msg: 'Error: hello-interval missing in CLI')
348
267
  assert_equal(interval, interface.hello_interval,
349
- "Error: hello-interval get value mismatch")
268
+ 'Error: hello-interval get value mismatch')
350
269
 
351
270
  # set default, when we set default CLI does not show it
352
271
  interface.hello_interval = interface.default_hello_interval
353
- pattern = (/\s+ip ospf hello-interval(.*)/)
354
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
355
- assert_nil(line,
356
- "Error: default hello-interval set failed")
357
- interfaceospf_interface_destroy(interface)
358
- routerospf_router_destroy(ospf)
359
- interface_ethernet_default()
272
+ refute_show_match(pattern: /\s+ip ospf hello-interval(.*)/,
273
+ msg: 'Error: default hello-interval set failed')
360
274
  end
361
275
 
362
276
  def test_interfaceospf_dead_interval_invalid_range
363
277
  ospf = create_routerospf
364
278
  interface = create_interfaceospf(ospf)
365
279
 
366
- ref = cmd_ref.lookup("interface_ospf", "dead_interval")
367
- assert(ref, "Error, reference not found for dead_interval")
280
+ ref = cmd_ref.lookup('interface_ospf', 'dead_interval')
281
+ assert(ref, 'Error, reference not found for dead_interval')
368
282
 
369
283
  # upper range
370
284
  assert_raises(CliError) do
371
- interface.dead_interval = 262141
285
+ interface.dead_interval = 262_141
372
286
  end
373
287
  # lower range
374
288
  assert_raises(CliError) do
375
289
  interface.dead_interval = 0
376
290
  end
377
- interfaceospf_interface_destroy(interface)
378
- routerospf_router_destroy(ospf)
379
- interface_ethernet_default()
380
291
  end
381
292
 
382
293
  def test_interfaceospf_dead_interval
@@ -385,21 +296,15 @@ class TestInterfaceOspf < CiscoTestCase
385
296
  interval = 150
386
297
  # set with value
387
298
  interface.dead_interval = interval
388
- pattern = (/\s+ip ospf dead-interval #{interval}/)
389
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
390
- refute_nil(line,
391
- "Error: dead-interval missing in CLI")
299
+ assert_show_match(pattern: /\s+ip ospf dead-interval #{interval}/,
300
+ msg: 'Error: dead-interval missing in CLI')
392
301
  assert_equal(interval, interface.dead_interval,
393
- "Error: dead-interval get value mismatch")
302
+ 'Error: dead-interval get value mismatch')
394
303
  # set default, the CLI shows with default value
395
304
  interface.dead_interval = interface.default_dead_interval
396
- pattern = (/^\s+ip ospf dead-interval #{interface.default_dead_interval}/)
397
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
398
- refute_nil(line,
399
- "Error: default dead-interval set failed")
400
- interfaceospf_interface_destroy(interface)
401
- routerospf_router_destroy(ospf)
402
- interface_ethernet_default()
305
+ assert_show_match(
306
+ pattern: /^\s+ip ospf dead-interval #{interface.default_dead_interval}/,
307
+ msg: 'Error: default dead-interval set failed')
403
308
  end
404
309
 
405
310
  def test_interfaceospf_passive_interface
@@ -408,46 +313,32 @@ class TestInterfaceOspf < CiscoTestCase
408
313
 
409
314
  # set with value
410
315
  interface.passive_interface = true
411
- pattern = (/\s+ip ospf passive-interface/)
412
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
413
- refute_nil(line, "Error: passive interface enable missing in CLI")
316
+ assert_show_match(pattern: /\s+ip ospf passive-interface/,
317
+ msg: 'passive interface enable missing in CLI')
414
318
  assert(interface.passive_interface,
415
- "Error: passive interface get value mismatch")
319
+ 'Error: passive interface get value mismatch')
416
320
 
417
321
  # get default and set
418
322
  interface.passive_interface = interface.default_passive_interface
419
- node.cache_flush()
420
- pattern = (/\s+no ip ospf passive-interface/)
421
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
422
- refute_nil(line,
423
- "Error: default passive interface set failed")
424
- interfaceospf_interface_destroy(interface)
425
- routerospf_router_destroy(ospf)
426
- interface_ethernet_default()
323
+ assert_show_match(pattern: /\s+no ip ospf passive-interface/,
324
+ msg: 'default passive interface set failed')
427
325
  end
428
326
 
429
327
  def test_interfaceospf_create_valid_multiple
430
328
  # ospf and interfaces[0]
431
329
  ospf = create_routerospf
432
330
  interface = create_interfaceospf(ospf)
433
- pattern = (/\s+ip router ospf #{ospf.name} area #{interface.area}/)
434
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
435
- refute_nil(line, "Error: 'ip router ospf #{ospf.name} default area' " +
436
- "not configured")
331
+ assert_show_match(
332
+ pattern: /\s+ip router ospf #{ospf.name} area #{interface.area}/,
333
+ msg: "'ip router ospf #{ospf.name} default area' not configured")
437
334
 
438
335
  # ospf and interfaces_id[2]
439
336
  ifname = interfaces[2]
440
- area = "1.1.1.1"
441
- interface1 = create_interfaceospf(ospf, ifname, area)
442
- pattern = (/\s+ip router ospf #{ospf.name} area #{area}/)
443
- line = get_interfaceospf_match_line(ifname, pattern)
444
- refute_nil(line,
445
- "Error: 'ip router ospf #{ospf.name} area #{area}' not configured")
446
- interfaceospf_interface_destroy(interface)
447
- interfaceospf_interface_destroy(interface1)
448
- routerospf_router_destroy(ospf)
449
- interface_ethernet_default()
450
- interface_ethernet_default(interfaces_id[2])
337
+ area = '1.1.1.1'
338
+ create_interfaceospf(ospf, ifname, area)
339
+ assert_show_match(
340
+ pattern: /\s+ip router ospf #{ospf.name} area #{area}/,
341
+ msg: "'ip router ospf #{ospf.name} area #{area}' is not configured")
451
342
  end
452
343
 
453
344
  def test_interfaceospf_create_multiple_delete_one
@@ -457,189 +348,141 @@ class TestInterfaceOspf < CiscoTestCase
457
348
 
458
349
  # ospf and interfaces_id[2]
459
350
  ifname = interfaces[2]
460
- area = "1.1.1.1"
351
+ area = '1.1.1.1'
461
352
  interface1 = create_interfaceospf(ospf, ifname, area)
462
353
  assert_equal(ifname.downcase, interface1.interface.name,
463
- "Error: 'ip router ospf #{ospf.name} area #{area}' " +
464
- "not configured")
354
+ "Error: 'ip router ospf #{ospf.name} area #{area}' " \
355
+ 'not configured')
465
356
 
466
357
  # delete ospf instance from interfaces_id[2]
467
358
  interface1.destroy
468
- pattern = (/\s+ip router ospf #{ospf.name} area #{area}/)
469
- line = get_interfaceospf_match_line(ifname, pattern)
470
- assert_nil(line,
471
- "Error: 'ip router ospf #{ospf.name} area #{area}' not deleted")
359
+ refute_show_match(
360
+ command: show_cmd(ifname),
361
+ pattern: /\s+ip router ospf #{ospf.name} area #{area}/,
362
+ msg: "'ip router ospf #{ospf.name} area #{area}' not deleted")
472
363
 
473
364
  # check other interface association still exist.
474
- pattern = (/\s+ip router ospf #{ospf.name} area #{interface.area}/)
475
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
476
- refute_nil(line,
477
- "Error: 'ip router ospf #{ospf.name} default area' " +
478
- "not configured")
479
-
480
- interfaceospf_interface_destroy(interface)
481
- routerospf_router_destroy(ospf)
482
- interface_ethernet_default()
483
- interface_ethernet_default(interfaces_id[2])
365
+ assert_show_match(
366
+ command: show_cmd(interface.interface.name),
367
+ pattern: /\s+ip router ospf #{ospf.name} area #{interface.area}/,
368
+ msg: "'ip router ospf #{ospf.name} default area' not configured")
484
369
  end
485
370
 
486
- def test_interfaceospf_collection_multiple_interface
487
- s = @device.cmd("conf t ; int port-channel 42 ; descr foo ; end")
488
- known_failure = s[/ERROR:.*port channel not present/]
489
- refute(known_failure, "ERROR: port channel not present")
490
-
491
- ospf_h = Hash.new { |h, k| h[k] = {} }
492
- ospf_h["ospfTest"] = {
493
- interfaces[0].downcase => {
494
- :area => "0.0.0.0", :cost => 10, :hello => 30, :dead => 120,
495
- :pass => true,
496
- },
497
- interfaces[1].downcase => {
498
- :area => "1.1.1.38", :dead => 40, :pass => false,
499
- },
500
- "vlan101" => {
501
- :area => "2.2.2.101", :cost => 5, :hello => 20, :dead => 80,
502
- :pass => true,
503
- },
504
- }
505
- ospf_h["TestOspfInt"] = {
506
- interfaces[2].downcase => {
507
- :area => "0.0.0.19",
508
- },
509
- "vlan290" => {
510
- :area => "2.2.2.29", :cost => 200, :hello => 30, :dead => 120,
511
- :pass => true,
512
- },
513
- "port-channel100" => {
514
- :area => "3.2.2.29", :cost => 25, :hello => 50, :dead => 200,
515
- :pass => false,
516
- },
517
- }
518
- # enable feature ospf
519
- @device.cmd("configure terminal")
520
- @device.cmd("no feature ospf") # cleanup prev configs
521
- @device.cmd("feature ospf")
522
- @device.cmd("feature interface-vlan")
523
- @device.cmd("default interface interfaces[0] ")
524
- @device.cmd("default interface interfaces[1] ")
525
- @device.cmd("default interface interfaces[2] ")
526
- @device.cmd("end")
527
-
528
- # pre-configure
529
- ospf_h.each do | k, v|
371
+ def configure_from_hash(hash)
372
+ hash.each do |k, v|
530
373
  # puts "TEST: pre-config hash key : #{k}"
531
- @device.cmd("configure terminal")
532
- @device.cmd("router ospf #{k}")
533
- @device.cmd("end")
534
- v.each do | k1, v1|
374
+ config("router ospf #{k}")
375
+ v.each do |k1, v1|
535
376
  # puts "TEST: pre-config k1: v1 '#{k1} : #{v1}'"
536
- @device.cmd("configure terminal")
537
- @device.cmd("interface #{k1}")
377
+ cfg = ["interface #{k1}"]
538
378
  if !(/^ethernet\d.\d/).match(k1.to_s).nil? ||
539
379
  !(/^port-channel\d/).match(k1.to_s).nil?
540
- @device.cmd("no switchport")
380
+ cfg << 'no switchport'
541
381
  # puts "switchport disable: #{k1}"
542
382
  end
543
383
  # puts "k1: #{k1}, k: #{k}, area #{v1[:area]}"
544
- @device.cmd("ip router ospf #{k} area #{v1[:area]}")
545
- @device.cmd("ip ospf cost #{v1[:cost]}") unless v1[:cost].nil?
546
- @device.cmd("ip ospf hello-interval #{v1[:hello]}") unless v1[:hello].nil?
547
- @device.cmd("ip ospf dead-interval #{v1[:dead]}") unless v1[:dead].nil?
548
- @device.cmd("ip ospf passive-interface") if !v1[:pass].nil? &&
549
- v1[:pass] == true
550
- @device.cmd("exit")
384
+ cfg << "ip router ospf #{k} area #{v1[:area]}"
385
+ cfg << "ip ospf cost #{v1[:cost]}" unless v1[:cost].nil?
386
+ cfg << "ip ospf hello-interval #{v1[:hello]}" unless v1[:hello].nil?
387
+ cfg << "ip ospf dead-interval #{v1[:dead]}" unless v1[:dead].nil?
388
+ cfg << 'ip ospf passive-interface' if !v1[:pass].nil? &&
389
+ v1[:pass] == true
390
+ config(*cfg)
391
+ end
392
+ end
393
+ end
394
+
395
+ def multiple_interface_config_hash
396
+ # rubocop:disable Style/AlignHash
397
+ hash = {
398
+ 'ospfTest' => {
399
+ interfaces[0].downcase => {
400
+ area: '0.0.0.0', cost: 10, hello: 30, dead: 120, pass: true },
401
+ interfaces[1].downcase => {
402
+ area: '1.1.1.38', dead: 40, pass: false },
403
+ 'vlan101' => {
404
+ area: '2.2.2.101', cost: 5, hello: 20, dead: 80, pass: true },
405
+ },
406
+ 'TestOspfInt' => {
407
+ interfaces[2].downcase => {
408
+ area: '0.0.0.19' },
409
+ 'vlan290' => {
410
+ area: '2.2.2.29', cost: 200, hello: 30, dead: 120, pass: true },
411
+ 'port-channel100' => {
412
+ area: '3.2.2.29', cost: 25, hello: 50, dead: 200, pass: false },
413
+ },
414
+ }
415
+ # rubocop:enable Style/AlignHash
416
+ # Set defaults
417
+ hash.each_key do |name|
418
+ hash[name].each_value do |hv|
419
+ hv[:cost] ||= node.config_get_default('interface_ospf', 'cost')
420
+ hv[:hello] ||= node.config_get_default('interface_ospf',
421
+ 'hello_interval')
422
+ hv[:dead] ||= node.config_get_default('interface_ospf',
423
+ 'dead_interval')
424
+ hv[:pass] ||= node.config_get_default('interface_ospf',
425
+ 'passive_interface')
551
426
  end
552
- @device.cmd("end")
553
427
  end
554
- node.cache_flush
428
+ end
429
+
430
+ def test_interfaceospf_collection_multiple_interface
431
+ s = config('int port-channel 42', 'descr foo')
432
+ known_failure = s[/ERROR:.*port channel not present/]
433
+ refute(known_failure, 'ERROR: port channel not present')
434
+
435
+ ospf_h = multiple_interface_config_hash
436
+
437
+ # enable feature ospf
438
+ config('no feature ospf',
439
+ 'feature ospf',
440
+ 'feature interface-vlan',
441
+ 'default interface interfaces[0]',
442
+ 'default interface interfaces[1]',
443
+ 'default interface interfaces[2]',
444
+ )
445
+
446
+ # pre-configure
447
+ configure_from_hash(ospf_h)
555
448
 
556
449
  routers = RouterOspf.routers()
557
450
  # validate the collection
558
- routers.each do | name, router|
451
+ routers.each do |name, router|
559
452
  interfaces = InterfaceOspf.interfaces(router.name)
560
- refute_empty(interfaces, "InterfaceOspf collection is empty")
453
+ refute_empty(interfaces, 'InterfaceOspf collection is empty')
561
454
  assert_includes(ospf_h, name)
562
455
  ospfh = ospf_h.fetch(name)
563
- assert_equal(ospfh.size(), interfaces.size(),
456
+ assert_equal(ospfh.size, interfaces.size,
564
457
  "InterfaceOspf #{name} collection size mismatch")
565
- interfaces.each do | ifname, interface |
458
+ interfaces.each do |ifname, interface|
566
459
  assert_includes(ospfh, ifname)
567
460
  hv = ospfh.fetch(ifname)
568
- pattern = (/\s+ip router ospf #{name} area #{hv[:area]}/)
569
- line = get_interfaceospf_match_line(ifname, pattern)
570
- refute_nil(line, "Error: ip router ospf #{name} area #{hv[:area]} "+
461
+ assert_show_match(
462
+ command: show_cmd(ifname),
463
+ pattern: /\s+ip router ospf #{name} area #{hv[:area]}/,
464
+ msg: "Error: ip router ospf #{name} area #{hv[:area]} "\
571
465
  "not found under #{ifname}")
572
466
 
573
- # check the cost
574
- if hv[:cost].nil?
575
- # using default check, since not configured anything
576
- assert_equal(node.config_get_default("interface_ospf", "cost"),
577
- interface.cost,
578
- "Error: get default cost failed")
579
- else
580
- assert_equal(hv[:cost], interface.cost,
581
- "Error: get cost failed")
582
- end
583
- # check the hello
584
- if hv[:hello].nil?
585
- assert_equal(node.config_get_default("interface_ospf",
586
- "hello_interval"),
587
- interface.hello_interval,
588
- "Error: get default hello interval failed")
589
- else
590
- assert_equal(hv[:hello], interface.hello_interval,
591
- "Error: get hello interval failed")
592
- end
593
- # check the dead
594
- if hv[:dead].nil?
595
- assert_equal(node.config_get_default("interface_ospf",
596
- "dead_interval"),
597
- interface.dead_interval,
598
- "Error: get dead interval failed")
599
- else
600
- assert_equal(hv[:dead], interface.dead_interval,
601
- "Error: get dead interval failed")
602
- end
603
- # check passive interface
604
- if hv[:pass].nil?
605
- assert_equal(node.config_get_default("interface_ospf",
606
- "passive_interface"),
607
- interface.passive_interface,
608
- "Error: passive interface get failed")
609
- else
610
- assert_equal(hv[:pass], interface.passive_interface,
611
- "Error: passive interface get failed")
612
- end
467
+ assert_equal(hv[:cost], interface.cost, 'Error: get cost failed')
468
+ assert_equal(hv[:hello], interface.hello_interval,
469
+ 'Error: get hello interval failed')
470
+ assert_equal(hv[:dead], interface.dead_interval,
471
+ 'Error: get dead interval failed')
472
+ assert_equal(hv[:pass], interface.passive_interface,
473
+ 'Error: passive interface get failed')
613
474
  end
614
- # cleanup interfaces
615
- # node.debug=true
616
- interfaceospf_interfaces_destroy(interfaces)
617
- # node.debug=true
618
- interfaces=nil
619
475
  end # interfaces hash
620
476
  # clean up
621
- routerospf_routers_destroy(routers)
622
- routers=nil
623
477
 
624
478
  # disable feature interface-vlan
625
- @device.cmd("configure terminal")
626
- @device.cmd("no feature interface-vlan")
627
- @device.cmd("end")
479
+ config('no feature interface-vlan')
628
480
  # clean up port channel
629
- ospf_h.each do | k, v|
630
- v.each do | k1, v1|
631
- unless (/^port-channel\d/).match(k1.to_s).nil?
632
- @device.cmd("configure terminal")
633
- @device.cmd("no interface #{k1}")
634
- @device.cmd("end")
635
- end
481
+ ospf_h.each_value do |v|
482
+ v.each_key do |k1|
483
+ config("no interface #{k1}") if (/^port-channel\d/).match(k1)
636
484
  end # v each
637
485
  end # ospf_h each
638
- node.cache_flush
639
-
640
- interface_ethernet_default(interfaces_id[0])
641
- interface_ethernet_default(interfaces_id[1])
642
- interface_ethernet_default(interfaces_id[2])
643
486
  end
644
487
 
645
488
  def test_interfaceospf_message_digest
@@ -649,22 +492,17 @@ class TestInterfaceOspf < CiscoTestCase
649
492
  # set with value
650
493
  interface.message_digest = true
651
494
  pattern = (/^\s+ip ospf authentication message-digest$/)
652
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
653
- refute_nil(line,
654
- "Error: message digest enable missing in CLI")
495
+ assert_show_match(pattern: pattern,
496
+ msg: 'Error: message digest enable missing in CLI')
655
497
  assert(interface.message_digest,
656
- "Error: message digest get value mismatch")
498
+ 'Error: message digest get value mismatch')
657
499
 
658
500
  # get default and set
659
501
  interface.message_digest = interface.default_message_digest
660
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
661
- assert_nil(line,
662
- "Error: default message digest set failed")
502
+ refute_show_match(pattern: pattern,
503
+ msg: 'Error: default message digest set failed')
663
504
  refute(interface.message_digest,
664
- "Error: message digest get value mismatch")
665
- interfaceospf_interface_destroy(interface)
666
- routerospf_router_destroy(ospf)
667
- interface_ethernet_default()
505
+ 'Error: message digest get value mismatch')
668
506
  end
669
507
 
670
508
  def test_interfaceospf_message_digest_key
@@ -676,13 +514,11 @@ class TestInterfaceOspf < CiscoTestCase
676
514
  encr = :cleartext
677
515
 
678
516
  # set with value
679
- interface.message_digest_key_set(keyid, algo, encr, "test123")
517
+ interface.message_digest_key_set(keyid, algo, encr, 'test123')
680
518
  # need to revist TODO
681
- pattern = (/^\s+ip ospf message-digest-key #{keyid} md5 \S \S+$/)
682
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
683
- refute_nil(line,
684
- "Error: message digest authentication with cleartext " +
685
- "missing in CLI")
519
+ line = assert_show_match(
520
+ pattern: /^\s+ip ospf message-digest-key #{keyid} md5 \S \S+$/,
521
+ msg: 'message digest authentication with cleartext missing in CLI')
686
522
  # TODO: assert(interface.message_digest,
687
523
  # "Error: message digest get value mismatch")
688
524
  # check key id exist
@@ -690,7 +526,7 @@ class TestInterfaceOspf < CiscoTestCase
690
526
  "Error: message digest key #{keyid} not present")
691
527
  # save encrypted password
692
528
  md = /3 (\S+)$/.match(line.to_s)
693
- encrypted_password = md.to_s.split(" ").last
529
+ encrypted_password = md.to_s.split(' ').last
694
530
  assert_equal(encrypted_password, interface.message_digest_password)
695
531
 
696
532
  # Check other attributes:
@@ -700,11 +536,9 @@ class TestInterfaceOspf < CiscoTestCase
700
536
  # unconfigure auth
701
537
  keyid = interface.default_message_digest_key_id
702
538
  encr = :cleartext
703
- interface.message_digest_key_set(keyid, algo, encr, "test123")
704
- pattern = (/^\s+ip ospf message-digest-key #{keyid} .+/)
705
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
706
- assert_nil(line,
707
- "Error: message digest authentication still present in CLI")
539
+ interface.message_digest_key_set(keyid, algo, encr, 'test123')
540
+ refute_show_match(pattern: /^\s+ip ospf message-digest-key #{keyid} .+/,
541
+ msg: 'message digest auth still present in CLI')
708
542
  assert_equal(interface.message_digest_key_id,
709
543
  interface.default_message_digest_key_id)
710
544
  assert_equal(interface.message_digest_algorithm_type,
@@ -716,11 +550,9 @@ class TestInterfaceOspf < CiscoTestCase
716
550
  keyid = 1
717
551
  encr = :"3des"
718
552
  interface.message_digest_key_set(keyid, algo, encr, encrypted_password)
719
- pattern = (/^\s+ip ospf message-digest-key #{keyid} md5 3 \S+$/)
720
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
721
- refute_nil(line,
722
- "Error: message digest authentication with 3DES missing " +
723
- "in CLI")
553
+ assert_show_match(
554
+ pattern: /^\s+ip ospf message-digest-key #{keyid} md5 3 \S+$/,
555
+ msg: 'message digest authentication with 3DES missing in CLI')
724
556
  assert_equal(keyid, interface.message_digest_key_id)
725
557
  assert_equal(algo, interface.message_digest_algorithm_type)
726
558
  assert_equal(encr, interface.message_digest_encryption_type)
@@ -730,18 +562,12 @@ class TestInterfaceOspf < CiscoTestCase
730
562
  keyid = 1
731
563
  encr = :cisco_type_7
732
564
  interface.message_digest_key_set(keyid, algo, encr, encrypted_password)
733
- pattern = (/^\s+ip ospf message-digest-key #{keyid} md5 7 \S+$/)
734
- line = get_interfaceospf_match_line(interface.interface.name, pattern)
735
- refute_nil(line,
736
- "Error: message digest authentication with cisco type 7 " +
737
- "missing in CLI")
565
+ assert_show_match(
566
+ pattern: /^\s+ip ospf message-digest-key #{keyid} md5 7 \S+$/,
567
+ msg: 'message digest authentication with cisco type 7 missing in CLI')
738
568
  assert_equal(keyid, interface.message_digest_key_id)
739
569
  assert_equal(algo, interface.message_digest_algorithm_type)
740
570
  assert_equal(encr, interface.message_digest_encryption_type)
741
-
742
- interfaceospf_interface_destroy(interface)
743
- routerospf_router_destroy(ospf)
744
- interface_ethernet_default()
745
571
  end
746
572
 
747
573
  def test_interfaceospf_message_digest_key_invalid_password
@@ -752,44 +578,34 @@ class TestInterfaceOspf < CiscoTestCase
752
578
  keyid = 1
753
579
  algo = :md5
754
580
  encr = :cleartext
755
- password = ""
581
+ password = ''
756
582
  assert_raises(ArgumentError) do
757
583
  interface.message_digest_key_set(keyid, algo, encr, password)
758
584
  end
759
585
 
760
586
  # mismatch password and encryption
761
587
  encr = :"3des"
762
- password = "test123"
588
+ password = 'test123'
763
589
  assert_raises(CliError) do
764
590
  interface.message_digest_key_set(keyid, algo, encr, password)
765
591
  end
766
-
767
- interfaceospf_interface_destroy(interface)
768
- routerospf_router_destroy(ospf)
769
- interface_ethernet_default()
770
592
  end
771
593
 
772
594
  def test_interfaceospf_nonexistent
773
595
  # If the interface does exist but the OSPF instance does not, this is OK
774
- @device.cmd("configure terminal")
775
- @device.cmd("interface loopback122")
776
- @device.cmd("end")
777
- node.cache_flush
778
- interface = InterfaceOspf.new("loopback122", "nonexistentOspf", "0")
596
+ config('interface loopback122')
597
+ interface = InterfaceOspf.new('loopback122', 'nonexistentOspf', '0')
779
598
 
780
599
  # Note: the area getter will munge the value to dotted decimal.
781
- assert_equal(interface.area, "0.0.0.0")
600
+ assert_equal(interface.area, '0.0.0.0')
782
601
  assert_equal(interface.hello_interval, interface.default_hello_interval)
783
602
 
784
603
  interface.destroy
785
604
 
786
605
  # If the interface doesn't exist, InterfaceOspf should raise an error
787
- @device.cmd("configure terminal")
788
- @device.cmd("no interface loopback122")
789
- @device.cmd("end")
790
- node.cache_flush
606
+ config('no interface loopback122')
791
607
  assert_raises(RuntimeError) do
792
- interface = InterfaceOspf.new("loopback122", "nonexistentOspf", "0")
608
+ interface = InterfaceOspf.new('loopback122', 'nonexistentOspf', '0')
793
609
  end
794
610
  end
795
611
  end