cisco_node_utils 1.3.0 → 1.4.0

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