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,272 @@
|
|
|
1
|
+
# Copyright (c) 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/feature'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/vdc'
|
|
18
|
+
|
|
19
|
+
include Cisco
|
|
20
|
+
|
|
21
|
+
# TestFeature - Minitest for feature class
|
|
22
|
+
class TestFeature < CiscoTestCase
|
|
23
|
+
@skip_unless_supported = 'feature'
|
|
24
|
+
|
|
25
|
+
def teardown
|
|
26
|
+
# f3 cleanup for non-f3 N7k's
|
|
27
|
+
vdc_limit_f3_no_intf_needed(:clear) if first_or_last_teardown
|
|
28
|
+
|
|
29
|
+
['no nv overlay evpn',
|
|
30
|
+
'no feature bfd',
|
|
31
|
+
'no feature bgp',
|
|
32
|
+
'no feature dhcp',
|
|
33
|
+
'no feature fabric forwarding',
|
|
34
|
+
'no feature hsrp',
|
|
35
|
+
'no feature itd',
|
|
36
|
+
'no feature nv overlay',
|
|
37
|
+
'no feature ospf',
|
|
38
|
+
'no feature pim',
|
|
39
|
+
'no feature private-vlan',
|
|
40
|
+
'no feature tacacs',
|
|
41
|
+
'no feature vn-segment-vlan-based',
|
|
42
|
+
'no feature vni',
|
|
43
|
+
'no feature vtp'].each { |f| config_no_warn(f) }
|
|
44
|
+
|
|
45
|
+
# Special case for 'no feature-set fex'
|
|
46
|
+
# Some image versions prompt y/n to remove the feature-set.
|
|
47
|
+
config_no_warn('terminal dont-ask')
|
|
48
|
+
config_no_warn('no feature-set fex')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
###########
|
|
52
|
+
# Helpers #
|
|
53
|
+
###########
|
|
54
|
+
|
|
55
|
+
# feature test helper
|
|
56
|
+
def feature(feat)
|
|
57
|
+
# Get the feature name string from the yaml
|
|
58
|
+
ref = cmd_ref.lookup('feature', feat).to_s[/set_value:.*feature (.*)/]
|
|
59
|
+
|
|
60
|
+
if ref
|
|
61
|
+
feat_str = Regexp.last_match[1]
|
|
62
|
+
refute_nil(feat_str)
|
|
63
|
+
else
|
|
64
|
+
skip("'feature','#{feat}' is unsupported on this node")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Get current state of feature, then disable it
|
|
68
|
+
pre_clean_enabled = Feature.send("#{feat}_enabled?")
|
|
69
|
+
config("no feature #{feat_str}") if pre_clean_enabled
|
|
70
|
+
refute_show_match(
|
|
71
|
+
command: "show running | i '#{feat_str}'",
|
|
72
|
+
pattern: /^#{feat_str}$/,
|
|
73
|
+
msg: "#{feat} (#{feat_str}) is still enabled",
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
Feature.send("#{feat}_enable")
|
|
77
|
+
# Some features (BGP on n5k!) are slow starters...
|
|
78
|
+
unless Feature.send("#{feat}_enabled?")
|
|
79
|
+
sleep 1
|
|
80
|
+
node.cache_flush
|
|
81
|
+
end
|
|
82
|
+
assert(Feature.send("#{feat}_enabled?"),
|
|
83
|
+
"Feature #{feat} (#{feat_str}) is not enabled")
|
|
84
|
+
|
|
85
|
+
# Return testbed to pre-clean state
|
|
86
|
+
config("no feature #{feat_str}") unless pre_clean_enabled
|
|
87
|
+
rescue RuntimeError => e
|
|
88
|
+
hardware_supports_feature?(e.message)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
###################
|
|
92
|
+
# Feature tests #
|
|
93
|
+
###################
|
|
94
|
+
|
|
95
|
+
def test_bfd
|
|
96
|
+
feature('bfd')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def test_bgp
|
|
100
|
+
feature('bgp')
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_dhcp
|
|
104
|
+
feature('dhcp')
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_hsrp
|
|
108
|
+
feature('hsrp')
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def test_fabric_forwarding
|
|
112
|
+
if node.product_id[/N(3)/] && !node.product_id.include?('-F')
|
|
113
|
+
assert_nil(Feature.fabric_forwarding_enabled?)
|
|
114
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
115
|
+
Feature.fabric_forwarding_enable
|
|
116
|
+
end
|
|
117
|
+
return
|
|
118
|
+
end
|
|
119
|
+
skip('This feature is only supported on 7.0(3)I2 images') unless
|
|
120
|
+
node.os_version[/7.0\(3\)I2\(/]
|
|
121
|
+
feature('fabric_forwarding')
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def test_nv_overlay
|
|
125
|
+
if validate_property_excluded?('feature', 'nv_overlay')
|
|
126
|
+
assert_nil(Feature.nv_overlay_enabled?)
|
|
127
|
+
assert_raises(Cisco::UnsupportedError) { Feature.nv_overlay_enable }
|
|
128
|
+
return
|
|
129
|
+
end
|
|
130
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
131
|
+
feature('nv_overlay')
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_nv_overlay_evpn
|
|
135
|
+
if node.product_id[/N(3)/] && !node.product_id.include?('-F')
|
|
136
|
+
assert_nil(Feature.nv_overlay_evpn_enabled?)
|
|
137
|
+
assert_raises(Cisco::UnsupportedError) { Feature.nv_overlay_evpn_enable }
|
|
138
|
+
return
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
142
|
+
# nv_overlay_evpn can't use the 'feature' helper so test it explicitly here
|
|
143
|
+
# Get current state of feature, then disable it
|
|
144
|
+
pre_clean_enabled = Feature.nv_overlay_evpn_enabled?
|
|
145
|
+
feat_str = 'nv overlay evpn'
|
|
146
|
+
config("no #{feat_str}") if pre_clean_enabled
|
|
147
|
+
|
|
148
|
+
refute_show_match(
|
|
149
|
+
command: "show running | i #{feat_str}",
|
|
150
|
+
pattern: /^#{feat_str}$/,
|
|
151
|
+
msg: "(#{feat_str}) is still enabled",
|
|
152
|
+
)
|
|
153
|
+
Feature.nv_overlay_evpn_enable
|
|
154
|
+
assert(Feature.nv_overlay_evpn_enabled?,
|
|
155
|
+
"(#{feat_str}) is not enabled")
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def test_ospf
|
|
159
|
+
feature('ospf')
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def test_pim
|
|
163
|
+
feature('pim')
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def test_private_vlan
|
|
167
|
+
feature('private_vlan')
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_tacacs
|
|
171
|
+
feature('tacacs')
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
def test_vn_segment_vlan_based
|
|
175
|
+
vxlan_linecard?
|
|
176
|
+
Feature.fabricpath_enable if node.product_id[/N(5|6)/]
|
|
177
|
+
Feature.nv_overlay_enable unless node.product_id[/N(3|5|6)/]
|
|
178
|
+
feature('vn_segment_vlan_based')
|
|
179
|
+
rescue RuntimeError => e
|
|
180
|
+
hardware_supports_feature?(e.message)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def test_vni
|
|
184
|
+
# 7k: 'feature vni'; All others: 'feature vn-segment-vlan-based'.
|
|
185
|
+
# Dependencies: 5/6k: feature-set fabricpath; 3/9k: feature nv overlay
|
|
186
|
+
if node.product_id[/N7/]
|
|
187
|
+
# vni can't be removed if nv overlay is present
|
|
188
|
+
config_no_warn('no feature nv overlay')
|
|
189
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
190
|
+
end
|
|
191
|
+
Feature.fabricpath_enable if node.product_id[/N(5|6)/]
|
|
192
|
+
feature('vni')
|
|
193
|
+
rescue RuntimeError => e
|
|
194
|
+
hardware_supports_feature?(e.message)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def test_vtp
|
|
198
|
+
feature('vtp')
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
#####################
|
|
202
|
+
# Feature-set tests #
|
|
203
|
+
#####################
|
|
204
|
+
|
|
205
|
+
def test_feature_set_fabric
|
|
206
|
+
if node.product_id[/N(3|8|9)/]
|
|
207
|
+
assert_nil(Feature.fabric_enabled?)
|
|
208
|
+
assert_raises(Cisco::UnsupportedError) { Feature.fabric_enable }
|
|
209
|
+
return
|
|
210
|
+
end
|
|
211
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
212
|
+
fs = 'feature-set fabric'
|
|
213
|
+
# Get current state of the feature-set
|
|
214
|
+
feature_set_installed = Feature.fabric_installed?
|
|
215
|
+
|
|
216
|
+
config("no #{fs} ; no install #{fs}") if feature_set_installed
|
|
217
|
+
refute_show_match(
|
|
218
|
+
command: "show running | i '^install #{fs}$'",
|
|
219
|
+
pattern: /^install #{fs}$/,
|
|
220
|
+
msg: "(#{fs}) is still configured",
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
Feature.fabric_enable
|
|
224
|
+
assert(Feature.fabric_enabled?, "(#{fs}) is not enabled")
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
def test_feature_set_fabricpath
|
|
228
|
+
if node.product_id[/N(3|8|9)/]
|
|
229
|
+
assert_nil(Feature.fabricpath_enabled?)
|
|
230
|
+
assert_raises(Cisco::UnsupportedError) { Feature.fabricpath_enable }
|
|
231
|
+
return
|
|
232
|
+
end
|
|
233
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
234
|
+
fs = 'feature-set fabricpath'
|
|
235
|
+
# Get current state of the feature-set
|
|
236
|
+
feature_set_installed = Feature.fabricpath_installed?
|
|
237
|
+
|
|
238
|
+
config("no #{fs} ; no install #{fs}") if feature_set_installed
|
|
239
|
+
refute_show_match(
|
|
240
|
+
command: "show running | i '^install #{fs}$'",
|
|
241
|
+
pattern: /^install #{fs}$/,
|
|
242
|
+
msg: "(#{fs}) is still configured",
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
Feature.fabricpath_enable
|
|
246
|
+
assert(Feature.fabricpath_enabled?, "(#{fs}) is not enabled")
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def test_feature_set_fex
|
|
250
|
+
if validate_property_excluded?('feature', 'fex')
|
|
251
|
+
assert_nil(Feature.fex_enabled?)
|
|
252
|
+
assert_raises(Cisco::UnsupportedError) { Feature.fex_enable }
|
|
253
|
+
return
|
|
254
|
+
end
|
|
255
|
+
fs = 'feature-set fex'
|
|
256
|
+
|
|
257
|
+
# clean
|
|
258
|
+
if Feature.fex_installed?
|
|
259
|
+
config_no_warn('terminal dont-ask')
|
|
260
|
+
config_no_warn("no #{fs}")
|
|
261
|
+
config_no_warn("no install #{fs}")
|
|
262
|
+
end
|
|
263
|
+
refute_show_match(
|
|
264
|
+
command: "show running | i '^install #{fs}$'",
|
|
265
|
+
pattern: /^install #{fs}$/,
|
|
266
|
+
msg: "(#{fs}) is still configured",
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
Feature.fex_enable
|
|
270
|
+
assert(Feature.fex_enabled?, "(#{fs}) is not enabled")
|
|
271
|
+
end
|
|
272
|
+
end
|
data/tests/test_grpc.rb
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#
|
|
3
|
+
# October 2015, Glenn F. Matthews
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
# you may not use this file except in compliance with the License.
|
|
9
|
+
# You may obtain a copy of the License at
|
|
10
|
+
#
|
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
#
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
|
|
19
|
+
require_relative 'basetest'
|
|
20
|
+
|
|
21
|
+
# Test case for Cisco::Client::GRPC::Client class
|
|
22
|
+
class TestGRPC < TestCase
|
|
23
|
+
@@client = nil # rubocop:disable Style/ClassVars
|
|
24
|
+
|
|
25
|
+
def self.runnable_methods
|
|
26
|
+
# If we're pointed to an NXAPI node (as evidenced by lack of a port num)
|
|
27
|
+
# then these tests don't apply
|
|
28
|
+
return [:all_skipped] unless Cisco::Environment.environment[:port]
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def all_skipped
|
|
33
|
+
skip 'Node under test does not appear to use the gRPC client'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def client
|
|
37
|
+
unless @@client
|
|
38
|
+
client = Cisco::Client::GRPC.new(Cisco::Environment.environment)
|
|
39
|
+
client.cache_enable = true
|
|
40
|
+
client.cache_auto = true
|
|
41
|
+
@@client = client # rubocop:disable Style/ClassVars
|
|
42
|
+
end
|
|
43
|
+
@@client
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_auth_failure
|
|
47
|
+
env = Cisco::Environment.environment.merge(password: 'wrong password')
|
|
48
|
+
e = assert_raises Cisco::AuthenticationFailed do
|
|
49
|
+
Cisco::Client::GRPC.new(**env)
|
|
50
|
+
end
|
|
51
|
+
assert_equal('gRPC client creation failure: Failed authentication',
|
|
52
|
+
e.message)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_connection_failure
|
|
56
|
+
# Failure #1: connecting to a port that's listening for a non-gRPC protocol
|
|
57
|
+
env = Cisco::Environment.environment.merge(port: 23)
|
|
58
|
+
e = assert_raises Cisco::ConnectionRefused do
|
|
59
|
+
Cisco::Client::GRPC.new(**env)
|
|
60
|
+
end
|
|
61
|
+
assert_equal('gRPC client creation failure: Connection refused: ',
|
|
62
|
+
e.message)
|
|
63
|
+
# Failure #2: Connecting to a port that's not listening at all
|
|
64
|
+
env = Cisco::Environment.environment.merge(port: 0)
|
|
65
|
+
e = assert_raises Cisco::ConnectionRefused do
|
|
66
|
+
Cisco::Client::GRPC.new(**env)
|
|
67
|
+
end
|
|
68
|
+
assert_equal('gRPC client creation failure: ' \
|
|
69
|
+
'timed out during initial connection: Deadline Exceeded',
|
|
70
|
+
e.message)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_set_cli_string
|
|
74
|
+
client.set(context: 'int gi0/0/0/0',
|
|
75
|
+
values: 'description panda')
|
|
76
|
+
run = client.get(command: 'show run int gi0/0/0/0')
|
|
77
|
+
assert_match(/description panda/, run)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_set_cli_array
|
|
81
|
+
client.set(context: ['int gi0/0/0/0'],
|
|
82
|
+
values: ['description elephant'])
|
|
83
|
+
run = client.get(command: 'show run int gi0/0/0/0')
|
|
84
|
+
assert_match(/description elephant/, run)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_set_cli_invalid
|
|
88
|
+
e = assert_raises Cisco::CliError do
|
|
89
|
+
client.set(context: ['int gi0/0/0/0'],
|
|
90
|
+
values: ['wark', 'bark bark'])
|
|
91
|
+
end
|
|
92
|
+
# rubocop:disable Style/TrailingWhitespace
|
|
93
|
+
assert_equal('The following commands were rejected:
|
|
94
|
+
int gi0/0/0/0 wark
|
|
95
|
+
int gi0/0/0/0 bark bark
|
|
96
|
+
with error:
|
|
97
|
+
|
|
98
|
+
!! SYNTAX/AUTHORIZATION ERRORS: This configuration failed due to
|
|
99
|
+
!! one or more of the following reasons:
|
|
100
|
+
!! - the entered commands do not exist,
|
|
101
|
+
!! - the entered commands have errors in their syntax,
|
|
102
|
+
!! - the software packages containing the commands are not active,
|
|
103
|
+
!! - the current user is not a member of a task-group that has
|
|
104
|
+
!! permissions to use the commands.
|
|
105
|
+
|
|
106
|
+
int gi0/0/0/0 wark
|
|
107
|
+
int gi0/0/0/0 bark bark
|
|
108
|
+
|
|
109
|
+
', e.message)
|
|
110
|
+
# rubocop:enable Style/TrailingWhitespace
|
|
111
|
+
# Unlike NXAPI, a gRPC config command is always atomic
|
|
112
|
+
assert_empty(e.successful_input)
|
|
113
|
+
assert_equal(['int gi0/0/0/0 wark', 'int gi0/0/0/0 bark bark'],
|
|
114
|
+
e.rejected_input)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_get_cli_default
|
|
118
|
+
result = client.get(command: 'show debug')
|
|
119
|
+
s = @device.cmd('show debug')
|
|
120
|
+
# Strip the leading timestamp and trailing prompt from the telnet output
|
|
121
|
+
s = s.split("\n")[2..-2].join("\n")
|
|
122
|
+
assert_equal(s, result)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_get_cli_invalid
|
|
126
|
+
assert_raises Cisco::CliError do
|
|
127
|
+
client.get(command: 'show fuzz')
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_get_cli_incomplete
|
|
132
|
+
assert_raises Cisco::CliError do
|
|
133
|
+
client.get(command: 'show ')
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_get_cli_explicit
|
|
138
|
+
result = client.get(command: 'show debug', data_format: :cli)
|
|
139
|
+
s = @device.cmd('show debug')
|
|
140
|
+
# Strip the leading timestamp and trailing prompt from the telnet output
|
|
141
|
+
s = s.split("\n")[2..-2].join("\n")
|
|
142
|
+
assert_equal(s, result)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def test_get_cli_empty
|
|
146
|
+
result = client.get(command: 'show debug | include foo | exclude foo',
|
|
147
|
+
data_format: :cli)
|
|
148
|
+
assert_nil(result)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def test_get_cli_cache
|
|
152
|
+
result = client.get(command: 'show clock', data_format: :cli)
|
|
153
|
+
sleep 2
|
|
154
|
+
assert_equal(result, client.get(command: 'show clock', data_format: :cli))
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# TODO: add structured output test cases (when supported on XR)
|
|
158
|
+
|
|
159
|
+
def test_smart_create
|
|
160
|
+
autoclient = Cisco::Client.create
|
|
161
|
+
assert_equal(Cisco::Client::GRPC, autoclient.class)
|
|
162
|
+
assert(autoclient.supports?(:cli))
|
|
163
|
+
refute(autoclient.supports?(:nxapi_structured))
|
|
164
|
+
assert_equal(:ios_xr, autoclient.platform)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Minitest for HostName class
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2014-2018 Cisco and/or its affiliates.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
|
|
18
|
+
require_relative 'ciscotest'
|
|
19
|
+
require_relative '../lib/cisco_node_utils/hostname'
|
|
20
|
+
|
|
21
|
+
# TestHostname - Minitest for SyslogSetting node utility.
|
|
22
|
+
class TestHostName < CiscoTestCase
|
|
23
|
+
def setup
|
|
24
|
+
# setup runs at the beginning of each test
|
|
25
|
+
super
|
|
26
|
+
hostname_setup
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def teardown
|
|
30
|
+
# teardown runs at the end of each test
|
|
31
|
+
hostname_teardown
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
@current_hostname = ''
|
|
36
|
+
|
|
37
|
+
def hostname_setup
|
|
38
|
+
hostname_output = Cisco::Client.filter_cli(
|
|
39
|
+
cli_output: config('show running-config | include ^hostname'),
|
|
40
|
+
value: /hostname (.*)/)
|
|
41
|
+
@current_hostname = hostname_output.first unless hostname_output.nil?
|
|
42
|
+
# Turn the feature off for a clean test.
|
|
43
|
+
config('no hostname')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def hostname_teardown
|
|
47
|
+
if @current_hostname != ''
|
|
48
|
+
config("hostname #{@current_hostname}")
|
|
49
|
+
else
|
|
50
|
+
config('no hostname')
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# TESTS
|
|
55
|
+
|
|
56
|
+
def test_hostname_name
|
|
57
|
+
hostname_setting = Cisco::HostName.new('testhost')
|
|
58
|
+
assert_equal(Cisco::HostName.hostname['testhost'], hostname_setting)
|
|
59
|
+
hostname_setting = Cisco::HostName.new('testhost2')
|
|
60
|
+
assert_equal(Cisco::HostName.hostname['testhost2'], hostname_setting)
|
|
61
|
+
hostname_setting.send('hostname=', nil)
|
|
62
|
+
assert_nil(Cisco::HostName.hostname['testhost2'])
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Copyright (c) 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/hsrp_global'
|
|
17
|
+
|
|
18
|
+
include Cisco
|
|
19
|
+
# TestHsrpGlobal - Minitest for general functionality
|
|
20
|
+
# of the HsrpGlobal class.
|
|
21
|
+
class TestHsrpGlobal < CiscoTestCase
|
|
22
|
+
@skip_unless_supported = 'hsrp_global'
|
|
23
|
+
|
|
24
|
+
# Tests
|
|
25
|
+
def setup
|
|
26
|
+
super
|
|
27
|
+
config_no_warn('no feature hsrp')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def teardown
|
|
31
|
+
config_no_warn('no feature hsrp') if first_or_last_teardown
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_collection_empty
|
|
36
|
+
hg = HsrpGlobal.globals
|
|
37
|
+
assert_empty(hg)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_destroy
|
|
41
|
+
hg = HsrpGlobal.new
|
|
42
|
+
assert_equal(true, Feature.hsrp_enabled?)
|
|
43
|
+
|
|
44
|
+
hg.destroy
|
|
45
|
+
[:bfd_all_intf,
|
|
46
|
+
:extended_hold,
|
|
47
|
+
].each do |prop|
|
|
48
|
+
assert_equal(hg.send("default_#{prop}"), hg.send("#{prop}")) if
|
|
49
|
+
hg.send("#{prop}")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_bfd_all_intf
|
|
54
|
+
hg = HsrpGlobal.new
|
|
55
|
+
if validate_property_excluded?('hsrp_global', 'bfd_all_intf')
|
|
56
|
+
assert_nil(hg.bfd_all_intf)
|
|
57
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
58
|
+
hg.bfd_all_intf = true
|
|
59
|
+
end
|
|
60
|
+
return
|
|
61
|
+
end
|
|
62
|
+
assert_equal(hg.default_bfd_all_intf, hg.bfd_all_intf)
|
|
63
|
+
hg.bfd_all_intf = true
|
|
64
|
+
assert_equal(true, hg.bfd_all_intf)
|
|
65
|
+
hg.bfd_all_intf = hg.default_bfd_all_intf
|
|
66
|
+
assert_equal(hg.default_bfd_all_intf, hg.bfd_all_intf)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_extended_hold
|
|
70
|
+
hg = HsrpGlobal.new
|
|
71
|
+
assert_equal(hg.default_extended_hold, hg.extended_hold)
|
|
72
|
+
hg.extended_hold = '100'
|
|
73
|
+
assert_equal('100', hg.extended_hold)
|
|
74
|
+
hg.extended_hold = '10'
|
|
75
|
+
assert_equal('10', hg.extended_hold)
|
|
76
|
+
hg.extended_hold = hg.default_extended_hold
|
|
77
|
+
assert_equal(hg.default_extended_hold, hg.extended_hold)
|
|
78
|
+
end
|
|
79
|
+
end
|