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,427 @@
|
|
|
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/tacacs_server_host'
|
|
17
|
+
|
|
18
|
+
include Cisco
|
|
19
|
+
|
|
20
|
+
DEFAULT_TACACS_SERVER_HOST_PORT = 49
|
|
21
|
+
DEFAULT_TACACS_SERVER_HOST_TIMEOUT = 0
|
|
22
|
+
DEFAULT_TACACS_SERVER_HOST_ENCRYPTION_PASSWORD = ''
|
|
23
|
+
|
|
24
|
+
# TestTacacsServerHost - Minitest for TacacsServerHost node utility
|
|
25
|
+
class TestTacacsSvrHost < CiscoTestCase
|
|
26
|
+
@skip_unless_supported = 'tacacs_server_host'
|
|
27
|
+
|
|
28
|
+
def setup
|
|
29
|
+
super
|
|
30
|
+
if platform == :nexus
|
|
31
|
+
@host_name = 'testhost'
|
|
32
|
+
@default_show_command = 'show run all | inc "tacacs-server" | no-more'
|
|
33
|
+
else
|
|
34
|
+
@default_show_command = 'show running-config tacacs-server'
|
|
35
|
+
@host_name = '2.2.2.2'
|
|
36
|
+
end
|
|
37
|
+
@default_output_pattern = /tacacs-server host\s(#{@host_name})(.*)/
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Not for Nexus
|
|
41
|
+
def no_tacacsserver
|
|
42
|
+
# Turn the feature off for a clean test.
|
|
43
|
+
config('no aaa group server tacacs red',
|
|
44
|
+
'no aaa group server tacacs blue')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_collection_empty
|
|
48
|
+
hosts = TacacsServerHost.hosts
|
|
49
|
+
hosts.each_value(&:destroy)
|
|
50
|
+
hosts = TacacsServerHost.hosts
|
|
51
|
+
|
|
52
|
+
assert_empty(hosts, 'Error: Tacacs Host collection is not empty')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_collection
|
|
56
|
+
hosts_hash = {}
|
|
57
|
+
hosts_hash['4.4.4.4'] = 1138
|
|
58
|
+
hosts_hash['5.5.5.5'] = DEFAULT_TACACS_SERVER_HOST_PORT
|
|
59
|
+
|
|
60
|
+
hosts_hash.each do |name, port|
|
|
61
|
+
if platform != :ios_xr
|
|
62
|
+
host = TacacsServerHost.new(name)
|
|
63
|
+
host.port = port
|
|
64
|
+
else
|
|
65
|
+
TacacsServerHost.new(name, true, port)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
hosts = TacacsServerHost.hosts
|
|
70
|
+
refute_empty(hosts, 'Error: Tacacs Host collection is empty')
|
|
71
|
+
hosts_hash.each do |name, port|
|
|
72
|
+
# host must have been created to be found in the list
|
|
73
|
+
assert(hosts.include?(name),
|
|
74
|
+
"Error: Tacacs Host #{name} not in collection")
|
|
75
|
+
# port numbers differentiate the hosts
|
|
76
|
+
assert_equal(port, hosts[name].port,
|
|
77
|
+
"Error: Tacacs Host #{name} port mismatch")
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
hosts_hash.each_key { |name| hosts[name].destroy }
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_negative
|
|
84
|
+
assert_raises(TypeError) { TacacsServerHost.new(nil) }
|
|
85
|
+
assert_raises(ArgumentError) { TacacsServerHost.new('') }
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_create
|
|
89
|
+
host = TacacsServerHost.new(@host_name)
|
|
90
|
+
assert_show_match(msg: 'Error: Tacacs Host not created')
|
|
91
|
+
host.destroy
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def test_destroy
|
|
95
|
+
host = TacacsServerHost.new(@host_name)
|
|
96
|
+
assert_show_match(msg: 'Error: Tacacs Host not created')
|
|
97
|
+
host.destroy
|
|
98
|
+
|
|
99
|
+
refute_show_match(msg: 'Error: Tacacs Host still present')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_name
|
|
103
|
+
host = TacacsServerHost.new(@host_name)
|
|
104
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
105
|
+
assert_equal(@host_name, line.captures[0],
|
|
106
|
+
"Error: #{@host_name} name mismatch")
|
|
107
|
+
assert_equal(@host_name, host.name,
|
|
108
|
+
"Error: #{@host_name} name get value mismatch")
|
|
109
|
+
host.destroy
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def test_name_preconfigured
|
|
113
|
+
config("tacacs-server host #{@host_name}")
|
|
114
|
+
|
|
115
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
116
|
+
hosts = TacacsServerHost.hosts()
|
|
117
|
+
|
|
118
|
+
assert_equal(@host_name, line.captures[0],
|
|
119
|
+
"Error: #{@host_name} name mismatch")
|
|
120
|
+
refute_nil(hosts[@host_name], "Error: #{@host_name} not retrieved.")
|
|
121
|
+
assert_equal(@host_name, hosts[@host_name].name,
|
|
122
|
+
"Error: #{@host_name} name get value mismatch")
|
|
123
|
+
|
|
124
|
+
hosts.each_value(&:destroy)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_name_formats
|
|
128
|
+
host_name = 'testhost.example.com'
|
|
129
|
+
host_ip = '192.168.1.1'
|
|
130
|
+
|
|
131
|
+
config("tacacs-server host #{host_name}") unless platform == :ios_xr
|
|
132
|
+
config("tacacs-server host #{host_ip}")
|
|
133
|
+
|
|
134
|
+
line_name = assert_show_match(
|
|
135
|
+
pattern: /tacacs-server host\s(testhost\.example\.com)(.*)/,
|
|
136
|
+
msg: 'Error: Tacacs Host not found') unless platform == :ios_xr
|
|
137
|
+
line_ip = assert_show_match(
|
|
138
|
+
pattern: /tacacs-server host\s(192\.168\.1\.1)(.*)/,
|
|
139
|
+
msg: 'Error: Tacacs Host not found')
|
|
140
|
+
hosts = TacacsServerHost.hosts
|
|
141
|
+
|
|
142
|
+
unless platform == :ios_xr
|
|
143
|
+
assert_equal(host_name, line_name.captures[0],
|
|
144
|
+
"Error: #{host_name} name mismatch")
|
|
145
|
+
refute_nil(hosts[host_name], "Error: #{host_name} not retrieved.")
|
|
146
|
+
assert_equal(host_name, hosts[host_name].name,
|
|
147
|
+
"Error: #{host_name} name get value mismatch")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
assert_equal(host_ip, line_ip.captures[0],
|
|
151
|
+
"Error: #{host_ip} name mismatch")
|
|
152
|
+
refute_nil(hosts[host_ip], "Error: #{host_ip} not retrieved.")
|
|
153
|
+
assert_equal(host_ip, hosts[host_ip].name,
|
|
154
|
+
"Error: #{host_ip} name get value mismatch")
|
|
155
|
+
|
|
156
|
+
hosts.each_value(&:destroy)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def test_port_get
|
|
160
|
+
host = TacacsServerHost.new(@host_name)
|
|
161
|
+
|
|
162
|
+
# not previously configured
|
|
163
|
+
port = DEFAULT_TACACS_SERVER_HOST_PORT
|
|
164
|
+
assert_equal(port, host.port, 'Error: Tacacs Host port incorrect')
|
|
165
|
+
|
|
166
|
+
# IOS XR support the same host using different ports
|
|
167
|
+
unless platform == :ios_xr
|
|
168
|
+
# when configured
|
|
169
|
+
port = 1138
|
|
170
|
+
host.port = port
|
|
171
|
+
assert_equal(port, host.port, 'Error: Tacacs Host port incorrect')
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
host.destroy
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def test_port_default
|
|
178
|
+
host = TacacsServerHost.new(@host_name)
|
|
179
|
+
|
|
180
|
+
port = DEFAULT_TACACS_SERVER_HOST_PORT
|
|
181
|
+
assert_equal(port, TacacsServerHost.default_port,
|
|
182
|
+
'Error: Tacacs Host default port incorrect')
|
|
183
|
+
host.destroy
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def test_port_set
|
|
187
|
+
return if platform == :ios_xr
|
|
188
|
+
|
|
189
|
+
host = TacacsServerHost.new(@host_name)
|
|
190
|
+
|
|
191
|
+
port = 1138
|
|
192
|
+
host.port = port
|
|
193
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
194
|
+
assert_match(/port\s(\d*)/, line.captures[1])
|
|
195
|
+
md = /port\s(\d*)/.match(line.captures[1])
|
|
196
|
+
assert_equal(port, md.captures[0].to_i, 'Error: Tacacs Host port mismatch')
|
|
197
|
+
assert_equal(port, host.port, 'Error: Tacacs Host port incorrect')
|
|
198
|
+
|
|
199
|
+
host.destroy
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def test_timeout_get
|
|
203
|
+
# Cleanup first
|
|
204
|
+
s = @device.cmd("show run | i 'tacacs.*timeout'")[/^tacacs.*timeout.*$/]
|
|
205
|
+
config("no #{s}") if s
|
|
206
|
+
|
|
207
|
+
host = TacacsServerHost.new(@host_name)
|
|
208
|
+
|
|
209
|
+
# not previously configured
|
|
210
|
+
timeout = DEFAULT_TACACS_SERVER_HOST_TIMEOUT
|
|
211
|
+
assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
|
|
212
|
+
|
|
213
|
+
# when configured
|
|
214
|
+
timeout = 30
|
|
215
|
+
host.timeout = timeout
|
|
216
|
+
assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
|
|
217
|
+
|
|
218
|
+
host.destroy
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def test_timeout_default
|
|
222
|
+
host = TacacsServerHost.new(@host_name)
|
|
223
|
+
|
|
224
|
+
timeout = DEFAULT_TACACS_SERVER_HOST_TIMEOUT
|
|
225
|
+
assert_equal(timeout, TacacsServerHost.default_timeout,
|
|
226
|
+
'Error: Tacacs Host default timeout incorrect')
|
|
227
|
+
host.destroy
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def test_timeout_set
|
|
231
|
+
host = TacacsServerHost.new(@host_name)
|
|
232
|
+
|
|
233
|
+
timeout = 30
|
|
234
|
+
host.timeout = timeout
|
|
235
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
236
|
+
|
|
237
|
+
if platform != :ios_xr
|
|
238
|
+
assert_match(/timeout\s(\d*)/, line.captures[1])
|
|
239
|
+
md = /timeout\s(\d*)/.match(line.captures[1])
|
|
240
|
+
assert_equal(timeout, md.captures[0].to_i,
|
|
241
|
+
'Error: Tacacs Host timeout mismatch')
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
|
|
245
|
+
|
|
246
|
+
host.destroy
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def test_timeout_unset
|
|
250
|
+
host = TacacsServerHost.new(@host_name)
|
|
251
|
+
|
|
252
|
+
timeout = DEFAULT_TACACS_SERVER_HOST_TIMEOUT
|
|
253
|
+
host.timeout = timeout
|
|
254
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
255
|
+
refute_match(/timeout\s(\d*)/, line.captures[1])
|
|
256
|
+
assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
|
|
257
|
+
|
|
258
|
+
host.destroy
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def test_encryption_type
|
|
262
|
+
host = TacacsServerHost.new(@host_name)
|
|
263
|
+
|
|
264
|
+
# when not configured
|
|
265
|
+
enctype = TACACS_SERVER_ENC_UNKNOWN
|
|
266
|
+
|
|
267
|
+
assert_equal(enctype, host.encryption_type,
|
|
268
|
+
'Error: Tacacs Host encryption type incorrect')
|
|
269
|
+
|
|
270
|
+
# when configured
|
|
271
|
+
enctype = TACACS_SERVER_ENC_NONE
|
|
272
|
+
sh_run_enctype = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
273
|
+
host.encryption_key_set(enctype, 'TEST')
|
|
274
|
+
assert_equal(sh_run_enctype, host.encryption_type,
|
|
275
|
+
'Error: Tacacs Host encryption type incorrect')
|
|
276
|
+
host.destroy
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def test_encryption_type_default
|
|
280
|
+
host = TacacsServerHost.new(@host_name)
|
|
281
|
+
|
|
282
|
+
assert_equal(TACACS_SERVER_ENC_NONE,
|
|
283
|
+
TacacsServerHost.default_encryption_type,
|
|
284
|
+
'Error: Tacacs Host default encryption type incorrect')
|
|
285
|
+
host.destroy
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def test_encryption_password
|
|
289
|
+
host = TacacsServerHost.new(@host_name)
|
|
290
|
+
|
|
291
|
+
# when not configured
|
|
292
|
+
pass = DEFAULT_TACACS_SERVER_HOST_ENCRYPTION_PASSWORD
|
|
293
|
+
assert_equal(pass, host.encryption_password,
|
|
294
|
+
'Error: Tacacs Host encryption password incorrect')
|
|
295
|
+
|
|
296
|
+
# when configured
|
|
297
|
+
pass = 'TEST'
|
|
298
|
+
sh_run_pass = 'WAWY'
|
|
299
|
+
host.encryption_key_set(0, pass)
|
|
300
|
+
|
|
301
|
+
if platform != :ios_xr
|
|
302
|
+
assert_match(/#{sh_run_pass}/, host.encryption_password,
|
|
303
|
+
'Error: Tacacs Host encryption password incorrect')
|
|
304
|
+
else
|
|
305
|
+
# Only do not-nil checking for IOS XR
|
|
306
|
+
assert(!host.encryption_password.nil?)
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
host.destroy
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def test_encryption_password_default
|
|
313
|
+
host = TacacsServerHost.new(@host_name)
|
|
314
|
+
|
|
315
|
+
assert_equal('', TacacsServerHost.default_encryption_password,
|
|
316
|
+
'Error: Tacacs Host default encryption password incorrect')
|
|
317
|
+
host.destroy
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
def test_key
|
|
321
|
+
host = TacacsServerHost.new(@host_name)
|
|
322
|
+
|
|
323
|
+
enctype = TACACS_SERVER_ENC_NONE
|
|
324
|
+
sh_run_enctype = TACACS_SERVER_ENC_CISCO_TYPE_7
|
|
325
|
+
pass = 'TEST'
|
|
326
|
+
sh_run_pass = 'WAWY'
|
|
327
|
+
host.encryption_key_set(enctype, pass)
|
|
328
|
+
|
|
329
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
330
|
+
|
|
331
|
+
if platform != :ios_xr
|
|
332
|
+
assert_match(/key\s(\d*)\s(\S*)/, line.captures[1])
|
|
333
|
+
md = /key\s(\d*)\s(\S*)/.match(line.captures[1])
|
|
334
|
+
assert_equal(sh_run_enctype, md.captures[0].to_i,
|
|
335
|
+
'Error: Tacacs Host encryption type mismatch')
|
|
336
|
+
assert_equal(sh_run_enctype, host.encryption_type,
|
|
337
|
+
'Error: Tacacs Host encryption type incorrect')
|
|
338
|
+
# remove quotes surrounding the encrypted password
|
|
339
|
+
pass_no_quotes = md.captures[1].gsub(/(?:^\")|(?:\"$)/, '')
|
|
340
|
+
assert_equal(sh_run_pass, pass_no_quotes,
|
|
341
|
+
'Error: Tacacs Host encryption password mismatch')
|
|
342
|
+
assert_match(/#{sh_run_pass}/, host.encryption_password,
|
|
343
|
+
'Error: Tacacs Host encryption password incorrect')
|
|
344
|
+
else
|
|
345
|
+
# Only do not-nil checking for IOS XR
|
|
346
|
+
assert(!host.encryption_password.nil?)
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
host.destroy
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def test_key_unset
|
|
353
|
+
# Cleanup first
|
|
354
|
+
s = @device.cmd("show run | i 'tacacs.*host'")[/^tacacs.*host.*$/]
|
|
355
|
+
config("no #{s}") if s
|
|
356
|
+
|
|
357
|
+
host = TacacsServerHost.new(@host_name)
|
|
358
|
+
|
|
359
|
+
# First configure key value. Whether that can be passed
|
|
360
|
+
# will be decided by test_key
|
|
361
|
+
enctype = TACACS_SERVER_ENC_NONE
|
|
362
|
+
pass = 'TEST'
|
|
363
|
+
host.encryption_key_set(enctype, pass)
|
|
364
|
+
|
|
365
|
+
# Now unconfigure the key and verify
|
|
366
|
+
enctype = TACACS_SERVER_ENC_UNKNOWN
|
|
367
|
+
pass = DEFAULT_TACACS_SERVER_HOST_ENCRYPTION_PASSWORD
|
|
368
|
+
host.encryption_key_set(enctype, pass)
|
|
369
|
+
|
|
370
|
+
line = assert_show_match(msg: 'Error: Tacacs Host not found')
|
|
371
|
+
refute_match(/key\s(\d*)\s(\S*)/, line.captures[1])
|
|
372
|
+
assert_equal(enctype, host.encryption_type,
|
|
373
|
+
'Error: Tacacs Host encryption type incorrect')
|
|
374
|
+
assert_equal(pass, host.encryption_password,
|
|
375
|
+
'Error: Tacacs Host encryption password incorrect')
|
|
376
|
+
host.destroy
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def setup_duplicates
|
|
380
|
+
return if platform != :ios_xr
|
|
381
|
+
config('tacacs-server host 8.8.8.8 port 11',
|
|
382
|
+
'tacacs-server host 8.8.8.8 port 22',
|
|
383
|
+
'tacacs-server host 8.8.8.8 port 33')
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def no_duplicates
|
|
387
|
+
return if platform != :ios_xr
|
|
388
|
+
config('no tacacs-server host 8.8.8.8 port 11',
|
|
389
|
+
'no tacacs-server host 8.8.8.8 port 22',
|
|
390
|
+
'no tacacs-server host 8.8.8.8 port 33')
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
def test_duplicates
|
|
394
|
+
return if platform != :ios_xr
|
|
395
|
+
setup_duplicates
|
|
396
|
+
|
|
397
|
+
id = '8.8.8.8'
|
|
398
|
+
|
|
399
|
+
server = Cisco::TacacsServerHost.new(id, true, 55)
|
|
400
|
+
|
|
401
|
+
assert_includes(Cisco::TacacsServerHost.hosts, id)
|
|
402
|
+
assert_equal(server, Cisco::TacacsServerHost.hosts[id])
|
|
403
|
+
|
|
404
|
+
assert_equal(55, Cisco::TacacsServerHost.hosts[id].port)
|
|
405
|
+
|
|
406
|
+
if platform != :ios_xr
|
|
407
|
+
server.port = 66
|
|
408
|
+
assert_equal(66, Cisco::TacacsServerHost.hosts[id].port)
|
|
409
|
+
|
|
410
|
+
server.encryption_key_set(nil, nil)
|
|
411
|
+
assert_equal(nil,
|
|
412
|
+
Cisco::TacacsServerHost.hosts[id].encryption_password)
|
|
413
|
+
|
|
414
|
+
server.encryption_key_set('44444444', nil)
|
|
415
|
+
assert_equal('44444444',
|
|
416
|
+
Cisco::TacacsServerHost.hosts[id].encryption_password)
|
|
417
|
+
end
|
|
418
|
+
|
|
419
|
+
server.timeout = 33
|
|
420
|
+
assert_equal(33, Cisco::TacacsServerHost.hosts[id].timeout)
|
|
421
|
+
|
|
422
|
+
server.destroy
|
|
423
|
+
refute_includes(Cisco::TacacsServerHost.hosts, id)
|
|
424
|
+
|
|
425
|
+
no_duplicates
|
|
426
|
+
end
|
|
427
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Copyright (c) 2016-2017 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/upgrade'
|
|
17
|
+
|
|
18
|
+
include Cisco
|
|
19
|
+
|
|
20
|
+
# TestUpgrade - Minitest for router Upgrade node Utility class
|
|
21
|
+
class TestUpgrade < CiscoTestCase
|
|
22
|
+
@skip_unless_supported = 'upgrade'
|
|
23
|
+
|
|
24
|
+
def preconfig_upgrade_info
|
|
25
|
+
path = File.expand_path('../upgrade_info.yaml', __FILE__)
|
|
26
|
+
skip('Cannot find tests/upgrade_info.yaml') unless File.file?(path)
|
|
27
|
+
info = YAML.load(File.read(path))
|
|
28
|
+
valid_info?(info)
|
|
29
|
+
info
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def valid_info?(info)
|
|
33
|
+
skip('tests/upgrade_info.yaml file is empty') unless info
|
|
34
|
+
msg = 'Missing key in tests/upgrade_info.yaml'
|
|
35
|
+
%w(install_image install_uri).each do |key|
|
|
36
|
+
skip("#{msg}: #{key}") if info[key].nil?
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
###################
|
|
41
|
+
# Upgrade tests #
|
|
42
|
+
###################
|
|
43
|
+
|
|
44
|
+
def test_clear_status
|
|
45
|
+
Upgrade.clear_status
|
|
46
|
+
refute(Upgrade.upgraded?)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_delete
|
|
50
|
+
config('show version > bootflash:foobar')
|
|
51
|
+
Upgrade.delete('foobar')
|
|
52
|
+
assert_raises(CliError) do
|
|
53
|
+
Upgrade.delete('foobar')
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_delete_negative
|
|
58
|
+
assert_raises(CliError) do
|
|
59
|
+
# Delete a file that doesn't exist
|
|
60
|
+
Upgrade.delete('foobar')
|
|
61
|
+
end
|
|
62
|
+
assert_raises(CliError) do
|
|
63
|
+
# Delete a file that doesn't exist
|
|
64
|
+
Upgrade.delete('foobar', 'logflash:')
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# def test_delete_boot
|
|
69
|
+
# Upgrade.delete_boot
|
|
70
|
+
# end
|
|
71
|
+
|
|
72
|
+
def test_image_version
|
|
73
|
+
version = Upgrade.image_version
|
|
74
|
+
assert_match(/^\d.\d\(\d(?:.\d+)?\)(?:\S+\(\S+\))?$/, version)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_box_online
|
|
78
|
+
assert(Upgrade.box_online?)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_upgrade
|
|
82
|
+
image_info = preconfig_upgrade_info
|
|
83
|
+
Upgrade.upgrade(image_info['install_image'], image_info['install_uri'])
|
|
84
|
+
# Wait 15 seconds for device to start rebooting
|
|
85
|
+
# TODO : Consider getting the sleep value dynamically
|
|
86
|
+
sleep 15
|
|
87
|
+
begin
|
|
88
|
+
assert(Upgrade.upgraded?)
|
|
89
|
+
rescue
|
|
90
|
+
tries ||= 1
|
|
91
|
+
retry unless (tries += 1) > 5
|
|
92
|
+
raise
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_upgrade_boot_image
|
|
97
|
+
preconfig_upgrade_info
|
|
98
|
+
image_uri = node.config_get('show_version', 'system_image')
|
|
99
|
+
image = image_uri.split('/')[-1]
|
|
100
|
+
uri = image_uri.split('/')[0]
|
|
101
|
+
skip('Boot image not on bootflash:') unless uri == 'bootflash:'
|
|
102
|
+
Upgrade.upgrade(image, uri)
|
|
103
|
+
assert(Upgrade.upgraded?)
|
|
104
|
+
end
|
|
105
|
+
end
|
data/tests/test_vdc.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Copyright (c) 2015-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/vdc'
|
|
17
|
+
|
|
18
|
+
include Cisco
|
|
19
|
+
|
|
20
|
+
# TestVdc - Minitest for general functionality of the Vdc class.
|
|
21
|
+
class TestVdc < CiscoTestCase
|
|
22
|
+
# This test suite currently has very limited use because:
|
|
23
|
+
# a) VDC support is limited to a narrow list of platforms.
|
|
24
|
+
# b) License restrictions may limit platforms to a single vdc
|
|
25
|
+
# c) Linecard restrictions may limit some tests to specific linecards
|
|
26
|
+
@skip_unless_supported = 'vdc'
|
|
27
|
+
|
|
28
|
+
def setup
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_all_vdcs
|
|
33
|
+
# This test is limited because our vdc provider does not yet support
|
|
34
|
+
# vdc creation. For now just check that we get a non-empty list and
|
|
35
|
+
# that it at least contains the default vdc.
|
|
36
|
+
v = Vdc.vdcs
|
|
37
|
+
refute_empty(v.keys, 'vdc hash should have at least one vdc')
|
|
38
|
+
assert(v.key?(Vdc.default_vdc_name), 'default vdc name not found')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_create
|
|
42
|
+
assert_raises(ArgumentError) do
|
|
43
|
+
Vdc.new('non_def', 'Currently no support for non-default VDCs')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_limit_resource_module_type
|
|
48
|
+
mt_full_interface?
|
|
49
|
+
v = Vdc.new('default')
|
|
50
|
+
# Set limit-resource module-type to default (this is variable for each
|
|
51
|
+
# device, so the default is for this device only)
|
|
52
|
+
v.limit_resource_module_type = ''
|
|
53
|
+
default = v.limit_resource_module_type
|
|
54
|
+
|
|
55
|
+
# Limit to F3 cards only
|
|
56
|
+
type = 'f3'
|
|
57
|
+
v.limit_resource_module_type = type
|
|
58
|
+
assert_equal(type, v.limit_resource_module_type)
|
|
59
|
+
|
|
60
|
+
# Reset to device-default
|
|
61
|
+
v.limit_resource_module_type = ''
|
|
62
|
+
assert_equal(default, v.limit_resource_module_type)
|
|
63
|
+
end
|
|
64
|
+
end
|