cisco_node_utils 1.3.0 → 1.4.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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +66 -0
  4. data/Gemfile +1 -0
  5. data/README.md +44 -43
  6. data/bin/.rubocop.yml +18 -0
  7. data/bin/show_running_yang.rb +233 -0
  8. data/cisco_node_utils.gemspec +1 -1
  9. data/docs/README-maintainers.md +1 -0
  10. data/docs/README-utilities.md +14 -0
  11. data/lib/.rubocop.yml +1 -1
  12. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +8 -3
  13. data/lib/cisco_node_utils/aaa_authorization_service.rb +6 -0
  14. data/lib/cisco_node_utils/bfd_global.rb +300 -0
  15. data/lib/cisco_node_utils/bgp.rb +6 -4
  16. data/lib/cisco_node_utils/bgp_af.rb +2 -0
  17. data/lib/cisco_node_utils/bgp_neighbor.rb +14 -0
  18. data/lib/cisco_node_utils/bgp_neighbor_af.rb +4 -1
  19. data/lib/cisco_node_utils/cisco_cmn_utils.rb +126 -0
  20. data/lib/cisco_node_utils/client/client.rb +6 -2
  21. data/lib/cisco_node_utils/client/grpc/client.rb +120 -36
  22. data/lib/cisco_node_utils/client/nxapi/client.rb +6 -2
  23. data/lib/cisco_node_utils/cmd_ref/DEPRECATED.yaml +118 -0
  24. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +14 -0
  25. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
  26. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +7 -7
  27. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +7 -0
  28. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +125 -0
  29. data/lib/cisco_node_utils/cmd_ref/feature.yaml +10 -0
  30. data/lib/cisco_node_utils/cmd_ref/interface.yaml +141 -49
  31. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +44 -0
  32. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +6 -0
  33. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +6 -0
  34. data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
  35. data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
  36. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +0 -3
  37. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +3 -3
  38. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +39 -15
  39. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +43 -21
  40. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +48 -19
  41. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +0 -0
  42. data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +30 -0
  43. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +18 -6
  44. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +4 -0
  45. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +1 -0
  46. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +23 -10
  47. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +8 -2
  48. data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
  49. data/lib/cisco_node_utils/cmd_ref/yum.yaml +10 -1
  50. data/lib/cisco_node_utils/constants.rb +8 -1
  51. data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
  52. data/lib/cisco_node_utils/exceptions.rb +29 -0
  53. data/lib/cisco_node_utils/feature.rb +28 -0
  54. data/lib/cisco_node_utils/interface.rb +493 -402
  55. data/lib/cisco_node_utils/interface_DEPRECATED.rb +513 -0
  56. data/lib/cisco_node_utils/interface_ospf.rb +126 -0
  57. data/lib/cisco_node_utils/interface_portchannel.rb +16 -0
  58. data/lib/cisco_node_utils/logger.rb +3 -0
  59. data/lib/cisco_node_utils/node.rb +29 -1
  60. data/lib/cisco_node_utils/overlay_global.rb +1 -12
  61. data/lib/cisco_node_utils/pim.rb +1 -0
  62. data/lib/cisco_node_utils/pim_group_list.rb +1 -0
  63. data/lib/cisco_node_utils/pim_rp_address.rb +1 -0
  64. data/lib/cisco_node_utils/platform.rb +9 -2
  65. data/lib/cisco_node_utils/router_ospf.rb +1 -1
  66. data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
  67. data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
  68. data/lib/cisco_node_utils/router_ospf_vrf.rb +17 -0
  69. data/lib/cisco_node_utils/snmp_notification_receiver.rb +27 -9
  70. data/lib/cisco_node_utils/snmpcommunity.rb +34 -8
  71. data/lib/cisco_node_utils/snmpserver.rb +4 -4
  72. data/lib/cisco_node_utils/snmpuser.rb +0 -0
  73. data/lib/cisco_node_utils/tacacs_global.rb +102 -0
  74. data/lib/cisco_node_utils/tacacs_server.rb +8 -7
  75. data/lib/cisco_node_utils/vdc.rb +25 -7
  76. data/lib/cisco_node_utils/version.rb +1 -1
  77. data/lib/cisco_node_utils/vlan.rb +30 -56
  78. data/lib/cisco_node_utils/vlan_DEPRECATED.rb +108 -0
  79. data/lib/cisco_node_utils/yang.rb +160 -0
  80. data/lib/cisco_node_utils/yum.rb +25 -32
  81. data/tests/.rubocop.yml +3 -0
  82. data/tests/ciscotest.rb +136 -19
  83. data/tests/cmd_config_invalid.yaml +1 -1
  84. data/tests/noop.rb +7 -0
  85. data/tests/tacacs_server.yaml.example +6 -0
  86. data/tests/test_aaa_authentication_login.rb +24 -1
  87. data/tests/test_aaa_authentication_login_service.rb +9 -16
  88. data/tests/test_aaa_authorization_service.rb +111 -84
  89. data/tests/test_bfd_global.rb +278 -0
  90. data/tests/test_bgp_neighbor.rb +20 -0
  91. data/tests/test_bridge_domain_vni.rb +2 -9
  92. data/tests/test_cmn_utils.rb +76 -0
  93. data/tests/test_dhcp_relay_global.rb +284 -0
  94. data/tests/test_dns_domain.rb +4 -4
  95. data/tests/test_domain_name.rb +2 -2
  96. data/tests/test_encapsulation.rb +2 -4
  97. data/tests/test_evpn_vni.rb +14 -7
  98. data/tests/test_fabricpath_global.rb +12 -13
  99. data/tests/test_feature.rb +35 -17
  100. data/tests/test_interface.rb +352 -127
  101. data/tests/test_interface_bdi.rb +2 -2
  102. data/tests/test_interface_channel_group.rb +1 -1
  103. data/tests/test_interface_ospf.rb +153 -23
  104. data/tests/test_interface_portchannel.rb +15 -6
  105. data/tests/test_interface_private_vlan.rb +200 -576
  106. data/tests/test_interface_svi.rb +5 -52
  107. data/tests/test_interface_switchport.rb +80 -240
  108. data/tests/test_itd_device_group.rb +2 -2
  109. data/tests/test_itd_device_group_node.rb +2 -2
  110. data/tests/test_itd_service.rb +1 -1
  111. data/tests/test_name_server.rb +3 -3
  112. data/tests/test_node_ext.rb +15 -17
  113. data/tests/test_ntp_config.rb +1 -1
  114. data/tests/test_ntp_server.rb +3 -3
  115. data/tests/test_nxapi.rb +1 -0
  116. data/tests/test_overlay_global.rb +15 -19
  117. data/tests/test_pim.rb +5 -5
  118. data/tests/test_pim_group_list.rb +1 -37
  119. data/tests/test_pim_rp_address.rb +1 -1
  120. data/tests/test_platform.rb +9 -11
  121. data/tests/test_portchannel_global.rb +43 -3
  122. data/tests/test_radius_server.rb +1 -1
  123. data/tests/test_radius_server_group.rb +1 -1
  124. data/tests/test_router_bgp.rb +17 -30
  125. data/tests/test_router_ospf_area.rb +433 -0
  126. data/tests/test_router_ospf_area_vlink.rb +298 -0
  127. data/tests/test_router_ospf_vrf.rb +17 -0
  128. data/tests/test_snmp_notification_receiver.rb +11 -11
  129. data/tests/test_snmpcommunity.rb +177 -69
  130. data/tests/test_snmpgroup.rb +7 -7
  131. data/tests/test_snmpserver.rb +164 -253
  132. data/tests/test_snmpuser.rb +73 -69
  133. data/tests/test_stp_global.rb +15 -15
  134. data/tests/test_syslog_settings.rb +1 -1
  135. data/tests/test_tacacs_global.rb +80 -0
  136. data/tests/test_tacacs_server.rb +129 -51
  137. data/tests/test_tacacs_server_group.rb +3 -29
  138. data/tests/test_tacacs_server_host.rb +24 -27
  139. data/tests/test_vlan.rb +57 -59
  140. data/tests/test_vlan_private.rb +271 -284
  141. data/tests/test_vpc.rb +10 -4
  142. data/tests/test_vrf.rb +2 -0
  143. data/tests/test_vrf_af.rb +2 -5
  144. data/tests/test_vtp.rb +5 -2
  145. data/tests/test_vxlan_vtep.rb +20 -44
  146. data/tests/test_vxlan_vtep_vni.rb +23 -16
  147. data/tests/test_yang.rb +369 -0
  148. data/tests/test_yum.rb +34 -42
  149. data/tests/yum_package.yaml +35 -0
  150. metadata +31 -4
  151. data/tests/test_vlan_mt_full.rb +0 -85
@@ -24,7 +24,7 @@ class TestStpGlobal < CiscoTestCase
24
24
  def setup
25
25
  super
26
26
  config 'no spanning-tree mode'
27
- config 'system bridge-domain none' if /N7/ =~ node.product_id
27
+ remove_all_vlans
28
28
  @intf = Interface.new(interfaces[0])
29
29
 
30
30
  # Only pre-clean interface on initial setup
@@ -35,7 +35,7 @@ class TestStpGlobal < CiscoTestCase
35
35
 
36
36
  def teardown
37
37
  config 'no spanning-tree mode'
38
- config 'system bridge-domain none' if /N7/ =~ node.product_id
38
+ remove_all_vlans
39
39
  super
40
40
  end
41
41
 
@@ -419,7 +419,7 @@ class TestStpGlobal < CiscoTestCase
419
419
  global.vlan_designated_priority)
420
420
  end
421
421
 
422
- def test_interface_stp_bpdufilter_change
422
+ def test_intf_stp_bpdufilter_change
423
423
  @intf.stp_bpdufilter = 'enable'
424
424
  assert_equal('enable', @intf.stp_bpdufilter)
425
425
  @intf.stp_bpdufilter = 'disable'
@@ -429,7 +429,7 @@ class TestStpGlobal < CiscoTestCase
429
429
  @intf.stp_bpdufilter)
430
430
  end
431
431
 
432
- def test_interface_stp_bpduguard_change
432
+ def test_intf_stp_bpduguard_change
433
433
  @intf.stp_bpduguard = 'enable'
434
434
  assert_equal('enable', @intf.stp_bpduguard)
435
435
  @intf.stp_bpduguard = 'disable'
@@ -439,7 +439,7 @@ class TestStpGlobal < CiscoTestCase
439
439
  @intf.stp_bpduguard)
440
440
  end
441
441
 
442
- def test_interface_stp_cost_change
442
+ def test_intf_stp_cost_change
443
443
  @intf.stp_cost = 2000
444
444
  assert_equal(2000, @intf.stp_cost)
445
445
  @intf.stp_cost = @intf.default_stp_cost
@@ -447,7 +447,7 @@ class TestStpGlobal < CiscoTestCase
447
447
  @intf.stp_cost)
448
448
  end
449
449
 
450
- def test_interface_stp_guard_change
450
+ def test_intf_stp_guard_change
451
451
  @intf.stp_guard = 'loop'
452
452
  assert_equal('loop', @intf.stp_guard)
453
453
  @intf.stp_guard = 'none'
@@ -459,7 +459,7 @@ class TestStpGlobal < CiscoTestCase
459
459
  @intf.stp_guard)
460
460
  end
461
461
 
462
- def test_interface_stp_link_type_change
462
+ def test_intf_stp_link_type_change
463
463
  @intf.stp_link_type = 'shared'
464
464
  assert_equal('shared', @intf.stp_link_type)
465
465
  @intf.stp_link_type = 'point-to-point'
@@ -469,7 +469,7 @@ class TestStpGlobal < CiscoTestCase
469
469
  @intf.stp_link_type)
470
470
  end
471
471
 
472
- def test_interface_stp_port_priority_change
472
+ def test_intf_stp_port_priority_change
473
473
  @intf.stp_port_priority = 32
474
474
  assert_equal(32, @intf.stp_port_priority)
475
475
  @intf.stp_port_priority = @intf.default_stp_port_priority
@@ -477,7 +477,7 @@ class TestStpGlobal < CiscoTestCase
477
477
  @intf.stp_port_priority)
478
478
  end
479
479
 
480
- def test_interface_stp_port_type_change
480
+ def test_intf_stp_port_type_change
481
481
  @intf.switchport_mode = :disabled
482
482
  @intf.switchport_mode = :trunk
483
483
  @intf.stp_port_type = 'edge'
@@ -493,7 +493,7 @@ class TestStpGlobal < CiscoTestCase
493
493
  @intf.stp_port_type)
494
494
  end
495
495
 
496
- def test_interface_stp_mst_cost_change
496
+ def test_intf_stp_mst_cost_change
497
497
  @intf.stp_mst_cost = @intf.default_stp_mst_cost
498
498
  assert_equal(@intf.default_stp_mst_cost,
499
499
  @intf.stp_mst_cost)
@@ -505,7 +505,7 @@ class TestStpGlobal < CiscoTestCase
505
505
  @intf.stp_mst_cost)
506
506
  end
507
507
 
508
- def test_interface_stp_mst_port_priority_change
508
+ def test_intf_stp_mst_port_priority_change
509
509
  @intf.stp_mst_port_priority = @intf.default_stp_mst_port_priority
510
510
  assert_equal(@intf.default_stp_mst_port_priority,
511
511
  @intf.stp_mst_port_priority)
@@ -517,7 +517,7 @@ class TestStpGlobal < CiscoTestCase
517
517
  @intf.stp_mst_port_priority)
518
518
  end
519
519
 
520
- def test_interface_stp_vlan_cost_change
520
+ def test_intf_stp_vlan_cost_change
521
521
  @intf.stp_vlan_cost = @intf.default_stp_vlan_cost
522
522
  assert_equal(@intf.default_stp_vlan_cost,
523
523
  @intf.stp_vlan_cost)
@@ -529,7 +529,7 @@ class TestStpGlobal < CiscoTestCase
529
529
  @intf.stp_vlan_cost)
530
530
  end
531
531
 
532
- def test_interface_stp_vlan_port_priority_change
532
+ def test_intf_stp_vlan_port_priority_change
533
533
  @intf.stp_vlan_port_priority = @intf.default_stp_vlan_port_priority
534
534
  assert_equal(@intf.default_stp_vlan_port_priority,
535
535
  @intf.stp_vlan_port_priority)
@@ -541,7 +541,7 @@ class TestStpGlobal < CiscoTestCase
541
541
  @intf.stp_vlan_port_priority)
542
542
  end
543
543
 
544
- def test_interface_stp_props_switchport_disabled
544
+ def test_intf_stp_props_switchport_disabled
545
545
  @intf.switchport_enable(false)
546
546
  proplist = {
547
547
  'bpdufilter' => 'enable',
@@ -555,7 +555,7 @@ class TestStpGlobal < CiscoTestCase
555
555
  'vlan_port_priority' => [%w(2-4,6,8-12 224), %w(14 32)],
556
556
  }
557
557
  proplist.each do |k, v|
558
- assert_raises(RuntimeError, 'foo') do
558
+ assert_raises(RuntimeError, "#{@intf}: #{k} => #{v}") do
559
559
  @intf.send("stp_#{k}=", v)
560
560
  end
561
561
  end
@@ -41,7 +41,7 @@ class TestSyslogSettings < CiscoTestCase
41
41
 
42
42
  # TESTS
43
43
 
44
- def test_syslogsettings_create
44
+ def test_create
45
45
  syslog_setting = Cisco::SyslogSettings.new('default')
46
46
 
47
47
  if platform == :ios_xr
@@ -0,0 +1,80 @@
1
+ #
2
+ # Minitest for TacacsGlobal class
3
+ #
4
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ require_relative 'ciscotest'
19
+ require_relative '../lib/cisco_node_utils/tacacs_global'
20
+
21
+ # TestTacacsGlobal - Minitest for TacacsGlobal node utility.
22
+ class TestTacacsGlobal < CiscoTestCase
23
+ @skip_unless_supported = 'tacacs_global'
24
+
25
+ def setup
26
+ # setup runs at the beginning of each test
27
+ super
28
+ config_no_warn('no feature tacacs+') if platform == :nexus
29
+ no_tacacs_global if platform == :ios_xr
30
+ end
31
+
32
+ def teardown
33
+ # teardown runs at the end of each test
34
+ no_tacacs_global
35
+ config_no_warn('no feature tacacs+') if platform == :nexus
36
+ super
37
+ end
38
+
39
+ def no_tacacs_global
40
+ # Turn the feature off for a clean test.
41
+ config('no tacacs-server timeout 2')
42
+ end
43
+
44
+ # TESTS
45
+
46
+ def test_tacacs_global
47
+ id = 'default'
48
+
49
+ global = Cisco::TacacsGlobal.new(id)
50
+ assert_includes(Cisco::TacacsGlobal.tacacs_global, id)
51
+ assert_equal(global, Cisco::TacacsGlobal.tacacs_global[id])
52
+
53
+ # Default Checking
54
+ assert_equal(global.default_timeout, global.timeout)
55
+
56
+ global.timeout = 5
57
+ assert_equal(5, Cisco::TacacsGlobal.tacacs_global[id].timeout)
58
+ assert_equal(5, global.timeout)
59
+
60
+ # first change
61
+ key_format = 0
62
+ key = 'TEST_NEW'
63
+ global.encryption_key_set(key_format, key)
64
+ assert(!global.key.nil?)
65
+ assert(key_format, global.key_format)
66
+
67
+ # second change
68
+ key_format = 6
69
+
70
+ # Must use a valid type6 password: CSCvb36266
71
+ key = 'JDYkqyIFWeBvzpljSfWmRZrmRSRE8'
72
+ global.encryption_key_set(key_format, key)
73
+ assert(!global.key.nil?)
74
+ assert(key_format, global.key_format)
75
+
76
+ # Setting back to default and re-checking
77
+ global.timeout = global.default_timeout
78
+ assert_equal(global.default_timeout, global.timeout)
79
+ end
80
+ end
@@ -21,28 +21,39 @@ class TestTacacsServer < CiscoTestCase
21
21
 
22
22
  def assert_tacacsserver_feature
23
23
  assert_show_match(command: 'show run all | no-more',
24
- pattern: /feature tacacs\+/)
24
+ pattern: /feature tacacs\+/) if platform == :nexus
25
25
  end
26
26
 
27
27
  def refute_tacacsserver_feature
28
28
  refute_show_match(command: 'show run all | no-more',
29
- pattern: /feature tacacs\+/)
29
+ pattern: /feature tacacs\+/) if platform == :nexus
30
30
  end
31
31
 
32
32
  def setup
33
33
  super
34
- # Most commands appear under 'show run tacacs all' but the
35
- # 'directed-request' command is under 'show run aaa all'
36
- @default_show_command = 'show run tacacs all | no-more ; ' \
37
- 'show run aaa all | no-more'
38
- config_no_warn('no feature tacacs+')
34
+ if platform == :nexus
35
+ # Most commands appear under 'show run tacacs all' but the
36
+ # 'directed-request' command is under 'show run aaa all'
37
+ @default_show_command = 'show run tacacs all | no-more ; ' \
38
+ 'show run aaa all | no-more'
39
+ config_no_warn('no feature tacacs+')
40
+
41
+ elsif platform == :ios_xr
42
+ @default_show_command = 'show running-config tacacs-server'
43
+ no_tacacs_global
44
+ end
39
45
  end
40
46
 
41
47
  def teardown
42
- config_no_warn('no feature tacacs+')
48
+ config_no_warn('no feature tacacs+') if platform == :nexus
43
49
  super
44
50
  end
45
51
 
52
+ def no_tacacs_global
53
+ # Turn the feature off for a clean test.
54
+ config('no tacacs-server timeout 2')
55
+ end
56
+
46
57
  def test_create_valid
47
58
  tacacs = TacacsServer.new
48
59
  assert_tacacsserver_feature
@@ -50,34 +61,53 @@ class TestTacacsServer < CiscoTestCase
50
61
  end
51
62
 
52
63
  def test_get_encryption_type
53
- config_no_warn('feature tacacs+')
54
- encryption_type = TACACS_SERVER_ENC_UNKNOWN
55
- # Get encryption password when not configured
56
- tacacs = TacacsServer.new
57
- assert_equal(encryption_type,
58
- tacacs.encryption_type,
59
- 'Error: Tacacs Server, encryption type incorrect')
60
- tacacs.destroy
61
-
62
- # Get encryption password when configured
63
- encryption_type = TACACS_SERVER_ENC_NONE
64
- # This one is needed since the 'sh run' will always display the type
65
- # differently than the used encryption config type.
66
- sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
67
- config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
68
-
69
- tacacs = TacacsServer.new
70
- assert_equal(sh_run_encryption_type,
71
- tacacs.encryption_type,
72
- 'Error: Tacacs Server, encryption type incorrect')
73
-
74
- encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
75
- config("tacacs-server key #{encryption_type} TEST")
76
-
77
- assert_equal(sh_run_encryption_type,
78
- tacacs.encryption_type,
79
- 'Error: Tacacs Server, encryption type incorrect')
80
- tacacs.destroy
64
+ if platform == :nexus
65
+ config_no_warn('feature tacacs+')
66
+
67
+ # The tacacs-server key is 'sticky'.
68
+ # If a key is configured it will remain configured even if
69
+ # the tacacs feature is disabled so to be safe go ahead
70
+ # and remove any key that might exist before the test.d
71
+ config_no_warn('no tacacs-server key')
72
+
73
+ encryption_type = TACACS_SERVER_ENC_UNKNOWN
74
+ # Get encryption password when not configured
75
+ tacacs = TacacsServer.new
76
+ assert_equal(encryption_type,
77
+ tacacs.encryption_type,
78
+ 'Error: Tacacs Server, encryption type incorrect')
79
+ tacacs.destroy
80
+
81
+ # Get encryption password when configured
82
+ encryption_type = TACACS_SERVER_ENC_NONE
83
+ # This one is needed since the 'sh run' will always display the type
84
+ # differently than the used encryption config type.
85
+ sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
86
+ config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
87
+
88
+ tacacs = TacacsServer.new
89
+ assert_equal(sh_run_encryption_type,
90
+ tacacs.encryption_type,
91
+ 'Error: Tacacs Server, encryption type incorrect')
92
+
93
+ encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
94
+ config("tacacs-server key #{encryption_type} TEST")
95
+
96
+ assert_equal(sh_run_encryption_type,
97
+ tacacs.encryption_type,
98
+ 'Error: Tacacs Server, encryption type incorrect')
99
+ tacacs.destroy
100
+ elsif platform == :ios_xr
101
+ encryption_type = TACACS_SERVER_ENC_NONE
102
+ sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
103
+ config("tacacs-server key #{encryption_type} TEST")
104
+
105
+ tacacs = TacacsServer.new
106
+ assert_equal(sh_run_encryption_type,
107
+ tacacs.encryption_type,
108
+ 'Error: Tacacs Server, encryption type incorrect')
109
+ tacacs.destroy
110
+ end
81
111
  end
82
112
 
83
113
  def test_get_default_encryption
@@ -88,6 +118,8 @@ class TestTacacsServer < CiscoTestCase
88
118
  end
89
119
 
90
120
  def test_get_encryption_password
121
+ config('no tacacs-server key') if platform == :ios_xr
122
+
91
123
  tacacs = TacacsServer.new
92
124
  assert_equal(node.config_get_default('tacacs_server',
93
125
  'encryption_password'),
@@ -100,11 +132,23 @@ class TestTacacsServer < CiscoTestCase
100
132
  encryption_type = TACACS_SERVER_ENC_NONE
101
133
  # This one is needed since the 'sh run' will always display the password
102
134
  # differently than the used encryption config type.
103
- config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
135
+ if platform == :nexus
136
+ config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
137
+ elsif platform == :ios_xr
138
+ config("tacacs-server key #{encryption_type} TEST")
139
+ end
104
140
  tacacs = TacacsServer.new
105
- assert_equal(sh_run_encryption_password,
106
- tacacs.encryption_password,
107
- 'Error: Tacacs Server, encryption password incorrect')
141
+
142
+ if platform == :nexus
143
+ assert_equal(sh_run_encryption_password,
144
+ tacacs.encryption_password,
145
+ 'Error: Tacacs Server, encryption password incorrect')
146
+ elsif platform == :ios_xr
147
+ # When a password is set on ios_xr it is always encrypted,
148
+ # even as a return value, hence here checking for not nil.
149
+ assert(!tacacs.encryption_password.nil?)
150
+ end
151
+
108
152
  tacacs.destroy
109
153
  end
110
154
 
@@ -125,9 +169,15 @@ class TestTacacsServer < CiscoTestCase
125
169
  tacacs = TacacsServer.new
126
170
  tacacs.encryption_key_set(enc_type, password)
127
171
  # Get the password from the running config since its encoded
128
- line = assert_show_match(
129
- pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
130
- msg: 'Error: Tacacs Server, key not configured')
172
+ if platform == :nexus
173
+ line = assert_show_match(
174
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
175
+ msg: 'Error: Tacacs Server, key not configured')
176
+ elsif platform == :ios_xr
177
+ line = assert_show_match(
178
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
179
+ msg: 'Error: Tacacs Server, key not configured')
180
+ end
131
181
  # Extract encrypted password, and git rid of the "" around the pasword
132
182
  md = line.to_s
133
183
  encrypted_password = md.to_s.split(' ').last.tr('\"', '')
@@ -150,16 +200,27 @@ class TestTacacsServer < CiscoTestCase
150
200
 
151
201
  tacacs = TacacsServer.new
152
202
  tacacs.encryption_key_set(enc_type, password)
153
- assert_show_match(
154
- pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
155
- msg: 'Error: Tacacs Server, key not configured')
156
-
203
+ if platform == :nexus
204
+ assert_show_match(
205
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
206
+ msg: 'Error: Tacacs Server, key not configured')
207
+ elsif platform == :ios_xr
208
+ assert_show_match(
209
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
210
+ msg: 'Error: Tacacs Server, key not configured')
211
+ end
157
212
  enc_type = TACACS_SERVER_ENC_UNKNOWN
158
213
  password = ''
159
214
  tacacs.encryption_key_set(enc_type, password)
160
- refute_show_match(
161
- pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
162
- msg: 'Error: Tacacs Server, key configured')
215
+ if platform == :nexus
216
+ refute_show_match(
217
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
218
+ msg: 'Error: Tacacs Server, key configured')
219
+ elsif platform == :ios_xr
220
+ refute_show_match(
221
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
222
+ msg: 'Error: Tacacs Server, key configured')
223
+ end
163
224
  tacacs.destroy
164
225
  end
165
226
 
@@ -197,7 +258,9 @@ class TestTacacsServer < CiscoTestCase
197
258
  'Error: Tacacs Server, timeout value incorrect')
198
259
 
199
260
  # Invalid case
200
- timeout = 80
261
+ timeout = 80 if platform == :nexus
262
+ timeout = 80_000 if platform == :ios_xr
263
+
201
264
  assert_raises(Cisco::CliError) do
202
265
  tacacs.timeout = timeout
203
266
  end
@@ -205,6 +268,8 @@ class TestTacacsServer < CiscoTestCase
205
268
  end
206
269
 
207
270
  def test_get_deadtime
271
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
272
+
208
273
  tacacs = TacacsServer.new
209
274
  deadtime = node.config_get_default('tacacs_server', 'deadtime')
210
275
  assert_equal(deadtime, tacacs.deadtime,
@@ -218,12 +283,15 @@ class TestTacacsServer < CiscoTestCase
218
283
  end
219
284
 
220
285
  def test_get_default_deadtime
286
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
287
+
221
288
  assert_equal(node.config_get_default('tacacs_server', 'deadtime'),
222
289
  TacacsServer.default_deadtime,
223
290
  'Error: Tacacs Server, default deadtime incorrect')
224
291
  end
225
292
 
226
293
  def test_set_deadtime
294
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
227
295
  deadtime = 1250
228
296
 
229
297
  tacacs = TacacsServer.new
@@ -244,6 +312,8 @@ class TestTacacsServer < CiscoTestCase
244
312
  end
245
313
 
246
314
  def test_get_directed_request
315
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
316
+
247
317
  config('feature tacacs', 'tacacs-server directed-request')
248
318
  tacacs = TacacsServer.new
249
319
  assert(tacacs.directed_request?,
@@ -256,12 +326,14 @@ class TestTacacsServer < CiscoTestCase
256
326
  end
257
327
 
258
328
  def test_get_default_directed_request
329
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
259
330
  assert_equal(node.config_get_default('tacacs_server', 'directed_request'),
260
331
  TacacsServer.default_directed_request,
261
332
  'Error: Tacacs Server, default directed-request incorrect')
262
333
  end
263
334
 
264
335
  def test_set_directed_request
336
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
265
337
  config('feature tacacs', 'tacacs-server directed-request')
266
338
  state = true
267
339
  tacacs = TacacsServer.new
@@ -300,6 +372,8 @@ class TestTacacsServer < CiscoTestCase
300
372
  end
301
373
 
302
374
  def test_get_source_interface
375
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
376
+
303
377
  config_no_warn('no ip tacacs source-interface')
304
378
  tacacs = TacacsServer.new
305
379
  intf = node.config_get_default('tacacs_server', 'source_interface')
@@ -314,12 +388,16 @@ class TestTacacsServer < CiscoTestCase
314
388
  end
315
389
 
316
390
  def test_get_default_source_interface
391
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
392
+
317
393
  assert_equal(node.config_get_default('tacacs_server', 'source_interface'),
318
394
  TacacsServer.default_source_interface,
319
395
  'Error: Tacacs Server, default source-interface incorrect')
320
396
  end
321
397
 
322
398
  def test_set_source_interface
399
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
400
+
323
401
  config('feature tacacs+', 'no ip tacacs source-int')
324
402
  intf = node.config_get_default('tacacs_server', 'source_interface')
325
403
  tacacs = TacacsServer.new