cisco_node_utils 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rubocop.yml +81 -1
  4. data/.travis.yml +9 -0
  5. data/CHANGELOG.md +72 -6
  6. data/CONTRIBUTING.md +32 -7
  7. data/README.md +70 -7
  8. data/Rakefile +17 -0
  9. data/bin/check_metric_limits.rb +109 -0
  10. data/bin/git/hooks/commit-msg/enforce_style +81 -0
  11. data/bin/git/hooks/hook_lib +108 -0
  12. data/bin/git/hooks/hooks-wrapper +38 -0
  13. data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
  14. data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
  15. data/bin/git/hooks/post-flow-release-start/update-version +19 -0
  16. data/bin/git/hooks/post-merge/update-hooks +6 -0
  17. data/bin/git/hooks/post-rewrite/update-hooks +6 -0
  18. data/bin/git/hooks/pre-commit/rubocop +20 -0
  19. data/bin/git/hooks/pre-commit/validate-diffs +31 -0
  20. data/bin/git/hooks/pre-push/check-changelog +24 -0
  21. data/bin/git/hooks/pre-push/rubocop +7 -0
  22. data/bin/git/update-hooks +65 -0
  23. data/cisco_node_utils.gemspec +9 -3
  24. data/docs/README-develop-best-practices.md +404 -0
  25. data/docs/README-develop-node-utils-APIs.md +215 -365
  26. data/docs/README-maintainers.md +33 -3
  27. data/docs/template-router.rb +89 -91
  28. data/docs/template-test_router.rb +52 -55
  29. data/lib/.rubocop.yml +18 -0
  30. data/lib/cisco_node_utils.rb +2 -19
  31. data/lib/cisco_node_utils/README_YAML.md +1 -9
  32. data/lib/cisco_node_utils/bgp.rb +664 -0
  33. data/lib/cisco_node_utils/bgp_af.rb +530 -0
  34. data/lib/cisco_node_utils/bgp_neighbor.rb +425 -0
  35. data/lib/cisco_node_utils/bgp_neighbor_af.rb +709 -0
  36. data/lib/cisco_node_utils/cisco_cmn_utils.rb +59 -25
  37. data/lib/cisco_node_utils/command_reference.rb +72 -74
  38. data/lib/cisco_node_utils/command_reference_common.yaml +174 -9
  39. data/lib/cisco_node_utils/command_reference_common_bgp.yaml +535 -0
  40. data/lib/cisco_node_utils/command_reference_n7k.yaml +4 -0
  41. data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -9
  42. data/lib/cisco_node_utils/configparser_lib.rb +152 -147
  43. data/lib/cisco_node_utils/dns_domain.rb +79 -0
  44. data/lib/cisco_node_utils/domain_name.rb +71 -0
  45. data/lib/cisco_node_utils/interface.rb +167 -161
  46. data/lib/cisco_node_utils/interface_ospf.rb +78 -81
  47. data/lib/cisco_node_utils/name_server.rb +64 -0
  48. data/lib/cisco_node_utils/node.rb +154 -198
  49. data/lib/cisco_node_utils/node_util.rb +61 -0
  50. data/lib/cisco_node_utils/ntp_config.rb +65 -0
  51. data/lib/cisco_node_utils/ntp_server.rb +76 -0
  52. data/lib/cisco_node_utils/platform.rb +174 -165
  53. data/lib/cisco_node_utils/radius_global.rb +146 -0
  54. data/lib/cisco_node_utils/radius_server.rb +295 -0
  55. data/lib/cisco_node_utils/router_ospf.rb +59 -63
  56. data/lib/cisco_node_utils/router_ospf_vrf.rb +226 -210
  57. data/lib/cisco_node_utils/snmpcommunity.rb +52 -58
  58. data/lib/cisco_node_utils/snmpgroup.rb +22 -23
  59. data/lib/cisco_node_utils/snmpserver.rb +99 -103
  60. data/lib/cisco_node_utils/snmpuser.rb +294 -274
  61. data/lib/cisco_node_utils/syslog_server.rb +92 -0
  62. data/lib/cisco_node_utils/syslog_settings.rb +69 -0
  63. data/lib/cisco_node_utils/tacacs_server.rb +137 -133
  64. data/lib/cisco_node_utils/tacacs_server_host.rb +84 -87
  65. data/lib/cisco_node_utils/version.rb +2 -1
  66. data/lib/cisco_node_utils/vlan.rb +28 -31
  67. data/lib/cisco_node_utils/vrf.rb +80 -0
  68. data/lib/cisco_node_utils/vtp.rb +100 -97
  69. data/lib/cisco_node_utils/yum.rb +15 -17
  70. data/tests/.rubocop.yml +15 -0
  71. data/tests/basetest.rb +81 -36
  72. data/tests/ciscotest.rb +38 -78
  73. data/{lib/cisco_node_utils → tests}/platform_info.rb +12 -8
  74. data/{lib/cisco_node_utils → tests}/platform_info.yaml +1 -1
  75. data/tests/test_bgp_af.rb +920 -0
  76. data/tests/test_bgp_neighbor.rb +403 -0
  77. data/tests/test_bgp_neighbor_af.rb +589 -0
  78. data/tests/test_command_config.rb +65 -62
  79. data/tests/test_command_reference.rb +31 -45
  80. data/tests/test_dns_domain.rb +113 -0
  81. data/tests/test_domain_name.rb +86 -0
  82. data/tests/test_interface.rb +424 -548
  83. data/tests/test_interface_ospf.rb +248 -432
  84. data/tests/test_interface_svi.rb +56 -79
  85. data/tests/test_interface_switchport.rb +196 -272
  86. data/tests/test_name_server.rb +85 -0
  87. data/tests/test_node.rb +7 -6
  88. data/tests/test_node_ext.rb +133 -186
  89. data/tests/test_ntp_config.rb +49 -0
  90. data/tests/test_ntp_server.rb +74 -0
  91. data/tests/test_platform.rb +58 -37
  92. data/tests/test_radius_global.rb +78 -0
  93. data/tests/test_radius_server.rb +185 -0
  94. data/tests/test_router_bgp.rb +838 -0
  95. data/tests/test_router_ospf.rb +49 -80
  96. data/tests/test_router_ospf_vrf.rb +274 -392
  97. data/tests/test_snmpcommunity.rb +128 -172
  98. data/tests/test_snmpgroup.rb +12 -14
  99. data/tests/test_snmpserver.rb +160 -189
  100. data/tests/test_snmpuser.rb +568 -717
  101. data/tests/test_syslog_server.rb +88 -0
  102. data/tests/test_syslog_settings.rb +54 -0
  103. data/tests/test_tacacs_server.rb +113 -148
  104. data/tests/test_tacacs_server_host.rb +108 -161
  105. data/tests/test_vlan.rb +63 -79
  106. data/tests/test_vrf.rb +92 -0
  107. data/tests/test_vtp.rb +108 -126
  108. data/tests/test_yum.rb +47 -41
  109. metadata +92 -56
  110. data/.rubocop_todo.yml +0 -293
  111. data/docs/.rubocop.yml +0 -13
  112. data/docs/template-feature.rb +0 -45
  113. data/docs/template-test_feature.rb +0 -51
  114. data/tests/test_all_cisco.rb +0 -46
@@ -0,0 +1,49 @@
1
+ #
2
+ # Minitest for NtpConfig class
3
+ #
4
+ # Copyright (c) 2015 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/ntp_config'
20
+
21
+ # TestNtpConfig - Minitest for NtpConfig node utility.
22
+ class TestNtpConfig < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_ntpconfig
27
+ end
28
+
29
+ def no_ntpconfig
30
+ # Turn the feature off for a clean test.
31
+ config("no ntp source-interface #{interfaces[0]}")
32
+ end
33
+
34
+ # TESTS
35
+
36
+ def test_ntpconfig_create_destroy_single
37
+ id = 'default'
38
+
39
+ ntp = Cisco::NtpConfig.new(id)
40
+ assert_includes(Cisco::NtpConfig.ntpconfigs, id)
41
+ assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
42
+
43
+ ntp.source_interface = interfaces[1]
44
+ assert_equal(Cisco::NtpConfig.ntpconfigs[id].source_interface,
45
+ interfaces[1].downcase)
46
+ assert_equal(Cisco::NtpConfig.ntpconfigs[id].source_interface,
47
+ ntp.source_interface)
48
+ end
49
+ end
@@ -0,0 +1,74 @@
1
+ #
2
+ # Minitest for NtpServer class
3
+ #
4
+ # Copyright (c) 2014-2015 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/ntp_server'
20
+
21
+ # TestNtpServer - Minitest for NtpServer node utility.
22
+ class TestNtpServer < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_ntpserver_uk
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_ntpserver_uk
32
+ super
33
+ end
34
+
35
+ def no_ntpserver_uk
36
+ # Turn the feature off for a clean test.
37
+ config('no ntpserver 130.88.203.12',
38
+ 'no ntpserver 194.207.34.9')
39
+ end
40
+
41
+ # TESTS
42
+
43
+ def test_ntpserver_create_destroy_single_ipv4
44
+ id = '130.88.203.12'
45
+ refute_includes(Cisco::NtpServer.ntpservers, id)
46
+
47
+ ntp = Cisco::NtpServer.new(id, false)
48
+ assert_includes(Cisco::NtpServer.ntpservers, id)
49
+ assert_equal(Cisco::NtpServer.ntpservers[id], ntp)
50
+
51
+ ntp.destroy
52
+ refute_includes(Cisco::NtpServer.ntpservers, id)
53
+ end
54
+
55
+ def test_ntpserver_create_destroy_multiple
56
+ id1 = '130.88.203.12'
57
+ id2 = '194.207.34.9'
58
+ refute_includes(Cisco::NtpServer.ntpservers, id1)
59
+ refute_includes(Cisco::NtpServer.ntpservers, id2)
60
+
61
+ ntp1 = Cisco::NtpServer.new(id1, false)
62
+ ntp2 = Cisco::NtpServer.new(id2, true)
63
+ refute_equal(ntp1, ntp2)
64
+ assert_includes(Cisco::NtpServer.ntpservers, id1)
65
+ assert_includes(Cisco::NtpServer.ntpservers, id2)
66
+ assert_equal(Cisco::NtpServer.ntpservers[id1], ntp1)
67
+ assert_equal(Cisco::NtpServer.ntpservers[id2], ntp2)
68
+
69
+ ntp1.destroy
70
+ ntp2.destroy
71
+ refute_includes(Cisco::NtpServer.ntpservers, id1)
72
+ refute_includes(Cisco::NtpServer.ntpservers, id2)
73
+ end
74
+ end
@@ -12,9 +12,10 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require File.expand_path("../ciscotest", __FILE__)
16
- require File.expand_path("../../lib/cisco_node_utils/platform", __FILE__)
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/platform'
17
17
 
18
+ # TestPlatform - Minitest for Platform class
18
19
  class TestPlatform < CiscoTestCase
19
20
  def test_system_image
20
21
  s = @device.cmd('show version | i image').scan(/ (\S+)$/).flatten.first
@@ -37,27 +38,29 @@ class TestPlatform < CiscoTestCase
37
38
  # hardware type returns a different value depending on whether you use the
38
39
  # ascii or show output of nxapi, but show appears to be substring of ascii
39
40
  assert(s.include?(Platform.hardware_type),
40
- "Expected '#{s}' to contain '#{Platform.hardware_type}'")
41
+ "Expected '#{s}' to contain '#{Platform.hardware_type}'")
41
42
  end
42
43
 
43
44
  def test_cpu
44
- s = @device.cmd('sh ver | no-m').scan(/Hardware\n\s+.*\n\s+(.*) with/).flatten.first
45
+ s = @device.cmd('sh ver | no-m').scan(
46
+ /Hardware\n\s+.*\n\s+(.*) with/).flatten.first
45
47
  assert_equal(s, Platform.cpu)
46
48
  end
47
49
 
48
50
  def test_memory
49
- arr = @device.cmd('sh sys reso').scan(/(\S+) total.* (\S+) used.* (\S+) free/).flatten
51
+ arr = @device.cmd('sh sys reso').scan(
52
+ /(\S+) total.* (\S+) used.* (\S+) free/).flatten
50
53
  mem_hsh = { 'total' => arr[0],
51
54
  'used' => arr[1],
52
- 'free' => arr[2], }
55
+ 'free' => arr[2] }
53
56
  # used and free memory change rapidly, compare total and sums of free + used
54
57
  assert_equal(mem_hsh['total'], Platform.memory['total'])
55
- assert_equal(
56
- mem_hsh['used'].to_i + mem_hsh['free'].to_i,
57
- Platform.memory['used'].to_i + Platform.memory['free'].to_i
58
- )
59
- # assert(Platform.memory.has_key?('used'), "Platform memory has no key 'used'")
60
- # assert(Platform.memory.has_key?('free'), "Platform memory has no key 'free'")
58
+ assert_equal(mem_hsh['used'].to_i + mem_hsh['free'].to_i,
59
+ Platform.memory['used'].to_i + Platform.memory['free'].to_i)
60
+ # assert(Platform.memory.has_key?('used'),
61
+ # "Platform memory has no key 'used'")
62
+ # assert(Platform.memory.has_key?('free'),
63
+ # "Platform memory has no key 'free'")
61
64
  end
62
65
 
63
66
  def test_board
@@ -100,88 +103,106 @@ class TestPlatform < CiscoTestCase
100
103
  # Everything from DESCR onwards follows the same general format so we
101
104
  # can define a single base regexp and extend it as needed for Chassis, Slot,
102
105
  # Power Supply, and Fan inventory entries.
103
- @@inv_cmn_re = /.*DESCR:\s+"(.*)"\s*\nPID:\s+(\S+).*VID:\s+(\S+).*SN:\s+(\S+)/
106
+ def inv_cmn_re
107
+ /.*DESCR:\s+"(.*)"\s*\nPID:\s+(\S+).*VID:\s+(\S+).*SN:\s+(\S+)/
108
+ end
104
109
 
105
110
  def test_chassis
106
- arr = @device.cmd('sh inv | no-m').scan(/NAME:\s+"Chassis"#{@@inv_cmn_re}/)
111
+ arr = @device.cmd('sh inv | no-m').scan(/NAME:\s+"Chassis"#{inv_cmn_re}/)
107
112
  arr = arr.flatten
108
113
  # convert to hash
109
114
  chas_hsh = { 'descr' => arr[0],
110
115
  'pid' => arr[1],
111
116
  'vid' => arr[2],
112
- 'sn' => arr[3], }
117
+ 'sn' => arr[3],
118
+ }
113
119
  assert_equal(chas_hsh, Platform.chassis)
114
120
  end
115
121
 
116
122
  def test_slots
117
123
  slots_arr_arr = @device.cmd('sh inv | no-m')
118
- .scan(/NAME:\s+"(Slot \d+)"#{@@inv_cmn_re}/)
124
+ .scan(/NAME:\s+"(Slot \d+)"#{inv_cmn_re}/)
119
125
  # convert to array of slot hashes
120
126
  slots_hsh_hsh = {}
121
- slots_arr_arr.each { |slot|
127
+ slots_arr_arr.each do |slot|
122
128
  slots_hsh_hsh[slot[0]] = { 'descr' => slot[1],
123
129
  'pid' => slot[2],
124
130
  'vid' => slot[3],
125
- 'sn' => slot[4], }
126
- }
131
+ 'sn' => slot[4],
132
+ }
133
+ end
127
134
  assert_equal(slots_hsh_hsh, Platform.slots)
128
135
  end
129
136
 
130
137
  def test_power_supplies
131
138
  pwr_arr_arr = @device.cmd('sh inv | no-m')
132
- .scan(/NAME:\s+"(Power Supply \d+)"#{@@inv_cmn_re}/)
133
- refute_empty(pwr_arr_arr, "Regex scan failed to match show inventory output")
139
+ .scan(/NAME:\s+"(Power Supply \d+)"#{inv_cmn_re}/)
140
+ refute_empty(pwr_arr_arr,
141
+ 'Regex scan failed to match show inventory output')
134
142
 
135
143
  # convert to array of power supply hashes
136
144
  pwr_hsh_hsh = {}
137
- pwr_arr_arr.each { |pwr|
145
+ pwr_arr_arr.each do |pwr|
138
146
  pwr_hsh_hsh[pwr[0]] = { 'descr' => pwr[1],
139
147
  'pid' => pwr[2],
140
148
  'vid' => pwr[3],
141
- 'sn' => pwr[4], }
142
- }
149
+ 'sn' => pwr[4],
150
+ }
151
+ end
143
152
  assert_equal(pwr_hsh_hsh, Platform.power_supplies)
144
153
  end
145
154
 
146
155
  def test_fans
147
156
  fan_arr_arr = @device.cmd('sh inv | no-m')
148
- .scan(/NAME:\s+"(Fan \d+)"#{@@inv_cmn_re}/)
149
- refute_empty(fan_arr_arr, "Regex scan failed to match show inventory output")
157
+ .scan(/NAME:\s+"(Fan \d+)"#{inv_cmn_re}/)
158
+ refute_empty(fan_arr_arr,
159
+ 'Regex scan failed to match show inventory output')
150
160
 
151
161
  # convert to array of fan hashes
152
162
  fan_hsh_hsh = {}
153
- fan_arr_arr.each { |fan|
163
+ fan_arr_arr.each do |fan|
154
164
  fan_hsh_hsh[fan[0]] = { 'descr' => fan[1],
155
165
  'pid' => fan[2],
156
166
  'vid' => fan[3],
157
- 'sn' => fan[4], }
158
- }
167
+ 'sn' => fan[4],
168
+ }
169
+ end
159
170
  assert_equal(fan_hsh_hsh, Platform.fans)
160
171
  end
161
172
 
162
173
  def test_virtual_services
174
+ skip('Skip test: No virtual-services installed') unless
175
+ @device.cmd('show virtual-service list')[/Name\s+Status\s+Package Name/]
176
+
163
177
  # this would be beyond ugly to parse from ascii, utilize config_get
164
- vir_arr = node.config_get("virtual_service", "services")
178
+ vir_arr = node.config_get('virtual_service', 'services')
165
179
  vir_arr = [vir_arr] if vir_arr.is_a? Hash
166
180
  # convert to expected format
167
181
  vir_hsh_hsh = {}
168
182
  unless vir_arr.nil?
169
- vir_arr.each { |serv|
183
+ vir_arr.each do |serv|
184
+ # rubocop:disable Style/AlignHash, Style/ExtraSpacing
170
185
  vir_hsh_hsh[serv['name']] = {
171
186
  'package_info' => { 'name' => serv['package_name'],
172
- 'path' => serv['ova_path'], },
187
+ 'path' => serv['ova_path'],
188
+ },
173
189
  'application' => { 'name' => serv['application_name'],
174
190
  'version' => serv['application_version'],
175
- 'descr' => serv['application_description'], },
191
+ 'descr' => serv['application_description'],
192
+ },
176
193
  'signing' => { 'key_type' => serv['key_type'],
177
- 'method' => serv['signing_method'], },
194
+ 'method' => serv['signing_method'],
195
+ },
178
196
  'licensing' => { 'name' => serv['licensing_name'],
179
- 'version' => serv['licensing_version'], },
197
+ 'version' => serv['licensing_version'],
198
+ },
180
199
  'reservation' => { 'disk' => serv['disk_reservation'],
181
200
  'memory' => serv['memory_reservation'],
182
- 'cpu' => serv['cpu_reservation'], },
201
+ 'cpu' => serv['cpu_reservation'],
202
+ },
183
203
  }
184
- }
204
+ # rubocop:enable Style/AlignHash, Style/ExtraSpacing
205
+ end
185
206
  end
186
207
  assert_equal(vir_hsh_hsh, Platform.virtual_services)
187
208
  end
@@ -0,0 +1,78 @@
1
+ #
2
+ # Minitest for RadiusGlobal class
3
+ #
4
+ # Copyright (c) 2014-2015 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/radius_global'
20
+
21
+ # TestRadiusGlobal - Minitest for RadiusGlobal node utility.
22
+ class TestRadiusGlobal < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_radius_global
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_radius_global
32
+ super
33
+ end
34
+
35
+ def no_radius_global
36
+ # Turn the feature off for a clean test.
37
+ config('no radius-server timeout 2',
38
+ 'no radius-server retransmit 3')
39
+ end
40
+
41
+ # TESTS
42
+
43
+ def test_radius_global
44
+ id = 'default'
45
+
46
+ global = Cisco::RadiusGlobal.new(id)
47
+ assert_includes(Cisco::RadiusGlobal.radius_global, id)
48
+ assert_equal(Cisco::RadiusGlobal.radius_global[id], global)
49
+
50
+ # Default Checking
51
+ assert_equal(global.timeout, global.default_timeout)
52
+ assert_equal(global.retransmit_count, global.default_retransmit_count)
53
+
54
+ global.retransmit_count = 3
55
+ assert_equal(Cisco::RadiusGlobal.radius_global[id].retransmit_count,
56
+ 3)
57
+ assert_equal(global.retransmit_count,
58
+ 3)
59
+
60
+ global.timeout = 2
61
+ assert_equal(Cisco::RadiusGlobal.radius_global[id].timeout,
62
+ 2)
63
+ assert_equal(global.timeout,
64
+ 2)
65
+
66
+ global.key_set('44444444', nil)
67
+ assert_equal(Cisco::RadiusGlobal.radius_global[id].key,
68
+ '44444444')
69
+ assert_equal(global.key,
70
+ '44444444')
71
+
72
+ # Setting back to default and re-checking
73
+ global.timeout = global.default_timeout
74
+ global.retransmit_count = global.default_retransmit_count
75
+ assert_equal(global.timeout, global.default_timeout)
76
+ assert_equal(global.retransmit_count, global.default_retransmit_count)
77
+ end
78
+ end
@@ -0,0 +1,185 @@
1
+ #
2
+ # Minitest for RadiusServer class
3
+ #
4
+ # Copyright (c) 2014-2015 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/radius_server'
20
+
21
+ # TestRadiusServer - Minitest for RadiusServer node utility.
22
+ class TestRadiusServer < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_radiusserver
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_radiusserver
32
+ super
33
+ end
34
+
35
+ def no_radiusserver
36
+ # Turn the feature off for a clean test.
37
+ config('no radius-server host 8.8.8.8',
38
+ 'no radius-server host 9.9.9.9')
39
+ end
40
+
41
+ # TESTS
42
+
43
+ def test_radiusserver_create_destroy_single
44
+ id = '8.8.8.8'
45
+ refute_includes(Cisco::RadiusServer.radiusservers, id)
46
+
47
+ server = Cisco::RadiusServer.new(id, true)
48
+ assert_includes(Cisco::RadiusServer.radiusservers, id)
49
+ assert_equal(Cisco::RadiusServer.radiusservers[id], server)
50
+
51
+ # Default checking
52
+ assert_equal(server.acct_port, server.default_acct_port)
53
+ assert_equal(server.auth_port, server.default_auth_port)
54
+ assert_equal(server.accounting, server.default_accounting)
55
+ assert_equal(server.authentication, server.default_authentication)
56
+
57
+ server.accounting = true
58
+ assert(Cisco::RadiusServer.radiusservers[id].accounting)
59
+
60
+ server.authentication = true
61
+ assert(Cisco::RadiusServer.radiusservers[id].authentication)
62
+
63
+ server.acct_port = 44
64
+ assert_equal(Cisco::RadiusServer.radiusservers[id].acct_port,
65
+ 44)
66
+
67
+ server.auth_port = 55
68
+ assert_equal(Cisco::RadiusServer.radiusservers[id].auth_port,
69
+ 55)
70
+
71
+ server.retransmit_count = 3
72
+ assert_equal(Cisco::RadiusServer.radiusservers[id].retransmit_count,
73
+ 3)
74
+
75
+ server.key_set('44444444', nil)
76
+ assert_equal(Cisco::RadiusServer.radiusservers[id].key,
77
+ '44444444')
78
+
79
+ # Setting back to default and re-checking
80
+ server.acct_port = server.default_acct_port
81
+ server.auth_port = server.default_auth_port
82
+ server.accounting = server.default_accounting
83
+ server.authentication = server.default_authentication
84
+ assert_equal(server.acct_port, server.default_acct_port)
85
+ assert_equal(server.auth_port, server.default_auth_port)
86
+ assert_equal(server.accounting, server.default_accounting)
87
+ assert_equal(server.authentication, server.default_authentication)
88
+
89
+ server.destroy
90
+ refute_includes(Cisco::RadiusServer.radiusservers, id)
91
+ end
92
+
93
+ def test_radiusserver_create_destroy_multiple
94
+ id = '8.8.8.8'
95
+ id2 = '9.9.9.9'
96
+ refute_includes(Cisco::RadiusServer.radiusservers, id)
97
+ refute_includes(Cisco::RadiusServer.radiusservers, id2)
98
+
99
+ server = Cisco::RadiusServer.new(id, true)
100
+ server2 = Cisco::RadiusServer.new(id2, true)
101
+ assert_includes(Cisco::RadiusServer.radiusservers, id)
102
+ assert_equal(Cisco::RadiusServer.radiusservers[id], server)
103
+ assert_includes(Cisco::RadiusServer.radiusservers, id2)
104
+ assert_equal(Cisco::RadiusServer.radiusservers[id2], server2)
105
+
106
+ # Default checking
107
+ assert_equal(server.acct_port, server.default_acct_port)
108
+ assert_equal(server.auth_port, server.default_auth_port)
109
+ assert_equal(server.accounting, server.default_accounting)
110
+ assert_equal(server.authentication, server.default_authentication)
111
+ assert_equal(server2.acct_port, server2.default_acct_port)
112
+ assert_equal(server2.auth_port, server2.default_auth_port)
113
+ assert_equal(server2.accounting, server2.default_accounting)
114
+ assert_equal(server2.authentication, server2.default_authentication)
115
+
116
+ server.accounting = true
117
+ assert(Cisco::RadiusServer.radiusservers[id].accounting)
118
+
119
+ server.authentication = true
120
+ assert(Cisco::RadiusServer.radiusservers[id].authentication)
121
+
122
+ server.acct_port = 44
123
+ assert_equal(Cisco::RadiusServer.radiusservers[id].acct_port,
124
+ 44)
125
+
126
+ server.auth_port = 55
127
+ assert_equal(Cisco::RadiusServer.radiusservers[id].auth_port,
128
+ 55)
129
+
130
+ server.retransmit_count = 3
131
+ assert_equal(Cisco::RadiusServer.radiusservers[id].retransmit_count,
132
+ 3)
133
+
134
+ server.key_set('44444444', nil)
135
+ assert_equal(Cisco::RadiusServer.radiusservers[id].key,
136
+ '44444444')
137
+ assert_equal(server.key,
138
+ '44444444')
139
+
140
+ server2.accounting = true
141
+ assert(Cisco::RadiusServer.radiusservers[id2].accounting)
142
+
143
+ server2.authentication = true
144
+ assert(Cisco::RadiusServer.radiusservers[id2].authentication)
145
+
146
+ server2.acct_port = 44
147
+ assert_equal(Cisco::RadiusServer.radiusservers[id2].acct_port,
148
+ 44)
149
+
150
+ server2.auth_port = 55
151
+ assert_equal(Cisco::RadiusServer.radiusservers[id2].auth_port,
152
+ 55)
153
+
154
+ server2.retransmit_count = 3
155
+ assert_equal(Cisco::RadiusServer.radiusservers[id2].retransmit_count,
156
+ 3)
157
+
158
+ server2.key_set('44444444', nil)
159
+ assert_equal(Cisco::RadiusServer.radiusservers[id2].key,
160
+ '44444444')
161
+
162
+ # Setting back to default and re-checking
163
+ server.acct_port = server.default_acct_port
164
+ server.auth_port = server.default_auth_port
165
+ server.accounting = server.default_accounting
166
+ server.authentication = server.default_authentication
167
+ server2.acct_port = server2.default_acct_port
168
+ server2.auth_port = server2.default_auth_port
169
+ server2.accounting = server2.default_accounting
170
+ server2.authentication = server2.default_authentication
171
+ assert_equal(server.acct_port, server.default_acct_port)
172
+ assert_equal(server.auth_port, server.default_auth_port)
173
+ assert_equal(server.accounting, server.default_accounting)
174
+ assert_equal(server.authentication, server.default_authentication)
175
+ assert_equal(server2.acct_port, server2.default_acct_port)
176
+ assert_equal(server2.auth_port, server2.default_auth_port)
177
+ assert_equal(server2.accounting, server2.default_accounting)
178
+ assert_equal(server2.authentication, server2.default_authentication)
179
+
180
+ server.destroy
181
+ server2.destroy
182
+ refute_includes(Cisco::RadiusServer.radiusservers, id)
183
+ refute_includes(Cisco::RadiusServer.radiusservers, id2)
184
+ end
185
+ end