cisco_node_utils 1.7.0 → 1.8.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +36 -0
- data/CONTRIBUTING.md +2 -2
- data/README.md +2 -1
- data/cisco_node_utils.gemspec +1 -0
- data/docs/README-develop-node-utils-APIs.md +2 -1
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +2 -2
- data/lib/cisco_node_utils/ace.rb +2 -0
- data/lib/cisco_node_utils/bgp.rb +34 -91
- data/lib/cisco_node_utils/bridge_domain.rb +8 -13
- data/lib/cisco_node_utils/client/nxapi/client.rb +10 -3
- data/lib/cisco_node_utils/cmd_ref/DEPRECATED.yaml +12 -12
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +2 -1
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +1 -0
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +3 -3
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +5 -15
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +1 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +14 -36
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +5 -3
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +3 -3
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +25 -15
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +5 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/object_group.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +9 -7
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/route_map.yaml +26 -25
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +11 -3
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +4 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +5 -1
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +8 -8
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +21 -1
- data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +1 -1
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +5 -4
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +9 -9
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +1 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +1 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +3 -5
- data/lib/cisco_node_utils/command_reference.rb +11 -1
- data/lib/cisco_node_utils/interface.rb +46 -8
- data/lib/cisco_node_utils/interface_ospf.rb +2 -2
- data/lib/cisco_node_utils/interface_portchannel.rb +2 -2
- data/lib/cisco_node_utils/node.rb +9 -0
- data/lib/cisco_node_utils/ntp_auth_key.rb +1 -1
- data/lib/cisco_node_utils/object_group.rb +75 -0
- data/lib/cisco_node_utils/object_group_entry.rb +143 -0
- data/lib/cisco_node_utils/portchannel_global.rb +2 -2
- data/lib/cisco_node_utils/radius_global.rb +25 -1
- data/lib/cisco_node_utils/router_ospf.rb +3 -3
- data/lib/cisco_node_utils/syslog_server.rb +38 -42
- data/lib/cisco_node_utils/syslog_settings.rb +74 -3
- data/lib/cisco_node_utils/tacacs_global.rb +47 -14
- data/lib/cisco_node_utils/tacacs_server.rb +1 -5
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vpc.rb +1 -4
- data/lib/cisco_node_utils/vtp.rb +4 -2
- data/spec/schema.yaml +3 -0
- data/tests/ciscotest.rb +16 -9
- data/tests/test_ace.rb +2 -0
- data/tests/test_bgp_af.rb +10 -2
- data/tests/test_bgp_neighbor_af.rb +6 -2
- data/tests/test_bridge_domain.rb +7 -0
- data/tests/test_feature.rb +2 -2
- data/tests/test_interface.rb +30 -4
- data/tests/test_node_ext.rb +2 -2
- data/tests/test_object_group.rb +122 -0
- data/tests/test_platform.rb +1 -1
- data/tests/test_portchannel_global.rb +1 -0
- data/tests/test_radius_global.rb +22 -2
- data/tests/test_route_map.rb +11 -8
- data/tests/test_router_bgp.rb +7 -132
- data/tests/test_router_ospf_area.rb +6 -6
- data/tests/test_snmpuser.rb +19 -11
- data/tests/test_syslog_server.rb +11 -31
- data/tests/test_syslog_settings.rb +46 -5
- data/tests/test_tacacs_global.rb +42 -18
- data/tests/test_vpc.rb +3 -0
- data/tests/test_vxlan_vtep_vni.rb +0 -3
- data/tests/yum_package.yaml +5 -0
- metadata +21 -3
data/tests/test_feature.rb
CHANGED
|
@@ -103,7 +103,7 @@ class TestFeature < CiscoTestCase
|
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
def test_fabric_forwarding
|
|
106
|
-
if node.product_id[/N(3)/]
|
|
106
|
+
if node.product_id[/N(3)/] && !node.product_id.include?('-F')
|
|
107
107
|
assert_nil(Feature.fabric_forwarding_enabled?)
|
|
108
108
|
assert_raises(Cisco::UnsupportedError) do
|
|
109
109
|
Feature.fabric_forwarding_enable
|
|
@@ -126,7 +126,7 @@ class TestFeature < CiscoTestCase
|
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
def test_nv_overlay_evpn
|
|
129
|
-
if node.product_id[/N(3)/]
|
|
129
|
+
if node.product_id[/N(3)/] && !node.product_id.include?('-F')
|
|
130
130
|
assert_nil(Feature.nv_overlay_evpn_enabled?)
|
|
131
131
|
assert_raises(Cisco::UnsupportedError) { Feature.nv_overlay_evpn_enable }
|
|
132
132
|
return
|
data/tests/test_interface.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2013-
|
|
1
|
+
# Copyright (c) 2013-2017 Cisco and/or its affiliates.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -629,7 +629,7 @@ class TestInterface < CiscoTestCase
|
|
|
629
629
|
end
|
|
630
630
|
|
|
631
631
|
def test_speed
|
|
632
|
-
skip_legacy_defect?('7.0.3.I5.
|
|
632
|
+
skip_legacy_defect?('7.0.3.I5|7.0.3.F3', 'CSCvd41419')
|
|
633
633
|
interface = Interface.new(interfaces[0])
|
|
634
634
|
if validate_property_excluded?('interface', 'speed')
|
|
635
635
|
assert_nil(interface.speed)
|
|
@@ -665,7 +665,7 @@ class TestInterface < CiscoTestCase
|
|
|
665
665
|
end
|
|
666
666
|
|
|
667
667
|
def test_duplex
|
|
668
|
-
skip_legacy_defect?('7.0.3.I5.
|
|
668
|
+
skip_legacy_defect?('7.0.3.I5|7.0.3.F3', 'CSCvd41419')
|
|
669
669
|
interface = Interface.new(interfaces[0])
|
|
670
670
|
if validate_property_excluded?('interface', 'duplex')
|
|
671
671
|
assert_nil(interface.duplex)
|
|
@@ -820,7 +820,11 @@ class TestInterface < CiscoTestCase
|
|
|
820
820
|
end
|
|
821
821
|
|
|
822
822
|
def test_negotiate_auto_ethernet
|
|
823
|
-
|
|
823
|
+
# negotiate auto is LC dependent configuration.
|
|
824
|
+
# On some line cards it could fail with error for ex:
|
|
825
|
+
# Cisco::CliError: [interface ethernet8/1] The command 'no negotiate auto' was rejected with error:
|
|
826
|
+
# ERROR: Ethernet8/1: requested config change not allowed
|
|
827
|
+
skip_legacy_defect?('7.0.3.I5|7.0.3.F3', 'CSCvd41419')
|
|
824
828
|
inf_name = interfaces[0]
|
|
825
829
|
interface = Interface.new(inf_name)
|
|
826
830
|
|
|
@@ -1837,6 +1841,28 @@ class TestInterface < CiscoTestCase
|
|
|
1837
1841
|
lb.destroy
|
|
1838
1842
|
end
|
|
1839
1843
|
|
|
1844
|
+
def test_default_physical
|
|
1845
|
+
name = interfaces[0]
|
|
1846
|
+
int = Interface.new(name)
|
|
1847
|
+
int.switchport_mode = :disabled
|
|
1848
|
+
|
|
1849
|
+
# Verify l3 -> default
|
|
1850
|
+
int.description = 'default_pysical'
|
|
1851
|
+
int.ipv4_addr_mask_set('192.168.0.1', '24')
|
|
1852
|
+
refute(int.default?)
|
|
1853
|
+
|
|
1854
|
+
int.destroy
|
|
1855
|
+
assert(int.default?)
|
|
1856
|
+
|
|
1857
|
+
# Verify l2 trunk -> default
|
|
1858
|
+
int.switchport_mode = :access
|
|
1859
|
+
int.switchport_autostate_exclude = true
|
|
1860
|
+
refute(int.default?)
|
|
1861
|
+
|
|
1862
|
+
int.destroy
|
|
1863
|
+
assert(int.default?)
|
|
1864
|
+
end
|
|
1865
|
+
|
|
1840
1866
|
def test_purge_config
|
|
1841
1867
|
name = interfaces[0]
|
|
1842
1868
|
int = Interface.new(name)
|
data/tests/test_node_ext.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2013-
|
|
1
|
+
# Copyright (c) 2013-2017 Cisco and/or its affiliates.
|
|
2
2
|
#
|
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
# you may not use this file except in compliance with the License.
|
|
@@ -141,7 +141,7 @@ class TestNodeExt < CiscoTestCase
|
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
def test_get_product_id
|
|
144
|
-
#
|
|
144
|
+
# N3|9K Fretta product_id gets a '-F' appended so remove it for this check
|
|
145
145
|
if Utils.image_version?(/7.0.3.F/)
|
|
146
146
|
chassis = node.product_id.sub('-F', '')
|
|
147
147
|
else
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Copyright (c) 2017 Cisco and/or its affiliates.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
require_relative 'ciscotest'
|
|
16
|
+
require_relative '../lib/cisco_node_utils/object_group'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/object_group_entry'
|
|
18
|
+
|
|
19
|
+
# TestObject_group - Minitest for Object_group
|
|
20
|
+
# node utility class
|
|
21
|
+
class TestObjectGroup < CiscoTestCase
|
|
22
|
+
@skip_unless_supported = 'object_group'
|
|
23
|
+
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
24
|
+
|
|
25
|
+
def setup
|
|
26
|
+
super
|
|
27
|
+
@og_name_v4 = 'test-my-v4'
|
|
28
|
+
@og_name_v6 = 'test-my-v6'
|
|
29
|
+
@og_name_port = 'test-my-port'
|
|
30
|
+
remove_all_object_groups if @@pre_clean_needed
|
|
31
|
+
@@pre_clean_needed = false # rubocop:disable Style/ClassVars
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def teardown
|
|
35
|
+
remove_all_object_groups
|
|
36
|
+
super
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def remove_all_object_groups
|
|
40
|
+
ObjectGroup.object_groups.each do |_afis, types|
|
|
41
|
+
types.each do |_type, grps|
|
|
42
|
+
grps.values.each(&:destroy)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_create_object_group
|
|
48
|
+
%w(ipv4 ipv6).each do |afi|
|
|
49
|
+
og_name = afi[/ipv6/] ? @og_name_v6 : @og_name_v4
|
|
50
|
+
og = ObjectGroup.new(afi, 'address', og_name)
|
|
51
|
+
assert(ObjectGroup.object_groups[afi]['address'].key?(og_name))
|
|
52
|
+
og.destroy
|
|
53
|
+
assert_nil(ObjectGroup.object_groups[afi])
|
|
54
|
+
end
|
|
55
|
+
og_name = @og_name_port
|
|
56
|
+
og = ObjectGroup.new('ipv4', 'port', og_name)
|
|
57
|
+
assert(ObjectGroup.object_groups['ipv4']['port'].key?(og_name))
|
|
58
|
+
og.destroy
|
|
59
|
+
assert_nil(ObjectGroup.object_groups['ipv4'])
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def entry_helper(afi, type, name, props=nil)
|
|
63
|
+
test_hash = {
|
|
64
|
+
address: 'host 1.1.1.1',
|
|
65
|
+
port: 'eq 200',
|
|
66
|
+
}
|
|
67
|
+
test_hash.merge!(props) unless props.nil?
|
|
68
|
+
|
|
69
|
+
ObjectGroup.new(afi, type, name)
|
|
70
|
+
e = ObjectGroupEntry.new(afi, type, name, 10)
|
|
71
|
+
e.entry_set(test_hash)
|
|
72
|
+
e
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_ipv4_address_host
|
|
76
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, port: nil)
|
|
77
|
+
assert_equal('host 1.1.1.1', e.address)
|
|
78
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: 'host 2.2.2.2', port: nil)
|
|
79
|
+
assert_equal('host 2.2.2.2', e.address)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_ipv4_address_prefix
|
|
83
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '2.2.2.2/17', port: nil)
|
|
84
|
+
assert_equal('2.2.2.2/17', e.address)
|
|
85
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '3.3.3.3/31', port: nil)
|
|
86
|
+
assert_equal('3.3.3.3/31', e.address)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_ipv4_address_netmask
|
|
90
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '2.2.2.2 255.255.255.0', port: nil)
|
|
91
|
+
assert_equal('2.2.2.2 255.255.255.0', e.address)
|
|
92
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '3.3.3.3 10.11.12.13', port: nil)
|
|
93
|
+
assert_equal('3.3.3.3 10.11.12.13', e.address)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_ipv6_address_host
|
|
97
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: 'host 2000::1', port: nil)
|
|
98
|
+
assert_equal('host 2000::1', e.address)
|
|
99
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: 'host 2001::2', port: nil)
|
|
100
|
+
assert_equal('host 2001::2', e.address)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_ipv6_address_prefix
|
|
104
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: '2000::1/127', port: nil)
|
|
105
|
+
assert_equal('2000::1/127', e.address)
|
|
106
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: '2001::10/64', port: nil)
|
|
107
|
+
assert_equal('2001::10/64', e.address)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_ipv4_port
|
|
111
|
+
e = entry_helper('ipv4', 'port', @og_name_port, address: nil)
|
|
112
|
+
assert_equal('eq 200', e.port)
|
|
113
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'lt 100', address: nil)
|
|
114
|
+
assert_equal('lt 100', e.port)
|
|
115
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'neq 150', address: nil)
|
|
116
|
+
assert_equal('neq 150', e.port)
|
|
117
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'gt 350', address: nil)
|
|
118
|
+
assert_equal('gt 350', e.port)
|
|
119
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'range 400 1000', address: nil)
|
|
120
|
+
assert_equal('range 400 1000', e.port)
|
|
121
|
+
end
|
|
122
|
+
end
|
data/tests/test_platform.rb
CHANGED
|
@@ -110,7 +110,7 @@ class TestPlatform < CiscoTestCase
|
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
def test_uptime
|
|
113
|
-
s = @device.cmd('sh
|
|
113
|
+
s = @device.cmd('sh system uptime').scan(/Kernel uptime:\s+(.*)/).flatten.first
|
|
114
114
|
# compare without seconds
|
|
115
115
|
assert_equal(s.gsub(/\d+ sec/, ''), Platform.uptime.gsub(/\d+ sec/, ''))
|
|
116
116
|
end
|
|
@@ -45,6 +45,7 @@ class TestPortchannelGlobal < CiscoTestCase
|
|
|
45
45
|
|
|
46
46
|
def n3k_in_n3k_mode?
|
|
47
47
|
return unless /N3/ =~ node.product_id
|
|
48
|
+
return if node.product_id.include?('-F')
|
|
48
49
|
mode = config('show system switch-mode')
|
|
49
50
|
# note: an n3k in n9k mode displays: 'system switch-mode n9k'
|
|
50
51
|
patterns = ['system switch-mode n3k',
|
data/tests/test_radius_global.rb
CHANGED
|
@@ -70,6 +70,12 @@ class TestRadiusGlobal < CiscoTestCase
|
|
|
70
70
|
global.key_set(key, nil)
|
|
71
71
|
assert_match(/#{key}/, global.key)
|
|
72
72
|
assert_match(/#{key}/, Cisco::RadiusGlobal.radius_global[id].key)
|
|
73
|
+
assert_equal(7, global.key_format)
|
|
74
|
+
# Change to type 6
|
|
75
|
+
key = 'JDYkqyIFWeBvzpljSfWmRZrmRSRE8'
|
|
76
|
+
global.key_set(key, 6)
|
|
77
|
+
assert_match(/#{key}/, global.key)
|
|
78
|
+
assert_equal(6, global.key_format)
|
|
73
79
|
elsif platform == :ios_xr
|
|
74
80
|
global.key_set('QsEfThUkO', nil)
|
|
75
81
|
assert(!global.key.nil?)
|
|
@@ -77,9 +83,23 @@ class TestRadiusGlobal < CiscoTestCase
|
|
|
77
83
|
end
|
|
78
84
|
|
|
79
85
|
# Setting back to default and re-checking
|
|
80
|
-
global.timeout =
|
|
81
|
-
global.retransmit_count =
|
|
86
|
+
global.timeout = nil
|
|
87
|
+
global.retransmit_count = nil
|
|
88
|
+
global.key_set(nil, nil)
|
|
82
89
|
assert_equal(global.timeout, global.default_timeout)
|
|
83
90
|
assert_equal(global.retransmit_count, global.default_retransmit_count)
|
|
91
|
+
assert_nil(global.key)
|
|
92
|
+
|
|
93
|
+
# Default source interface
|
|
94
|
+
assert_nil(global.source_interface)
|
|
95
|
+
|
|
96
|
+
# Set source interface
|
|
97
|
+
interface = 'loopback0'
|
|
98
|
+
global.source_interface = interface
|
|
99
|
+
assert_equal(interface, global.source_interface)
|
|
100
|
+
|
|
101
|
+
# Remove source interface
|
|
102
|
+
global.source_interface = nil
|
|
103
|
+
assert_nil(global.source_interface)
|
|
84
104
|
end
|
|
85
105
|
end
|
data/tests/test_route_map.rb
CHANGED
|
@@ -22,7 +22,7 @@ end
|
|
|
22
22
|
|
|
23
23
|
def dplus_n9k?
|
|
24
24
|
return true if Utils.image_version?(/7.0.3.I4/) &&
|
|
25
|
-
|
|
25
|
+
product_tag[/n9k/]
|
|
26
26
|
false
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -154,7 +154,9 @@ class TestRouteMap < CiscoTestCase
|
|
|
154
154
|
assert_equal(rm.default_match_src_proto, rm.match_src_proto)
|
|
155
155
|
array = %w(tcp udp igmp)
|
|
156
156
|
rm.match_src_proto = array
|
|
157
|
-
|
|
157
|
+
# Protocol order not maintained in running config starting Greensboro.
|
|
158
|
+
# Sorting arrays to check equality.
|
|
159
|
+
assert_equal(array.sort, rm.match_src_proto.sort)
|
|
158
160
|
rm.match_src_proto = rm.default_match_src_proto
|
|
159
161
|
assert_equal(rm.default_match_src_proto, rm.match_src_proto)
|
|
160
162
|
end
|
|
@@ -962,7 +964,7 @@ class TestRouteMap < CiscoTestCase
|
|
|
962
964
|
end
|
|
963
965
|
|
|
964
966
|
def test_set_ipv4_default_next_hop
|
|
965
|
-
skip('platform not supported for this test') if
|
|
967
|
+
skip('platform not supported for this test') if product_tag[/(n35|n5k|n6k|n9k|n9k-f|n3k-f)/]
|
|
966
968
|
arr = %w(1.1.1.1 2.2.2.2 3.3.3.3)
|
|
967
969
|
rm = lset_ip_next_hop_helper(v4dnh: arr)
|
|
968
970
|
assert_equal(arr, rm.set_ipv4_default_next_hop)
|
|
@@ -995,7 +997,7 @@ class TestRouteMap < CiscoTestCase
|
|
|
995
997
|
|
|
996
998
|
def test_set_ipv4_next_hop_load_share
|
|
997
999
|
# bug on fretta
|
|
998
|
-
skip('platform not supported for this test') if
|
|
1000
|
+
skip('platform not supported for this test') if product_tag[/(n5k|n6k)/]
|
|
999
1001
|
skip_incompat_version?('route_map', 'set_ipv4_next_hop_load_share')
|
|
1000
1002
|
arr = %w(1.1.1.1 2.2.2.2 3.3.3.3)
|
|
1001
1003
|
rm = lset_ip_next_hop_helper(v4nh: arr)
|
|
@@ -1062,7 +1064,7 @@ class TestRouteMap < CiscoTestCase
|
|
|
1062
1064
|
end
|
|
1063
1065
|
|
|
1064
1066
|
def test_set_ipv6_default_next_hop
|
|
1065
|
-
skip('platform not supported for this test') if
|
|
1067
|
+
skip('platform not supported for this test') if product_tag[/(n35|n5k|n6k|n9k|n9k-f|n3k-f)/]
|
|
1066
1068
|
arr = %w(2000::1 2000::11 2000::22)
|
|
1067
1069
|
rm = lset_ip_next_hop_helper(v6dnh: arr)
|
|
1068
1070
|
assert_equal(arr, rm.set_ipv6_default_next_hop)
|
|
@@ -1095,7 +1097,7 @@ class TestRouteMap < CiscoTestCase
|
|
|
1095
1097
|
|
|
1096
1098
|
def test_set_ipv6_next_hop_load_share
|
|
1097
1099
|
# bug on fretta
|
|
1098
|
-
skip('platform not supported for this test') if
|
|
1100
|
+
skip('platform not supported for this test') if product_tag[/(n5k|n6k)/]
|
|
1099
1101
|
skip_incompat_version?('route_map', 'set_ipv6_next_hop_load_share')
|
|
1100
1102
|
arr = %w(2000::1 2000::11 2000::22)
|
|
1101
1103
|
rm = lset_ip_next_hop_helper(v6nh: arr)
|
|
@@ -1119,7 +1121,7 @@ class TestRouteMap < CiscoTestCase
|
|
|
1119
1121
|
|
|
1120
1122
|
def test_set_community_no_asn
|
|
1121
1123
|
# bug on n5/6k
|
|
1122
|
-
skip('platform not supported for this test') if
|
|
1124
|
+
skip('platform not supported for this test') if product_tag[/(n5k|n6k)/]
|
|
1123
1125
|
skip_incompat_version?('route_map', 'set_community')
|
|
1124
1126
|
rm = create_route_map
|
|
1125
1127
|
assert_equal(rm.default_set_community_additive,
|
|
@@ -1336,7 +1338,8 @@ class TestRouteMap < CiscoTestCase
|
|
|
1336
1338
|
|
|
1337
1339
|
def test_extcommunity_rt
|
|
1338
1340
|
# bug CSCvc92395 on fretta and n9k
|
|
1339
|
-
skip('platform not supported for this test') if
|
|
1341
|
+
skip('platform not supported for this test') if
|
|
1342
|
+
product_tag[/n9k/] || product_tag[/n3k-f/]
|
|
1340
1343
|
rm = create_route_map
|
|
1341
1344
|
assert_equal(rm.default_set_extcommunity_rt_additive,
|
|
1342
1345
|
rm.set_extcommunity_rt_additive)
|
data/tests/test_router_bgp.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Mike Wiebe, June, 2015
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2015-
|
|
6
|
+
# Copyright (c) 2015-2017 Cisco and/or its affiliates.
|
|
7
7
|
#
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
9
|
# you may not use this file except in compliance with the License.
|
|
@@ -60,14 +60,6 @@ def setup_vrf
|
|
|
60
60
|
create_bgp_vrf(@asnum, @vrf)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
def newer_image_version?
|
|
64
|
-
new = true
|
|
65
|
-
new = false if Utils.image_version?(/7.0.3.I2|I3|I4/) ||
|
|
66
|
-
node.product_id[/(N5|N6|N7|N9.*-F)/]
|
|
67
|
-
new = true if Utils.image_version?(/8.0|8.1/)
|
|
68
|
-
new
|
|
69
|
-
end
|
|
70
|
-
|
|
71
63
|
# TestRouterBgp - Minitest for RouterBgp class
|
|
72
64
|
class TestRouterBgp < CiscoTestCase
|
|
73
65
|
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
@@ -595,31 +587,12 @@ class TestRouterBgp < CiscoTestCase
|
|
|
595
587
|
if validate_property_excluded?('bgp', 'event_history_cli')
|
|
596
588
|
assert_nil(bgp.event_history_cli)
|
|
597
589
|
assert_raises(Cisco::UnsupportedError) do
|
|
598
|
-
bgp.event_history_cli = '
|
|
590
|
+
bgp.event_history_cli = 'size_large'
|
|
599
591
|
end
|
|
600
592
|
return
|
|
601
593
|
end
|
|
602
|
-
assert_equal(bgp.default_event_history_cli, bgp.event_history_cli)
|
|
603
|
-
bgp.event_history_cli = 'true'
|
|
604
|
-
assert_equal(bgp.default_event_history_cli, bgp.event_history_cli)
|
|
605
|
-
bgp.event_history_cli = 'false'
|
|
606
|
-
assert_equal('false', bgp.event_history_cli)
|
|
607
|
-
bgp.event_history_cli = 'size_small'
|
|
608
|
-
assert_equal('size_small', bgp.event_history_cli)
|
|
609
594
|
bgp.event_history_cli = 'size_large'
|
|
610
595
|
assert_equal('size_large', bgp.event_history_cli)
|
|
611
|
-
bgp.event_history_cli = 'size_medium'
|
|
612
|
-
assert_equal('size_medium', bgp.event_history_cli)
|
|
613
|
-
bgp.event_history_cli = 'size_disable'
|
|
614
|
-
if newer_image_version?
|
|
615
|
-
assert_equal('false', bgp.event_history_cli)
|
|
616
|
-
else
|
|
617
|
-
assert_equal('size_disable', bgp.event_history_cli)
|
|
618
|
-
end
|
|
619
|
-
bgp.event_history_cli = '100000'
|
|
620
|
-
assert_equal('100000', bgp.event_history_cli)
|
|
621
|
-
bgp.event_history_cli = bgp.default_event_history_cli
|
|
622
|
-
assert_equal(bgp.default_event_history_cli, bgp.event_history_cli)
|
|
623
596
|
end
|
|
624
597
|
|
|
625
598
|
def test_event_history_detail
|
|
@@ -627,31 +600,12 @@ class TestRouterBgp < CiscoTestCase
|
|
|
627
600
|
if validate_property_excluded?('bgp', 'event_history_detail')
|
|
628
601
|
assert_nil(bgp.event_history_detail)
|
|
629
602
|
assert_raises(Cisco::UnsupportedError) do
|
|
630
|
-
bgp.event_history_detail = '
|
|
603
|
+
bgp.event_history_detail = 'size_large'
|
|
631
604
|
end
|
|
632
605
|
return
|
|
633
606
|
end
|
|
634
|
-
assert_equal(bgp.default_event_history_detail, bgp.event_history_detail)
|
|
635
|
-
bgp.event_history_detail = 'true'
|
|
636
|
-
assert_equal('true', bgp.event_history_detail)
|
|
637
|
-
bgp.event_history_detail = 'false'
|
|
638
|
-
assert_equal(bgp.default_event_history_detail, bgp.event_history_detail)
|
|
639
|
-
bgp.event_history_detail = 'size_small'
|
|
640
|
-
assert_equal('size_small', bgp.event_history_detail)
|
|
641
607
|
bgp.event_history_detail = 'size_large'
|
|
642
608
|
assert_equal('size_large', bgp.event_history_detail)
|
|
643
|
-
bgp.event_history_detail = 'size_medium'
|
|
644
|
-
assert_equal('size_medium', bgp.event_history_detail)
|
|
645
|
-
bgp.event_history_detail = 'size_disable'
|
|
646
|
-
if newer_image_version?
|
|
647
|
-
assert_equal('false', bgp.event_history_detail)
|
|
648
|
-
else
|
|
649
|
-
assert_equal('size_disable', bgp.event_history_detail)
|
|
650
|
-
end
|
|
651
|
-
bgp.event_history_detail = '100000'
|
|
652
|
-
assert_equal('100000', bgp.event_history_detail)
|
|
653
|
-
bgp.event_history_detail = bgp.default_event_history_detail
|
|
654
|
-
assert_equal(bgp.default_event_history_detail, bgp.event_history_detail)
|
|
655
609
|
end
|
|
656
610
|
|
|
657
611
|
def test_event_history_errors
|
|
@@ -663,25 +617,9 @@ class TestRouterBgp < CiscoTestCase
|
|
|
663
617
|
end
|
|
664
618
|
return
|
|
665
619
|
end
|
|
666
|
-
|
|
667
|
-
assert_equal(bgp.default_event_history_errors, bgp.event_history_errors)
|
|
668
|
-
bgp.event_history_errors = 'true'
|
|
669
|
-
assert_equal(bgp.default_event_history_errors, bgp.event_history_errors)
|
|
670
|
-
bgp.event_history_errors = 'false'
|
|
671
|
-
assert_equal('false', bgp.event_history_errors)
|
|
672
|
-
bgp.event_history_errors = 'size_small'
|
|
673
|
-
assert_equal('size_small', bgp.event_history_errors) unless
|
|
674
|
-
Utils.image_version?(/8.0|8.1/)
|
|
620
|
+
skip_incompat_version?('bgp', 'event_history_errors')
|
|
675
621
|
bgp.event_history_errors = 'size_large'
|
|
676
622
|
assert_equal('size_large', bgp.event_history_errors)
|
|
677
|
-
bgp.event_history_errors = 'size_medium'
|
|
678
|
-
assert_equal('size_medium', bgp.event_history_errors)
|
|
679
|
-
bgp.event_history_errors = 'size_disable'
|
|
680
|
-
assert_equal('false', bgp.event_history_errors)
|
|
681
|
-
bgp.event_history_errors = '100000'
|
|
682
|
-
assert_equal('100000', bgp.event_history_errors)
|
|
683
|
-
bgp.event_history_errors = bgp.default_event_history_errors
|
|
684
|
-
assert_equal(bgp.default_event_history_errors, bgp.event_history_errors)
|
|
685
623
|
end
|
|
686
624
|
|
|
687
625
|
def test_event_history_events
|
|
@@ -689,31 +627,12 @@ class TestRouterBgp < CiscoTestCase
|
|
|
689
627
|
if validate_property_excluded?('bgp', 'event_history_events')
|
|
690
628
|
assert_nil(bgp.event_history_events)
|
|
691
629
|
assert_raises(Cisco::UnsupportedError) do
|
|
692
|
-
bgp.event_history_events = '
|
|
630
|
+
bgp.event_history_events = 'size_medium'
|
|
693
631
|
end
|
|
694
632
|
return
|
|
695
633
|
end
|
|
696
|
-
assert_equal(bgp.default_event_history_events, bgp.event_history_events)
|
|
697
|
-
bgp.event_history_events = 'true'
|
|
698
|
-
assert_equal(bgp.default_event_history_events, bgp.event_history_events)
|
|
699
|
-
bgp.event_history_events = 'false'
|
|
700
|
-
assert_equal('false', bgp.event_history_events)
|
|
701
|
-
bgp.event_history_events = 'size_small'
|
|
702
|
-
assert_equal('size_small', bgp.event_history_events)
|
|
703
|
-
bgp.event_history_events = 'size_large'
|
|
704
|
-
assert_equal('size_large', bgp.event_history_events)
|
|
705
634
|
bgp.event_history_events = 'size_medium'
|
|
706
635
|
assert_equal('size_medium', bgp.event_history_events)
|
|
707
|
-
bgp.event_history_events = 'size_disable'
|
|
708
|
-
if newer_image_version?
|
|
709
|
-
assert_equal('false', bgp.event_history_events)
|
|
710
|
-
else
|
|
711
|
-
assert_equal('size_disable', bgp.event_history_events)
|
|
712
|
-
end
|
|
713
|
-
bgp.event_history_events = '100000'
|
|
714
|
-
assert_equal('100000', bgp.event_history_events)
|
|
715
|
-
bgp.event_history_events = bgp.default_event_history_events
|
|
716
|
-
assert_equal(bgp.default_event_history_events, bgp.event_history_events)
|
|
717
636
|
end
|
|
718
637
|
|
|
719
638
|
def test_event_history_objstore
|
|
@@ -725,24 +644,9 @@ class TestRouterBgp < CiscoTestCase
|
|
|
725
644
|
end
|
|
726
645
|
return
|
|
727
646
|
end
|
|
728
|
-
|
|
729
|
-
assert_equal(bgp.default_event_history_objstore, bgp.event_history_objstore)
|
|
730
|
-
bgp.event_history_objstore = 'true'
|
|
731
|
-
assert_equal('true', bgp.event_history_objstore)
|
|
732
|
-
bgp.event_history_objstore = 'false'
|
|
733
|
-
assert_equal(bgp.default_event_history_objstore, bgp.event_history_objstore)
|
|
734
|
-
bgp.event_history_objstore = 'size_small'
|
|
735
|
-
assert_equal('size_small', bgp.event_history_objstore)
|
|
736
|
-
bgp.event_history_objstore = 'size_large'
|
|
737
|
-
assert_equal('size_large', bgp.event_history_objstore)
|
|
647
|
+
skip_incompat_version?('bgp', 'event_history_objstore')
|
|
738
648
|
bgp.event_history_objstore = 'size_medium'
|
|
739
649
|
assert_equal('size_medium', bgp.event_history_objstore)
|
|
740
|
-
bgp.event_history_objstore = 'size_disable'
|
|
741
|
-
assert_equal('false', bgp.event_history_objstore)
|
|
742
|
-
bgp.event_history_objstore = '100000'
|
|
743
|
-
assert_equal('100000', bgp.event_history_objstore)
|
|
744
|
-
bgp.event_history_objstore = bgp.default_event_history_objstore
|
|
745
|
-
assert_equal(bgp.default_event_history_objstore, bgp.event_history_objstore)
|
|
746
650
|
end
|
|
747
651
|
|
|
748
652
|
def test_event_history_periodic
|
|
@@ -750,41 +654,12 @@ class TestRouterBgp < CiscoTestCase
|
|
|
750
654
|
if validate_property_excluded?('bgp', 'event_history_periodic')
|
|
751
655
|
assert_nil(bgp.event_history_periodic)
|
|
752
656
|
assert_raises(Cisco::UnsupportedError) do
|
|
753
|
-
bgp.event_history_periodic = '
|
|
657
|
+
bgp.event_history_periodic = 'size_large'
|
|
754
658
|
end
|
|
755
659
|
return
|
|
756
660
|
end
|
|
757
|
-
assert_equal(bgp.default_event_history_periodic,
|
|
758
|
-
bgp.event_history_periodic)
|
|
759
|
-
bgp.event_history_periodic = 'false'
|
|
760
|
-
assert_equal('false', bgp.event_history_periodic) unless
|
|
761
|
-
Utils.image_version?(/8.0|8.1/)
|
|
762
|
-
bgp.event_history_periodic = 'size_small'
|
|
763
|
-
assert_equal('size_small', bgp.event_history_periodic)
|
|
764
661
|
bgp.event_history_periodic = 'size_large'
|
|
765
662
|
assert_equal('size_large', bgp.event_history_periodic)
|
|
766
|
-
bgp.event_history_periodic = 'size_medium'
|
|
767
|
-
assert_equal('size_medium', bgp.event_history_periodic)
|
|
768
|
-
bgp.event_history_periodic = '100000'
|
|
769
|
-
assert_equal('100000', bgp.event_history_periodic)
|
|
770
|
-
bgp.event_history_periodic = 'size_disable'
|
|
771
|
-
if newer_image_version?
|
|
772
|
-
assert_equal(bgp.default_event_history_periodic,
|
|
773
|
-
bgp.event_history_periodic)
|
|
774
|
-
else
|
|
775
|
-
assert_equal('size_disable', bgp.event_history_periodic)
|
|
776
|
-
end
|
|
777
|
-
bgp.event_history_periodic = 'true'
|
|
778
|
-
if newer_image_version?
|
|
779
|
-
assert_equal('true', bgp.event_history_periodic) unless
|
|
780
|
-
Utils.image_version?(/8.0|8.1/)
|
|
781
|
-
else
|
|
782
|
-
assert_equal(bgp.default_event_history_periodic,
|
|
783
|
-
bgp.event_history_periodic)
|
|
784
|
-
end
|
|
785
|
-
bgp.event_history_periodic = bgp.default_event_history_periodic
|
|
786
|
-
assert_equal(bgp.default_event_history_periodic,
|
|
787
|
-
bgp.event_history_periodic)
|
|
788
663
|
end
|
|
789
664
|
|
|
790
665
|
def test_fast_external_fallover
|