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
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
require_relative 'ciscotest'
|
|
16
|
+
require_relative '../lib/cisco_node_utils/bridge_domain'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/encapsulation'
|
|
16
18
|
require_relative '../lib/cisco_node_utils/interface'
|
|
17
19
|
require_relative '../lib/cisco_node_utils/interface_service_vni'
|
|
18
20
|
require_relative '../lib/cisco_node_utils/vdc'
|
|
@@ -33,96 +35,73 @@ include Cisco
|
|
|
33
35
|
# encapsulation profile vni_600_6000 default
|
|
34
36
|
#
|
|
35
37
|
class TestInterfaceServiceVni < CiscoTestCase
|
|
38
|
+
# rubocop:disable Style/ClassVars
|
|
39
|
+
@skip_unless_supported = 'interface_service_vni'
|
|
40
|
+
@@pre_clean_needed = true
|
|
41
|
+
@@intf = nil
|
|
42
|
+
|
|
36
43
|
def setup
|
|
37
44
|
super
|
|
38
|
-
|
|
45
|
+
return unless @@pre_clean_needed
|
|
39
46
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
v = Vdc.new('default')
|
|
43
|
-
v.limit_resource_module_type = '' if v.limit_resource_module_type == 'f3'
|
|
47
|
+
mt_full_env_setup
|
|
48
|
+
@@pre_clean_needed = false
|
|
44
49
|
end
|
|
45
50
|
|
|
46
|
-
def
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
# we will provide an appropriate interface name if the linecard is present.
|
|
50
|
-
# Example 'show mod' output to match against:
|
|
51
|
-
# '9 12 10/40 Gbps Ethernet Module N7K-F312FQ-25 ok'
|
|
52
|
-
sh_mod = @device.cmd("sh mod | i '^[0-9]+.*N7K-F3'")[/^(\d+)\s.*N7K-F3/]
|
|
53
|
-
slot = sh_mod.nil? ? nil : Regexp.last_match[1]
|
|
54
|
-
skip('Unable to find compatible interface in chassis') if slot.nil?
|
|
55
|
-
|
|
56
|
-
"ethernet#{slot}/1"
|
|
51
|
+
def teardown
|
|
52
|
+
config_no_warn("default interface #{@@intf}")
|
|
53
|
+
super
|
|
57
54
|
end
|
|
58
55
|
|
|
59
56
|
def mt_full_env_setup
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
v.limit_resource_module_type == 'f3'
|
|
65
|
-
config("default int #{intf}")
|
|
66
|
-
intf
|
|
57
|
+
@@intf = mt_full_interface?
|
|
58
|
+
Vdc.new('default').limit_resource_module_type = 'f3'
|
|
59
|
+
config_no_warn("default interface #{@@intf}")
|
|
60
|
+
global_setup
|
|
67
61
|
end
|
|
68
62
|
|
|
69
63
|
def global_setup
|
|
70
64
|
# Reset feature to clean up switch
|
|
71
65
|
config('no feature vni', 'feature vni')
|
|
72
66
|
|
|
73
|
-
# Create
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
# Create global encap profiles
|
|
68
|
+
Encapsulation.new('vni_500_5000').dot1q_map = %w(500 5000)
|
|
69
|
+
Encapsulation.new('vni_600_6000').dot1q_map = %w(600 6000)
|
|
70
|
+
Encapsulation.new('vni_700_7000').dot1q_map = %w(700 7000)
|
|
71
|
+
Encapsulation.new('vni_800_8000').dot1q_map = %w(800 8000)
|
|
78
72
|
|
|
79
|
-
#
|
|
80
|
-
|
|
73
|
+
# Create global bridge domains
|
|
74
|
+
remove_all_bridge_domains
|
|
75
|
+
BridgeDomain.new('100-113')
|
|
81
76
|
end
|
|
82
77
|
|
|
83
78
|
def test_create_destroy
|
|
84
|
-
# This property has several dependencies:
|
|
85
|
-
# - VDC support
|
|
86
|
-
# - Specific linecard (F3 or newer)
|
|
87
|
-
# - Bridge Domain Configuration
|
|
88
|
-
# - Feature vni
|
|
89
|
-
|
|
90
|
-
intf = mt_full_env_setup
|
|
91
|
-
global_setup
|
|
92
|
-
|
|
93
79
|
# TEST Create / Destroy and svc_vni_ids hash builder
|
|
94
|
-
i5 = InterfaceServiceVni.new(intf, 5)
|
|
95
|
-
assert_equal(1, InterfaceServiceVni.svc_vni_ids[intf].count)
|
|
96
|
-
i6 = InterfaceServiceVni.new(intf, 6)
|
|
97
|
-
i7 = InterfaceServiceVni.new(intf, 7)
|
|
98
|
-
assert_equal(3, InterfaceServiceVni.svc_vni_ids[intf].count)
|
|
80
|
+
i5 = InterfaceServiceVni.new(@@intf, 5)
|
|
81
|
+
assert_equal(1, InterfaceServiceVni.svc_vni_ids[@@intf].count)
|
|
82
|
+
i6 = InterfaceServiceVni.new(@@intf, 6)
|
|
83
|
+
i7 = InterfaceServiceVni.new(@@intf, 7)
|
|
84
|
+
assert_equal(3, InterfaceServiceVni.svc_vni_ids[@@intf].count)
|
|
99
85
|
i6.destroy
|
|
100
|
-
assert_equal(2, InterfaceServiceVni.svc_vni_ids[intf].count)
|
|
86
|
+
assert_equal(2, InterfaceServiceVni.svc_vni_ids[@@intf].count)
|
|
101
87
|
i5.destroy
|
|
102
88
|
i7.destroy
|
|
103
89
|
end
|
|
104
90
|
|
|
105
91
|
def test_shutdown
|
|
106
|
-
|
|
107
|
-
|
|
92
|
+
i5 = InterfaceServiceVni.new(@@intf, 5)
|
|
93
|
+
assert_equal(i5.default_shutdown, i5.shutdown)
|
|
108
94
|
|
|
109
|
-
i5 = InterfaceServiceVni.new(intf, 5)
|
|
110
|
-
# Test shutdown
|
|
111
95
|
i5.shutdown = false
|
|
112
96
|
refute(i5.shutdown)
|
|
113
97
|
i5.shutdown = true
|
|
114
98
|
assert(i5.shutdown)
|
|
115
|
-
i5.shutdown = false
|
|
116
|
-
refute(i5.shutdown)
|
|
117
|
-
i5.shutdown = i5.default_shutdown
|
|
118
|
-
assert(i5.shutdown)
|
|
119
99
|
end
|
|
120
100
|
|
|
121
101
|
def test_encapsulation_profile_vni
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
i5 = InterfaceServiceVni.new(intf, 5)
|
|
102
|
+
i5 = InterfaceServiceVni.new(@@intf, 5)
|
|
103
|
+
assert_equal(i5.default_encapsulation_profile_vni,
|
|
104
|
+
i5.encapsulation_profile_vni)
|
|
126
105
|
|
|
127
106
|
# Test removal when profile not present
|
|
128
107
|
i5.encapsulation_profile_vni = ''
|
|
@@ -149,16 +128,8 @@ class TestInterfaceServiceVni < CiscoTestCase
|
|
|
149
128
|
def test_vlan_mapping
|
|
150
129
|
# This test covers two properties:
|
|
151
130
|
# vlan_mapping & vlan_mapping_enabled
|
|
152
|
-
#
|
|
153
|
-
# This property has several dependencies:
|
|
154
|
-
# - VDC support
|
|
155
|
-
# - Specific linecard (F3)
|
|
156
|
-
# - Bridge Domain Configuration
|
|
157
|
-
# - Feature vni
|
|
158
|
-
intf = mt_full_env_setup
|
|
159
|
-
global_setup
|
|
160
131
|
|
|
161
|
-
i = Interface.new(intf)
|
|
132
|
+
i = Interface.new(@@intf)
|
|
162
133
|
i.switchport_mode = :trunk
|
|
163
134
|
i.vlan_mapping = []
|
|
164
135
|
assert_equal([], i.vlan_mapping, 'Initial cleanup failed')
|
data/tests/test_interface_svi.rb
CHANGED
|
@@ -20,49 +20,100 @@ include Cisco
|
|
|
20
20
|
# TestSvi - Minitest for Interface configuration of SVI interfaces.
|
|
21
21
|
class TestSvi < CiscoTestCase
|
|
22
22
|
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
23
|
+
attr_reader :svi
|
|
24
|
+
|
|
25
|
+
def self.runnable_methods
|
|
26
|
+
# We don't have a separate YAML file to key off, so we check platform
|
|
27
|
+
return super unless platform == :ios_xr
|
|
28
|
+
remove_method :setup
|
|
29
|
+
remove_method :teardown
|
|
30
|
+
[:xr_unsupported]
|
|
31
|
+
end
|
|
23
32
|
|
|
24
|
-
def
|
|
25
|
-
|
|
26
|
-
next unless int[/vlan/]
|
|
27
|
-
next if int[/vlan1/]
|
|
28
|
-
obj.destroy
|
|
29
|
-
end
|
|
33
|
+
def xr_unsupported
|
|
34
|
+
skip("Skipping #{self.class}; Vlan interfaces are not supported on IOS XR")
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
def setup
|
|
33
38
|
super
|
|
34
39
|
remove_all_svis if @@pre_clean_needed
|
|
35
40
|
@@pre_clean_needed = false # rubocop:disable Style/ClassVars
|
|
41
|
+
@svi = Interface.new('Vlan23')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def remove_all_svis
|
|
45
|
+
Interface.interfaces.each do |int, obj|
|
|
46
|
+
next unless int[/vlan/]
|
|
47
|
+
next if int[/vlan1/]
|
|
48
|
+
obj.destroy
|
|
49
|
+
end
|
|
36
50
|
end
|
|
37
51
|
|
|
38
52
|
def teardown
|
|
39
|
-
super
|
|
40
53
|
remove_all_svis
|
|
54
|
+
config_no_warn('no feature private-vlan')
|
|
55
|
+
super
|
|
41
56
|
end
|
|
42
57
|
|
|
43
|
-
def
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
ref
|
|
58
|
+
def skip_autostate_test?
|
|
59
|
+
skip('svi autostate properties are not supported on this platform') if
|
|
60
|
+
node.product_id =~ /N(5|6)K/
|
|
47
61
|
end
|
|
48
62
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if
|
|
52
|
-
|
|
53
|
-
else
|
|
54
|
-
value = block.call
|
|
55
|
-
assert_equal(expected_result, value, err_msg)
|
|
63
|
+
def system_default_svi_autostate(state='')
|
|
64
|
+
s = config("#{state}system default interface-vlan autostate")
|
|
65
|
+
if s[/Invalid input/] # rubocop:disable Style/GuardClause
|
|
66
|
+
skip("'system default interface-vlan autostate' is not supported")
|
|
56
67
|
end
|
|
57
68
|
end
|
|
58
69
|
|
|
59
|
-
def
|
|
60
|
-
|
|
61
|
-
|
|
70
|
+
def test_private_vlan_mapping
|
|
71
|
+
if validate_property_excluded?('interface',
|
|
72
|
+
'private_vlan_mapping')
|
|
73
|
+
assert_nil(svi.private_vlan_mapping)
|
|
74
|
+
return
|
|
75
|
+
end
|
|
76
|
+
input = %w(10-20 30)
|
|
77
|
+
result = ['10-20,30']
|
|
78
|
+
svi.private_vlan_mapping = input
|
|
79
|
+
assert_equal(result,
|
|
80
|
+
svi.private_vlan_mapping,
|
|
81
|
+
'Error: svi private mapping not configured')
|
|
82
|
+
|
|
83
|
+
input = %w(11-13)
|
|
84
|
+
result = %w(11-13)
|
|
85
|
+
svi.private_vlan_mapping = input
|
|
86
|
+
assert_equal(result,
|
|
87
|
+
svi.private_vlan_mapping,
|
|
88
|
+
'Error: svi private mapping not configured')
|
|
89
|
+
|
|
90
|
+
input = []
|
|
91
|
+
result = []
|
|
92
|
+
svi.private_vlan_mapping = input
|
|
93
|
+
input = svi.private_vlan_mapping
|
|
94
|
+
assert_equal(input, result,
|
|
95
|
+
'Err: wrong config for svi pvlan mapping')
|
|
62
96
|
end
|
|
63
97
|
|
|
64
|
-
def
|
|
65
|
-
|
|
98
|
+
def test_private_vlan_mapping_bad_args
|
|
99
|
+
if validate_property_excluded?('interface',
|
|
100
|
+
'private_vlan_mapping')
|
|
101
|
+
assert_nil(svi.private_vlan_mapping)
|
|
102
|
+
return
|
|
103
|
+
end
|
|
104
|
+
input = %w(10 20)
|
|
105
|
+
result = ['10,20']
|
|
106
|
+
svi.private_vlan_mapping = input
|
|
107
|
+
input = svi.private_vlan_mapping
|
|
108
|
+
assert_equal(result,
|
|
109
|
+
svi.private_vlan_mapping,
|
|
110
|
+
'Error: svi private mapping not configured')
|
|
111
|
+
|
|
112
|
+
input = %w(23)
|
|
113
|
+
assert_raises(RuntimeError,
|
|
114
|
+
'svi pvlan mapping did not raise RuntimeError') do
|
|
115
|
+
svi.private_vlan_mapping = input
|
|
116
|
+
end
|
|
66
117
|
end
|
|
67
118
|
|
|
68
119
|
def test_prop_nil_when_ethernet
|
|
@@ -75,27 +126,23 @@ class TestSvi < CiscoTestCase
|
|
|
75
126
|
end
|
|
76
127
|
|
|
77
128
|
def test_create_valid
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
129
|
+
@default_show_command = 'show run interface all | inc Vlan'
|
|
130
|
+
assert_show_match(pattern: /interface Vlan1/,
|
|
131
|
+
msg: 'Error: Failed to create svi Vlan1')
|
|
132
|
+
|
|
133
|
+
assert_show_match(pattern: /interface Vlan23/,
|
|
134
|
+
msg: 'Error: Failed to create svi Vlan23')
|
|
82
135
|
|
|
83
|
-
cmd = 'interface Vlan23'
|
|
84
|
-
assert(s.include?(cmd), 'Error: Failed to create svi Vlan23')
|
|
85
136
|
svi.destroy
|
|
86
137
|
|
|
87
138
|
# Verify that svi23 got removed now that we invoked svi.destroy
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
refute(s.include?(cmd), 'Error: svi Vlan23 still configured')
|
|
139
|
+
refute_show_match(pattern: /interface Vlan23/,
|
|
140
|
+
msg: 'Error: svi Vlan23 still configured')
|
|
91
141
|
end
|
|
92
142
|
|
|
93
|
-
def
|
|
143
|
+
def test_create_invalid
|
|
94
144
|
assert_raises(CliError) { Interface.new('10.1.1.1') }
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def test_create_vlan_invalid_value
|
|
98
|
-
assert_raises(CliError) { Interface.new('Vlan0') }
|
|
145
|
+
assert_raises(CliError, Cisco::UnsupportedError) { Interface.new('Vlan0') }
|
|
99
146
|
end
|
|
100
147
|
|
|
101
148
|
def test_create_vlan_nil
|
|
@@ -103,106 +150,59 @@ class TestSvi < CiscoTestCase
|
|
|
103
150
|
end
|
|
104
151
|
|
|
105
152
|
def test_name
|
|
106
|
-
svi = Interface.new('Vlan23')
|
|
107
153
|
assert_equal('vlan23', svi.name, 'Error: svi vlan name is wrong')
|
|
108
|
-
svi.destroy
|
|
109
154
|
end
|
|
110
155
|
|
|
111
156
|
def test_assignment
|
|
112
|
-
svi = Interface.new('Vlan23')
|
|
113
157
|
svi.svi_management = true
|
|
114
158
|
assert(svi.svi_management, 'Error: svi svi_management, false')
|
|
115
|
-
svi_extra =
|
|
159
|
+
svi_extra = Interface.new('Vlan23')
|
|
116
160
|
assert(svi_extra.svi_management, 'Error: new svi svi_management, false')
|
|
117
|
-
svi.destroy
|
|
118
161
|
end
|
|
119
162
|
|
|
120
|
-
def
|
|
163
|
+
def test_get_autostate
|
|
121
164
|
skip_autostate_test?
|
|
122
|
-
svi = Interface.new('Vlan23')
|
|
123
165
|
|
|
124
166
|
config('interface vlan 23', 'no autostate')
|
|
125
167
|
refute(svi.svi_autostate, 'Error: svi autostate not correct.')
|
|
126
|
-
svi.destroy
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def test_get_autostate_true
|
|
130
|
-
skip_autostate_test?
|
|
131
|
-
svi = Interface.new('Vlan23')
|
|
132
168
|
|
|
133
169
|
config('interface vlan 23', 'autostate')
|
|
134
170
|
assert(svi.svi_autostate, 'Error: svi autostate not correct.')
|
|
135
|
-
svi.destroy
|
|
136
171
|
end
|
|
137
172
|
|
|
138
|
-
def
|
|
173
|
+
def test_set_autostate
|
|
139
174
|
skip_autostate_test?
|
|
140
|
-
|
|
141
|
-
svi
|
|
142
|
-
assert_result(ref.test_config_result(false),
|
|
143
|
-
'Error: svi autostate not set to false') do
|
|
144
|
-
svi.svi_autostate = false
|
|
145
|
-
end
|
|
146
|
-
svi.destroy
|
|
147
|
-
end
|
|
175
|
+
svi.svi_autostate = false
|
|
176
|
+
refute(svi.svi_autostate, 'Error: svi autostate not set to false')
|
|
148
177
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
svi = Interface.new('Vlan23')
|
|
152
|
-
ref = cmd_ref_autostate
|
|
153
|
-
assert_result(ref.test_config_result(true),
|
|
154
|
-
'Error: svi autostate not set to true') do
|
|
155
|
-
svi.svi_autostate = true
|
|
156
|
-
end
|
|
157
|
-
svi.destroy
|
|
158
|
-
end
|
|
178
|
+
svi.svi_autostate = true
|
|
179
|
+
assert(svi.svi_autostate, 'Error: svi autostate not set to true')
|
|
159
180
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
ref = cmd_ref_autostate
|
|
164
|
-
default_value = ref.default_value
|
|
165
|
-
assert_result(ref.test_config_result(default_value),
|
|
166
|
-
'Error: svi autostate not set to default') do
|
|
167
|
-
svi.svi_autostate = default_value
|
|
168
|
-
end
|
|
169
|
-
svi.destroy
|
|
181
|
+
svi.svi_autostate = svi.default_svi_autostate
|
|
182
|
+
assert_equal(svi.default_svi_autostate, svi.svi_autostate,
|
|
183
|
+
'Error: svi autostate not set to default')
|
|
170
184
|
end
|
|
171
185
|
|
|
172
|
-
def
|
|
173
|
-
svi = Interface.new('Vlan23')
|
|
174
|
-
|
|
186
|
+
def test_get_management
|
|
175
187
|
config('interface vlan 23', 'management')
|
|
176
188
|
|
|
177
189
|
assert(svi.svi_management)
|
|
178
|
-
svi.destroy
|
|
179
190
|
end
|
|
180
191
|
|
|
181
|
-
def
|
|
182
|
-
svi = Interface.new('Vlan23')
|
|
192
|
+
def test_set_management
|
|
183
193
|
svi.svi_management = false
|
|
184
194
|
refute(svi.svi_management)
|
|
185
|
-
svi.destroy
|
|
186
|
-
end
|
|
187
195
|
|
|
188
|
-
def test_set_management_true
|
|
189
|
-
svi = Interface.new('Vlan23')
|
|
190
|
-
svi.svi_management = true
|
|
191
|
-
assert(svi.svi_management)
|
|
192
|
-
svi.destroy
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
def test_set_management_default
|
|
196
|
-
svi = Interface.new('Vlan23')
|
|
197
196
|
svi.svi_management = true
|
|
198
197
|
assert(svi.svi_management)
|
|
199
198
|
|
|
200
199
|
svi.svi_management = svi.default_svi_management
|
|
201
200
|
assert_equal(svi.default_svi_management, svi.svi_management)
|
|
202
|
-
svi.destroy
|
|
203
201
|
end
|
|
204
202
|
|
|
205
203
|
def config_svi_properties(state)
|
|
204
|
+
# We don't want the default vlan23 for this test:
|
|
205
|
+
svi.destroy
|
|
206
206
|
# Skip default vlan1
|
|
207
207
|
(2..6).each do |i|
|
|
208
208
|
svi = Interface.new('Vlan' + i.to_s)
|
|
@@ -234,13 +234,10 @@ class TestSvi < CiscoTestCase
|
|
|
234
234
|
end
|
|
235
235
|
|
|
236
236
|
def test_create_interface_description
|
|
237
|
-
svi = Interface.new('Vlan23')
|
|
238
|
-
|
|
239
237
|
description = 'Test description'
|
|
240
238
|
svi.description = description
|
|
241
239
|
assert_equal(description, svi.description,
|
|
242
240
|
'Error: Description not configured')
|
|
243
|
-
svi.destroy
|
|
244
241
|
end
|
|
245
242
|
|
|
246
243
|
def test_system_default_svi_autostate_on_off
|