cisco_node_utils 1.2.0 → 1.3.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/.gitignore +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +13 -0
- data/.travis.yml +4 -1
- data/CHANGELOG.md +81 -2
- data/CONTRIBUTING.md +2 -17
- data/Gemfile +5 -0
- data/README.md +92 -47
- data/Rakefile +23 -1
- data/bin/git/hooks/hook_lib +7 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +7 -2
- data/bin/git/hooks/pre-commit/validate-diffs +18 -4
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/update-hooks +64 -6
- data/cisco_node_utils.gemspec +9 -6
- data/docs/README-develop-best-practices.md +149 -50
- data/docs/README-develop-node-utils-APIs.md +92 -42
- data/docs/README-maintainers.md +7 -4
- data/docs/README-test-execution.md +57 -0
- data/docs/cisco_node_utils.yaml.example +30 -0
- data/docs/template-router.rb +4 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +2 -2
- data/lib/cisco_node_utils.rb +5 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +5 -6
- data/lib/cisco_node_utils/aaa_authorization_service.rb +1 -1
- data/lib/cisco_node_utils/ace.rb +165 -12
- data/lib/cisco_node_utils/acl.rb +2 -1
- data/lib/cisco_node_utils/bgp.rb +184 -21
- data/lib/cisco_node_utils/bgp_af.rb +94 -249
- data/lib/cisco_node_utils/bgp_neighbor.rb +94 -14
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +75 -8
- data/lib/cisco_node_utils/bridge_domain.rb +183 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +85 -2
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/client/client.rb +234 -0
- data/lib/cisco_node_utils/client/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +311 -0
- data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
- data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
- data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
- data/lib/cisco_node_utils/client/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +305 -0
- data/lib/cisco_node_utils/client/utils.rb +164 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +222 -254
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +22 -15
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +11 -8
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +21 -16
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +239 -109
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +114 -55
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +76 -52
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +106 -62
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +35 -14
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +23 -17
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +94 -83
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +22 -17
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +76 -26
- data/lib/cisco_node_utils/cmd_ref/images.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +381 -153
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +21 -21
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +30 -21
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +18 -13
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +26 -31
- data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
- data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
- data/lib/cisco_node_utils/cmd_ref/memory.yaml +17 -6
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +10 -3
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +17 -5
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +33 -29
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +12 -10
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +16 -19
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +40 -25
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +17 -12
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +71 -35
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +10 -5
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +6 -2
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +47 -43
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +13 -11
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +4 -2
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +23 -21
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +26 -22
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +19 -17
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +18 -6
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +234 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +24 -9
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +5 -3
- data/lib/cisco_node_utils/cmd_ref/system.yaml +4 -3
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +22 -20
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +27 -15
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +45 -16
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +21 -11
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +3 -2
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +60 -32
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +118 -101
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +54 -58
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +118 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +19 -25
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +28 -18
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +34 -17
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +6 -4
- data/lib/cisco_node_utils/command_reference.rb +261 -142
- data/lib/cisco_node_utils/constants.rb +33 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +102 -0
- data/lib/cisco_node_utils/evpn_vni.rb +5 -3
- data/lib/cisco_node_utils/exceptions.rb +111 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +52 -35
- data/lib/cisco_node_utils/fabricpath_topology.rb +44 -57
- data/lib/cisco_node_utils/feature.rb +165 -3
- data/lib/cisco_node_utils/interface.rb +1051 -260
- data/lib/cisco_node_utils/interface_channel_group.rb +11 -10
- data/lib/cisco_node_utils/interface_ospf.rb +1 -2
- data/lib/cisco_node_utils/interface_portchannel.rb +4 -12
- data/lib/cisco_node_utils/interface_service_vni.rb +7 -7
- data/lib/cisco_node_utils/itd_device_group.rb +248 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +523 -0
- data/lib/cisco_node_utils/logger.rb +75 -0
- data/lib/cisco_node_utils/node.rb +62 -192
- data/lib/cisco_node_utils/node_util.rb +56 -10
- data/lib/cisco_node_utils/overlay_global.rb +2 -2
- data/lib/cisco_node_utils/pim.rb +2 -13
- data/lib/cisco_node_utils/pim_group_list.rb +1 -1
- data/lib/cisco_node_utils/pim_rp_address.rb +1 -1
- data/lib/cisco_node_utils/platform.rb +52 -21
- data/lib/cisco_node_utils/portchannel_global.rb +89 -19
- data/lib/cisco_node_utils/radius_server.rb +168 -37
- data/lib/cisco_node_utils/router_ospf.rb +20 -35
- data/lib/cisco_node_utils/router_ospf_vrf.rb +4 -4
- data/lib/cisco_node_utils/snmpserver.rb +1 -6
- data/lib/cisco_node_utils/snmpuser.rb +6 -4
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_server.rb +77 -18
- data/lib/cisco_node_utils/syslog_settings.rb +1 -1
- data/lib/cisco_node_utils/tacacs_server_group.rb +8 -4
- data/lib/cisco_node_utils/tacacs_server_host.rb +115 -25
- data/lib/cisco_node_utils/vdc.rb +12 -0
- data/lib/cisco_node_utils/version.rb +1 -1
- data/lib/cisco_node_utils/vlan.rb +147 -29
- data/lib/cisco_node_utils/vpc.rb +55 -3
- data/lib/cisco_node_utils/vrf.rb +72 -11
- data/lib/cisco_node_utils/vrf_af.rb +114 -29
- data/lib/cisco_node_utils/vtp.rb +34 -52
- data/lib/cisco_node_utils/vxlan_vtep.rb +34 -8
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +36 -4
- data/lib/minitest/environment_plugin.rb +31 -0
- data/lib/minitest/log_level_plugin.rb +41 -0
- data/spec/client_spec.rb +7 -0
- data/spec/environment_spec.rb +263 -0
- data/spec/grpc_client_spec.rb +23 -0
- data/spec/isolate/all_clients_spec.rb +9 -0
- data/spec/isolate/grpc_only_spec.rb +16 -0
- data/spec/isolate/no_clients_spec.rb +26 -0
- data/spec/isolate/nxapi_only_spec.rb +16 -0
- data/spec/nxapi_client_spec.rb +42 -0
- data/spec/schema.yaml +75 -0
- data/spec/shared_examples_for_clients.rb +14 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/whitespace_spec.rb +10 -0
- data/spec/yaml_spec.rb +42 -0
- data/tests/.rubocop.yml +2 -2
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +96 -36
- data/tests/ciscotest.rb +220 -12
- data/tests/cmd_config.yaml +71 -49
- data/tests/cmd_config_invalid.yaml +1 -1
- data/tests/test_aaa_authentication_login.rb +1 -0
- data/tests/test_aaa_authentication_login_service.rb +9 -0
- data/tests/test_aaa_authorization_service.rb +173 -367
- data/tests/test_ace.rb +171 -100
- data/tests/test_acl.rb +10 -1
- data/tests/test_bgp_af.rb +395 -728
- data/tests/test_bgp_neighbor.rb +274 -115
- data/tests/test_bgp_neighbor_af.rb +178 -77
- data/tests/test_bridge_domain.rb +191 -0
- data/tests/test_bridge_domain_vni.rb +116 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_command_config.rb +9 -5
- data/tests/test_command_reference.rb +380 -102
- data/tests/test_dns_domain.rb +13 -3
- data/tests/test_domain_name.rb +13 -3
- data/tests/test_encapsulation.rb +77 -0
- data/tests/test_evpn_vni.rb +25 -7
- data/tests/test_fabricpath_global.rb +167 -163
- data/tests/test_fabricpath_topology.rb +12 -33
- data/tests/test_feature.rb +215 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_interface.rb +585 -344
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +6 -3
- data/tests/test_interface_ospf.rb +26 -24
- data/tests/test_interface_portchannel.rb +1 -0
- data/tests/test_interface_private_vlan.rb +724 -0
- data/tests/test_interface_service_vni.rb +37 -66
- data/tests/test_interface_svi.rb +98 -101
- data/tests/test_interface_switchport.rb +419 -549
- data/tests/test_itd_device_group.rb +145 -0
- data/tests/test_itd_device_group_node.rb +199 -0
- data/tests/test_itd_service.rb +298 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +11 -2
- data/tests/test_node.rb +16 -75
- data/tests/test_node_ext.rb +174 -163
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_config.rb +5 -1
- data/tests/test_ntp_server.rb +2 -2
- data/tests/test_nxapi.rb +221 -0
- data/tests/test_overlay_global.rb +47 -38
- data/tests/test_pim.rb +2 -0
- data/tests/test_pim_group_list.rb +2 -0
- data/tests/test_pim_rp_address.rb +2 -0
- data/tests/test_platform.rb +86 -39
- data/tests/test_portchannel_global.rb +211 -135
- data/tests/test_radius_global.rb +13 -5
- data/tests/test_radius_server.rb +256 -104
- data/tests/test_radius_server_group.rb +2 -0
- data/tests/test_router_bgp.rb +781 -485
- data/tests/test_router_ospf.rb +26 -103
- data/tests/test_router_ospf_vrf.rb +52 -57
- data/tests/test_snmp_notification_receiver.rb +2 -0
- data/tests/test_snmpcommunity.rb +2 -0
- data/tests/test_snmpgroup.rb +2 -0
- data/tests/test_snmpnotification.rb +40 -21
- data/tests/test_snmpserver.rb +2 -0
- data/tests/test_snmpuser.rb +2 -0
- data/tests/test_stp_global.rb +563 -0
- data/tests/test_syslog_server.rb +32 -8
- data/tests/test_syslog_settings.rb +22 -9
- data/tests/test_tacacs_server.rb +32 -27
- data/tests/test_tacacs_server_group.rb +100 -45
- data/tests/test_tacacs_server_host.rb +135 -43
- data/tests/test_vdc.rb +2 -16
- data/tests/test_vlan.rb +106 -54
- data/tests/test_vlan_mt_full.rb +11 -21
- data/tests/test_vlan_private.rb +669 -0
- data/tests/test_vpc.rb +312 -159
- data/tests/test_vrf.rb +122 -113
- data/tests/test_vrf_af.rb +238 -0
- data/tests/test_vtp.rb +58 -102
- data/tests/test_vxlan_vtep.rb +38 -17
- data/tests/test_vxlan_vtep_vni.rb +61 -9
- data/tests/test_yum.rb +49 -25
- metadata +122 -36
- data/lib/cisco_node_utils/cmd_ref/fex.yaml +0 -9
- data/lib/cisco_node_utils/cmd_ref/vni.yaml +0 -76
- data/lib/cisco_node_utils/vni.rb +0 -227
- data/tests/test_vni.rb +0 -106
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Copyright (c) 2014-2016 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/bridge_domain'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/vlan'
|
|
18
|
+
|
|
19
|
+
include Cisco
|
|
20
|
+
|
|
21
|
+
# TestBridgeDomain - Minitest for bridge domain class.
|
|
22
|
+
class TestBridgeDomain < CiscoTestCase
|
|
23
|
+
@skip_unless_supported = 'bridge_domain'
|
|
24
|
+
@@cleaned = false # rubocop:disable Style/ClassVars
|
|
25
|
+
|
|
26
|
+
def cleanup
|
|
27
|
+
remove_all_vlans
|
|
28
|
+
remove_all_bridge_domains
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup
|
|
32
|
+
super
|
|
33
|
+
cleanup unless @@cleaned
|
|
34
|
+
@@cleaned = true # rubocop:disable Style/ClassVars
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def teardown
|
|
38
|
+
cleanup
|
|
39
|
+
super
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_single_bd_create_destroy
|
|
43
|
+
bd = BridgeDomain.new('100', true)
|
|
44
|
+
bds = BridgeDomain.bds
|
|
45
|
+
assert(bds.key?('100'), 'Error: failed to create bridge-domain 100')
|
|
46
|
+
|
|
47
|
+
bd.destroy
|
|
48
|
+
bds = BridgeDomain.bds
|
|
49
|
+
refute(bds.key?('100'), 'Error: failed to destroy bridge-domain 100')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_bd_create_if_vlan_exists
|
|
53
|
+
vlan = Vlan.new(100)
|
|
54
|
+
assert_raises(CliError,
|
|
55
|
+
'Vlan already exist did not raise CliError') do
|
|
56
|
+
BridgeDomain.new(100)
|
|
57
|
+
end
|
|
58
|
+
vlan.destroy
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_create_already_existing_bd
|
|
62
|
+
create = '100-120'
|
|
63
|
+
BridgeDomain.new('100-110,115')
|
|
64
|
+
bd = BridgeDomain.new('100-120')
|
|
65
|
+
bds = BridgeDomain.bds
|
|
66
|
+
BridgeDomain.bd_ids_to_array(create).each do |id|
|
|
67
|
+
assert(bds.key?(id.to_s), 'Error: failed to create bridge-domain ' << id)
|
|
68
|
+
end
|
|
69
|
+
bd.destroy
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_multiple_bd_create_destroy
|
|
73
|
+
create = '101-102,120'
|
|
74
|
+
bdlist = BridgeDomain.bd_ids_to_array(create)
|
|
75
|
+
|
|
76
|
+
bd = BridgeDomain.new(create, true)
|
|
77
|
+
bds = BridgeDomain.bds
|
|
78
|
+
bdlist.each do |id|
|
|
79
|
+
assert(bds.key?(id.to_s), 'Error: failed to create bridge-domain ' << id)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
bd.destroy
|
|
83
|
+
bds = BridgeDomain.bds
|
|
84
|
+
bdlist.each do |id|
|
|
85
|
+
refute(bds.key?(id.to_s), 'Error: failed to destroy bridge-domain ' << id)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_bd_create_noorder_and_space
|
|
90
|
+
create = '100, 90, 200, 2-4'
|
|
91
|
+
bd = BridgeDomain.new(create)
|
|
92
|
+
bds = BridgeDomain.bds
|
|
93
|
+
BridgeDomain.bd_ids_to_array(create).each do |id|
|
|
94
|
+
assert(bds.key?(id.to_s), 'Error: failed to create bridge-domain ' << id)
|
|
95
|
+
end
|
|
96
|
+
bd.destroy
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_bd_shutdown
|
|
100
|
+
bd = BridgeDomain.new(101)
|
|
101
|
+
refute(bd.shutdown)
|
|
102
|
+
bd.shutdown = true
|
|
103
|
+
assert(bd.shutdown)
|
|
104
|
+
bd.destroy
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_bd_name
|
|
108
|
+
bd = BridgeDomain.new(101)
|
|
109
|
+
assert_equal(bd.default_bd_name, bd.bd_name,
|
|
110
|
+
'Error: Bridge-Domain name not initialized to default')
|
|
111
|
+
|
|
112
|
+
name = 'my_bridge'
|
|
113
|
+
bd.bd_name = name
|
|
114
|
+
assert_equal(name, bd.bd_name,
|
|
115
|
+
'Error: Bridge-Domain name not updated to #{name}')
|
|
116
|
+
|
|
117
|
+
bd.bd_name = bd.default_bd_name
|
|
118
|
+
assert_equal(bd.default_bd_name, bd.bd_name,
|
|
119
|
+
'Error: Bridge-Domain name not restored to default')
|
|
120
|
+
bd.destroy
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_bd_fabric_control
|
|
124
|
+
bd = BridgeDomain.new('100')
|
|
125
|
+
assert_equal(bd.default_fabric_control, bd.fabric_control,
|
|
126
|
+
'Error: Bridge-Domain fabric-control is not matching')
|
|
127
|
+
bd.fabric_control = true
|
|
128
|
+
assert(bd.fabric_control)
|
|
129
|
+
bd.destroy
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_another_bd_as_fabric_control
|
|
133
|
+
bd = BridgeDomain.new(100)
|
|
134
|
+
assert_equal(bd.default_fabric_control, bd.fabric_control,
|
|
135
|
+
'Error: Bridge-Domain fabric-control is not matching')
|
|
136
|
+
bd.fabric_control = true
|
|
137
|
+
assert(bd.fabric_control)
|
|
138
|
+
another_bd = BridgeDomain.new(101)
|
|
139
|
+
|
|
140
|
+
assert_raises(CliError,
|
|
141
|
+
'BD misconfig did not raise CliError') do
|
|
142
|
+
another_bd.fabric_control = true
|
|
143
|
+
end
|
|
144
|
+
bd.destroy
|
|
145
|
+
another_bd.destroy
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_invalid_bd_create
|
|
149
|
+
assert_raises(CliError,
|
|
150
|
+
'BD misconfig did not raise CliError') do
|
|
151
|
+
BridgeDomain.new('90, 5000-5004,100')
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_multiple_bd_combinations
|
|
156
|
+
bds = BridgeDomain.new('100-110')
|
|
157
|
+
bd_hash = {}
|
|
158
|
+
bd_hash['100'] = [true, false, 'bd100']
|
|
159
|
+
bd_hash['105'] = [true, true, 'bd105']
|
|
160
|
+
bd_hash['107'] = [true, false, 'bd107']
|
|
161
|
+
bd_hash['110'] = [true, false, '']
|
|
162
|
+
BridgeDomain.bds.each do |bd, obj|
|
|
163
|
+
if bd_hash.key?(bd)
|
|
164
|
+
obj.shutdown = bd_hash[bd][0]
|
|
165
|
+
assert_equal(bd_hash[bd][0], obj.shutdown,
|
|
166
|
+
'Error: Bridge-Domain state is not matching')
|
|
167
|
+
|
|
168
|
+
obj.fabric_control = bd_hash[bd][1]
|
|
169
|
+
assert_equal(bd_hash[bd][1], obj.fabric_control,
|
|
170
|
+
'Error: Bridge-Domain type is not matching')
|
|
171
|
+
|
|
172
|
+
if bd_hash[bd][2] != ''
|
|
173
|
+
obj.bd_name = bd_hash[bd][2]
|
|
174
|
+
assert_equal(bd_hash[bd][2], obj.bd_name,
|
|
175
|
+
'Error: Bridge-Domain name is not matching')
|
|
176
|
+
else
|
|
177
|
+
assert_equal(obj.default_bd_name, obj.bd_name,
|
|
178
|
+
'Error: Bridge-Domain name is not matching')
|
|
179
|
+
end
|
|
180
|
+
else
|
|
181
|
+
assert_equal(obj.default_shutdown, obj.shutdown,
|
|
182
|
+
'Error: Bridge-Domain state is not matching')
|
|
183
|
+
assert_equal(obj.default_fabric_control, obj.fabric_control,
|
|
184
|
+
'Error: Bridge-Domain type is not matching')
|
|
185
|
+
assert_equal(obj.default_bd_name, obj.bd_name,
|
|
186
|
+
'Error: Bridge-Domain name is not matching')
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
bds.destroy
|
|
190
|
+
end
|
|
191
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Copyright (c) 2014-2016 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/bridge_domain_vni'
|
|
17
|
+
|
|
18
|
+
include Cisco
|
|
19
|
+
|
|
20
|
+
# TestBridgeDomainVNI - Minitest for bridge domain class.
|
|
21
|
+
class TestBridgeDomainVNI < CiscoTestCase
|
|
22
|
+
@skip_unless_supported = 'bridge_domain_vni'
|
|
23
|
+
@@cleaned = false # rubocop:disable Style/ClassVars
|
|
24
|
+
|
|
25
|
+
def cleanup
|
|
26
|
+
remove_all_vlans
|
|
27
|
+
remove_all_bridge_domains
|
|
28
|
+
config_no_warn('no feature vni')
|
|
29
|
+
BridgeDomainVNI.range_bds.each do |_bd, obj|
|
|
30
|
+
obj.destroy
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def setup
|
|
35
|
+
super
|
|
36
|
+
cleanup unless @@cleaned
|
|
37
|
+
@@cleaned = true # rubocop:disable Style/ClassVars
|
|
38
|
+
mt_full_interface?
|
|
39
|
+
v = Vdc.new('default')
|
|
40
|
+
v.limit_resource_module_type = 'f3' unless
|
|
41
|
+
v.limit_resource_module_type == 'f3'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def teardown
|
|
45
|
+
cleanup
|
|
46
|
+
super
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_single_bd_member_vni
|
|
50
|
+
mt_full_interface?
|
|
51
|
+
bd = BridgeDomainVNI.new('100')
|
|
52
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
53
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
54
|
+
|
|
55
|
+
vni = '6000'
|
|
56
|
+
bd.member_vni = vni
|
|
57
|
+
assert_equal(vni, bd.member_vni,
|
|
58
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
59
|
+
|
|
60
|
+
bd.member_vni = ''
|
|
61
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
62
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
63
|
+
|
|
64
|
+
bd.destroy
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_multiple_bd_member_vni
|
|
68
|
+
mt_full_interface?
|
|
69
|
+
bd = BridgeDomainVNI.new('100-110, 150, 170-171 ')
|
|
70
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
71
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
72
|
+
|
|
73
|
+
vni = '6000-6010,6050,5070-5071'
|
|
74
|
+
bd.member_vni = vni
|
|
75
|
+
assert_equal(vni, bd.member_vni,
|
|
76
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
77
|
+
|
|
78
|
+
bd.member_vni = ''
|
|
79
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
80
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
81
|
+
|
|
82
|
+
bd.destroy
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_member_vni_empty_assign
|
|
86
|
+
mt_full_interface?
|
|
87
|
+
bd = BridgeDomainVNI.new(100)
|
|
88
|
+
bd.member_vni = ''
|
|
89
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
90
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
91
|
+
bd.destroy
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_overwrite_bd_member_vni
|
|
95
|
+
mt_full_interface?
|
|
96
|
+
bd = BridgeDomainVNI.new('100-110')
|
|
97
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
98
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
99
|
+
|
|
100
|
+
vni = '5000-5010'
|
|
101
|
+
bd.member_vni = vni
|
|
102
|
+
assert_equal(vni, bd.member_vni,
|
|
103
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
104
|
+
|
|
105
|
+
vni = '5000-5005,6006-6010'
|
|
106
|
+
bd.member_vni = vni
|
|
107
|
+
assert_equal(vni, bd.member_vni,
|
|
108
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
109
|
+
|
|
110
|
+
bd.member_vni = ''
|
|
111
|
+
assert_equal(bd.default_member_vni, bd.member_vni,
|
|
112
|
+
'Error: Bridge-Domain is mapped to different vnis')
|
|
113
|
+
|
|
114
|
+
bd.destroy
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Copyright (c) 2013-2016 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 'basetest'
|
|
16
|
+
|
|
17
|
+
require_relative '../lib/cisco_node_utils/client/utils.rb'
|
|
18
|
+
|
|
19
|
+
# TestClientUtils - Minitest for Client utility functions
|
|
20
|
+
class TestClientUtils < Minitest::Test
|
|
21
|
+
def show_run_ospf
|
|
22
|
+
"\
|
|
23
|
+
router ospf foo
|
|
24
|
+
vrf red
|
|
25
|
+
log-adjacency-changes
|
|
26
|
+
router ospf bar
|
|
27
|
+
log-adjacency-changes
|
|
28
|
+
vrf red
|
|
29
|
+
log-adjacency-changes detail
|
|
30
|
+
vrf blue
|
|
31
|
+
!
|
|
32
|
+
router ospf baz
|
|
33
|
+
log-adjacency-changes detail"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_find_subconfig
|
|
37
|
+
result = Cisco::Client.find_subconfig(show_run_ospf, /router ospf bar/)
|
|
38
|
+
assert_equal("\
|
|
39
|
+
log-adjacency-changes
|
|
40
|
+
vrf red
|
|
41
|
+
log-adjacency-changes detail
|
|
42
|
+
vrf blue",
|
|
43
|
+
result)
|
|
44
|
+
|
|
45
|
+
assert_nil(Cisco::Client.find_subconfig(result, /vrf blue/))
|
|
46
|
+
|
|
47
|
+
assert_equal('log-adjacency-changes detail',
|
|
48
|
+
Cisco::Client.find_subconfig(result, /vrf red/))
|
|
49
|
+
|
|
50
|
+
assert_nil(Cisco::Client.find_subconfig(result, /vrf green/))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_filter_cli
|
|
54
|
+
# Unfiltered (no context / values)
|
|
55
|
+
assert_equal(show_run_ospf,
|
|
56
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf))
|
|
57
|
+
# Filtered by context but not by value
|
|
58
|
+
assert_equal("\
|
|
59
|
+
log-adjacency-changes
|
|
60
|
+
vrf red
|
|
61
|
+
log-adjacency-changes detail
|
|
62
|
+
vrf blue",
|
|
63
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
64
|
+
context: [/router ospf bar/]))
|
|
65
|
+
# Filtered by value but not by context
|
|
66
|
+
assert_equal(['router ospf foo', 'router ospf bar', 'router ospf baz'],
|
|
67
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
68
|
+
value: /router ospf .*/))
|
|
69
|
+
# rubocop:disable Style/WordArray
|
|
70
|
+
|
|
71
|
+
# Values with a single match group
|
|
72
|
+
assert_equal(['foo', 'bar', 'baz'],
|
|
73
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
74
|
+
value: /router ospf (.*)/))
|
|
75
|
+
# Values with multiple match groups
|
|
76
|
+
assert_equal([['ospf', 'foo'], ['ospf', 'bar'], ['ospf', 'baz']],
|
|
77
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
78
|
+
value: /router (\S+) (.*)/))
|
|
79
|
+
# rubocop:enable Style/WordArray
|
|
80
|
+
|
|
81
|
+
# Values with a single match group
|
|
82
|
+
# Find an entry in the parent submode, ignoring nested submodes
|
|
83
|
+
assert_equal(
|
|
84
|
+
['log-adjacency-changes'],
|
|
85
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
86
|
+
value: /^log-adjacency-changes.*$/,
|
|
87
|
+
context: [/router ospf bar/]))
|
|
88
|
+
# Find an entry in a nested submode
|
|
89
|
+
assert_equal(
|
|
90
|
+
['log-adjacency-changes detail'],
|
|
91
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
92
|
+
value: /^log-adjacency-changes.*$/,
|
|
93
|
+
context: [/router ospf bar/, /vrf red/]))
|
|
94
|
+
# Submode exists but does not have a match
|
|
95
|
+
assert_nil(
|
|
96
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
97
|
+
value: /^log-adjacency-changes.*$/,
|
|
98
|
+
context: [/router ospf bar/, /vrf blue/]))
|
|
99
|
+
# Submode does not exist
|
|
100
|
+
assert_nil(
|
|
101
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
102
|
+
value: /^log-adjacency-changes.*$/,
|
|
103
|
+
context: [/router ospf bar/, /vrf green/]))
|
|
104
|
+
|
|
105
|
+
# Entry exists in submode only
|
|
106
|
+
assert_nil(
|
|
107
|
+
Cisco::Client.filter_cli(cli_output: show_run_ospf,
|
|
108
|
+
value: /^log-adjacency-changes.*$/,
|
|
109
|
+
context: [/router ospf foo/]))
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -46,7 +46,7 @@ class TestCommandConfig < CiscoTestCase
|
|
|
46
46
|
|
|
47
47
|
def compare_with_results(desired_config_str, current_key)
|
|
48
48
|
retrieve_command = 'show running all'
|
|
49
|
-
running_config_str = node.
|
|
49
|
+
running_config_str = node.get(command: retrieve_command)
|
|
50
50
|
|
|
51
51
|
begin
|
|
52
52
|
should_config = ConfigParser::Configuration.new(desired_config_str)
|
|
@@ -71,7 +71,7 @@ class TestCommandConfig < CiscoTestCase
|
|
|
71
71
|
cfg_string = remove_whitespace(cfg_cmd_str)
|
|
72
72
|
# puts "cfg_string: \n||\n#{cfg_string}||\n"
|
|
73
73
|
begin
|
|
74
|
-
node.
|
|
74
|
+
node.set(values: cfg_string)
|
|
75
75
|
# make sure config is present in success case
|
|
76
76
|
compare_with_results(v1, k)
|
|
77
77
|
rescue CliError => e
|
|
@@ -83,13 +83,17 @@ class TestCommandConfig < CiscoTestCase
|
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
|
|
86
|
+
def loopback
|
|
87
|
+
(platform == :ios_xr) ? 'Loopback' : 'loopback'
|
|
88
|
+
end
|
|
89
|
+
|
|
86
90
|
def build_int_scale_config(add=true)
|
|
87
91
|
add ? s = '' : s = 'no '
|
|
88
92
|
current_interface = 0
|
|
89
93
|
num_interfaces = 1024
|
|
90
94
|
command_list = ''
|
|
91
95
|
while current_interface < num_interfaces
|
|
92
|
-
command_list += "#{s}interface loopback#{current_interface}\n"
|
|
96
|
+
command_list += "#{s}interface #{loopback}#{current_interface}\n"
|
|
93
97
|
current_interface += 1
|
|
94
98
|
end
|
|
95
99
|
command_list
|
|
@@ -100,7 +104,7 @@ class TestCommandConfig < CiscoTestCase
|
|
|
100
104
|
# ---------------------------------------------------------------------------
|
|
101
105
|
|
|
102
106
|
def test_valid_config
|
|
103
|
-
cfg_hash = load_yaml
|
|
107
|
+
cfg_hash = load_yaml[platform.to_s]
|
|
104
108
|
begin
|
|
105
109
|
send_device_config(cfg_hash)
|
|
106
110
|
end
|
|
@@ -144,7 +148,7 @@ class TestCommandConfig < CiscoTestCase
|
|
|
144
148
|
v.each_value do |v1|
|
|
145
149
|
cfg_cmd_str = "#{v1.gsub(/^/, ' ')}\n"
|
|
146
150
|
cfg_string = remove_whitespace(cfg_cmd_str)
|
|
147
|
-
assert_raises(CliError) { node.
|
|
151
|
+
assert_raises(Cisco::CliError) { node.set(values: cfg_string) }
|
|
148
152
|
end
|
|
149
153
|
end
|
|
150
154
|
end
|