cisco_node_utils 1.1.0 → 1.2.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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/CHANGELOG.md +126 -1
  4. data/README.md +19 -12
  5. data/Rakefile +1 -0
  6. data/bin/git/hooks/commit-msg/enforce_style +8 -0
  7. data/cisco_node_utils.gemspec +4 -3
  8. data/docs/README-develop-best-practices.md +127 -109
  9. data/docs/README-develop-node-utils-APIs.md +47 -39
  10. data/docs/template-router.rb +3 -7
  11. data/lib/.rubocop.yml +4 -4
  12. data/lib/cisco_node_utils.rb +1 -1
  13. data/lib/cisco_node_utils/aaa_authentication_login.rb +96 -0
  14. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +133 -0
  15. data/lib/cisco_node_utils/aaa_authorization_service.rb +150 -0
  16. data/lib/cisco_node_utils/ace.rb +196 -0
  17. data/lib/cisco_node_utils/acl.rb +100 -0
  18. data/lib/cisco_node_utils/bgp.rb +301 -163
  19. data/lib/cisco_node_utils/bgp_af.rb +187 -19
  20. data/lib/cisco_node_utils/bgp_neighbor.rb +18 -33
  21. data/lib/cisco_node_utils/bgp_neighbor_af.rb +25 -48
  22. data/lib/cisco_node_utils/cisco_cmn_utils.rb +23 -4
  23. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +593 -0
  24. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +22 -0
  25. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +31 -0
  26. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +22 -0
  27. data/lib/cisco_node_utils/cmd_ref/acl.yaml +43 -0
  28. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +242 -0
  29. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +164 -0
  30. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +131 -0
  31. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +179 -0
  32. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +34 -0
  33. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +42 -0
  34. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +172 -0
  35. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +35 -0
  36. data/lib/cisco_node_utils/cmd_ref/feature.yaml +42 -0
  37. data/lib/cisco_node_utils/cmd_ref/fex.yaml +9 -0
  38. data/lib/cisco_node_utils/cmd_ref/images.yaml +7 -0
  39. data/lib/cisco_node_utils/cmd_ref/interface.yaml +339 -0
  40. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +28 -0
  41. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +61 -0
  42. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +54 -0
  43. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +32 -0
  44. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
  45. data/lib/cisco_node_utils/cmd_ref/memory.yaml +13 -0
  46. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +7 -0
  47. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +14 -0
  48. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +74 -0
  49. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +33 -0
  50. data/lib/cisco_node_utils/cmd_ref/pim.yaml +40 -0
  51. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +69 -0
  52. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +25 -0
  53. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +64 -0
  54. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +14 -0
  55. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +5 -0
  56. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +72 -0
  57. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +23 -0
  58. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +7 -0
  59. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +50 -0
  60. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +51 -0
  61. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +55 -0
  62. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +11 -0
  63. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +18 -0
  64. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +7 -0
  65. data/lib/cisco_node_utils/cmd_ref/system.yaml +6 -0
  66. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +49 -0
  67. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +33 -0
  68. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +35 -0
  69. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +38 -0
  70. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +6 -0
  71. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +56 -0
  72. data/lib/cisco_node_utils/cmd_ref/vni.yaml +76 -0
  73. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +197 -0
  74. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +88 -0
  75. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +38 -0
  76. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +60 -0
  77. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +39 -0
  78. data/lib/cisco_node_utils/cmd_ref/yum.yaml +13 -0
  79. data/lib/cisco_node_utils/command_reference.rb +359 -187
  80. data/lib/cisco_node_utils/configparser_lib.rb +1 -1
  81. data/lib/cisco_node_utils/dns_domain.rb +19 -5
  82. data/lib/cisco_node_utils/domain_name.rb +4 -8
  83. data/lib/cisco_node_utils/evpn_vni.rb +157 -0
  84. data/lib/cisco_node_utils/fabricpath_global.rb +388 -0
  85. data/lib/cisco_node_utils/fabricpath_topology.rb +150 -0
  86. data/lib/cisco_node_utils/feature.rb +111 -0
  87. data/lib/cisco_node_utils/interface.rb +390 -97
  88. data/lib/cisco_node_utils/interface_channel_group.rb +124 -0
  89. data/lib/cisco_node_utils/interface_ospf.rb +11 -34
  90. data/lib/cisco_node_utils/interface_portchannel.rb +157 -0
  91. data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
  92. data/lib/cisco_node_utils/name_server.rb +1 -1
  93. data/lib/cisco_node_utils/node.rb +55 -249
  94. data/lib/cisco_node_utils/node_util.rb +5 -1
  95. data/lib/cisco_node_utils/ntp_config.rb +2 -2
  96. data/lib/cisco_node_utils/ntp_server.rb +14 -5
  97. data/lib/cisco_node_utils/overlay_global.rb +153 -0
  98. data/lib/cisco_node_utils/pim.rb +124 -0
  99. data/lib/cisco_node_utils/pim_group_list.rb +108 -0
  100. data/lib/cisco_node_utils/pim_rp_address.rb +102 -0
  101. data/lib/cisco_node_utils/platform.rb +8 -9
  102. data/lib/cisco_node_utils/portchannel_global.rb +277 -0
  103. data/lib/cisco_node_utils/radius_global.rb +9 -19
  104. data/lib/cisco_node_utils/radius_server.rb +31 -41
  105. data/lib/cisco_node_utils/radius_server_group.rb +117 -0
  106. data/lib/cisco_node_utils/router_ospf.rb +1 -1
  107. data/lib/cisco_node_utils/router_ospf_vrf.rb +14 -19
  108. data/lib/cisco_node_utils/snmp_notification_receiver.rb +158 -0
  109. data/lib/cisco_node_utils/snmpcommunity.rb +3 -5
  110. data/lib/cisco_node_utils/snmpgroup.rb +1 -1
  111. data/lib/cisco_node_utils/snmpnotification.rb +57 -0
  112. data/lib/cisco_node_utils/snmpserver.rb +8 -17
  113. data/lib/cisco_node_utils/snmpuser.rb +67 -28
  114. data/lib/cisco_node_utils/syslog_server.rb +3 -9
  115. data/lib/cisco_node_utils/syslog_settings.rb +2 -10
  116. data/lib/cisco_node_utils/tacacs_server.rb +9 -14
  117. data/lib/cisco_node_utils/tacacs_server_group.rb +145 -0
  118. data/lib/cisco_node_utils/tacacs_server_host.rb +5 -9
  119. data/lib/cisco_node_utils/vdc.rb +88 -0
  120. data/lib/cisco_node_utils/version.rb +5 -2
  121. data/lib/cisco_node_utils/vlan.rb +71 -8
  122. data/lib/cisco_node_utils/vni.rb +227 -0
  123. data/lib/cisco_node_utils/vpc.rb +377 -0
  124. data/lib/cisco_node_utils/vrf.rb +60 -9
  125. data/lib/cisco_node_utils/vrf_af.rb +191 -0
  126. data/lib/cisco_node_utils/vtp.rb +8 -6
  127. data/lib/cisco_node_utils/vxlan_vtep.rb +151 -0
  128. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +234 -0
  129. data/lib/cisco_node_utils/yum.rb +1 -1
  130. data/tests/.rubocop.yml +1 -1
  131. data/tests/basetest.rb +16 -7
  132. data/tests/ciscotest.rb +55 -13
  133. data/tests/cmd_config.yaml +2 -2
  134. data/tests/platform_info.rb +3 -2
  135. data/tests/test_aaa_authentication_login.rb +219 -0
  136. data/tests/test_aaa_authentication_login_service.rb +759 -0
  137. data/tests/test_aaa_authorization_service.rb +1041 -0
  138. data/tests/test_ace.rb +160 -0
  139. data/tests/test_acl.rb +176 -0
  140. data/tests/test_bgp_af.rb +269 -13
  141. data/tests/test_bgp_neighbor.rb +38 -40
  142. data/tests/test_bgp_neighbor_af.rb +92 -32
  143. data/tests/test_command_config.rb +5 -5
  144. data/tests/test_command_reference.rb +284 -101
  145. data/tests/test_dns_domain.rb +1 -1
  146. data/tests/test_domain_name.rb +1 -1
  147. data/tests/test_evpn_vni.rb +106 -0
  148. data/tests/test_fabricpath_global.rb +243 -0
  149. data/tests/test_fabricpath_topology.rb +98 -0
  150. data/tests/test_interface.rb +292 -74
  151. data/tests/test_interface_channel_group.rb +74 -0
  152. data/tests/test_interface_ospf.rb +9 -4
  153. data/tests/test_interface_portchannel.rb +105 -0
  154. data/tests/test_interface_service_vni.rb +232 -0
  155. data/tests/test_interface_svi.rb +77 -62
  156. data/tests/test_interface_switchport.rb +17 -5
  157. data/tests/test_name_server.rb +1 -1
  158. data/tests/test_node.rb +1 -1
  159. data/tests/test_node_ext.rb +10 -20
  160. data/tests/test_ntp_config.rb +1 -1
  161. data/tests/test_ntp_server.rb +18 -6
  162. data/tests/test_overlay_global.rb +102 -0
  163. data/tests/test_pim.rb +177 -0
  164. data/tests/test_pim_group_list.rb +181 -0
  165. data/tests/test_pim_rp_address.rb +153 -0
  166. data/tests/test_platform.rb +3 -3
  167. data/tests/test_portchannel_global.rb +202 -0
  168. data/tests/test_radius_global.rb +1 -1
  169. data/tests/test_radius_server.rb +92 -57
  170. data/tests/test_radius_server_group.rb +149 -0
  171. data/tests/test_router_bgp.rb +283 -112
  172. data/tests/test_router_ospf.rb +2 -2
  173. data/tests/test_router_ospf_vrf.rb +4 -4
  174. data/tests/test_snmp_notification_receiver.rb +167 -0
  175. data/tests/test_snmpcommunity.rb +1 -1
  176. data/tests/test_snmpgroup.rb +1 -1
  177. data/tests/test_snmpnotification.rb +72 -0
  178. data/tests/test_snmpserver.rb +29 -105
  179. data/tests/test_snmpuser.rb +32 -30
  180. data/tests/test_syslog_server.rb +36 -10
  181. data/tests/test_syslog_settings.rb +1 -1
  182. data/tests/test_tacacs_server.rb +1 -1
  183. data/tests/test_tacacs_server_group.rb +405 -0
  184. data/tests/test_tacacs_server_host.rb +1 -1
  185. data/tests/test_vdc.rb +78 -0
  186. data/tests/test_vlan.rb +74 -19
  187. data/tests/test_vlan_mt_full.rb +95 -0
  188. data/tests/test_vni.rb +106 -0
  189. data/tests/test_vpc.rb +361 -0
  190. data/tests/test_vrf.rb +172 -29
  191. data/tests/test_vtp.rb +1 -1
  192. data/tests/test_vxlan_vtep.rb +214 -0
  193. data/tests/test_vxlan_vtep_vni.rb +201 -0
  194. data/tests/test_yum.rb +1 -1
  195. metadata +120 -11
  196. data/lib/cisco_node_utils/README_YAML.md +0 -325
  197. data/lib/cisco_node_utils/command_reference_common.yaml +0 -1051
  198. data/lib/cisco_node_utils/command_reference_common_bgp.yaml +0 -535
  199. data/lib/cisco_node_utils/command_reference_n3064.yaml +0 -13
  200. data/lib/cisco_node_utils/command_reference_n7k.yaml +0 -52
  201. data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -26
  202. data/tests/platform_info.yaml +0 -10
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013-2015 Cisco and/or its affiliates.
1
+ # Copyright (c) 2013-2016 Cisco and/or its affiliates.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -111,7 +111,7 @@ class TestSnmpUser < CiscoTestCase
111
111
  end
112
112
 
113
113
  def test_engine_id_valid_and_none
114
- create_user('tester', 'auth sha password engineID 22:22:22:22:23:22')
114
+ create_user('tester', 'auth sha XXWWPass0wrf engineID 22:22:22:22:23:22')
115
115
  create_user('tester2')
116
116
 
117
117
  snmpusers = SnmpUser.users
@@ -175,14 +175,16 @@ class TestSnmpUser < CiscoTestCase
175
175
  # destroy the user
176
176
  destroy_user(snmpuser)
177
177
  # check user got removed.
178
+ sleep(5)
179
+ node.cache_flush
178
180
  refute_show_match(command: 'show run snmp all | no-more',
179
181
  pattern: user_pat(name, group))
180
182
  assert_nil(SnmpUser.users[name])
181
183
  end
182
184
 
183
185
  def test_snmpuser_auth_password_equal_invalid_param
184
- name = 'testV3PwEqualInvalid'
185
- auth_pw = 'test1234567'
186
+ name = 'testV3PwEqualInvalid2'
187
+ auth_pw = 'TeSt297534'
186
188
  create_user(name, "network-admin auth md5 #{auth_pw}")
187
189
 
188
190
  # get users
@@ -191,7 +193,7 @@ class TestSnmpUser < CiscoTestCase
191
193
 
192
194
  def test_snmpuser_auth_priv_password_equal_invalid_param
193
195
  name = 'testV3PwEqualInvalid'
194
- auth_pw = 'test1234567'
196
+ auth_pw = 'XXWWPass0wrf'
195
197
  create_user(name, "network-admin auth md5 #{auth_pw} priv #{auth_pw}")
196
198
 
197
199
  # get users
@@ -202,7 +204,7 @@ class TestSnmpUser < CiscoTestCase
202
204
 
203
205
  def test_snmpuser_auth_password_equal_priv_invalid_param
204
206
  name = 'testV3PwEqualInvalid'
205
- auth_pw = 'test1234567'
207
+ auth_pw = 'XXWWPass0wrf'
206
208
  create_user(name, "network-operator auth md5 #{auth_pw} priv #{auth_pw}")
207
209
 
208
210
  # get users
@@ -213,17 +215,17 @@ class TestSnmpUser < CiscoTestCase
213
215
 
214
216
  def test_snmpuser_auth_password_not_equal
215
217
  name = 'testV3PwEqual'
216
- auth_pw = 'test1234567'
218
+ auth_pw = 'xxwwpass0r!f'
217
219
  create_user(name, "network-admin auth md5 #{auth_pw}")
218
220
 
219
221
  # get users
220
222
  snmpuser = SnmpUser.users[name]
221
- refute(snmpuser.auth_password_equal?('test12345', false))
223
+ refute(snmpuser.auth_password_equal?('xxwwpass0r!', false))
222
224
  end
223
225
 
224
226
  def test_snmpuser_auth_password_equal
225
227
  name = 'testV3PwEqual'
226
- auth_pw = 'test1234567'
228
+ auth_pw = 'XXWWPass0wrf'
227
229
  create_user(name, "network-admin auth md5 #{auth_pw}")
228
230
 
229
231
  # get users
@@ -249,7 +251,7 @@ class TestSnmpUser < CiscoTestCase
249
251
  snmpuser = SnmpUser.users[name]
250
252
  assert(snmpuser.auth_password_equal?(auth_pw, true))
251
253
  # verify that if we give a wrong password, the api will return false
252
- refute(snmpuser.auth_password_equal?('0xfe6c', true))
254
+ refute(snmpuser.auth_password_equal?('0xFe6c', true))
253
255
  end
254
256
 
255
257
  def test_snmpuser_auth_priv_password_equal_localizedkey
@@ -268,8 +270,8 @@ class TestSnmpUser < CiscoTestCase
268
270
 
269
271
  def test_snmpuser_auth_priv_des_password_equal
270
272
  name = 'testV3PwEqual'
271
- auth_pw = 'test1234567'
272
- priv_pw = 'testdes1234'
273
+ auth_pw = 'XXWWPass0wrf'
274
+ priv_pw = 'WWXXPaas0wrf'
273
275
  create_user(name, "network-operator auth md5 #{auth_pw} priv #{priv_pw}")
274
276
 
275
277
  # get users
@@ -281,7 +283,7 @@ class TestSnmpUser < CiscoTestCase
281
283
  def test_snmpuser_create_with_single_group_auth_md5_nopriv
282
284
  name = 'userv3test5'
283
285
  groups = ['network-admin']
284
- auth_pw = 'test1234567'
286
+ auth_pw = 'XXWWPass0wrf'
285
287
  snmpuser = SnmpUser.new(name,
286
288
  groups,
287
289
  :md5, auth_pw,
@@ -315,7 +317,7 @@ class TestSnmpUser < CiscoTestCase
315
317
  def test_snmpuser_create_with_single_group_auth_sha_nopriv
316
318
  name = 'userv3testsha'
317
319
  groups = ['network-admin']
318
- auth_pw = 'test1234567'
320
+ auth_pw = 'XXWWPass0wrf'
319
321
  snmpuser = SnmpUser.new(name,
320
322
  groups,
321
323
  :sha, auth_pw,
@@ -333,7 +335,7 @@ class TestSnmpUser < CiscoTestCase
333
335
  def test_create_1_group_auth_sha_nopriv_pw_localized_localizedkey_false
334
336
  name = 'userv3testauthsha3'
335
337
  groups = ['network-admin']
336
- auth_pw = '0xfe6cf9aea159c2c38e0a79ec23ed3cbb'
338
+ auth_pw = '0xFe6cf9aea159c2c38e0a79ec23ed3cbb'
337
339
 
338
340
  snmpuser = SnmpUser.new(name,
339
341
  groups,
@@ -366,8 +368,8 @@ class TestSnmpUser < CiscoTestCase
366
368
  def test_snmpuser_create_with_single_group_auth_md5_priv_des
367
369
  name = 'userv3test6'
368
370
  groups = ['network-admin']
369
- auth_pw = 'test1234567'
370
- priv_pw = 'priv1234567des'
371
+ auth_pw = 'XXWWPass0wrf'
372
+ priv_pw = 'Priv973ApQsX'
371
373
  snmpuser = SnmpUser.new(name,
372
374
  groups,
373
375
  :md5, auth_pw,
@@ -402,8 +404,8 @@ class TestSnmpUser < CiscoTestCase
402
404
  def test_snmpuser_create_with_single_group_auth_md5_priv_aes128
403
405
  name = 'userv3test7'
404
406
  groups = ['network-admin']
405
- auth_pw = 'test1234567'
406
- priv_pw = 'priv1234567aes'
407
+ auth_pw = 'XXWWPass0wrf'
408
+ priv_pw = 'Priv973ApQsX'
407
409
  snmpuser = SnmpUser.new(name,
408
410
  groups,
409
411
  :md5, auth_pw,
@@ -438,8 +440,8 @@ class TestSnmpUser < CiscoTestCase
438
440
  def test_snmpuser_create_with_single_group_auth_sha_priv_des
439
441
  name = 'userv3test8'
440
442
  groups = ['network-admin']
441
- auth_pw = 'test1234567'
442
- priv_pw = 'priv1234567des'
443
+ auth_pw = 'XXWWPass0wrf'
444
+ priv_pw = 'Priv973ApQsX'
443
445
  snmpuser = SnmpUser.new(name,
444
446
  groups,
445
447
  :sha, auth_pw,
@@ -474,8 +476,8 @@ class TestSnmpUser < CiscoTestCase
474
476
  def test_snmpuser_create_with_single_group_auth_sha_priv_aes128
475
477
  name = 'userv3test9'
476
478
  groups = ['network-admin']
477
- auth_pw = 'test1234567'
478
- priv_pw = 'priv1234567aes'
479
+ auth_pw = 'XXWWPass0wrf'
480
+ priv_pw = 'Priv973ApQsX'
479
481
  snmpuser = SnmpUser.new(name,
480
482
  groups,
481
483
  :sha, auth_pw,
@@ -509,8 +511,8 @@ class TestSnmpUser < CiscoTestCase
509
511
 
510
512
  def test_snmpuser_create_destroy_with_engine_id
511
513
  name = 'test_with_engine_id'
512
- auth_pw = 'testpassword'
513
- priv_pw = 'testpassword'
514
+ auth_pw = 'XXWWPass0wrf'
515
+ priv_pw = 'XXWWPass0wrf'
514
516
  engine_id = '128:12:12:12:12'
515
517
  snmpuser = SnmpUser.new(name, [''], :md5, auth_pw, :des, priv_pw,
516
518
  false, engine_id)
@@ -592,7 +594,7 @@ class TestSnmpUser < CiscoTestCase
592
594
 
593
595
  def test_snmpuser_auth_password_equal_with_engineid
594
596
  name = 'test_authpass_equal'
595
- auth_pass = 'testpassword'
597
+ auth_pass = 'XXWWPass0wrf'
596
598
  engine_id = '128:12:12:12:12'
597
599
 
598
600
  snmpuser = SnmpUser.new(name, [''], :md5, auth_pass, :none, '', false,
@@ -600,25 +602,25 @@ class TestSnmpUser < CiscoTestCase
600
602
 
601
603
  assert(snmpuser.auth_password_equal?(auth_pass, false))
602
604
  # our api should be able to detect wrong password
603
- refute(snmpuser.auth_password_equal?('test2468', false))
605
+ refute(snmpuser.auth_password_equal?('WWXXPass0wrf', false))
604
606
  snmpuser.destroy
605
607
  end
606
608
 
607
609
  def test_snmpuser_priv_password_equal_with_engineid
608
610
  name = 'test_privpass_equal'
609
- priv_pass = 'testpassword'
611
+ priv_pass = 'XXWWPass0wrf'
610
612
  engine_id = '128:12:12:12:12'
611
613
 
612
614
  snmpuser = SnmpUser.new(name, [''], :md5, priv_pass, :des, priv_pass, false,
613
615
  engine_id)
614
616
  assert(snmpuser.priv_password_equal?(priv_pass, false))
615
- refute(snmpuser.priv_password_equal?('test2468', false))
617
+ refute(snmpuser.priv_password_equal?('tWWXXpass0wrf', false))
616
618
  snmpuser.destroy
617
619
 
618
620
  snmpuser = SnmpUser.new(name, [''], :md5, priv_pass,
619
621
  :aes128, priv_pass, false, engine_id)
620
622
  assert(snmpuser.priv_password_equal?(priv_pass, false))
621
- refute(snmpuser.priv_password_equal?('test2468', false))
623
+ refute(snmpuser.priv_password_equal?('tWWXXpass0wrf', false))
622
624
  snmpuser.destroy
623
625
  end
624
626
 
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for SyslogServer class
3
3
  #
4
- # Copyright (c) 2014-2015 Cisco and/or its affiliates.
4
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -35,36 +35,48 @@ class TestSyslogServer < CiscoTestCase
35
35
  def no_syslogserver
36
36
  # Turn the feature off for a clean test.
37
37
  config('no logging server 1.2.3.4',
38
- 'no logging server 2.3.4.5',
38
+ 'no logging server 2003::2',
39
39
  'no vrf context red')
40
40
  end
41
41
 
42
42
  # TESTS
43
43
 
44
- def test_syslogserver_create_destroy_single
44
+ def test_create_destroy_single_ipv4
45
45
  id = '1.2.3.4'
46
46
  refute_includes(Cisco::SyslogServer.syslogservers, id)
47
47
 
48
48
  server = Cisco::SyslogServer.new(id, 2, 'default', true)
49
49
  assert_includes(Cisco::SyslogServer.syslogservers, id)
50
- assert_equal(Cisco::SyslogServer.syslogservers[id], server)
50
+ assert_equal(server, Cisco::SyslogServer.syslogservers[id])
51
51
 
52
52
  server.destroy
53
53
  refute_includes(Cisco::SyslogServer.syslogservers, id)
54
54
  end
55
55
 
56
- def test_syslogserver_create_destroy_multiple
56
+ def test_create_destroy_single_ipv6
57
+ id = '2003::2'
58
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
59
+
60
+ server = Cisco::SyslogServer.new(id, 2, 'default', true)
61
+ assert_includes(Cisco::SyslogServer.syslogservers, id)
62
+ assert_equal(server, Cisco::SyslogServer.syslogservers[id])
63
+
64
+ server.destroy
65
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
66
+ end
67
+
68
+ def test_create_destroy_multiple
57
69
  id = '1.2.3.4'
58
- id2 = '2.3.4.5'
70
+ id2 = '2003::2'
59
71
  refute_includes(Cisco::SyslogServer.syslogservers, id)
60
72
  refute_includes(Cisco::SyslogServer.syslogservers, id2)
61
73
 
62
74
  server = Cisco::SyslogServer.new(id, 2, 'default', true)
63
75
  server2 = Cisco::SyslogServer.new(id2, 2, 'default', true)
64
76
  assert_includes(Cisco::SyslogServer.syslogservers, id)
65
- assert_equal(Cisco::SyslogServer.syslogservers[id], server)
77
+ assert_equal(server, Cisco::SyslogServer.syslogservers[id])
66
78
  assert_includes(Cisco::SyslogServer.syslogservers, id2)
67
- assert_equal(Cisco::SyslogServer.syslogservers[id2], server2)
79
+ assert_equal(server2, Cisco::SyslogServer.syslogservers[id2])
68
80
 
69
81
  server.destroy
70
82
  server2.destroy
@@ -72,7 +84,7 @@ class TestSyslogServer < CiscoTestCase
72
84
  refute_includes(Cisco::SyslogServer.syslogservers, id2)
73
85
  end
74
86
 
75
- def test_syslogserver_create_destroy_single_vrf
87
+ def test_create_destroy_single_vrf_ipv4
76
88
  config('vrf context red')
77
89
  id = '1.2.3.4'
78
90
 
@@ -80,7 +92,21 @@ class TestSyslogServer < CiscoTestCase
80
92
 
81
93
  server = Cisco::SyslogServer.new(id, 2, 'red', true)
82
94
  assert_includes(Cisco::SyslogServer.syslogservers, id)
83
- assert_equal(Cisco::SyslogServer.syslogservers[id], server)
95
+ assert_equal(server, Cisco::SyslogServer.syslogservers[id])
96
+
97
+ server.destroy
98
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
99
+ end
100
+
101
+ def test_create_destroy_single_vrf_ipv6
102
+ config('vrf context red')
103
+ id = '2003::2'
104
+
105
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
106
+
107
+ server = Cisco::SyslogServer.new(id, 2, 'red', true)
108
+ assert_includes(Cisco::SyslogServer.syslogservers, id)
109
+ assert_equal(server, Cisco::SyslogServer.syslogservers[id])
84
110
 
85
111
  server.destroy
86
112
  refute_includes(Cisco::SyslogServer.syslogservers, id)
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for SyslogSetting class
3
3
  #
4
- # Copyright (c) 2014-2015 Cisco and/or its affiliates.
4
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2014-2015 Cisco and/or its affiliates.
1
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -0,0 +1,405 @@
1
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/tacacs_server_group'
17
+ require_relative '../lib/cisco_node_utils/tacacs_server_host'
18
+
19
+ # Test class for Tacacs Server Group
20
+ class TestTacacsServerGroup < CiscoTestCase
21
+ def clean_tacacs_config
22
+ config('no feature tacacs',
23
+ 'feature tacacs')
24
+ end
25
+
26
+ def create_tacacsserverhost(name='defaulttest')
27
+ TacacsServerHost.new(name)
28
+ end
29
+
30
+ def detach_tacacsserverhost(host)
31
+ host.destroy
32
+ end
33
+
34
+ def detach_aaaservergroup(aaa_server_group)
35
+ aaa_server_group.destroy
36
+ end
37
+
38
+ def create_aaa_group(group_name, server)
39
+ config("aaa group server #{server} #{group_name}")
40
+ end
41
+
42
+ def destroy_aaa_group(group_name, server)
43
+ config("no aaa group server #{server} #{group_name}")
44
+ end
45
+
46
+ def create_vrf(group_name, server, vrf_name)
47
+ config("aaa group server #{server} #{group_name} ; use-vrf #{vrf_name}")
48
+ end
49
+
50
+ def create_deadtime(group_name, server, deadtime)
51
+ config("aaa group server #{server} #{group_name} ; deadtime #{deadtime}")
52
+ end
53
+
54
+ def create_source_interface(group_name, server, interface)
55
+ config("aaa group server #{server} #{group_name} ; " \
56
+ "source-interface #{interface}")
57
+ end
58
+
59
+ def test_create_invalid_name_tacacs
60
+ assert_raises(TypeError) do
61
+ TacacsServerGroup.new(nil)
62
+ end
63
+ end
64
+
65
+ def test_create_valid_tacacs
66
+ group_name = 'Group1'
67
+ aaa_group = TacacsServerGroup.new(group_name)
68
+ assert_show_match(command: 'show run tacacs+ all | no-more',
69
+ pattern: /#{group_name}/)
70
+
71
+ detach_aaaservergroup(aaa_group)
72
+ end
73
+
74
+ def test_create_valid_multiple_tacacs
75
+ group_name1 = 'Group1'
76
+ group_name2 = 'Group2'
77
+ aaa_group1 = TacacsServerGroup.new(group_name1)
78
+ aaa_group2 = TacacsServerGroup.new(group_name2)
79
+
80
+ assert_show_match(command: 'show run tacacs+ all | no-more',
81
+ pattern: /#{group_name1}/)
82
+ assert_show_match(command: 'show run tacacs+ all | no-more',
83
+ pattern: /#{group_name2}/)
84
+
85
+ detach_aaaservergroup(aaa_group1)
86
+ detach_aaaservergroup(aaa_group2)
87
+ end
88
+
89
+ def test_collection_empty_tacacs
90
+ clean_tacacs_config
91
+ aaa_group_list = TacacsServerGroup.groups
92
+ assert_empty(aaa_group_list,
93
+ 'Error: TacacsServerGroup collection is not empty')
94
+ end
95
+
96
+ def test_collection_multi_tacacs
97
+ clean_tacacs_config
98
+ group_name1 = 'Group1'
99
+ group_name2 = 'Group2'
100
+ group_name3 = 'Group3'
101
+ aaa_group1 = TacacsServerGroup.new(group_name1)
102
+
103
+ groups = TacacsServerGroup.groups
104
+ assert_equal(1, groups.size,
105
+ 'Error: TacacsServerGroup collection reporting incorrect size')
106
+ assert(groups.key?(group_name1),
107
+ "Error: TacacsServerGroup collection does contain #{group_name1}")
108
+ detach_aaaservergroup(aaa_group1)
109
+
110
+ create_aaa_group(group_name2, 'tacacs+')
111
+ create_aaa_group(group_name3, 'tacacs+')
112
+ groups = TacacsServerGroup.groups
113
+ refute_empty(groups, 'Error: TacacsServerGroup collection is not filled')
114
+ assert_equal(2, groups.size,
115
+ 'Error: TacacsServerGroup collection reporting incorrect size')
116
+ assert(groups.key?(group_name2),
117
+ "Error: TacacsServerGroup collection does contain #{group_name2}")
118
+ assert(groups.key?(group_name3),
119
+ "Error: TacacsServerGroup collection does contain #{group_name3}")
120
+
121
+ destroy_aaa_group(group_name2, 'tacacs+')
122
+ destroy_aaa_group(group_name3, 'tacacs+')
123
+ end
124
+
125
+ def test_servers_tacacs
126
+ clean_tacacs_config
127
+ server_name1 = 'server1'
128
+ server_name2 = 'server2'
129
+ server1 = create_tacacsserverhost(server_name1)
130
+ server2 = create_tacacsserverhost(server_name2)
131
+
132
+ aaa_group = TacacsServerGroup.new('Group1')
133
+
134
+ # pre check that default servers are empty
135
+ default_server = aaa_group.default_servers
136
+ assert_empty(default_server, 'Error: Default Servers are not empty')
137
+
138
+ aaa_group.servers = [server_name1, server_name2]
139
+
140
+ # Check collection size
141
+ servers = aaa_group.servers
142
+ assert_equal(2, servers.size,
143
+ 'Error: Collection is not two servers')
144
+ assert(servers.include?('server1'),
145
+ "Error: Collection does not contain #{server_name1}")
146
+ assert(servers.include?('server2'),
147
+ "Error: Collection does not contain #{server_name2}")
148
+
149
+ detach_aaaservergroup(aaa_group)
150
+ detach_tacacsserverhost(server1)
151
+ detach_tacacsserverhost(server2)
152
+ end
153
+
154
+ def test_add_server_tacacs
155
+ server_name1 = 'server1'
156
+ server_name2 = 'server2'
157
+ server1 = create_tacacsserverhost(server_name1)
158
+ server2 = create_tacacsserverhost(server_name2)
159
+
160
+ aaa_group = TacacsServerGroup.new('Group1')
161
+ aaa_group.servers = [server_name1, server_name2]
162
+
163
+ assert_show_match(command: 'show run tacacs+ all | no-more',
164
+ pattern: /server #{server_name1}/)
165
+ assert_show_match(command: 'show run tacacs+ all | no-more',
166
+ pattern: /server #{server_name2}/)
167
+
168
+ detach_aaaservergroup(aaa_group)
169
+ detach_tacacsserverhost(server1)
170
+ detach_tacacsserverhost(server2)
171
+ end
172
+
173
+ def test_remove_server_tacacs
174
+ clean_tacacs_config
175
+ server_name1 = 'server1'
176
+ server_name2 = 'server2'
177
+ server1 = create_tacacsserverhost(server_name1)
178
+ server2 = create_tacacsserverhost(server_name2)
179
+
180
+ aaa_group = TacacsServerGroup.new('Group1')
181
+ aaa_group.servers = [server_name1, server_name2]
182
+
183
+ # Check collection size
184
+ servers = aaa_group.servers
185
+ assert_equal(2, servers.size,
186
+ 'Error: Collection is not two servers')
187
+
188
+ # Now remove them and then check again
189
+ aaa_group.servers = [server_name2]
190
+ refute_show_match(command: 'show run tacacs+ all | no-more',
191
+ pattern: /server #{server_name1}/)
192
+
193
+ aaa_group.servers = []
194
+ refute_show_match(command: 'show run tacacs+ all | no-more',
195
+ pattern: /server #{server_name2}/)
196
+
197
+ detach_aaaservergroup(aaa_group)
198
+ detach_tacacsserverhost(server1)
199
+ detach_tacacsserverhost(server2)
200
+ end
201
+
202
+ def test_remove_server_twice_tacacs
203
+ clean_tacacs_config
204
+ server_name1 = 'server1'
205
+ server_name2 = 'server2'
206
+ server1 = create_tacacsserverhost(server_name1)
207
+ server2 = create_tacacsserverhost(server_name2)
208
+
209
+ aaa_group = TacacsServerGroup.new('Group1')
210
+ aaa_group.servers = [server_name1, server_name2]
211
+
212
+ # Check collection size
213
+ servers = aaa_group.servers
214
+ assert_equal(2, servers.size,
215
+ 'Error: Collection is not two servers')
216
+
217
+ # Remove server 1
218
+ aaa_group.servers = [server_name2]
219
+ refute_show_match(command: 'show run tacacs+ all | no-more',
220
+ pattern: /server #{server_name1}/)
221
+
222
+ # Now remove server 2
223
+ aaa_group.servers = []
224
+ refute_show_match(command: 'show run tacacs+ all | no-more',
225
+ pattern: /server #{server_name2}/)
226
+
227
+ # Check collection size
228
+ servers = aaa_group.servers
229
+ assert_empty(servers, 'Error: Collection not empty')
230
+
231
+ detach_aaaservergroup(aaa_group)
232
+ detach_tacacsserverhost(server1)
233
+ detach_tacacsserverhost(server2)
234
+ end
235
+
236
+ def test_get_vrf_tacacs
237
+ group_name1 = 'Group1'
238
+ aaa_group = TacacsServerGroup.new(group_name1)
239
+
240
+ vrf = cmd_ref.lookup('tacacs_server_group', 'vrf').default_value
241
+ assert_equal(vrf, aaa_group.vrf,
242
+ 'Error: TacacsServerGroup, vrf not default')
243
+
244
+ vrf = 'TESTME'
245
+ create_vrf(group_name1, 'tacacs+', vrf)
246
+ assert_equal(vrf, aaa_group.vrf,
247
+ 'Error: TacacsServerGroup, vrf not configured')
248
+
249
+ vrf = cmd_ref.lookup('tacacs_server_group', 'vrf').default_value
250
+ aaa_group.vrf = vrf
251
+ assert_equal(vrf, aaa_group.vrf,
252
+ 'Error: TacacsServerGroup, vrf not restored to default')
253
+
254
+ detach_aaaservergroup(aaa_group)
255
+ end
256
+
257
+ def test_get_default_vrf_tacacs
258
+ aaa_group = TacacsServerGroup.new('Group1')
259
+ assert_equal(cmd_ref.lookup('tacacs_server_group', 'vrf').default_value,
260
+ aaa_group.default_vrf,
261
+ 'Error: TacacsServerGroup, default vrf incorrect')
262
+ detach_aaaservergroup(aaa_group)
263
+ end
264
+
265
+ def test_set_vrf_tacacs
266
+ vrf = 'management-123'
267
+ aaa_group = TacacsServerGroup.new('Group1')
268
+ aaa_group.vrf = vrf
269
+ assert_show_match(command: 'show run tacacs+ all | no-more',
270
+ pattern: /use-vrf #{vrf}/)
271
+
272
+ # Invalid case
273
+ assert_raises(TypeError) do
274
+ aaa_group.vrf = 2450
275
+ end
276
+ detach_aaaservergroup(aaa_group)
277
+ end
278
+
279
+ def test_get_deadtime_tacacs
280
+ group_name = 'Group1'
281
+ aaa_group = TacacsServerGroup.new(group_name)
282
+
283
+ deadtime = cmd_ref.lookup('tacacs_server_group', 'deadtime').default_value
284
+ assert_equal(deadtime, aaa_group.deadtime,
285
+ 'Error: TacacsServerGroup, deadtime not default')
286
+
287
+ deadtime = 850
288
+ create_deadtime(group_name, 'tacacs+', deadtime)
289
+ assert_equal(deadtime, aaa_group.deadtime,
290
+ 'Error: TacacsServerGroup, deadtime not configured')
291
+
292
+ deadtime = cmd_ref.lookup('tacacs_server_group', 'deadtime').default_value
293
+ aaa_group.deadtime = deadtime
294
+ assert_equal(deadtime, aaa_group.deadtime,
295
+ 'Error: TacacsServerGroup, deadtime not restored to default')
296
+
297
+ detach_aaaservergroup(aaa_group)
298
+ end
299
+
300
+ def test_get_default_deadtime_tacacs
301
+ aaa_group = TacacsServerGroup.new('Group1')
302
+ assert_equal(
303
+ cmd_ref.lookup('tacacs_server_group', 'deadtime').default_value,
304
+ aaa_group.default_deadtime,
305
+ 'Error: TacacsServerGroup, default deadtime incorrect')
306
+ detach_aaaservergroup(aaa_group)
307
+ end
308
+
309
+ def test_set_deadtime_tacacs
310
+ deadtime = 1250
311
+ aaa_group = TacacsServerGroup.new('Group1')
312
+ aaa_group.deadtime = deadtime
313
+ assert_show_match(command: 'show run tacacs+ all | no-more',
314
+ pattern: /deadtime #{deadtime}/,
315
+ msg: 'Error: deadtime not configured')
316
+ # Invalid case
317
+ deadtime = 2450
318
+ assert_raises(CliError) do
319
+ aaa_group.deadtime = deadtime
320
+ end
321
+ detach_aaaservergroup(aaa_group)
322
+ end
323
+
324
+ def test_get_source_interface_tacacs
325
+ group_name = 'Group1'
326
+ aaa_group = TacacsServerGroup.new(group_name)
327
+ intf =
328
+ cmd_ref.lookup('tacacs_server_group', 'source_interface').default_value
329
+ assert_equal(intf, aaa_group.source_interface,
330
+ 'Error: TacacsServerGroup, source-interface set')
331
+
332
+ intf = 'Ethernet1/1'
333
+ create_source_interface(group_name, 'tacacs+', intf)
334
+ assert_equal(intf, aaa_group.source_interface,
335
+ 'Error: TacacsServerGroup, source-interface not correct')
336
+
337
+ intf = 'Ethernet1/32'
338
+ create_source_interface(group_name, 'tacacs+', intf)
339
+ assert_equal(intf, aaa_group.source_interface,
340
+ 'Error: TacacsServerGroup, source-interface not correct')
341
+
342
+ detach_aaaservergroup(aaa_group)
343
+ end
344
+
345
+ def test_get_default_source_interface_tacacs
346
+ aaa_group = TacacsServerGroup.new('Group1')
347
+ assert_equal(
348
+ cmd_ref.lookup('tacacs_server_group', 'source_interface').default_value,
349
+ aaa_group.default_source_interface,
350
+ 'Error: Aaa_Group Server, default source-interface incorrect')
351
+ detach_aaaservergroup(aaa_group)
352
+ end
353
+
354
+ def test_set_source_interface_tacacs
355
+ intf =
356
+ cmd_ref.lookup('tacacs_server_group', 'source_interface').default_value
357
+ aaa_group = TacacsServerGroup.new('Group1')
358
+ assert_equal(intf, aaa_group.source_interface,
359
+ 'Error: Aaa_Group Server, source-interface not default')
360
+
361
+ aaa_group.source_interface = 'loopback1'
362
+ assert_show_match(command: 'show run tacacs+ all | no-more',
363
+ pattern: /source-interface loopback1/,
364
+ msg: 'Error: source-interface not correct')
365
+
366
+ aaa_group.source_interface =
367
+ cmd_ref.lookup('tacacs_server_group', 'source_interface').default_value
368
+ refute_show_match(command: 'show run tacacs+ all | no-more',
369
+ pattern: /source-interface loopback1/)
370
+
371
+ # Invalid case
372
+ state = true
373
+ assert_raises(TypeError) do
374
+ aaa_group.source_interface = state
375
+ end
376
+
377
+ detach_aaaservergroup(aaa_group)
378
+ end
379
+
380
+ # tacacs_server_groups method is the same as groups, added for netdev
381
+ # compatibility, make sure output is the same
382
+ def test_groups_methods_equality
383
+ aaagroup1 = TacacsServerGroup.new('test1')
384
+ aaagroup2 = TacacsServerGroup.new('test2')
385
+ aaagroup3 = TacacsServerGroup.new('test3')
386
+
387
+ groups1 = TacacsServerGroup.groups.sort
388
+ groups2 = TacacsServerGroup.tacacs_server_groups.sort
389
+
390
+ assert_equal(groups1, groups2)
391
+
392
+ detach_aaaservergroup(aaagroup1)
393
+ detach_aaaservergroup(aaagroup2)
394
+ detach_aaaservergroup(aaagroup3)
395
+ end
396
+
397
+ def test_destroy_tacacs
398
+ group_name = 'Group1'
399
+ aaa_group = TacacsServerGroup.new(group_name)
400
+
401
+ detach_aaaservergroup(aaa_group)
402
+ refute_show_match(command: 'show run tacacs+ all | no-more',
403
+ pattern: /#{group_name}/)
404
+ end
405
+ end