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
data/tests/test_vtp.rb
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
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/vtp'
|
|
17
|
+
|
|
18
|
+
# TestVtp - Minitest for Vtp node utility class
|
|
19
|
+
class TestVtp < CiscoTestCase
|
|
20
|
+
@skip_unless_supported = 'vtp'
|
|
21
|
+
|
|
22
|
+
def setup
|
|
23
|
+
super
|
|
24
|
+
config('no feature vtp')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def teardown
|
|
28
|
+
config('no feature vtp')
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def vtp_domain(domain)
|
|
33
|
+
vtp = Vtp.new
|
|
34
|
+
vtp.domain = domain
|
|
35
|
+
vtp
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_disabled
|
|
39
|
+
vtp = Vtp.new(false)
|
|
40
|
+
assert_empty(vtp.domain)
|
|
41
|
+
assert_equal(vtp.default_password, vtp.password)
|
|
42
|
+
assert_equal(vtp.default_filename, vtp.filename)
|
|
43
|
+
assert_equal(vtp.default_version, vtp.version)
|
|
44
|
+
refute(Feature.vtp_enabled?, 'VTP feature was unexpectedly enabled?')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_enabled_but_no_domain
|
|
48
|
+
vtp = Vtp.new(false)
|
|
49
|
+
config('feature vtp')
|
|
50
|
+
assert(Feature.vtp_enabled?)
|
|
51
|
+
assert_empty(vtp.domain)
|
|
52
|
+
assert_equal(vtp.default_password, vtp.password)
|
|
53
|
+
assert_equal(vtp.default_filename, vtp.filename)
|
|
54
|
+
assert_equal(vtp.default_version, vtp.version)
|
|
55
|
+
# Can set these without setting domain
|
|
56
|
+
vtp.filename = 'bootflash:/foo.bar'
|
|
57
|
+
assert_equal('bootflash:/foo.bar', vtp.filename)
|
|
58
|
+
vtp.version = 1
|
|
59
|
+
assert_equal(1, vtp.version)
|
|
60
|
+
# Can't set any of the below without setting a domain first
|
|
61
|
+
assert_raises(CliError) do
|
|
62
|
+
vtp.password = 'hello'
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_domain_enable_disable
|
|
67
|
+
assert_empty(Vtp.domain)
|
|
68
|
+
vtp = vtp_domain('enable')
|
|
69
|
+
assert_equal('enable', Vtp.domain)
|
|
70
|
+
vtp.destroy
|
|
71
|
+
assert_empty(Vtp.domain)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_create_valid
|
|
75
|
+
vtp = vtp_domain('accounting')
|
|
76
|
+
assert_equal('accounting', vtp.domain)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_domain_name_change
|
|
80
|
+
vtp = vtp_domain('accounting')
|
|
81
|
+
vtp_domain('uplink')
|
|
82
|
+
assert_equal('uplink', vtp.domain,
|
|
83
|
+
'Error: vtp domain name incorrect')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_negative
|
|
87
|
+
assert_raises(ArgumentError) { vtp_domain(nil) }
|
|
88
|
+
assert_raises(ArgumentError) { vtp_domain('') }
|
|
89
|
+
|
|
90
|
+
vtp = vtp_domain('accounting')
|
|
91
|
+
|
|
92
|
+
# Set password to nil
|
|
93
|
+
assert_raises(TypeError) { vtp.password = nil }
|
|
94
|
+
|
|
95
|
+
# Password too long
|
|
96
|
+
password = 'a' * (Vtp::MAX_VTP_PASSWORD_SIZE + 1)
|
|
97
|
+
assert_raises(ArgumentError) { vtp.password = password }
|
|
98
|
+
|
|
99
|
+
# Set filename to nil
|
|
100
|
+
assert_raises(TypeError) { vtp.filename = nil }
|
|
101
|
+
|
|
102
|
+
# Invalid version
|
|
103
|
+
assert_raises(Cisco::CliError) { vtp.version = 34 }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_assignment
|
|
107
|
+
vtp = vtp_domain('accounting')
|
|
108
|
+
vtp.password = 'copy_test'
|
|
109
|
+
assert_equal('copy_test', vtp.password,
|
|
110
|
+
'Error: vtp password not set')
|
|
111
|
+
vtp_extra = vtp
|
|
112
|
+
assert_equal('copy_test', vtp_extra.password,
|
|
113
|
+
'Error: vtp password not set')
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_domain_get
|
|
117
|
+
vtp = vtp_domain('accounting')
|
|
118
|
+
assert_equal('accounting', vtp.domain,
|
|
119
|
+
'Error: vtp domain incorrect')
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_password_default
|
|
123
|
+
vtp = vtp_domain('accounting')
|
|
124
|
+
vtp.password = 'test_me'
|
|
125
|
+
assert_equal('test_me', vtp.password,
|
|
126
|
+
'Error: vtp password not correct')
|
|
127
|
+
|
|
128
|
+
vtp.password = vtp.default_password
|
|
129
|
+
assert_equal(node.config_get_default('vtp', 'password'), vtp.password,
|
|
130
|
+
'Error: vtp password not correct')
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def test_password_zero_length
|
|
134
|
+
vtp = vtp_domain('accounting')
|
|
135
|
+
vtp.password = ''
|
|
136
|
+
assert_equal('', vtp.password,
|
|
137
|
+
'Error: vtp password not empty')
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_password_get
|
|
141
|
+
vtp = vtp_domain('accounting')
|
|
142
|
+
|
|
143
|
+
config('vtp password cisco123')
|
|
144
|
+
assert_equal('cisco123', vtp.password,
|
|
145
|
+
'Error: vtp password not correct')
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_password_get_not_set
|
|
149
|
+
vtp = vtp_domain('accounting')
|
|
150
|
+
assert_equal('', vtp.password,
|
|
151
|
+
'Error: vtp password not empty')
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_password_clear
|
|
155
|
+
vtp = vtp_domain('accounting')
|
|
156
|
+
vtp.password = 'cisco123'
|
|
157
|
+
assert_equal('cisco123', vtp.password,
|
|
158
|
+
'Error: vtp password not set')
|
|
159
|
+
|
|
160
|
+
vtp.password = ''
|
|
161
|
+
assert_equal('', vtp.password,
|
|
162
|
+
'Error: vtp default password not set')
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def test_password_valid
|
|
166
|
+
vtp = vtp_domain('accounting')
|
|
167
|
+
alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789'
|
|
168
|
+
password = ''
|
|
169
|
+
1.upto(Vtp::MAX_VTP_PASSWORD_SIZE - 1) do |i|
|
|
170
|
+
password += alphabet[i % alphabet.size, 1]
|
|
171
|
+
vtp.password = password
|
|
172
|
+
assert_equal(password.rstrip, vtp.password,
|
|
173
|
+
'Error: vtp password not set')
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# this fails on n7k running 7.3(0)D1.1 image but it
|
|
178
|
+
# is fixed in some later releases. The bugID is CSCuy87970
|
|
179
|
+
# which is already verified.
|
|
180
|
+
def test_password_special_characters
|
|
181
|
+
skip_legacy_defect?('7.3.[012].(N1|D1)',
|
|
182
|
+
'CSCuy87970: NXAPI incorrect backslash escape')
|
|
183
|
+
# N6k output may triple-escape forward slashes. For now simplify pattern.
|
|
184
|
+
test_pass = node.product_id[/N[56]/] ? 'hello!//#%$x' : 'hello!//\\#%$x'
|
|
185
|
+
vtp = vtp_domain('password')
|
|
186
|
+
vtp.password = test_pass
|
|
187
|
+
assert_equal(test_pass, vtp.password)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def test_filename_valid
|
|
191
|
+
vtp = vtp_domain('accounting')
|
|
192
|
+
vtp.filename = 'bootflash:/test.dat'
|
|
193
|
+
assert_equal('bootflash:/test.dat', vtp.filename,
|
|
194
|
+
'Error: vtp file content wrong')
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def test_filename_zero_length
|
|
198
|
+
vtp = vtp_domain('accounting')
|
|
199
|
+
vtp.filename = vtp.default_filename
|
|
200
|
+
assert_equal(node.config_get_default('vtp', 'filename'), vtp.filename,
|
|
201
|
+
'Error: vtp file content wrong')
|
|
202
|
+
|
|
203
|
+
# send in 'no' to remove the config. That will cause the default
|
|
204
|
+
# to get reapplied.
|
|
205
|
+
vtp.filename = ''
|
|
206
|
+
assert_equal(node.config_get_default('vtp', 'filename'), vtp.filename,
|
|
207
|
+
'Error: vtp file content wrong')
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def test_filename_auto_enable
|
|
211
|
+
vtp = Vtp.new(false)
|
|
212
|
+
refute(Feature.vtp_enabled?, 'VTP should not be enabled')
|
|
213
|
+
vtp.filename = 'bootflash:/foo.bar'
|
|
214
|
+
assert(Feature.vtp_enabled?)
|
|
215
|
+
assert_equal('bootflash:/foo.bar', vtp.filename)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def test_version_valid
|
|
219
|
+
vtp = vtp_domain('accounting')
|
|
220
|
+
vtp.version = vtp.default_version
|
|
221
|
+
assert_equal(node.config_get_default('vtp', 'version'), vtp.version,
|
|
222
|
+
'Error: vtp version not default')
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def test_version3_valid
|
|
226
|
+
vtp = vtp_domain('accounting')
|
|
227
|
+
|
|
228
|
+
ref = cmd_ref.lookup('vtp', 'version')
|
|
229
|
+
assert(ref, 'Error, reference not found for vtp version3')
|
|
230
|
+
|
|
231
|
+
case node.product_id
|
|
232
|
+
when /N(5|6|7)K/
|
|
233
|
+
vtp.version = 3
|
|
234
|
+
assert_equal(vtp.version, 3)
|
|
235
|
+
else
|
|
236
|
+
assert_raises(Cisco::CliError) { vtp.version = 3 }
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# Decides whether to check for a raised Exception or an equal value.
|
|
241
|
+
def assert_result(expected_result, err_msg, &block)
|
|
242
|
+
if /Error/ =~ expected_result.to_s
|
|
243
|
+
if expected_result.is_a?(String)
|
|
244
|
+
expected_result = Object.const_get(expected_result)
|
|
245
|
+
end
|
|
246
|
+
assert_raises(expected_result, &block)
|
|
247
|
+
else
|
|
248
|
+
value = block.call
|
|
249
|
+
assert_equal(expected_result, value, err_msg)
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def test_version_default
|
|
254
|
+
vtp = vtp_domain('accounting')
|
|
255
|
+
vtp.version = 2
|
|
256
|
+
assert_equal(2, vtp.version,
|
|
257
|
+
'Error: vtp version not correct')
|
|
258
|
+
vtp.version = vtp.default_version
|
|
259
|
+
assert_equal(node.config_get_default('vtp', 'version'), vtp.version,
|
|
260
|
+
'Error: vtp version not default')
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def test_version_auto_enable
|
|
264
|
+
vtp = Vtp.new(false)
|
|
265
|
+
refute(Feature.vtp_enabled?, 'VTP should not be enabled')
|
|
266
|
+
vtp.version = 1
|
|
267
|
+
assert(Feature.vtp_enabled?)
|
|
268
|
+
assert_equal(1, vtp.version)
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def test_feature_enable_disable
|
|
272
|
+
Feature.vtp_enable
|
|
273
|
+
assert(Feature.vtp_enabled?, 'Error: vtp is not enabled')
|
|
274
|
+
|
|
275
|
+
Feature.vtp_disable
|
|
276
|
+
refute(Feature.vtp_enabled?, 'Error: vtp is not disabled')
|
|
277
|
+
end
|
|
278
|
+
end
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
# Copyright (c) 2013-2018 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/feature'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/vxlan_vtep'
|
|
18
|
+
require_relative '../lib/cisco_node_utils/vdc'
|
|
19
|
+
require_relative '../lib/cisco_node_utils/evpn_multisite'
|
|
20
|
+
|
|
21
|
+
include Cisco
|
|
22
|
+
|
|
23
|
+
# TestVxlanVtep - Minitest for VxlanVtep node utility
|
|
24
|
+
class TestVxlanVtep < CiscoTestCase
|
|
25
|
+
@skip_unless_supported = 'vxlan_vtep'
|
|
26
|
+
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
27
|
+
@@feature_unsupported = false # rubocop:disable Style/ClassVars
|
|
28
|
+
|
|
29
|
+
def setup
|
|
30
|
+
super
|
|
31
|
+
skip('setup: Feature is unsupported on this device') if @@feature_unsupported
|
|
32
|
+
skip('Platform does not support MT-full or MT-lite') unless
|
|
33
|
+
VxlanVtep.mt_full_support || VxlanVtep.mt_lite_support
|
|
34
|
+
Interface.interfaces(:nve).each { |_nve, obj| obj.destroy }
|
|
35
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
36
|
+
feature_cleanup if @@pre_clean_needed
|
|
37
|
+
Feature.nv_overlay_enable
|
|
38
|
+
@@pre_clean_needed = false # rubocop:disable Style/ClassVars
|
|
39
|
+
rescue RuntimeError => e
|
|
40
|
+
# Skip locally to shortcut the dependencies above for the next test
|
|
41
|
+
@@feature_unsupported = hardware_supports_feature?(e.message, status_only: true) # rubocop:disable Style/ClassVars
|
|
42
|
+
@@feature_unsupported ? skip(e.message) : raise(e.message)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def teardown
|
|
46
|
+
if first_or_last_teardown
|
|
47
|
+
vdc_limit_f3_no_intf_needed(:clear)
|
|
48
|
+
feature_cleanup
|
|
49
|
+
end
|
|
50
|
+
super
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def feature_cleanup
|
|
54
|
+
config_no_warn('no feature-set fabricpath')
|
|
55
|
+
config_no_warn('no feature vni')
|
|
56
|
+
config_no_warn('no feature vn-segment-vlan-based')
|
|
57
|
+
config_no_warn('no nv overlay evpn ; no feature nv overlay')
|
|
58
|
+
# Rapid nv feature toggle can cause failures on some platforms;
|
|
59
|
+
# symptom e.g. 'show runn | i ^feature' will hang
|
|
60
|
+
sleep 5
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_create_destroy_one
|
|
64
|
+
# VxlanVtep.new() will enable 'feature nv overlay'
|
|
65
|
+
id = 'nve1'
|
|
66
|
+
vtep = VxlanVtep.new(id)
|
|
67
|
+
@default_show_command = "show running | i 'interface #{id}'"
|
|
68
|
+
|
|
69
|
+
assert_show_match(pattern: /^interface #{id}$/,
|
|
70
|
+
msg: "failed to create interface #{id}")
|
|
71
|
+
|
|
72
|
+
assert_includes(Cisco::VxlanVtep.vteps, id)
|
|
73
|
+
assert_equal(Cisco::VxlanVtep.vteps[id], vtep)
|
|
74
|
+
|
|
75
|
+
vtep.destroy
|
|
76
|
+
refute_show_match(pattern: /^interface #{id}$/,
|
|
77
|
+
msg: "failed to destroy interface #{id}")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_mt_full_create_destroy_multiple
|
|
81
|
+
skip('Platform does not support MT-full') unless VxlanVtep.mt_full_support
|
|
82
|
+
|
|
83
|
+
id1 = 'nve1'
|
|
84
|
+
id2 = 'nve2'
|
|
85
|
+
id3 = 'nve3'
|
|
86
|
+
id4 = 'nve4'
|
|
87
|
+
vtep1 = VxlanVtep.new(id1)
|
|
88
|
+
vtep2 = VxlanVtep.new(id2)
|
|
89
|
+
vtep3 = VxlanVtep.new(id3)
|
|
90
|
+
vtep4 = VxlanVtep.new(id4)
|
|
91
|
+
|
|
92
|
+
[id1, id2, id3, id4].each do |id|
|
|
93
|
+
assert_show_match(command: "show running | i 'interface #{id}'",
|
|
94
|
+
pattern: /^interface #{id}$/,
|
|
95
|
+
msg: "failed to create interface #{id}")
|
|
96
|
+
assert_includes(Cisco::VxlanVtep.vteps, id)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
vtep1.destroy
|
|
100
|
+
vtep2.destroy
|
|
101
|
+
vtep3.destroy
|
|
102
|
+
vtep4.destroy
|
|
103
|
+
|
|
104
|
+
[id1, id2, id3, id4].each do |id|
|
|
105
|
+
refute_show_match(command: "show running | i 'interface #{id}'",
|
|
106
|
+
pattern: /^interface #{id}$/,
|
|
107
|
+
msg: "failed to create interface #{id}")
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_create_negative
|
|
112
|
+
# MT-lite supports a single nve int, MT-full supports 4.
|
|
113
|
+
if VxlanVtep.mt_lite_support
|
|
114
|
+
VxlanVtep.new('nve1')
|
|
115
|
+
negative_id = 'nve2'
|
|
116
|
+
|
|
117
|
+
elsif VxlanVtep.mt_full_support
|
|
118
|
+
(1..4).each { |n| VxlanVtep.new("nve#{n}") }
|
|
119
|
+
negative_id = 'nve5'
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
assert_raises(CliError) do
|
|
123
|
+
VxlanVtep.new(negative_id)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_description
|
|
128
|
+
vtep = VxlanVtep.new('nve1')
|
|
129
|
+
|
|
130
|
+
# Set description to non-default value and verify
|
|
131
|
+
desc = 'vxlan interface'
|
|
132
|
+
vtep.description = desc
|
|
133
|
+
assert_equal(desc, vtep.description)
|
|
134
|
+
|
|
135
|
+
# Set description to default value and verify
|
|
136
|
+
desc = vtep.default_description
|
|
137
|
+
vtep.description = desc
|
|
138
|
+
assert_equal(desc, vtep.description)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_host_reachability
|
|
142
|
+
skip("Test not supported on #{node.product_id}") if
|
|
143
|
+
cmd_ref.lookup('vxlan_vtep', 'host_reachability').default_value.nil?
|
|
144
|
+
|
|
145
|
+
vtep = VxlanVtep.new('nve1')
|
|
146
|
+
|
|
147
|
+
vtep.host_reachability = 'flood'
|
|
148
|
+
assert_equal('flood', vtep.host_reachability)
|
|
149
|
+
vtep.host_reachability = 'evpn'
|
|
150
|
+
assert_equal('evpn', vtep.host_reachability)
|
|
151
|
+
|
|
152
|
+
# Set value back to flood, currently evpn.
|
|
153
|
+
vtep.host_reachability = 'flood'
|
|
154
|
+
assert_equal('flood', vtep.host_reachability)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def test_shutdown
|
|
158
|
+
vtep = VxlanVtep.new('nve1')
|
|
159
|
+
|
|
160
|
+
vtep.shutdown = true
|
|
161
|
+
assert(vtep.shutdown, 'source_interface is not shutdown')
|
|
162
|
+
|
|
163
|
+
vtep.shutdown = false
|
|
164
|
+
refute(vtep.shutdown, 'source_interface is shutdown')
|
|
165
|
+
|
|
166
|
+
vtep.shutdown = vtep.default_shutdown
|
|
167
|
+
assert(vtep.shutdown, 'source_interface is not shutdown')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_source_interface
|
|
171
|
+
vtep = VxlanVtep.new('nve1')
|
|
172
|
+
|
|
173
|
+
# Set source_interface to non-default value
|
|
174
|
+
val = 'loopback55'
|
|
175
|
+
vtep.source_interface = val
|
|
176
|
+
assert_equal(val, vtep.source_interface)
|
|
177
|
+
|
|
178
|
+
# Change source_interface when nve interface is in a 'no shutdown' state
|
|
179
|
+
vtep.shutdown = false
|
|
180
|
+
val = 'loopback77'
|
|
181
|
+
vtep.source_interface = val
|
|
182
|
+
assert_equal(val, vtep.source_interface)
|
|
183
|
+
# source_interface should 'no shutdown' after the change.
|
|
184
|
+
refute(vtep.shutdown, 'source_interface is shutdown')
|
|
185
|
+
|
|
186
|
+
# Set source_interface to default value
|
|
187
|
+
val = vtep.default_source_interface
|
|
188
|
+
vtep.source_interface = val
|
|
189
|
+
assert_equal(val, vtep.source_interface)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def test_multisite_bg_interface
|
|
193
|
+
skip("#{node.product_id} doesn't support this feature") unless
|
|
194
|
+
node.product_id[/N9K.*EX/]
|
|
195
|
+
vtep = VxlanVtep.new('nve1')
|
|
196
|
+
|
|
197
|
+
# Set multisite_bg_interface to non-default value
|
|
198
|
+
val = 'loopback55'
|
|
199
|
+
ms = EvpnMultisite.new(100)
|
|
200
|
+
vtep.multisite_border_gateway_interface = val
|
|
201
|
+
assert_equal(val, vtep.multisite_border_gateway_interface)
|
|
202
|
+
|
|
203
|
+
vtep.multisite_border_gateway_interface = vtep.default_multisite_border_gateway_interface
|
|
204
|
+
assert_equal(vtep.default_multisite_border_gateway_interface,
|
|
205
|
+
vtep.multisite_border_gateway_interface)
|
|
206
|
+
|
|
207
|
+
# Should Error when no 'evpn multisite border-gateway' set
|
|
208
|
+
ms.destroy
|
|
209
|
+
assert_raises(Cisco::CliError) do
|
|
210
|
+
vtep.multisite_border_gateway_interface = val
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_source_interface_hold_down_time
|
|
215
|
+
vtep = VxlanVtep.new('nve1')
|
|
216
|
+
if validate_property_excluded?('vxlan_vtep', 'source_intf_hold_down_time')
|
|
217
|
+
assert_nil(vtep.source_interface_hold_down_time)
|
|
218
|
+
assert_nil(vtep.default_source_interface_hold_down_time)
|
|
219
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
220
|
+
vtep.source_interface_hold_down_time = 50
|
|
221
|
+
end
|
|
222
|
+
return
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
skip_incompat_version?('vxlan_vtep', 'source_intf_hold_down_time')
|
|
226
|
+
# Set source_interface to non-default value
|
|
227
|
+
val = 'loopback55'
|
|
228
|
+
vtep.source_interface = val
|
|
229
|
+
assert_equal(val, vtep.source_interface)
|
|
230
|
+
|
|
231
|
+
# Set source_interface_hold_down_time
|
|
232
|
+
time = 50
|
|
233
|
+
vtep.source_interface_hold_down_time = time
|
|
234
|
+
assert_equal(time, vtep.source_interface_hold_down_time)
|
|
235
|
+
|
|
236
|
+
# Set source_interface_hold_down_time to default value
|
|
237
|
+
val = vtep.default_source_interface_hold_down_time
|
|
238
|
+
vtep.source_interface_hold_down_time = val
|
|
239
|
+
assert_equal(val, vtep.source_interface_hold_down_time)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def test_global_ingress_replication_bgp
|
|
243
|
+
skip_incompat_version?('vxlan_vtep', 'global_ingress_replication_bgp')
|
|
244
|
+
|
|
245
|
+
vtep = VxlanVtep.new('nve1')
|
|
246
|
+
vtep.host_reachability = 'evpn'
|
|
247
|
+
if validate_property_excluded?('vxlan_vtep', 'global_ingress_replication_bgp')
|
|
248
|
+
assert_raises(Cisco::UnsupportedError) { vtep.global_ingress_replication_bgp = true }
|
|
249
|
+
return
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Test: Check global_ingress_replication_bgp is not configured.
|
|
253
|
+
refute(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be disabled')
|
|
254
|
+
|
|
255
|
+
# Test: Enable global_ingress_replication_bgp
|
|
256
|
+
vtep.global_ingress_replication_bgp = true
|
|
257
|
+
assert(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be enabled')
|
|
258
|
+
# Test: Default
|
|
259
|
+
vtep.global_ingress_replication_bgp = vtep.default_global_ingress_replication_bgp
|
|
260
|
+
refute(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be disabled')
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def test_global_suppress_arp
|
|
264
|
+
skip_incompat_version?('vxlan_vtep', 'global_suppress_arp')
|
|
265
|
+
|
|
266
|
+
vtep = VxlanVtep.new('nve1')
|
|
267
|
+
vtep.host_reachability = 'evpn'
|
|
268
|
+
if validate_property_excluded?('vxlan_vtep', 'global_suppress_arp')
|
|
269
|
+
assert_raises(Cisco::UnsupportedError) { vtep.global_suppress_arp = true }
|
|
270
|
+
return
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# Test: Check global_suppress_arp is not configured.
|
|
274
|
+
refute(vtep.global_suppress_arp, 'global_suppress_arp should be disabled')
|
|
275
|
+
|
|
276
|
+
# Test: Enable global_suppress_arp
|
|
277
|
+
begin
|
|
278
|
+
vtep.global_suppress_arp = true
|
|
279
|
+
rescue CliError => e
|
|
280
|
+
skip(e.to_s) if /ERROR: Please configure TCAM/.match(e.to_s)
|
|
281
|
+
end
|
|
282
|
+
assert(vtep.global_suppress_arp, 'global_suppress_arp should be enabled')
|
|
283
|
+
# Test: Default
|
|
284
|
+
vtep.global_suppress_arp = vtep.default_global_suppress_arp
|
|
285
|
+
refute(vtep.global_suppress_arp, 'global_suppress_arp should be disabled')
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def test_global_mcast_group_l2
|
|
289
|
+
vtep = VxlanVtep.new('nve1')
|
|
290
|
+
if validate_property_excluded?('vxlan_vtep', 'global_mcast_group_l2')
|
|
291
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
292
|
+
vtep.global_mcast_group_l2 = '225.1.1.1'
|
|
293
|
+
end
|
|
294
|
+
return
|
|
295
|
+
end
|
|
296
|
+
skip_incompat_version?('vxlan_vtep', 'global_mcast_group_l2')
|
|
297
|
+
|
|
298
|
+
assert_equal(vtep.global_mcast_group_l2, vtep.default_global_mcast_group_l2)
|
|
299
|
+
vtep.global_mcast_group_l2 = '225.1.1.1'
|
|
300
|
+
assert_equal('225.1.1.1', vtep.global_mcast_group_l2)
|
|
301
|
+
vtep.global_mcast_group_l2 = vtep.default_global_mcast_group_l2
|
|
302
|
+
assert_equal(vtep.global_mcast_group_l2, vtep.default_global_mcast_group_l2)
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
def test_global_mcast_group_l3
|
|
306
|
+
vtep = VxlanVtep.new('nve1')
|
|
307
|
+
if validate_property_excluded?('vxlan_vtep', 'global_mcast_group_l3')
|
|
308
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
309
|
+
vtep.global_mcast_group_l3 = '225.1.1.1'
|
|
310
|
+
end
|
|
311
|
+
return
|
|
312
|
+
end
|
|
313
|
+
skip_incompat_version?('vxlan_vtep', 'global_mcast_group_l3')
|
|
314
|
+
|
|
315
|
+
assert_equal(vtep.global_mcast_group_l3, vtep.default_global_mcast_group_l3)
|
|
316
|
+
|
|
317
|
+
begin
|
|
318
|
+
# global_mcast_group_l3 is only supported on certain vxlan capable N9ks
|
|
319
|
+
vtep.global_mcast_group_l3 = '225.1.1.1'
|
|
320
|
+
rescue CliError => e
|
|
321
|
+
skip(e.to_s) if /TRM not supported on this platform/.match(e.to_s)
|
|
322
|
+
end
|
|
323
|
+
assert_equal('225.1.1.1', vtep.global_mcast_group_l3)
|
|
324
|
+
vtep.global_mcast_group_l3 = vtep.default_global_mcast_group_l3
|
|
325
|
+
assert_equal(vtep.global_mcast_group_l3, vtep.default_global_mcast_group_l3)
|
|
326
|
+
end
|
|
327
|
+
end
|