cisco_node_utils 1.6.0 → 1.7.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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -1
  3. data/Gemfile +1 -1
  4. data/LICENSE +1 -1
  5. data/README.md +1 -1
  6. data/cisco_node_utils.gemspec +1 -1
  7. data/docs/README-develop-node-utils-APIs.md +2 -0
  8. data/docs/README-maintainers.md +45 -80
  9. data/lib/cisco_node_utils/ace.rb +24 -43
  10. data/lib/cisco_node_utils/bfd_global.rb +1 -0
  11. data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
  12. data/lib/cisco_node_utils/bgp_neighbor.rb +8 -5
  13. data/lib/cisco_node_utils/bgp_neighbor_af.rb +8 -6
  14. data/lib/cisco_node_utils/cisco_cmn_utils.rb +40 -0
  15. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +1 -1
  16. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +8 -4
  17. data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
  18. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +9 -4
  19. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +8 -3
  20. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +2 -1
  21. data/lib/cisco_node_utils/cmd_ref/feature.yaml +5 -0
  22. data/lib/cisco_node_utils/cmd_ref/interface.yaml +8 -0
  23. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +7 -3
  24. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +3 -3
  25. data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
  26. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +13 -0
  27. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +10 -2
  28. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +6 -1
  29. data/lib/cisco_node_utils/cmd_ref/route_map.yaml +8 -0
  30. data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
  31. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +2 -1
  32. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +22 -3
  33. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +2 -1
  34. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +6 -3
  35. data/lib/cisco_node_utils/cmd_ref/yum.yaml +48 -4
  36. data/lib/cisco_node_utils/command_reference.rb +5 -2
  37. data/lib/cisco_node_utils/feature.rb +14 -1
  38. data/lib/cisco_node_utils/interface.rb +13 -0
  39. data/lib/cisco_node_utils/interface_channel_group.rb +33 -25
  40. data/lib/cisco_node_utils/itd_device_group.rb +17 -37
  41. data/lib/cisco_node_utils/itd_service.rb +9 -32
  42. data/lib/cisco_node_utils/node.rb +12 -4
  43. data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
  44. data/lib/cisco_node_utils/ntp_config.rb +19 -1
  45. data/lib/cisco_node_utils/ntp_server.rb +28 -27
  46. data/lib/cisco_node_utils/route_map.rb +33 -51
  47. data/lib/cisco_node_utils/snmpuser.rb +2 -2
  48. data/lib/cisco_node_utils/span_session.rb +149 -0
  49. data/lib/cisco_node_utils/upgrade.rb +21 -17
  50. data/lib/cisco_node_utils/version.rb +2 -2
  51. data/lib/cisco_node_utils/vlan.rb +1 -1
  52. data/lib/cisco_node_utils/vpc.rb +40 -0
  53. data/lib/cisco_node_utils/yum.rb +136 -13
  54. data/spec/schema.yaml +2 -0
  55. data/tests/ciscotest.rb +36 -0
  56. data/tests/test_ace.rb +6 -0
  57. data/tests/test_bfd_global.rb +1 -7
  58. data/tests/test_bgp_af.rb +2 -2
  59. data/tests/test_bgp_af_aa.rb +108 -0
  60. data/tests/test_bgp_neighbor.rb +2 -1
  61. data/tests/test_bgp_neighbor_af.rb +6 -6
  62. data/tests/test_dhcp_relay_global.rb +1 -0
  63. data/tests/test_interface.rb +18 -2
  64. data/tests/test_interface_channel_group.rb +47 -0
  65. data/tests/test_interface_svi.rb +1 -1
  66. data/tests/test_ntp_auth_key.rb +77 -0
  67. data/tests/test_ntp_config.rb +51 -4
  68. data/tests/test_ntp_server.rb +69 -9
  69. data/tests/test_overlay_global.rb +1 -0
  70. data/tests/test_route_map.rb +13 -24
  71. data/tests/test_router_bgp.rb +14 -9
  72. data/tests/test_span_session.rb +155 -0
  73. data/tests/test_stp_global.rb +1 -0
  74. data/tests/test_upgrade.rb +2 -3
  75. data/tests/test_vlan.rb +24 -3
  76. data/tests/test_vlan_private.rb +1 -1
  77. data/tests/test_vpc.rb +42 -17
  78. data/tests/test_vxlan_vtep.rb +1 -0
  79. data/tests/test_vxlan_vtep_vni.rb +5 -1
  80. data/tests/test_yum.rb +7 -30
  81. data/tests/yum_package.yaml +20 -0
  82. metadata +13 -3
@@ -315,7 +315,7 @@ class TestBgpNeighbor < CiscoTestCase
315
315
  end
316
316
 
317
317
  def test_log_neighbor_changes
318
- if platform == :ios_xr || node.product_id[/N(5|6|7)/]
318
+ if platform == :ios_xr || node.product_id[/N(5|6)/]
319
319
  b = create_neighbor('blue')
320
320
  assert_nil(b.log_neighbor_changes)
321
321
  assert_nil(b.default_log_neighbor_changes)
@@ -324,6 +324,7 @@ class TestBgpNeighbor < CiscoTestCase
324
324
  end
325
325
  return
326
326
  end
327
+ skip_incompat_version?('bgp_neighbor', 'log_neighbor_changes')
327
328
  %w(default test_vrf).each do |vrf|
328
329
  neighbor = create_neighbor(vrf)
329
330
  check = [:enable, :disable, :inherit, 'enable', 'disable', 'inherit',
@@ -64,10 +64,10 @@ class TestBgpNeighborAF < CiscoTestCase
64
64
  asn, vrf, nbr, af = af_args
65
65
  dbg = sprintf('[VRF %s NBR %s AF %s]', vrf, nbr, af.join('/'))
66
66
 
67
- obj_nbr = RouterBgpNeighbor.new(asn, vrf, nbr, true)
67
+ obj_nbr = RouterBgpNeighbor.new(asn, vrf, nbr)
68
68
  obj_nbr.remote_as = ebgp ? asn + 1 : asn
69
69
 
70
- obj_af = RouterBgpNeighborAF.new(asn, vrf, nbr, af, true)
70
+ obj_af = RouterBgpNeighborAF.new(asn, vrf, nbr, af)
71
71
 
72
72
  # clean up address-family only
73
73
  obj_af.destroy
@@ -160,7 +160,7 @@ class TestBgpNeighborAF < CiscoTestCase
160
160
  @@matrix.each do |k, v|
161
161
  asn, vrf, nbr, af = v
162
162
  dbg = sprintf('[VRF %s NBR %s AF %s]', vrf, nbr, af)
163
- obj[k] = RouterBgpNeighborAF.new(asn, vrf, nbr, af, true)
163
+ obj[k] = RouterBgpNeighborAF.new(asn, vrf, nbr, af)
164
164
  # TBD: This flush should not be needed but we see an intermittent problem
165
165
  # with certain rake test seed values, where 'afs' below is not detecting
166
166
  # vrf 'aa' AF.
@@ -193,13 +193,13 @@ class TestBgpNeighborAF < CiscoTestCase
193
193
  # so make sure to catch the error
194
194
  assert_raises(UnsupportedError,
195
195
  'Neighbors do not support slash notation') do
196
- RouterBgpNeighborAF.new(asn, vrf, nbr, af, true)
196
+ RouterBgpNeighborAF.new(asn, vrf, nbr, af)
197
197
  end
198
198
  next
199
199
  end
200
200
  next if platform == :ios_xr
201
201
  dbg = sprintf('[VRF %s NBR %s AF %s]', vrf, nbr, af.join('/'))
202
- obj[k] = RouterBgpNeighborAF.new(asn, vrf, nbr, af, true)
202
+ obj[k] = RouterBgpNeighborAF.new(asn, vrf, nbr, af)
203
203
  nbr_munged = Utils.process_network_mask(nbr)
204
204
  # TBD: This flush should not be needed but we see an intermittent problem
205
205
  # with certain rake test seed values, where 'afs' below is not detecting
@@ -217,7 +217,7 @@ class TestBgpNeighborAF < CiscoTestCase
217
217
  if platform == :ios_xr
218
218
  assert_raises(UnsupportedError,
219
219
  'Neighbors do not support slash notation') do
220
- RouterBgpNeighborAF.new(asn, vrf, nbr, af, true)
220
+ RouterBgpNeighborAF.new(asn, vrf, nbr, af)
221
221
  end
222
222
  next
223
223
  end
@@ -211,6 +211,7 @@ class TestDhcpRelayGlobal < CiscoTestCase
211
211
  end
212
212
  return
213
213
  end
214
+ skip_incompat_version?('dhcp_relay_global', 'ipv4_sub_option_circuit_id_string')
214
215
  assert_equal(drg.default_ipv4_sub_option_circuit_id_string, drg.ipv4_sub_option_circuit_id_string)
215
216
  str = '%p%p'
216
217
  drg.ipv4_sub_option_circuit_id_string = str
@@ -788,7 +788,7 @@ class TestInterface < CiscoTestCase
788
788
  if validate_property_excluded?('interface_channel_group', 'channel_group')
789
789
  member = InterfaceChannelGroup.new(interfaces[0])
790
790
  assert_raises(Cisco::UnsupportedError) do
791
- member.channel_group = 10
791
+ member.channel_group_mode_set(10)
792
792
  end
793
793
  return
794
794
  end
@@ -1359,7 +1359,7 @@ class TestInterface < CiscoTestCase
1359
1359
  # pre-configure
1360
1360
  begin
1361
1361
  interface_ethernet_default(interfaces[1])
1362
- InterfaceChannelGroup.new(interfaces[1]).channel_group = 48
1362
+ InterfaceChannelGroup.new(interfaces[1]).channel_group_mode_set(48)
1363
1363
  rescue Cisco::UnsupportedError
1364
1364
  raise unless platform == :ios_xr
1365
1365
  # Some XR platform/version combos don't support port-channels
@@ -1764,6 +1764,7 @@ class TestInterface < CiscoTestCase
1764
1764
  assert_equal(interface.default_load_interval_counter_1_delay,
1765
1765
  interface.load_interval_counter_1_delay)
1766
1766
  # check nil for subintf and loopback
1767
+ interface.switchport_mode = :disabled if platform == :nexus
1767
1768
  subif = Interface.new(interfaces[0] + '.1')
1768
1769
  assert_nil(subif.load_interval_counter_1_delay)
1769
1770
  assert_raises(ArgumentError) { subif.load_interval_counter_1_delay = 100 }
@@ -1794,6 +1795,7 @@ class TestInterface < CiscoTestCase
1794
1795
  assert_equal(interface.default_load_interval_counter_2_delay,
1795
1796
  interface.load_interval_counter_2_delay)
1796
1797
  # check nil for subintf and loopback
1798
+ interface.switchport_mode = :disabled if platform == :nexus
1797
1799
  subif = Interface.new(interfaces[0] + '.1')
1798
1800
  assert_nil(subif.load_interval_counter_2_delay)
1799
1801
  assert_raises(ArgumentError) { subif.load_interval_counter_2_delay = 100 }
@@ -1824,6 +1826,7 @@ class TestInterface < CiscoTestCase
1824
1826
  assert_equal(interface.default_load_interval_counter_3_delay,
1825
1827
  interface.load_interval_counter_3_delay)
1826
1828
  # check nil for subintf and loopback
1829
+ interface.switchport_mode = :disabled if platform == :nexus
1827
1830
  subif = Interface.new(interfaces[0] + '.1')
1828
1831
  assert_nil(subif.load_interval_counter_3_delay)
1829
1832
  assert_raises(ArgumentError) { subif.load_interval_counter_3_delay = 100 }
@@ -1833,4 +1836,17 @@ class TestInterface < CiscoTestCase
1833
1836
  subif.destroy
1834
1837
  lb.destroy
1835
1838
  end
1839
+
1840
+ def test_purge_config
1841
+ name = interfaces[0]
1842
+ int = Interface.new(name)
1843
+ int.switchport_mode = :disabled
1844
+
1845
+ int.description = 'destroy_pysical'
1846
+ int.ipv4_addr_mask_set('192.168.0.1', '24')
1847
+ refute(int.purge_config)
1848
+
1849
+ int.purge_config = true
1850
+ assert(int.purge_config)
1851
+ end
1836
1852
  end
@@ -32,6 +32,7 @@ class TestInterfaceChanGrp < CiscoTestCase
32
32
  end
33
33
 
34
34
  def test_channel_group
35
+ skip if platform == :nexus
35
36
  i = @intf
36
37
  group = 200
37
38
  i.channel_group = group
@@ -49,6 +50,52 @@ class TestInterfaceChanGrp < CiscoTestCase
49
50
  skip(e.to_s)
50
51
  end
51
52
 
53
+ def test_channel_group_mode
54
+ skip if platform == :ios_xr
55
+ i = @intf
56
+ group = 55
57
+
58
+ # Default Case: group = mode = false
59
+ refute(i.channel_group)
60
+ refute(i.channel_group_mode)
61
+
62
+ # group = 55, mode = on
63
+ i.channel_group_mode_set(group)
64
+ assert_equal(group, i.channel_group)
65
+ assert_equal(i.default_channel_group_mode, i.channel_group_mode)
66
+
67
+ # group = 55, mode = active
68
+ i.channel_group_mode_set(group, 'active')
69
+ assert_equal(group, i.channel_group)
70
+ assert_equal('active', i.channel_group_mode)
71
+
72
+ # group = 55, mode = passive
73
+ i.channel_group_mode_set(group, 'passive')
74
+ assert_equal(group, i.channel_group)
75
+ assert_equal('passive', i.channel_group_mode)
76
+
77
+ # group = 55, mode = on
78
+ i.channel_group_mode_set(group, 'on')
79
+ assert_equal(group, i.channel_group)
80
+ assert_equal(i.default_channel_group_mode, i.channel_group_mode)
81
+
82
+ # group = 66, mode = active
83
+ group = 66
84
+ i.channel_group_mode_set(group, 'active')
85
+ assert_equal(group, i.channel_group)
86
+ assert_equal('active', i.channel_group_mode)
87
+
88
+ # group = 66, mode = on
89
+ i.channel_group_mode_set(group)
90
+ assert_equal(group, i.channel_group)
91
+ assert_equal(i.default_channel_group_mode, i.channel_group_mode)
92
+
93
+ # Default Case: group = mode = false
94
+ i.channel_group_mode_set(i.default_channel_group)
95
+ refute(i.channel_group)
96
+ refute(i.channel_group_mode)
97
+ end
98
+
52
99
  def test_description
53
100
  i = @intf
54
101
  desc = 'test desc'
@@ -195,7 +195,7 @@ class TestSvi < CiscoTestCase
195
195
 
196
196
  def test_sys_def_svi_autostate
197
197
  skip_autostate_test?
198
- skip_legacy_defect?('8.0.1', 'CSC: Atherton behavior change')
198
+ skip_legacy_defect?('8.0.1|8.1.1', 'CSC: Behavior change after helsinki')
199
199
  interface = Interface.new(interfaces[0])
200
200
 
201
201
  system_default_svi_autostate('no ')
@@ -0,0 +1,77 @@
1
+ #
2
+ # Minitest for NtpAuthKey class
3
+ #
4
+ # Copyright (c) 2014-2017 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_auth_key'
20
+
21
+ # TestNtpAuthKey - Minitest for NtpAuthKey node utility.
22
+ class TestNtpAuthKey < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ no_ntpkey
27
+ end
28
+
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_ntpkey
32
+ super
33
+ end
34
+
35
+ def no_ntpkey
36
+ # Turn the feature off for a clean test.
37
+ config('no ntp authentication-key 111 md5 test 7',
38
+ 'no ntp authentication-key 999 md5 test 7')
39
+ end
40
+
41
+ # TESTS
42
+
43
+ def test_create_defaults
44
+ id = '111'
45
+ options = { 'name' => id, 'password' => 'test' }
46
+ refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
47
+
48
+ key = Cisco::NtpAuthKey.new(options, true)
49
+ assert_includes(Cisco::NtpAuthKey.ntpkeys, id)
50
+ assert_equal(key, Cisco::NtpAuthKey.ntpkeys[id])
51
+
52
+ assert_equal(id, Cisco::NtpAuthKey.ntpkeys[id].name)
53
+ assert_equal('md5', Cisco::NtpAuthKey.ntpkeys[id].algorithm)
54
+ assert_equal('7', Cisco::NtpAuthKey.ntpkeys[id].mode)
55
+
56
+ key.destroy
57
+ refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
58
+ end
59
+
60
+ def test_create_options
61
+ id = '999'
62
+ options = { 'name' => id, 'password' => 'test', 'algorithm' => 'md5',
63
+ 'mode' => '7' }
64
+ refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
65
+
66
+ key = Cisco::NtpAuthKey.new(options, true)
67
+ assert_includes(Cisco::NtpAuthKey.ntpkeys, id)
68
+ assert_equal(key, Cisco::NtpAuthKey.ntpkeys[id])
69
+
70
+ assert_equal(id, Cisco::NtpAuthKey.ntpkeys[id].name)
71
+ assert_equal('md5', Cisco::NtpAuthKey.ntpkeys[id].algorithm)
72
+ assert_equal('7', Cisco::NtpAuthKey.ntpkeys[id].mode)
73
+
74
+ key.destroy
75
+ refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
76
+ end
77
+ end
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for NtpConfig class
3
3
  #
4
- # Copyright (c) 2015-2016 Cisco and/or its affiliates.
4
+ # Copyright (c) 2015-2017 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -26,28 +26,75 @@ class TestNtpConfig < CiscoTestCase
26
26
  no_ntpconfig
27
27
  end
28
28
 
29
+ def teardown
30
+ # teardown runs at the end of each test
31
+ no_ntpconfig
32
+ super
33
+ end
34
+
29
35
  def no_ntpconfig
30
36
  # Turn the feature off for a clean test.
31
37
  if platform == :ios_xr
32
- config("no ntp source #{interfaces[0]}")
38
+ config("no ntp source #{interfaces[1]}")
33
39
  else
34
- config("no ntp source-interface #{interfaces[0]}")
40
+ config("no ntp source-interface #{interfaces[1]}",
41
+ 'no ntp authentication-key 111 md5 test 7',
42
+ 'no ntp authentication-key 999 md5 test 7',
43
+ 'no ntp trusted-key 111',
44
+ 'no ntp trusted-key 999',
45
+ 'no ntp authenticate')
35
46
  end
36
47
  end
37
48
 
38
49
  # TESTS
39
50
 
40
- def test_create_destroy
51
+ def test_source_interface
41
52
  id = 'default'
42
53
 
43
54
  ntp = Cisco::NtpConfig.new(id)
44
55
  assert_includes(Cisco::NtpConfig.ntpconfigs, id)
45
56
  assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
46
57
 
58
+ assert_nil(Cisco::NtpConfig.ntpconfigs[id].source_interface)
59
+ assert_nil(ntp.source_interface)
60
+
47
61
  ntp.source_interface = interfaces[1]
48
62
  assert_equal(Cisco::NtpConfig.ntpconfigs[id].source_interface,
49
63
  interfaces[1].downcase)
50
64
  assert_equal(Cisco::NtpConfig.ntpconfigs[id].source_interface,
51
65
  ntp.source_interface)
66
+
67
+ ntp.source_interface = nil
68
+ assert_nil(Cisco::NtpConfig.ntpconfigs[id].source_interface)
69
+ assert_nil(ntp.source_interface)
70
+ end
71
+
72
+ def test_authenticate
73
+ id = 'default'
74
+
75
+ ntp = Cisco::NtpConfig.new(id)
76
+ assert_includes(Cisco::NtpConfig.ntpconfigs, id)
77
+ assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
78
+
79
+ assert_equal(false, Cisco::NtpConfig.ntpconfigs[id].authenticate)
80
+
81
+ ntp.authenticate = true
82
+ assert_equal(true, Cisco::NtpConfig.ntpconfigs[id].authenticate)
83
+ end
84
+
85
+ def test_trusted_key
86
+ id = 'default'
87
+
88
+ ntp = Cisco::NtpConfig.new(id)
89
+ assert_includes(Cisco::NtpConfig.ntpconfigs, id)
90
+ assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
91
+
92
+ assert_nil(Cisco::NtpConfig.ntpconfigs[id].trusted_key)
93
+
94
+ config('ntp authentication-key 111 md5 test 7',
95
+ 'ntp authentication-key 999 md5 test 7')
96
+ ntp.trusted_key_set(true, 111)
97
+ ntp.trusted_key_set(true, 999)
98
+ assert_equal(%w(111 999), Cisco::NtpConfig.ntpconfigs[id].trusted_key)
52
99
  end
53
100
  end
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for NtpServer class
3
3
  #
4
- # Copyright (c) 2014-2016 Cisco and/or its affiliates.
4
+ # Copyright (c) 2014-2017 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -23,28 +23,37 @@ class TestNtpServer < CiscoTestCase
23
23
  def setup
24
24
  # setup runs at the beginning of each test
25
25
  super
26
- no_ntpserver_uk
26
+ no_ntpserver
27
27
  end
28
28
 
29
29
  def teardown
30
30
  # teardown runs at the end of each test
31
- no_ntpserver_uk
31
+ no_ntpserver
32
32
  super
33
33
  end
34
34
 
35
- def no_ntpserver_uk
35
+ def no_ntpserver
36
36
  # Turn the feature off for a clean test.
37
37
  config('no ntp server 130.88.203.12',
38
- 'no ntp server 2003::5')
38
+ 'no ntp server 2003::5',
39
+ 'no ntp server 0.us.pool.ntp.org',
40
+ 'no ntp authentication-key 999 md5 test 7',
41
+ 'no vrf context red')
39
42
  end
40
43
 
41
44
  # TESTS
42
45
 
46
+ def test_create_name_invalid
47
+ assert_raises(ArgumentError) do
48
+ Cisco::NtpServer.new({ 'name' => '1_com' }, true)
49
+ end
50
+ end
51
+
43
52
  def test_ipv4
44
53
  id = '130.88.203.12'
45
54
  refute_includes(Cisco::NtpServer.ntpservers, id)
46
55
 
47
- ntp = Cisco::NtpServer.new(id, false)
56
+ ntp = Cisco::NtpServer.new({ 'name' => id }, true)
48
57
  assert_includes(Cisco::NtpServer.ntpservers, id)
49
58
  assert_equal(ntp, Cisco::NtpServer.ntpservers[id])
50
59
 
@@ -56,7 +65,7 @@ class TestNtpServer < CiscoTestCase
56
65
  id = '2003::5'
57
66
  refute_includes(Cisco::NtpServer.ntpservers, id)
58
67
 
59
- ntp = Cisco::NtpServer.new(id, false)
68
+ ntp = Cisco::NtpServer.new({ 'name' => id }, true)
60
69
  assert_includes(Cisco::NtpServer.ntpservers, id)
61
70
  assert_equal(ntp, Cisco::NtpServer.ntpservers[id])
62
71
 
@@ -70,8 +79,8 @@ class TestNtpServer < CiscoTestCase
70
79
  refute_includes(Cisco::NtpServer.ntpservers, id1)
71
80
  refute_includes(Cisco::NtpServer.ntpservers, id2)
72
81
 
73
- ntp1 = Cisco::NtpServer.new(id1, false)
74
- ntp2 = Cisco::NtpServer.new(id2, true)
82
+ ntp1 = Cisco::NtpServer.new({ 'name' => id1 }, true)
83
+ ntp2 = Cisco::NtpServer.new({ 'name' => id2 }, true)
75
84
  refute_equal(ntp1, ntp2)
76
85
  assert_includes(Cisco::NtpServer.ntpservers, id1)
77
86
  assert_includes(Cisco::NtpServer.ntpservers, id2)
@@ -83,4 +92,55 @@ class TestNtpServer < CiscoTestCase
83
92
  refute_includes(Cisco::NtpServer.ntpservers, id1)
84
93
  refute_includes(Cisco::NtpServer.ntpservers, id2)
85
94
  end
95
+
96
+ # This test requires DNS resolution be avaabile - leaving for reference
97
+ # def test_domain_name
98
+ # id = '0.us.pool.ntp.org'
99
+ # refute_includes(Cisco::NtpServer.ntpservers, id)
100
+ #
101
+ # ntp = Cisco::NtpServer.new({ 'name' => id }, true)
102
+ # assert_includes(Cisco::NtpServer.ntpservers, id)
103
+ # assert_equal(ntp, Cisco::NtpServer.ntpservers[id])
104
+ #
105
+ # ntp.destroy
106
+ # refute_includes(Cisco::NtpServer.ntpservers, id)
107
+ # end
108
+
109
+ def test_defaults
110
+ id = '130.88.203.12'
111
+ refute_includes(Cisco::NtpServer.ntpservers, id)
112
+
113
+ ntp = Cisco::NtpServer.new({ 'name' => id }, true)
114
+ assert_includes(Cisco::NtpServer.ntpservers, id)
115
+ assert_equal('default', Cisco::NtpServer.ntpservers[id].vrf)
116
+ assert_nil(Cisco::NtpServer.ntpservers[id].key)
117
+ assert_nil(Cisco::NtpServer.ntpservers[id].maxpoll)
118
+ assert_nil(Cisco::NtpServer.ntpservers[id].minpoll)
119
+ refute(Cisco::NtpServer.ntpservers[id].prefer)
120
+
121
+ ntp.destroy
122
+ refute_includes(Cisco::NtpServer.ntpservers, id)
123
+ end
124
+
125
+ def test_create_options
126
+ id = '130.88.203.12'
127
+ refute_includes(Cisco::NtpServer.ntpservers, id)
128
+
129
+ options = { 'name' => id, 'key' => '999', 'prefer' => 'true',
130
+ 'minpoll' => '5', 'maxpoll' => '8', 'vrf' => 'red' }
131
+
132
+ config('vrf context red')
133
+ config('ntp authentication-key 999 md5 test 7')
134
+
135
+ ntp = Cisco::NtpServer.new(options, true)
136
+ assert_includes(Cisco::NtpServer.ntpservers, id)
137
+ assert_equal('red', Cisco::NtpServer.ntpservers[id].vrf)
138
+ assert_equal('999', Cisco::NtpServer.ntpservers[id].key)
139
+ assert_equal('5', Cisco::NtpServer.ntpservers[id].minpoll)
140
+ assert_equal('8', Cisco::NtpServer.ntpservers[id].maxpoll)
141
+ assert(Cisco::NtpServer.ntpservers[id].prefer)
142
+
143
+ ntp.destroy
144
+ refute_includes(Cisco::NtpServer.ntpservers, id)
145
+ end
86
146
  end