cisco_node_utils 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,88 @@
1
+ #
2
+ # Minitest for SyslogServer 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/syslog_server'
20
+
21
+ # TestSyslogServer - Minitest for SyslogServer node utility.
22
+ class TestSyslogServer < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_syslogserver
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_syslogserver
32
+ super
33
+ end
34
+
35
+ def no_syslogserver
36
+ # Turn the feature off for a clean test.
37
+ config('no logging server 1.2.3.4',
38
+ 'no logging server 2.3.4.5',
39
+ 'no vrf context red')
40
+ end
41
+
42
+ # TESTS
43
+
44
+ def test_syslogserver_create_destroy_single
45
+ id = '1.2.3.4'
46
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
47
+
48
+ server = Cisco::SyslogServer.new(id, 2, 'default', true)
49
+ assert_includes(Cisco::SyslogServer.syslogservers, id)
50
+ assert_equal(Cisco::SyslogServer.syslogservers[id], server)
51
+
52
+ server.destroy
53
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
54
+ end
55
+
56
+ def test_syslogserver_create_destroy_multiple
57
+ id = '1.2.3.4'
58
+ id2 = '2.3.4.5'
59
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
60
+ refute_includes(Cisco::SyslogServer.syslogservers, id2)
61
+
62
+ server = Cisco::SyslogServer.new(id, 2, 'default', true)
63
+ server2 = Cisco::SyslogServer.new(id2, 2, 'default', true)
64
+ assert_includes(Cisco::SyslogServer.syslogservers, id)
65
+ assert_equal(Cisco::SyslogServer.syslogservers[id], server)
66
+ assert_includes(Cisco::SyslogServer.syslogservers, id2)
67
+ assert_equal(Cisco::SyslogServer.syslogservers[id2], server2)
68
+
69
+ server.destroy
70
+ server2.destroy
71
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
72
+ refute_includes(Cisco::SyslogServer.syslogservers, id2)
73
+ end
74
+
75
+ def test_syslogserver_create_destroy_single_vrf
76
+ config('vrf context red')
77
+ id = '1.2.3.4'
78
+
79
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
80
+
81
+ server = Cisco::SyslogServer.new(id, 2, 'red', true)
82
+ assert_includes(Cisco::SyslogServer.syslogservers, id)
83
+ assert_equal(Cisco::SyslogServer.syslogservers[id], server)
84
+
85
+ server.destroy
86
+ refute_includes(Cisco::SyslogServer.syslogservers, id)
87
+ end
88
+ end
@@ -0,0 +1,54 @@
1
+ #
2
+ # Minitest for SyslogSetting 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/syslog_settings'
20
+
21
+ # TestSyslogSetting - Minitest for SyslogSetting node utility.
22
+ class TestSyslogSettings < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_syslogsettings
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_syslogsettings
32
+ super
33
+ end
34
+
35
+ def no_syslogsettings
36
+ # Turn the feature off for a clean test.
37
+ config('no logging timestamp seconds')
38
+ end
39
+
40
+ # TESTS
41
+
42
+ def test_syslogsettings_create
43
+ syslog_setting = Cisco::SyslogSettings.new('default')
44
+ assert_includes(Cisco::SyslogSettings.syslogsettings, 'default')
45
+ assert_equal(Cisco::SyslogSettings.syslogsettings['default'],
46
+ syslog_setting)
47
+
48
+ syslog_setting.timestamp = 'milliseconds'
49
+ assert_equal(Cisco::SyslogSettings.syslogsettings['default'].timestamp,
50
+ 'milliseconds')
51
+ assert_equal(syslog_setting.timestamp,
52
+ 'milliseconds')
53
+ end
54
+ end
@@ -12,47 +12,43 @@
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/tacacs_server", __FILE__)
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/tacacs_server'
17
17
 
18
+ # TestTacacsServer - Minitest for TacacsServer node utility
18
19
  class TestTacacsServer < CiscoTestCase
19
- def get_tacacsserver_feature
20
- s = @device.cmd("show run all | no-more")
21
- cmd = "feature tacacs+"
22
- line = /#{cmd}/.match(s)
20
+ def assert_tacacsserver_feature
21
+ assert_show_match(command: 'show run all | no-more',
22
+ pattern: /feature tacacs\+/)
23
23
  end
24
24
 
25
- # Helper routine to get the tacacs config. Ideally we should be able
26
- # to use 'sh run tacacs all' but that does not work for 'directed-request'
27
- # why 'sh run aaa all' is used.
28
- def get_tacacsserver_match_line(name)
29
- s = @device.cmd("show run tacacs all | no-more ; show run aaa all | no-more")
30
- cmd = "tacacs-server"
31
- pattern = (/#{cmd} #{name}/)
32
- line = pattern.match(s)
25
+ def refute_tacacsserver_feature
26
+ refute_show_match(command: 'show run all | no-more',
27
+ pattern: /feature tacacs\+/)
33
28
  end
34
29
 
35
- def get_match_line(name)
36
- s = @device.cmd("show run all | no-more")
37
- line = /#{name}/.match(s)
30
+ def setup
31
+ super
32
+ # Most commands appear under 'show run tacacs all' but the
33
+ # 'directed-request' command is under 'show run aaa all'
34
+ @default_show_command = 'show run tacacs all | no-more ; ' \
35
+ 'show run aaa all | no-more'
38
36
  end
39
37
 
40
38
  def test_tacacsserver_create_valid
41
39
  tacacs = TacacsServer.new
42
- line = get_tacacsserver_feature
43
- refute_nil(line, "Error: Tacacs feature not set")
40
+ assert_tacacsserver_feature
44
41
  tacacs.destroy
45
42
  end
46
43
 
47
44
  def test_tacacsserver_get_encryption_type
48
- s = @device.cmd("conf t ; no feature tacacs+ ; feature tacacs+ ; end")
49
- node.cache_flush
45
+ config('no feature tacacs+', 'feature tacacs+')
50
46
  encryption_type = TACACS_SERVER_ENC_UNKNOWN
51
47
  # Get encryption password when not configured
52
48
  tacacs = TacacsServer.new
53
49
  assert_equal(encryption_type,
54
50
  tacacs.encryption_type,
55
- "Error: Tacacs Server, encryption type incorrect")
51
+ 'Error: Tacacs Server, encryption type incorrect')
56
52
  tacacs.destroy
57
53
 
58
54
  # Get encryption password when configured
@@ -60,26 +56,19 @@ class TestTacacsServer < CiscoTestCase
60
56
  # This one is needed since the 'sh run' will always display the type
61
57
  # differently than the used encryption config type.
62
58
  sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
63
- s = @device.cmd("configure terminal")
64
- s = @device.cmd("feature tacacs+")
65
- s = @device.cmd("tacacs-server key #{encryption_type} TEST")
66
- s = @device.cmd("end")
67
- node.cache_flush
59
+ config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
68
60
 
69
61
  tacacs = TacacsServer.new
70
62
  assert_equal(sh_run_encryption_type,
71
63
  tacacs.encryption_type,
72
- "Error: Tacacs Server, encryption type incorrect")
64
+ 'Error: Tacacs Server, encryption type incorrect')
73
65
 
74
66
  encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
75
- s = @device.cmd("configure terminal")
76
- s = @device.cmd("tacacs-server key #{encryption_type} TEST")
77
- s = @device.cmd("end")
78
- node.cache_flush
67
+ config("tacacs-server key #{encryption_type} TEST")
79
68
 
80
69
  assert_equal(sh_run_encryption_type,
81
70
  tacacs.encryption_type,
82
- "Error: Tacacs Server, encryption type incorrect")
71
+ 'Error: Tacacs Server, encryption type incorrect')
83
72
  tacacs.destroy
84
73
  end
85
74
 
@@ -87,41 +76,37 @@ class TestTacacsServer < CiscoTestCase
87
76
  # Ruby can use defines, but only they're not initialized from an enum
88
77
  assert_equal(TACACS_SERVER_ENC_NONE,
89
78
  TacacsServer.default_encryption_type,
90
- "Error: Tacacs Server, default encryption incorrect")
79
+ 'Error: Tacacs Server, default encryption incorrect')
91
80
  end
92
81
 
93
82
  def test_tacacsserver_get_encryption_password
94
83
  # Get encryption password when not configured
95
- s = @device.cmd("conf t ; no feature tacacs+ ; end")
96
- node.cache_flush
84
+ config('no feature tacacs+')
97
85
  tacacs = TacacsServer.new
98
- assert_equal(node.config_get_default("tacacs_server", "encryption_password"),
86
+ assert_equal(node.config_get_default('tacacs_server',
87
+ 'encryption_password'),
99
88
  tacacs.encryption_password,
100
- "Error: Tacacs Server, encryption password incorrect")
89
+ 'Error: Tacacs Server, encryption password incorrect')
101
90
  tacacs.destroy
102
91
 
103
92
  # Get encryption password when configured
104
- sh_run_encryption_password = "WAWY"
93
+ sh_run_encryption_password = 'WAWY'
105
94
  encryption_type = TACACS_SERVER_ENC_NONE
106
95
  # This one is needed since the 'sh run' will always display the password
107
96
  # differently than the used encryption config type.
108
- s = @device.cmd("configure terminal")
109
- s = @device.cmd("feature tacacs+")
110
- s = @device.cmd("tacacs-server key #{encryption_type} TEST")
111
- s = @device.cmd("end")
112
- # Flush the cache since we've modified the device
113
- node.cache_flush
97
+ config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
114
98
  tacacs = TacacsServer.new
115
99
  assert_equal(sh_run_encryption_password,
116
100
  tacacs.encryption_password,
117
- "Error: Tacacs Server, encryption password incorrect")
101
+ 'Error: Tacacs Server, encryption password incorrect')
118
102
  tacacs.destroy
119
103
  end
120
104
 
121
105
  def test_tacacsserver_get_default_encryption_password
122
- assert_equal(node.config_get_default("tacacs_server", "encryption_password"),
106
+ assert_equal(node.config_get_default('tacacs_server',
107
+ 'encryption_password'),
123
108
  TacacsServer.default_encryption_password,
124
- "Error: Tacacs Server, default encryption password incorrect")
109
+ 'Error: Tacacs Server, default encryption password incorrect')
125
110
  end
126
111
 
127
112
  def test_tacacsserver_key_set
@@ -129,69 +114,67 @@ class TestTacacsServer < CiscoTestCase
129
114
  # This one is needed since the 'sh run' will always display the type
130
115
  # differently than the used encryption config type.
131
116
  sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
132
- password = "TEST_NEW"
117
+ password = 'TEST_NEW'
133
118
 
134
119
  tacacs = TacacsServer.new
135
120
  tacacs.encryption_key_set(enc_type, password)
136
121
  # Get the password from the running config since its encoded
137
- line = get_tacacsserver_match_line("key\s#{sh_run_encryption_type}\s\".*\"")
138
- refute_nil(line, "Error: Tacacs Server, key not configured")
122
+ line = assert_show_match(
123
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
124
+ msg: 'Error: Tacacs Server, key not configured')
139
125
  # Extract encrypted password, and git rid of the "" around the pasword
140
126
  md = line.to_s
141
- encrypted_password = md.to_s.split(" ").last.tr('\"', '')
127
+ encrypted_password = md.to_s.split(' ').last.tr('\"', '')
142
128
  # Extract encryption type
143
129
  md = /tacacs-server\skey\s\d/.match(line.to_s)
144
- encrypted_type = md.to_s.split(" ").last.to_i
130
+ encrypted_type = md.to_s.split(' ').last.to_i
145
131
  assert_equal(encrypted_type, tacacs.encryption_type,
146
- "Error: Tacacs Server, encryption type incorrect")
132
+ 'Error: Tacacs Server, encryption type incorrect')
147
133
  assert_equal(encrypted_password, tacacs.encryption_password,
148
- "Error: Tacacs Server, encryption password incorrect")
134
+ 'Error: Tacacs Server, encryption password incorrect')
149
135
  tacacs.destroy
150
136
  end
151
137
 
152
138
  def test_tacacsserver_key_unconfigure
153
- s = @device.cmd("conf t ; no feature tacacs+ ; end")
154
- node.cache_flush
139
+ config('no feature tacacs+')
155
140
  enc_type = TACACS_SERVER_ENC_NONE
156
141
  # This one is needed since the 'sh run' will always display the type
157
142
  # differently than the used encryption config type.
158
143
  sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
159
- password = "TEST_NEW"
144
+ password = 'TEST_NEW'
160
145
 
161
146
  tacacs = TacacsServer.new
162
147
  tacacs.encryption_key_set(enc_type, password)
163
- line = get_tacacsserver_match_line("key\s#{sh_run_encryption_type}\s\".*\"")
164
- refute_nil(line, "Error: Tacacs Server, key not configured")
148
+ assert_show_match(
149
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
150
+ msg: 'Error: Tacacs Server, key not configured')
165
151
 
166
152
  enc_type = TACACS_SERVER_ENC_UNKNOWN
167
- password = ""
153
+ password = ''
168
154
  tacacs.encryption_key_set(enc_type, password)
169
- line = get_tacacsserver_match_line("key\s#{sh_run_encryption_type}\s\".*\"")
170
- assert_nil(line, "Error: Tacacs Server, key configured")
155
+ refute_show_match(
156
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
157
+ msg: 'Error: Tacacs Server, key configured')
171
158
  tacacs.destroy
172
159
  end
173
160
 
174
161
  def test_tacacsserver_get_timeout
175
162
  tacacs = TacacsServer.new
176
- timeout = node.config_get_default("tacacs_server", "timeout")
163
+ timeout = node.config_get_default('tacacs_server', 'timeout')
177
164
  assert_equal(timeout, tacacs.timeout,
178
- "Error: Tacacs Server, timeout not default")
165
+ 'Error: Tacacs Server, timeout not default')
179
166
 
180
167
  timeout = 35
181
- s = @device.cmd("configure terminal")
182
- s = @device.cmd("tacacs-server timeout #{timeout}")
183
- s = @device.cmd("end")
184
- # Flush the cache since we've modified the device
185
- node.cache_flush
168
+ config("tacacs-server timeout #{timeout}")
186
169
  assert_equal(timeout, tacacs.timeout,
187
- "Error: Tacacs Server, timeout not configured")
170
+ 'Error: Tacacs Server, timeout not configured')
188
171
  tacacs.destroy
189
172
  end
190
173
 
191
174
  def test_tacacsserver_get_default_timeout
192
- assert_equal(node.config_get_default("tacacs_server", "timeout"),
175
+ assert_equal(node.config_get_default('tacacs_server', 'timeout'),
193
176
  TacacsServer.default_timeout,
194
- "Error: Tacacs Server, default timeout incorrect")
177
+ 'Error: Tacacs Server, default timeout incorrect')
195
178
  end
196
179
 
197
180
  def test_tacacsserver_set_timeout
@@ -199,14 +182,14 @@ class TestTacacsServer < CiscoTestCase
199
182
 
200
183
  tacacs = TacacsServer.new
201
184
  tacacs.timeout = timeout
202
- line = get_tacacsserver_match_line("timeout\s.*")
185
+ line = assert_show_match(pattern: /tacacs-server timeout\s.*/,
186
+ msg: 'Error: timeout not configured')
203
187
  # Extract timeout
204
188
  md = /tacacs-server\stimeout\s\d*/.match(line.to_s)
205
- sh_run_timeout = md.to_s.split(" ").last.to_i
189
+ sh_run_timeout = md.to_s.split(' ').last.to_i
206
190
  # Need a better way to extract the timeout
207
- refute_nil(line, "Error: Tacacs Server, timeout not configured")
208
191
  assert_equal(sh_run_timeout, tacacs.timeout,
209
- "Error: Tacacs Server, timeout value incorrect")
192
+ 'Error: Tacacs Server, timeout value incorrect')
210
193
 
211
194
  # Invalid case
212
195
  timeout = 80
@@ -218,25 +201,21 @@ class TestTacacsServer < CiscoTestCase
218
201
 
219
202
  def test_tacacsserver_get_deadtime
220
203
  tacacs = TacacsServer.new
221
- deadtime = node.config_get_default("tacacs_server", "deadtime")
204
+ deadtime = node.config_get_default('tacacs_server', 'deadtime')
222
205
  assert_equal(deadtime, tacacs.deadtime,
223
- "Error: Tacacs Server, deadtime not default")
206
+ 'Error: Tacacs Server, deadtime not default')
224
207
 
225
208
  deadtime = 850
226
- s = @device.cmd("configure terminal")
227
- s = @device.cmd("tacacs-server deadtime #{deadtime}")
228
- s = @device.cmd("end")
229
- # Flush the cache since we've modified the device
230
- node.cache_flush
209
+ config("tacacs-server deadtime #{deadtime}")
231
210
  assert_equal(deadtime, tacacs.deadtime,
232
- "Error: Tacacs Server, deadtime not configured")
211
+ 'Error: Tacacs Server, deadtime not configured')
233
212
  tacacs.destroy
234
213
  end
235
214
 
236
215
  def test_tacacsserver_get_default_deadtime
237
- assert_equal(node.config_get_default("tacacs_server", "deadtime"),
216
+ assert_equal(node.config_get_default('tacacs_server', 'deadtime'),
238
217
  TacacsServer.default_deadtime,
239
- "Error: Tacacs Server, default deadtime incorrect")
218
+ 'Error: Tacacs Server, default deadtime incorrect')
240
219
  end
241
220
 
242
221
  def test_tacacsserver_set_deadtime
@@ -244,13 +223,13 @@ class TestTacacsServer < CiscoTestCase
244
223
 
245
224
  tacacs = TacacsServer.new
246
225
  tacacs.deadtime = deadtime
247
- line = get_tacacsserver_match_line("deadtime\s.*")
226
+ line = assert_show_match(pattern: /tacacs-server deadtime\s.*/,
227
+ msg: 'Error: deadtime not configured')
248
228
  # Extract deadtime
249
229
  md = /tacacs-server\sdeadtime\s\d*/.match(line.to_s)
250
- sh_run_deadtime = md.to_s.split(" ").last.to_i
251
- refute_nil(line, "Error: Tacacs Server, deadtime not configured")
230
+ sh_run_deadtime = md.to_s.split(' ').last.to_i
252
231
  assert_equal(sh_run_deadtime, tacacs.deadtime,
253
- "Error: Tacacs Server, deadtime incorrect")
232
+ 'Error: Tacacs Server, deadtime incorrect')
254
233
  # Invalid case
255
234
  deadtime = 2450
256
235
  assert_raises(Cisco::CliError) do
@@ -260,60 +239,55 @@ class TestTacacsServer < CiscoTestCase
260
239
  end
261
240
 
262
241
  def test_tacacsserver_get_directed_request
263
- s = @device.cmd("conf t ; feature tacacs ; tacacs-server directed-request ; end")
264
- # Flush the cache since we've modified the device
265
- node.cache_flush
242
+ config('feature tacacs', 'tacacs-server directed-request')
266
243
  tacacs = TacacsServer.new
267
244
  assert(tacacs.directed_request?,
268
- "Error: Tacacs Server, directed-request not set")
245
+ 'Error: Tacacs Server, directed-request not set')
269
246
 
270
- s = @device.cmd("conf t ; no tacacs-server directed-request ; end")
271
- node.cache_flush
247
+ config('no tacacs-server directed-request')
272
248
  refute(tacacs.directed_request?,
273
- "Error: Tacacs Server, directed-request set")
249
+ 'Error: Tacacs Server, directed-request set')
274
250
  tacacs.destroy
275
251
  end
276
252
 
277
253
  def test_tacacsserver_get_default_directed_request
278
- assert_equal(node.config_get_default("tacacs_server", "directed_request"),
254
+ assert_equal(node.config_get_default('tacacs_server', 'directed_request'),
279
255
  TacacsServer.default_directed_request,
280
- "Error: Tacacs Server, default directed-request incorrect")
256
+ 'Error: Tacacs Server, default directed-request incorrect')
281
257
  end
282
258
 
283
259
  def test_tacacsserver_set_directed_request
284
- s = @device.cmd("conf t ; feature tacacs ; tacacs-server directed-request ; end")
260
+ config('feature tacacs', 'tacacs-server directed-request')
285
261
  state = true
286
262
  tacacs = TacacsServer.new
287
263
  tacacs.directed_request = state
288
- line = get_tacacsserver_match_line("directed-request")
289
- refute_nil(line, "Error: Tacacs Server, directed-request not configured")
264
+ assert_show_match(pattern: /tacacs-server directed-request/,
265
+ msg: 'directed-request not configured')
290
266
  assert(tacacs.directed_request?,
291
- "Error: Tacacs Server, directed-request not set")
267
+ 'Error: Tacacs Server, directed-request not set')
292
268
 
293
269
  # Turn it off
294
- s = @device.cmd("conf t ; no tacacs-server directed-request ; end")
295
- node.cache_flush
270
+ config('no tacacs-server directed-request')
296
271
  refute(tacacs.directed_request?,
297
- "Error: Tacacs Server, directed-request set")
272
+ 'Error: Tacacs Server, directed-request set')
298
273
 
299
274
  # Turn it back on then go to default
300
- s = @device.cmd("conf t ; no tacacs-server directed-request ; end")
301
- state = node.config_get_default("tacacs_server", "directed_request")
275
+ config('no tacacs-server directed-request')
276
+ state = node.config_get_default('tacacs_server', 'directed_request')
302
277
  tacacs.directed_request = state
303
- line = get_match_line("no tacacs-server directed-request")
304
- refute_nil(line,
305
- "Error: Tacacs Server, default directed-request not configured")
278
+ line = assert_show_match(pattern: /no tacacs-server directed-request/,
279
+ msg: 'default directed-request not configed')
306
280
 
307
281
  # Extract the state of directed-request
308
- sh_run_directed_request = line.to_s.split(" ").first
309
- assert_equal("no", sh_run_directed_request,
310
- "Error: Tacacs Server, directed-request not unconfigured")
282
+ sh_run_directed_request = line.to_s.split(' ').first
283
+ assert_equal('no', sh_run_directed_request,
284
+ 'Error: Tacacs Server, directed-request not unconfigured')
311
285
 
312
286
  refute(tacacs.directed_request?,
313
- "Error: Tacacs Server, directed-request set")
287
+ 'Error: Tacacs Server, directed-request set')
314
288
 
315
289
  # Invalid case
316
- state = "TEST"
290
+ state = 'TEST'
317
291
  assert_raises(TypeError) do
318
292
  tacacs.directed_request = state
319
293
  end
@@ -321,53 +295,46 @@ class TestTacacsServer < CiscoTestCase
321
295
  end
322
296
 
323
297
  def test_tacacsserver_get_source_interface
324
- s = @device.cmd("configure terminal")
325
- s = @device.cmd("no ip tacacs source-interface")
326
- s = @device.cmd("end")
298
+ config('no ip tacacs source-interface')
327
299
  tacacs = TacacsServer.new
328
- intf = node.config_get_default("tacacs_server", "source_interface")
300
+ intf = node.config_get_default('tacacs_server', 'source_interface')
329
301
  assert_equal(intf, tacacs.source_interface,
330
- "Error: Tacacs Server, source-interface set")
331
-
332
- intf = "Ethernet1/1"
333
- s = @device.cmd("configure terminal")
334
- s = @device.cmd("ip tacacs source-interface #{intf}")
335
- s = @device.cmd("end")
336
- # Flush the cache since we've modified the device
337
- node.cache_flush
302
+ 'Error: Tacacs Server, source-interface set')
303
+
304
+ intf = 'Ethernet1/1'
305
+ config("ip tacacs source-interface #{intf}")
338
306
  assert_equal(intf, tacacs.source_interface,
339
- "Error: Tacacs Server, source-interface not correct")
307
+ 'Error: Tacacs Server, source-interface not correct')
340
308
  tacacs.destroy
341
309
  end
342
310
 
343
311
  def test_tacacsserver_get_default_source_interface
344
- assert_equal(node.config_get_default("tacacs_server", "source_interface"),
312
+ assert_equal(node.config_get_default('tacacs_server', 'source_interface'),
345
313
  TacacsServer.default_source_interface,
346
- "Error: Tacacs Server, default source-interface incorrect")
314
+ 'Error: Tacacs Server, default source-interface incorrect')
347
315
  end
348
316
 
349
317
  def test_tacacsserver_set_source_interface
350
- s = @device.cmd("conf t ; feature tacacs+ ; no ip tacacs source-int ; end")
351
- node.cache_flush
352
- intf = node.config_get_default("tacacs_server", "source_interface")
318
+ config('feature tacacs+', 'no ip tacacs source-int')
319
+ intf = node.config_get_default('tacacs_server', 'source_interface')
353
320
  tacacs = TacacsServer.new
354
321
  assert_equal(intf, tacacs.source_interface,
355
- "Error: Tacacs Server, source-interface set")
322
+ 'Error: Tacacs Server, source-interface set')
356
323
 
357
- intf = "Ethernet1/1"
324
+ intf = 'Ethernet1/1'
358
325
  tacacs.source_interface = intf
359
- line = get_match_line("ip tacacs source-interface #{intf}")
326
+ line = assert_show_match(pattern: /ip tacacs source-interface #{intf}/,
327
+ msg: 'source-interface not configured')
360
328
  # Extract source-interface
361
- sh_run_source_interface = line.to_s.split(" ").last
362
- refute_nil(line, "Error: Tacacs Server, source-interface not configured")
329
+ sh_run_source_interface = line.to_s.split(' ').last
363
330
  assert_equal(sh_run_source_interface, tacacs.source_interface,
364
- "Error: Tacacs Server, source-interface not correct")
331
+ 'Error: Tacacs Server, source-interface not correct')
365
332
 
366
333
  # Now bring it back to default
367
- intf = node.config_get_default("tacacs_server", "source_interface")
334
+ intf = node.config_get_default('tacacs_server', 'source_interface')
368
335
  tacacs.source_interface = intf
369
- line = get_match_line("no ip tacacs source-interface")
370
- refute_nil(line, "Error: Tacacs Server, source-interface not default")
336
+ assert_show_match(pattern: /no ip tacacs source-interface/,
337
+ msg: 'source-interface not default')
371
338
 
372
339
  # Invalid case
373
340
  state = true
@@ -379,10 +346,8 @@ class TestTacacsServer < CiscoTestCase
379
346
 
380
347
  def test_tacacsserver_destroy
381
348
  tacacs = TacacsServer.new
382
- line = get_tacacsserver_feature
383
- refute_nil(line, "Error: Tacacs feature not set")
349
+ assert_tacacsserver_feature
384
350
  tacacs.destroy
385
- line = get_tacacsserver_feature
386
- assert_nil(line, "Error: Tacacs feature still present")
351
+ refute_tacacsserver_feature
387
352
  end
388
353
  end