cisco_node_utils 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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