cisco_node_utils_mgx 2.1.0.1
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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.rubocop.yml +96 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.md +676 -0
- data/CONTRIBUTING.md +43 -0
- data/Gemfile +10 -0
- data/LICENSE +201 -0
- data/README.md +246 -0
- data/Rakefile +44 -0
- data/SUPPORT.md +3 -0
- data/bin/.rubocop.yml +18 -0
- data/bin/check_metric_limits.rb +109 -0
- data/bin/git/hooks/commit-msg/enforce_style +89 -0
- data/bin/git/hooks/hook_lib +115 -0
- data/bin/git/hooks/hooks-wrapper +38 -0
- data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
- data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
- data/bin/git/hooks/post-flow-release-start/update-version +19 -0
- data/bin/git/hooks/post-merge/update-hooks +6 -0
- data/bin/git/hooks/post-rewrite/update-hooks +6 -0
- data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
- data/bin/git/hooks/pre-commit/rubocop +25 -0
- data/bin/git/hooks/pre-commit/validate-diffs +45 -0
- data/bin/git/hooks/pre-commit/validate-yaml +18 -0
- data/bin/git/hooks/pre-push/check-changelog +24 -0
- data/bin/git/hooks/pre-push/rubocop +7 -0
- data/bin/git/update-hooks +123 -0
- data/bin/show_running_yang.rb +233 -0
- data/cisco_node_utils.gemspec +41 -0
- data/docs/README-develop-best-practices.md +521 -0
- data/docs/README-develop-node-utils-APIs.md +570 -0
- data/docs/README-maintainers.md +77 -0
- data/docs/README-test-execution.md +57 -0
- data/docs/README-utilities.md +14 -0
- data/docs/agent_files.png +0 -0
- data/docs/cisco_node_utils.yaml.example +36 -0
- data/docs/template-router.rb +123 -0
- data/docs/template-test_router.rb +104 -0
- data/ext/mkrf_conf.rb +63 -0
- data/lib/.rubocop.yml +18 -0
- data/lib/cisco_node_utils/aaa_authentication_login.rb +95 -0
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +138 -0
- data/lib/cisco_node_utils/aaa_authorization_service.rb +156 -0
- data/lib/cisco_node_utils/ace.rb +467 -0
- data/lib/cisco_node_utils/acl.rb +101 -0
- data/lib/cisco_node_utils/banner.rb +63 -0
- data/lib/cisco_node_utils/bfd_global.rb +305 -0
- data/lib/cisco_node_utils/bgp.rb +988 -0
- data/lib/cisco_node_utils/bgp_af.rb +545 -0
- data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
- data/lib/cisco_node_utils/bgp_neighbor.rb +527 -0
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +780 -0
- data/lib/cisco_node_utils/bridge_domain.rb +178 -0
- data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +444 -0
- data/lib/cisco_node_utils/client/client.rb +238 -0
- data/lib/cisco_node_utils/client/grpc/client.rb +395 -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/grpc.rb +33 -0
- data/lib/cisco_node_utils/client/nxapi/client.rb +368 -0
- data/lib/cisco_node_utils/client/nxapi.rb +31 -0
- data/lib/cisco_node_utils/client/utils.rb +180 -0
- data/lib/cisco_node_utils/client.rb +35 -0
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +590 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +48 -0
- data/lib/cisco_node_utils/cmd_ref/banner.yaml +11 -0
- data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +383 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +223 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +174 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +236 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +49 -0
- data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +128 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +55 -0
- data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +48 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +183 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +126 -0
- data/lib/cisco_node_utils/cmd_ref/hostname.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/images.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +781 -0
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
- data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +120 -0
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +112 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +87 -0
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +42 -0
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +22 -0
- 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 +24 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +27 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/object_group.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +43 -0
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +86 -0
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +100 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +19 -0
- data/lib/cisco_node_utils/cmd_ref/route_map.yaml +601 -0
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +84 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +81 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +74 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +91 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +57 -0
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +23 -0
- data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
- data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +235 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_facility.yaml +10 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/system.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +37 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +63 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +64 -0
- data/lib/cisco_node_utils/cmd_ref/upgrade.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +52 -0
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +8 -0
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +106 -0
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +233 -0
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +86 -0
- data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +139 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +114 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +71 -0
- data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +68 -0
- data/lib/cisco_node_utils/command_reference.rb +724 -0
- data/lib/cisco_node_utils/configparser_lib.rb +195 -0
- data/lib/cisco_node_utils/constants.rb +40 -0
- data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
- data/lib/cisco_node_utils/dns_domain.rb +93 -0
- data/lib/cisco_node_utils/domain_name.rb +82 -0
- data/lib/cisco_node_utils/encapsulation.rb +112 -0
- data/lib/cisco_node_utils/environment.rb +110 -0
- data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
- data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
- data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
- data/lib/cisco_node_utils/evpn_vni.rb +159 -0
- data/lib/cisco_node_utils/exceptions.rb +140 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +405 -0
- data/lib/cisco_node_utils/fabricpath_topology.rb +137 -0
- data/lib/cisco_node_utils/feature.rb +377 -0
- data/lib/cisco_node_utils/hostname.rb +62 -0
- data/lib/cisco_node_utils/hsrp_global.rb +97 -0
- data/lib/cisco_node_utils/interface.rb +2128 -0
- data/lib/cisco_node_utils/interface_channel_group.rb +142 -0
- data/lib/cisco_node_utils/interface_evpn_multisite.rb +72 -0
- data/lib/cisco_node_utils/interface_hsrp_group.rb +557 -0
- data/lib/cisco_node_utils/interface_ospf.rb +378 -0
- data/lib/cisco_node_utils/interface_portchannel.rb +180 -0
- data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
- data/lib/cisco_node_utils/ip_multicast.rb +90 -0
- data/lib/cisco_node_utils/itd_device_group.rb +228 -0
- data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
- data/lib/cisco_node_utils/itd_service.rb +511 -0
- data/lib/cisco_node_utils/logger.rb +78 -0
- data/lib/cisco_node_utils/name_server.rb +64 -0
- data/lib/cisco_node_utils/node.rb +443 -0
- data/lib/cisco_node_utils/node_util.rb +111 -0
- data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
- data/lib/cisco_node_utils/ntp_config.rb +83 -0
- data/lib/cisco_node_utils/ntp_server.rb +86 -0
- 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/overlay_global.rb +142 -0
- data/lib/cisco_node_utils/pim.rb +131 -0
- data/lib/cisco_node_utils/pim_group_list.rb +109 -0
- data/lib/cisco_node_utils/pim_rp_address.rb +103 -0
- data/lib/cisco_node_utils/platform.rb +217 -0
- data/lib/cisco_node_utils/portchannel_global.rb +347 -0
- data/lib/cisco_node_utils/radius_global.rb +165 -0
- data/lib/cisco_node_utils/radius_server.rb +421 -0
- data/lib/cisco_node_utils/radius_server_group.rb +117 -0
- data/lib/cisco_node_utils/route_map.rb +2540 -0
- data/lib/cisco_node_utils/router_ospf.rb +77 -0
- data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
- data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
- data/lib/cisco_node_utils/router_ospf_vrf.rb +342 -0
- data/lib/cisco_node_utils/snmp_notification_receiver.rb +176 -0
- data/lib/cisco_node_utils/snmpcommunity.rb +109 -0
- data/lib/cisco_node_utils/snmpgroup.rb +54 -0
- data/lib/cisco_node_utils/snmpnotification.rb +57 -0
- data/lib/cisco_node_utils/snmpserver.rb +132 -0
- data/lib/cisco_node_utils/snmpuser.rb +403 -0
- data/lib/cisco_node_utils/span_session.rb +149 -0
- data/lib/cisco_node_utils/stp_global.rb +676 -0
- data/lib/cisco_node_utils/syslog_facility.rb +64 -0
- data/lib/cisco_node_utils/syslog_server.rb +146 -0
- data/lib/cisco_node_utils/syslog_settings.rb +174 -0
- data/lib/cisco_node_utils/tacacs_global.rb +137 -0
- data/lib/cisco_node_utils/tacacs_server.rb +173 -0
- data/lib/cisco_node_utils/tacacs_server_group.rb +149 -0
- data/lib/cisco_node_utils/tacacs_server_host.rb +216 -0
- data/lib/cisco_node_utils/upgrade.rb +122 -0
- data/lib/cisco_node_utils/vdc.rb +118 -0
- data/lib/cisco_node_utils/version.rb +21 -0
- data/lib/cisco_node_utils/vlan.rb +301 -0
- data/lib/cisco_node_utils/vpc.rb +466 -0
- data/lib/cisco_node_utils/vrf.rb +192 -0
- data/lib/cisco_node_utils/vrf_af.rb +327 -0
- data/lib/cisco_node_utils/vtp.rb +125 -0
- data/lib/cisco_node_utils/vxlan_vtep.rb +286 -0
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +331 -0
- data/lib/cisco_node_utils/yang.rb +160 -0
- data/lib/cisco_node_utils/yum.rb +213 -0
- data/lib/cisco_node_utils.rb +21 -0
- 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 +384 -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 +82 -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 +18 -0
- data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
- data/tests/basetest.rb +243 -0
- data/tests/ciscotest.rb +577 -0
- data/tests/cmd_config.yaml +75 -0
- data/tests/cmd_config_invalid.yaml +16 -0
- data/tests/n9000_sample-1.0.0-7.0.3.x86_64.rpm +0 -0
- data/tests/noop.rb +7 -0
- data/tests/platform_info.rb +63 -0
- data/tests/tacacs_server.yaml.example +6 -0
- data/tests/test_aaa_authentication_login.rb +243 -0
- data/tests/test_aaa_authentication_login_service.rb +761 -0
- data/tests/test_aaa_authorization_service.rb +874 -0
- data/tests/test_ace.rb +304 -0
- data/tests/test_acl.rb +185 -0
- data/tests/test_banner.rb +85 -0
- data/tests/test_bfd_global.rb +272 -0
- data/tests/test_bgp_af.rb +875 -0
- data/tests/test_bgp_af_aa.rb +108 -0
- data/tests/test_bgp_neighbor.rb +596 -0
- data/tests/test_bgp_neighbor_af.rb +781 -0
- data/tests/test_bridge_domain.rb +198 -0
- data/tests/test_bridge_domain_vni.rb +109 -0
- data/tests/test_client_utils.rb +111 -0
- data/tests/test_cmn_utils.rb +76 -0
- data/tests/test_command_config.rb +206 -0
- data/tests/test_command_reference.rb +669 -0
- data/tests/test_dhcp_relay_global.rb +286 -0
- data/tests/test_dns_domain.rb +123 -0
- data/tests/test_domain_name.rb +96 -0
- data/tests/test_encapsulation.rb +75 -0
- data/tests/test_evpn_multicast.rb +65 -0
- data/tests/test_evpn_multisite.rb +70 -0
- data/tests/test_evpn_stormcontrol.rb +56 -0
- data/tests/test_evpn_vni.rb +131 -0
- data/tests/test_fabricpath_global.rb +246 -0
- data/tests/test_fabricpath_topology.rb +77 -0
- data/tests/test_feature.rb +272 -0
- data/tests/test_grpc.rb +166 -0
- data/tests/test_hostname.rb +64 -0
- data/tests/test_hsrp_global.rb +79 -0
- data/tests/test_interface.rb +1958 -0
- data/tests/test_interface_bdi.rb +80 -0
- data/tests/test_interface_channel_group.rb +131 -0
- data/tests/test_interface_evpn_multisite.rb +94 -0
- data/tests/test_interface_hsrp.rb +134 -0
- data/tests/test_interface_hsrp_group.rb +570 -0
- data/tests/test_interface_ospf.rb +820 -0
- data/tests/test_interface_portchannel.rb +135 -0
- data/tests/test_interface_private_vlan.rb +365 -0
- data/tests/test_interface_service_vni.rb +203 -0
- data/tests/test_interface_svi.rb +210 -0
- data/tests/test_interface_switchport.rb +468 -0
- data/tests/test_ip_multicast.rb +80 -0
- 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 +314 -0
- data/tests/test_logger.rb +43 -0
- data/tests/test_name_server.rb +94 -0
- data/tests/test_node.rb +50 -0
- data/tests/test_node_ext.rb +406 -0
- data/tests/test_node_util.rb +119 -0
- data/tests/test_ntp_auth_key.rb +77 -0
- data/tests/test_ntp_config.rb +100 -0
- data/tests/test_ntp_server.rb +146 -0
- data/tests/test_nxapi.rb +236 -0
- data/tests/test_object_group.rb +122 -0
- data/tests/test_overlay_global.rb +108 -0
- data/tests/test_pim.rb +203 -0
- data/tests/test_pim_group_list.rb +147 -0
- data/tests/test_pim_rp_address.rb +155 -0
- data/tests/test_platform.rb +254 -0
- data/tests/test_portchannel_global.rb +322 -0
- data/tests/test_radius_global.rb +108 -0
- data/tests/test_radius_server.rb +377 -0
- data/tests/test_radius_server_group.rb +151 -0
- data/tests/test_route_map.rb +1479 -0
- data/tests/test_router_bgp.rb +1325 -0
- data/tests/test_router_ospf.rb +56 -0
- data/tests/test_router_ospf_area.rb +433 -0
- data/tests/test_router_ospf_area_vlink.rb +298 -0
- data/tests/test_router_ospf_vrf.rb +690 -0
- data/tests/test_snmp_notification_receiver.rb +169 -0
- data/tests/test_snmpcommunity.rb +422 -0
- data/tests/test_snmpgroup.rb +71 -0
- data/tests/test_snmpnotification.rb +91 -0
- data/tests/test_snmpserver.rb +251 -0
- data/tests/test_snmpuser.rb +666 -0
- data/tests/test_span_session.rb +155 -0
- data/tests/test_stp_global.rb +575 -0
- data/tests/test_syslog_facility.rb +80 -0
- data/tests/test_syslog_server.rb +119 -0
- data/tests/test_syslog_settings.rb +123 -0
- data/tests/test_tacacs_global.rb +109 -0
- data/tests/test_tacacs_server.rb +436 -0
- data/tests/test_tacacs_server_group.rb +434 -0
- data/tests/test_tacacs_server_host.rb +427 -0
- data/tests/test_upgrade.rb +105 -0
- data/tests/test_vdc.rb +64 -0
- data/tests/test_vlan.rb +386 -0
- data/tests/test_vlan_private.rb +656 -0
- data/tests/test_vpc.rb +548 -0
- data/tests/test_vrf.rb +248 -0
- data/tests/test_vrf_af.rb +288 -0
- data/tests/test_vtp.rb +278 -0
- data/tests/test_vxlan_vtep.rb +327 -0
- data/tests/test_vxlan_vtep_vni.rb +326 -0
- data/tests/test_yang.rb +369 -0
- data/tests/test_yum.rb +109 -0
- data/tests/upgrade_info.yaml.example +3 -0
- data/tests/yum_package.yaml +94 -0
- metadata +534 -0
|
@@ -0,0 +1,210 @@
|
|
|
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/interface'
|
|
17
|
+
|
|
18
|
+
include Cisco
|
|
19
|
+
|
|
20
|
+
# TestSvi - Minitest for Interface configuration of SVI interfaces.
|
|
21
|
+
class TestSvi < CiscoTestCase
|
|
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
|
|
32
|
+
|
|
33
|
+
def xr_unsupported
|
|
34
|
+
skip("Skipping #{self.class}; Vlan interfaces are not supported on IOS XR")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def setup
|
|
38
|
+
super
|
|
39
|
+
remove_all_svis if @@pre_clean_needed
|
|
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
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def teardown
|
|
53
|
+
remove_all_svis
|
|
54
|
+
config_no_warn('no feature private-vlan')
|
|
55
|
+
super
|
|
56
|
+
end
|
|
57
|
+
|
|
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/
|
|
61
|
+
end
|
|
62
|
+
|
|
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")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_prop_nil_when_eth
|
|
71
|
+
skip_autostate_test?
|
|
72
|
+
intf = Interface.new(interfaces[0])
|
|
73
|
+
assert_nil(intf.svi_autostate,
|
|
74
|
+
'Error: svi_autostate should be nil when interface is ethernet')
|
|
75
|
+
assert_nil(intf.svi_management,
|
|
76
|
+
'Error: svi_management should be nil when interface is ethernet')
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_create_valid
|
|
80
|
+
@default_show_command = 'show run interface all | inc Vlan'
|
|
81
|
+
assert_show_match(pattern: /interface Vlan1/,
|
|
82
|
+
msg: 'Error: Failed to create svi Vlan1')
|
|
83
|
+
|
|
84
|
+
assert_show_match(pattern: /interface Vlan23/,
|
|
85
|
+
msg: 'Error: Failed to create svi Vlan23')
|
|
86
|
+
|
|
87
|
+
svi.destroy
|
|
88
|
+
|
|
89
|
+
# Verify that svi23 got removed now that we invoked svi.destroy
|
|
90
|
+
refute_show_match(pattern: /interface Vlan23/,
|
|
91
|
+
msg: 'Error: svi Vlan23 still configured')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_create_invalid
|
|
95
|
+
assert_raises(CliError) { Interface.new('10.1.1.1') }
|
|
96
|
+
assert_raises(CliError, Cisco::UnsupportedError) { Interface.new('Vlan0') }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_create_vlan_nil
|
|
100
|
+
assert_raises(TypeError) { Interface.new(nil) }
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_name
|
|
104
|
+
assert_equal('vlan23', svi.name, 'Error: svi vlan name is wrong')
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_assignment
|
|
108
|
+
svi.svi_management = true
|
|
109
|
+
assert(svi.svi_management, 'Error: svi svi_management, false')
|
|
110
|
+
svi_extra = Interface.new('Vlan23')
|
|
111
|
+
assert(svi_extra.svi_management, 'Error: new svi svi_management, false')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_get_autostate
|
|
115
|
+
# TBD: autostate is also tested in test_interface_switchport.rb so remove
|
|
116
|
+
# tests from one or the other
|
|
117
|
+
skip_autostate_test?
|
|
118
|
+
|
|
119
|
+
config('interface vlan 23', 'no autostate')
|
|
120
|
+
refute(svi.svi_autostate, 'Error: svi autostate not correct.')
|
|
121
|
+
|
|
122
|
+
config('interface vlan 23', 'autostate')
|
|
123
|
+
assert(svi.svi_autostate, 'Error: svi autostate not correct.')
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_set_autostate
|
|
127
|
+
skip_autostate_test?
|
|
128
|
+
svi.svi_autostate = false
|
|
129
|
+
refute(svi.svi_autostate, 'Error: svi autostate not set to false')
|
|
130
|
+
|
|
131
|
+
svi.svi_autostate = true
|
|
132
|
+
assert(svi.svi_autostate, 'Error: svi autostate not set to true')
|
|
133
|
+
|
|
134
|
+
svi.svi_autostate = svi.default_svi_autostate
|
|
135
|
+
assert_equal(svi.default_svi_autostate, svi.svi_autostate,
|
|
136
|
+
'Error: svi autostate not set to default')
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def test_get_management
|
|
140
|
+
config('interface vlan 23', 'management')
|
|
141
|
+
|
|
142
|
+
assert(svi.svi_management)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def test_set_management
|
|
146
|
+
svi.svi_management = false
|
|
147
|
+
refute(svi.svi_management)
|
|
148
|
+
|
|
149
|
+
svi.svi_management = true
|
|
150
|
+
assert(svi.svi_management)
|
|
151
|
+
|
|
152
|
+
svi.svi_management = svi.default_svi_management
|
|
153
|
+
assert_equal(svi.default_svi_management, svi.svi_management)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def config_svi_properties(state)
|
|
157
|
+
# We don't want the default vlan23 for this test:
|
|
158
|
+
svi.destroy
|
|
159
|
+
# Skip default vlan1
|
|
160
|
+
(2..6).each do |i|
|
|
161
|
+
svi = Interface.new('Vlan' + i.to_s)
|
|
162
|
+
svi.svi_autostate = state unless /N(5|6)K/.match(node.product_id)
|
|
163
|
+
svi.svi_management = state
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_get_svis
|
|
168
|
+
config_svi_properties(true)
|
|
169
|
+
Interface.interfaces.each do |id, obj|
|
|
170
|
+
next if id[/vlan1/]
|
|
171
|
+
next unless id[/vlan/]
|
|
172
|
+
unless /N(5|6)K/.match(node.product_id)
|
|
173
|
+
assert(obj.svi_autostate, "svi autostate should be enabled #{id}")
|
|
174
|
+
end
|
|
175
|
+
assert(obj.svi_management, "svi management should be enabled #{id}")
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
config_svi_properties(false)
|
|
179
|
+
Interface.interfaces.each do |id, obj|
|
|
180
|
+
next if id[/vlan1/]
|
|
181
|
+
next unless id[/vlan/]
|
|
182
|
+
unless /N(5|6)K/.match(node.product_id)
|
|
183
|
+
refute(obj.svi_autostate, "svi autostate should be disabled #{id}")
|
|
184
|
+
end
|
|
185
|
+
refute(obj.svi_management, "svi management should be disabled #{id}")
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def test_description
|
|
190
|
+
description = 'Test description'
|
|
191
|
+
svi.description = description
|
|
192
|
+
assert_equal(description, svi.description,
|
|
193
|
+
'Error: Description not configured')
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def test_sys_def_svi_autostate
|
|
197
|
+
skip_autostate_test?
|
|
198
|
+
skip_legacy_defect?('8.0.1|8.1.1|8\.3', 'CSC: Behavior change after helsinki')
|
|
199
|
+
interface = Interface.new(interfaces[0])
|
|
200
|
+
|
|
201
|
+
system_default_svi_autostate('no ')
|
|
202
|
+
refute(interface.system_default_svi_autostate,
|
|
203
|
+
'Test for disabled - failed')
|
|
204
|
+
|
|
205
|
+
# common default is enabled
|
|
206
|
+
system_default_svi_autostate('')
|
|
207
|
+
assert(interface.system_default_svi_autostate,
|
|
208
|
+
'Test for enabled - failed')
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -0,0 +1,468 @@
|
|
|
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/interface'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/vtp'
|
|
18
|
+
|
|
19
|
+
include Cisco
|
|
20
|
+
|
|
21
|
+
# TestInterfaceSwitchport
|
|
22
|
+
# Parent class for specific types of switchport tests (below)
|
|
23
|
+
class TestInterfaceSwitchport < CiscoTestCase
|
|
24
|
+
attr_reader :interface
|
|
25
|
+
|
|
26
|
+
def platform_supports_vtp_switchport_access?
|
|
27
|
+
skip('Platform does not support VTP when switchport mode is access') if
|
|
28
|
+
node.product_id =~ /N(5|6|7)/
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def setup
|
|
32
|
+
super
|
|
33
|
+
config_no_warn('no feature vtp', 'no feature interface-vlan')
|
|
34
|
+
@interface = Interface.new(interfaces[0])
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def teardown
|
|
38
|
+
interface_ethernet_default(interfaces[0])
|
|
39
|
+
super
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def interface_ethernet_default(ethernet_intf)
|
|
43
|
+
config("default interface #{ethernet_intf}")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def mgmt_intf
|
|
47
|
+
if platform == :nexus
|
|
48
|
+
'mgmt0'
|
|
49
|
+
elsif platform == :ios_xr
|
|
50
|
+
'MgmtEth0/RP0/CPU0/0'
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# TestSwitchport - general interface switchport tests.
|
|
56
|
+
class TestSwitchport < TestInterfaceSwitchport
|
|
57
|
+
DEFAULT_IF_ACCESS_VLAN = 1
|
|
58
|
+
DEFAULT_IF_SWITCHPORT_NATIVE_VLAN = 1
|
|
59
|
+
|
|
60
|
+
def system_default_switchport(state='')
|
|
61
|
+
config("#{state} system default switchport")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def system_default_switchport_shutdown(state='')
|
|
65
|
+
config("#{state} system default switchport shutdown")
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_access_vlan
|
|
69
|
+
interface.switchport_mode = :disabled
|
|
70
|
+
if platform == :ios_xr
|
|
71
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
72
|
+
interface.switchport_mode = :access
|
|
73
|
+
end
|
|
74
|
+
assert_nil(interface.access_vlan)
|
|
75
|
+
else
|
|
76
|
+
interface.switchport_mode = :access
|
|
77
|
+
assert_equal(DEFAULT_IF_ACCESS_VLAN, interface.access_vlan)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_access_vlan_sw_disabled
|
|
82
|
+
interface.switchport_mode = :disabled
|
|
83
|
+
assert_nil(interface.access_vlan)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_access_vlan_sw_trunk
|
|
87
|
+
interface.switchport_mode = :disabled
|
|
88
|
+
if platform == :ios_xr
|
|
89
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
90
|
+
interface.switchport_mode = :trunk
|
|
91
|
+
end
|
|
92
|
+
assert_nil(interface.access_vlan)
|
|
93
|
+
else
|
|
94
|
+
interface.switchport_mode = :trunk
|
|
95
|
+
assert_equal(DEFAULT_IF_ACCESS_VLAN, interface.access_vlan)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_sw_vtp_disabled
|
|
100
|
+
refute(interface.switchport_vtp,
|
|
101
|
+
'Error: interface, access, vtp not disabled')
|
|
102
|
+
|
|
103
|
+
# mgmt
|
|
104
|
+
interface = Interface.new(mgmt_intf)
|
|
105
|
+
refute(interface.switchport_vtp,
|
|
106
|
+
'Error: interface, access, vtp not disabled')
|
|
107
|
+
|
|
108
|
+
# no switchport
|
|
109
|
+
interface.switchport_mode = :disabled
|
|
110
|
+
refute(interface.switchport_vtp,
|
|
111
|
+
'Error: interface, access, vtp not disabled')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_sw_vtp_disabled_fex
|
|
115
|
+
if validate_property_excluded?('feature', 'fex')
|
|
116
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
117
|
+
Feature.fex_enable
|
|
118
|
+
end
|
|
119
|
+
return
|
|
120
|
+
end
|
|
121
|
+
if validate_property_excluded?('interface', 'switchport')
|
|
122
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
123
|
+
interface.switchport_mode = :fex_fabric
|
|
124
|
+
end
|
|
125
|
+
return
|
|
126
|
+
end
|
|
127
|
+
interface.switchport_mode = :fex_fabric
|
|
128
|
+
refute(interface.switchport_vtp,
|
|
129
|
+
'Error: interface, access, vtp not disabled')
|
|
130
|
+
rescue Cisco::CliError => e
|
|
131
|
+
incompatible_interface?(e.message)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_sw_autostate_disabled
|
|
135
|
+
refute(interface.switchport_autostate_exclude,
|
|
136
|
+
'Error: interface, access, autostate exclude not disabled')
|
|
137
|
+
|
|
138
|
+
# mgmt
|
|
139
|
+
interface = Interface.new(mgmt_intf)
|
|
140
|
+
refute(interface.switchport_autostate_exclude,
|
|
141
|
+
'Error: interface, access, autostate exclude not disabled')
|
|
142
|
+
|
|
143
|
+
# no switchport
|
|
144
|
+
if platform == :ios_xr
|
|
145
|
+
assert_nil(interface.switchport_autostate_exclude)
|
|
146
|
+
else
|
|
147
|
+
interface.switchport_mode = :disabled
|
|
148
|
+
refute(interface.switchport_autostate_exclude,
|
|
149
|
+
'Error: interface, access, autostate exclude not disabled')
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_sw_mode_disabled
|
|
154
|
+
if platform == :ios_xr
|
|
155
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
156
|
+
interface.switchport_autostate_exclude = true
|
|
157
|
+
end
|
|
158
|
+
else
|
|
159
|
+
interface.switchport_enable(false)
|
|
160
|
+
|
|
161
|
+
assert_raises(RuntimeError) do
|
|
162
|
+
interface.switchport_autostate_exclude = true
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_sw_mode_invalid
|
|
168
|
+
assert_raises(ArgumentError) { interface.switchport_mode = :unknown }
|
|
169
|
+
|
|
170
|
+
interface = Interface.new(mgmt_intf)
|
|
171
|
+
assert_raises(Cisco::CliError, Cisco::UnsupportedError) do
|
|
172
|
+
interface.switchport_mode = :access
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def test_sw_mode_valid
|
|
177
|
+
if platform == :ios_xr
|
|
178
|
+
# We don't support any switchport modes on IOS XR
|
|
179
|
+
# but we allow the user to set :disabled since that's the default.
|
|
180
|
+
interface.switchport_mode = :disabled
|
|
181
|
+
assert_nil(interface.switchport_mode)
|
|
182
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
183
|
+
interface.switchport_mode = :access
|
|
184
|
+
end
|
|
185
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
186
|
+
interface.switchport_mode = :trunk
|
|
187
|
+
end
|
|
188
|
+
assert_nil(interface.switchport_mode)
|
|
189
|
+
return
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
switchport_modes = [
|
|
193
|
+
:unknown,
|
|
194
|
+
:disabled,
|
|
195
|
+
:access,
|
|
196
|
+
:trunk,
|
|
197
|
+
:tunnel,
|
|
198
|
+
]
|
|
199
|
+
|
|
200
|
+
switchport_modes.each do |start|
|
|
201
|
+
switchport_modes.each do |finish|
|
|
202
|
+
next if start == :unknown || finish == :unknown
|
|
203
|
+
begin
|
|
204
|
+
# puts "#{start},#{finish}"
|
|
205
|
+
interface.switchport_mode = start
|
|
206
|
+
assert_equal(start, interface.switchport_mode,
|
|
207
|
+
"Error: Switchport mode, #{start}, not as expected")
|
|
208
|
+
# puts "now finish #{finish}"
|
|
209
|
+
interface.switchport_mode = finish
|
|
210
|
+
assert_equal(finish, interface.switchport_mode,
|
|
211
|
+
"Error: Switchport mode, #{finish}, not as expected")
|
|
212
|
+
rescue Cisco::CliError
|
|
213
|
+
next
|
|
214
|
+
end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def test_sw_mode_valid_fex
|
|
220
|
+
if validate_property_excluded?('feature', 'fex')
|
|
221
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
222
|
+
Feature.fex_enable
|
|
223
|
+
end
|
|
224
|
+
return
|
|
225
|
+
end
|
|
226
|
+
if validate_property_excluded?('interface', 'switchport')
|
|
227
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
228
|
+
interface.switchport_mode = :fex_fabric
|
|
229
|
+
end
|
|
230
|
+
return
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
interface.switchport_mode = :fex_fabric
|
|
234
|
+
rescue Cisco::CliError => e
|
|
235
|
+
incompatible_interface?(e.message)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def test_sw_trunk_allowed_vlan
|
|
239
|
+
if platform == :ios_xr
|
|
240
|
+
assert_nil(interface.default_switchport_trunk_allowed_vlan)
|
|
241
|
+
assert_nil(interface.switchport_trunk_allowed_vlan)
|
|
242
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
243
|
+
interface.switchport_trunk_allowed_vlan = 'all'
|
|
244
|
+
end
|
|
245
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
246
|
+
interface.switchport_trunk_allowed_vlan = '20'
|
|
247
|
+
end
|
|
248
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
249
|
+
interface.switchport_trunk_allowed_vlan = 'none'
|
|
250
|
+
end
|
|
251
|
+
else
|
|
252
|
+
interface.switchport_enable
|
|
253
|
+
interface.switchport_trunk_allowed_vlan = 'all'
|
|
254
|
+
assert_equal(interface.default_switchport_trunk_allowed_vlan,
|
|
255
|
+
interface.switchport_trunk_allowed_vlan)
|
|
256
|
+
|
|
257
|
+
interface.switchport_trunk_allowed_vlan = '20'
|
|
258
|
+
assert_equal('20', interface.switchport_trunk_allowed_vlan)
|
|
259
|
+
|
|
260
|
+
interface.switchport_trunk_allowed_vlan = '30'
|
|
261
|
+
assert_equal('30', interface.switchport_trunk_allowed_vlan)
|
|
262
|
+
|
|
263
|
+
interface.switchport_trunk_allowed_vlan =
|
|
264
|
+
interface.default_switchport_trunk_allowed_vlan
|
|
265
|
+
assert_equal(interface.default_switchport_trunk_allowed_vlan,
|
|
266
|
+
interface.switchport_trunk_allowed_vlan)
|
|
267
|
+
|
|
268
|
+
interface.switchport_trunk_allowed_vlan = 'none'
|
|
269
|
+
assert_equal('none', interface.switchport_trunk_allowed_vlan)
|
|
270
|
+
|
|
271
|
+
interface.switchport_trunk_allowed_vlan = '20, 30'
|
|
272
|
+
assert_equal('20,30', interface.switchport_trunk_allowed_vlan)
|
|
273
|
+
|
|
274
|
+
# Some images have behavior where 'vlan add' is separate line
|
|
275
|
+
# This behavior is triggered for vlan ranges that exceed character limit
|
|
276
|
+
vlans = '500-528,530,532,534,587,590-593,597-598,600,602,604'
|
|
277
|
+
interface.switchport_trunk_allowed_vlan = vlans
|
|
278
|
+
assert_equal(vlans, interface.switchport_trunk_allowed_vlan)
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def test_sw_trunk_native_vlan
|
|
283
|
+
if platform == :ios_xr
|
|
284
|
+
assert_nil(interface.switchport_trunk_native_vlan)
|
|
285
|
+
assert_nil(interface.default_switchport_trunk_native_vlan)
|
|
286
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
287
|
+
interface.switchport_trunk_native_vlan = 20
|
|
288
|
+
end
|
|
289
|
+
else
|
|
290
|
+
interface.switchport_enable
|
|
291
|
+
|
|
292
|
+
interface.switchport_trunk_native_vlan = 20
|
|
293
|
+
assert_equal(20, interface.switchport_trunk_native_vlan)
|
|
294
|
+
|
|
295
|
+
interface.switchport_trunk_native_vlan = 30
|
|
296
|
+
assert_equal(30, interface.switchport_trunk_native_vlan)
|
|
297
|
+
|
|
298
|
+
interface.switchport_trunk_native_vlan =
|
|
299
|
+
interface.default_switchport_trunk_native_vlan
|
|
300
|
+
assert_equal(DEFAULT_IF_SWITCHPORT_NATIVE_VLAN,
|
|
301
|
+
interface.switchport_trunk_native_vlan)
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def test_sys_def_sw_on_off
|
|
306
|
+
if platform == :nexus
|
|
307
|
+
system_default_switchport('')
|
|
308
|
+
assert(interface.system_default_switchport,
|
|
309
|
+
'Test for enabled - failed')
|
|
310
|
+
|
|
311
|
+
# common default is "no switch"
|
|
312
|
+
system_default_switchport('no ')
|
|
313
|
+
end
|
|
314
|
+
refute(interface.system_default_switchport,
|
|
315
|
+
'Test for disabled - failed')
|
|
316
|
+
rescue RuntimeError => e
|
|
317
|
+
skip('NX-OS defect: system default switchport nvgens twice') if
|
|
318
|
+
e.message[/Expected zero.one value/]
|
|
319
|
+
flunk(e.message)
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
def test_sys_def_sw_shut_on_off
|
|
323
|
+
if platform == :nexus
|
|
324
|
+
system_default_switchport_shutdown('no ')
|
|
325
|
+
refute(interface.system_default_switchport_shutdown,
|
|
326
|
+
'Test for disabled - failed')
|
|
327
|
+
|
|
328
|
+
# common default is "shutdown"
|
|
329
|
+
system_default_switchport_shutdown('')
|
|
330
|
+
end
|
|
331
|
+
assert(interface.system_default_switchport_shutdown,
|
|
332
|
+
'Test for enabled - failed')
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def test_svi_cmd_on_non_vlan
|
|
336
|
+
assert_raises(RuntimeError) { interface.svi_autostate = true }
|
|
337
|
+
assert_raises(RuntimeError) { interface.svi_management = true }
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# TestInterfaceSwitchportSvi
|
|
342
|
+
# Minitest for Interface switchport configuration in combo with interface-vlan
|
|
343
|
+
# Not applicable to IOS XR
|
|
344
|
+
class TestInterfaceSwSvi < TestInterfaceSwitchport
|
|
345
|
+
attr_reader :svi
|
|
346
|
+
|
|
347
|
+
def setup
|
|
348
|
+
super
|
|
349
|
+
skip('VLAN interfaces are not supported on IOS XR') if platform == :ios_xr
|
|
350
|
+
@svi = Interface.new('Vlan23')
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
def teardown
|
|
354
|
+
svi.destroy unless platform == :ios_xr || svi.nil?
|
|
355
|
+
super
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
def test_sw_autostate
|
|
359
|
+
i = interface
|
|
360
|
+
if validate_property_excluded?('interface', 'switchport_autostate_exclude')
|
|
361
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
362
|
+
i.switchport_autostate_exclude = false
|
|
363
|
+
end
|
|
364
|
+
return
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
default = i.default_switchport_autostate_exclude
|
|
368
|
+
|
|
369
|
+
# access
|
|
370
|
+
i.switchport_mode = :access
|
|
371
|
+
assert_equal(default, i.switchport_autostate_exclude)
|
|
372
|
+
|
|
373
|
+
i.switchport_autostate_exclude = true
|
|
374
|
+
assert(i.switchport_autostate_exclude)
|
|
375
|
+
|
|
376
|
+
i.switchport_autostate_exclude = false
|
|
377
|
+
refute(i.switchport_autostate_exclude)
|
|
378
|
+
|
|
379
|
+
i.switchport_autostate_exclude = default
|
|
380
|
+
assert_equal(default, i.switchport_autostate_exclude)
|
|
381
|
+
|
|
382
|
+
# trunk
|
|
383
|
+
i.switchport_mode = :trunk
|
|
384
|
+
i.switchport_autostate_exclude = true
|
|
385
|
+
assert(i.switchport_autostate_exclude)
|
|
386
|
+
|
|
387
|
+
i.switchport_autostate_exclude = false
|
|
388
|
+
refute(i.switchport_autostate_exclude)
|
|
389
|
+
|
|
390
|
+
i.switchport_autostate_exclude = default
|
|
391
|
+
assert_equal(default, i.switchport_autostate_exclude)
|
|
392
|
+
|
|
393
|
+
# disabled
|
|
394
|
+
interface.switchport_mode = :disabled
|
|
395
|
+
assert_raises RuntimeError do
|
|
396
|
+
interface.switchport_autostate_exclude = true
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
assert_raises RuntimeError do
|
|
400
|
+
interface.switchport_autostate_exclude = false
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
# TestInterfaceSwitchportVtp
|
|
406
|
+
# Minitest for Interface switchport configuration in combo with Vtp class
|
|
407
|
+
# Not applicable to IOS XR
|
|
408
|
+
class TestInterfaceSwVtp < TestInterfaceSwitchport
|
|
409
|
+
attr_reader :vtp
|
|
410
|
+
|
|
411
|
+
def setup
|
|
412
|
+
super
|
|
413
|
+
skip('VTP is not supported on IOS XR or fretta') if
|
|
414
|
+
platform == :ios_xr || product_tag[/n(3|9)k-f/]
|
|
415
|
+
@vtp = Vtp.new(true)
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def teardown
|
|
419
|
+
vtp.destroy unless platform == :ios_xr || product_tag[/n(3|9)k-f/]
|
|
420
|
+
super
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
def test_mode_access
|
|
424
|
+
# Basic test
|
|
425
|
+
refute(interface.switchport_vtp,
|
|
426
|
+
'Error: interface, access, vtp not disabled')
|
|
427
|
+
|
|
428
|
+
# Now :access
|
|
429
|
+
platform_supports_vtp_switchport_access?
|
|
430
|
+
interface.switchport_mode = :access
|
|
431
|
+
|
|
432
|
+
default = interface.default_switchport_vtp
|
|
433
|
+
assert_equal(default, interface.switchport_vtp)
|
|
434
|
+
|
|
435
|
+
interface.switchport_vtp = true
|
|
436
|
+
assert(interface.switchport_vtp)
|
|
437
|
+
|
|
438
|
+
interface.switchport_vtp = false
|
|
439
|
+
refute(interface.switchport_vtp)
|
|
440
|
+
|
|
441
|
+
interface.switchport_vtp = default
|
|
442
|
+
assert_equal(default, interface.switchport_vtp)
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def test_mode_trunk
|
|
446
|
+
platform_supports_vtp_switchport_access?
|
|
447
|
+
interface.switchport_mode = :trunk
|
|
448
|
+
|
|
449
|
+
default = interface.default_switchport_vtp
|
|
450
|
+
assert_equal(default, interface.switchport_vtp)
|
|
451
|
+
|
|
452
|
+
interface.switchport_vtp = true
|
|
453
|
+
assert(interface.switchport_vtp)
|
|
454
|
+
|
|
455
|
+
interface.switchport_vtp = false
|
|
456
|
+
refute(interface.switchport_vtp)
|
|
457
|
+
|
|
458
|
+
interface.switchport_vtp = default
|
|
459
|
+
assert_equal(default, interface.switchport_vtp)
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
def test_mode_disabled
|
|
463
|
+
platform_supports_vtp_switchport_access?
|
|
464
|
+
interface.switchport_mode = :disabled
|
|
465
|
+
refute(interface.switchport_vtp,
|
|
466
|
+
'Error: interface, access, vtp is enabled')
|
|
467
|
+
end
|
|
468
|
+
end
|