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,406 @@
|
|
|
1
|
+
# Copyright (c) 2013-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
|
+
|
|
17
|
+
# TestNodeExt - Minitest for abstracted Node APIs
|
|
18
|
+
class TestNodeExt < CiscoTestCase
|
|
19
|
+
def setup
|
|
20
|
+
super
|
|
21
|
+
@chassis = (platform == :nexus) ? 'Chassis' : 'Rack 0'
|
|
22
|
+
@domain = (platform == :nexus) ? 'ip domain-name' : 'domain name'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def assert_output_check(command: nil, pattern: nil, msg: nil, check: nil)
|
|
26
|
+
command += ' | no-more' if platform == :nexus
|
|
27
|
+
md = assert_show_match(command: command, pattern: pattern, msg: msg)
|
|
28
|
+
assert_equal(md[1], check, msg)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_config_get
|
|
32
|
+
result = node.config_get('show_version', 'system_image')
|
|
33
|
+
assert_equal(result, node.system)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_config_get_regexp_tokens
|
|
37
|
+
node.client.set(context: ['interface loopback0'], values: ['shutdown'])
|
|
38
|
+
node.client.set(values: ['interface loopback1', 'no shutdown'])
|
|
39
|
+
|
|
40
|
+
result = node.config_get('interface', 'shutdown',
|
|
41
|
+
name: 'loopback1', show_name: 'loopback1')
|
|
42
|
+
refute(result)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_config_get_invalid
|
|
46
|
+
assert_raises IndexError do # no entry
|
|
47
|
+
node.config_get('foobar', 'name')
|
|
48
|
+
end
|
|
49
|
+
assert_raises IndexError do # entry but no config_get
|
|
50
|
+
node.config_get('show_system', 'resources')
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_config_get_default
|
|
55
|
+
result = node.config_get_default('bgp', 'graceful_restart_timers_restart')
|
|
56
|
+
assert_equal(120, result)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_config_get_default_invalid
|
|
60
|
+
assert_raises IndexError do # no name entry
|
|
61
|
+
node.config_get_default('show_version', 'foobar')
|
|
62
|
+
end
|
|
63
|
+
assert_raises IndexError do # no feature entry
|
|
64
|
+
node.config_get_default('foobar', 'name')
|
|
65
|
+
end
|
|
66
|
+
assert_raises IndexError do # no default_value defined
|
|
67
|
+
node.config_get_default('show_version', 'version')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_config_set
|
|
72
|
+
node.config_set('interface', 'create', name: 'loopback122')
|
|
73
|
+
run = node.client.get(command: 'show run | inc interface')
|
|
74
|
+
val = Client.filter_cli(cli_output: run, value: /interface loopback122/i)
|
|
75
|
+
assert_match(/interface loopback122/i, val[0])
|
|
76
|
+
|
|
77
|
+
node.config_set('interface', 'destroy', name: 'loopback122')
|
|
78
|
+
run = node.client.get(command: 'show run | inc interface')
|
|
79
|
+
val = Client.filter_cli(cli_output: run, value: /interface loopback122/i)
|
|
80
|
+
assert_nil(val)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_config_set_invalid
|
|
84
|
+
assert_raises IndexError do
|
|
85
|
+
node.config_set('foobar', 'name')
|
|
86
|
+
end
|
|
87
|
+
assert_raises(IndexError, Cisco::UnsupportedError) do
|
|
88
|
+
# feature exists but no config_set
|
|
89
|
+
node.config_set('show_version', 'system_image')
|
|
90
|
+
end
|
|
91
|
+
# TODO: none of the supported classes on IOS XR use printf-style args
|
|
92
|
+
if platform == :nexus # rubocop:disable Style/GuardClause
|
|
93
|
+
assert_raises ArgumentError do # not enough args
|
|
94
|
+
node.config_set('vtp', 'domain')
|
|
95
|
+
end
|
|
96
|
+
assert_raises ArgumentError do # too many args
|
|
97
|
+
node.config_set('vtp', 'domain', 'example.com', 'baz')
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_cli_caching
|
|
103
|
+
# don't use config() here because we are testing caching and flushing
|
|
104
|
+
@device.cmd('conf t')
|
|
105
|
+
@device.cmd("#{@domain} minitest")
|
|
106
|
+
@device.cmd('commit') if platform == :ios_xr
|
|
107
|
+
@device.cmd('end')
|
|
108
|
+
dom1 = node.domain_name
|
|
109
|
+
@device.cmd('conf t')
|
|
110
|
+
@device.cmd("no #{@domain} minitest")
|
|
111
|
+
@device.cmd('commit') if platform == :ios_xr
|
|
112
|
+
@device.cmd('end')
|
|
113
|
+
dom2 = node.domain_name
|
|
114
|
+
assert_equal(dom1, dom2) # cached output was used for dom2
|
|
115
|
+
|
|
116
|
+
node.cache_flush
|
|
117
|
+
dom3 = node.domain_name
|
|
118
|
+
refute_equal(dom1, dom3)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_get_product_description
|
|
122
|
+
product_description = node.product_description
|
|
123
|
+
|
|
124
|
+
command = node.cmd_ref.lookup('show_version', 'description').get_command
|
|
125
|
+
|
|
126
|
+
# Hardware
|
|
127
|
+
# cisco Nexus9000 C9396PX Chassis
|
|
128
|
+
#
|
|
129
|
+
# Other variants for the line of interest:
|
|
130
|
+
# cisco Nexus9000 C9504 (4 Slot) Chassis ("Supervisor Module")
|
|
131
|
+
# ^-module_id-ignore!-^
|
|
132
|
+
# cisco Nexus3000 C3132Q Chassis
|
|
133
|
+
# cisco N3K-C3048TP-1GE
|
|
134
|
+
pattern = /Hardware\n cisco (([^(\n]+|\(\d+ Slot\))+\w+)/ if
|
|
135
|
+
platform[/nexus/]
|
|
136
|
+
pattern = /DESCR: "(.*)"/ if platform[/ios_xr/]
|
|
137
|
+
|
|
138
|
+
assert_output_check(command: command,
|
|
139
|
+
pattern: pattern,
|
|
140
|
+
check: product_description,
|
|
141
|
+
msg: 'Error, Product description does not match')
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_get_product_id
|
|
145
|
+
# N3|9K Fretta product_id gets a '-F' appended so remove it for this check
|
|
146
|
+
if product_tag[/n(3|9)k-f/]
|
|
147
|
+
node.client.cache_flush
|
|
148
|
+
chassis = node.product_id.sub('-F', '')
|
|
149
|
+
else
|
|
150
|
+
node.client.cache_flush
|
|
151
|
+
chassis = node.product_id
|
|
152
|
+
end
|
|
153
|
+
assert_output_check(command: 'show inventory',
|
|
154
|
+
pattern: /NAME: \"#{@chassis}\".*\nPID: (\S+)/,
|
|
155
|
+
check: chassis,
|
|
156
|
+
msg: 'Error, Product id does not match')
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def test_get_product_version_id
|
|
160
|
+
assert_output_check(command: 'show inventory',
|
|
161
|
+
pattern: /NAME: \"#{@chassis}\".*\n.*VID: (\w+)/,
|
|
162
|
+
check: node.product_version_id,
|
|
163
|
+
msg: 'Error, Version id does not match')
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def test_get_product_serial_number
|
|
167
|
+
assert_output_check(command: 'show inventory',
|
|
168
|
+
pattern: /NAME: \"#{@chassis}\".*\n.*SN: ([-\w]+)/,
|
|
169
|
+
check: node.product_serial_number,
|
|
170
|
+
msg: 'Error, Serial number does not match')
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_get_os
|
|
174
|
+
assert_output_check(command: 'show version',
|
|
175
|
+
pattern: /\n(Cisco.*Software)/,
|
|
176
|
+
check: node.os,
|
|
177
|
+
msg: 'Error, OS version does not match')
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_get_os_version
|
|
181
|
+
# /N(5|6|7)/
|
|
182
|
+
# system: version 7.3(0)D1(1) [build 7.3(0)D1(1)]
|
|
183
|
+
# /N(3|8|9)/
|
|
184
|
+
# NXOS: version 7.0(3)I3(1) [build 7.0(3)I3(1)]
|
|
185
|
+
|
|
186
|
+
pattern = /(?:system|NXOS):\s+version (.*)\n/ if platform[/nexus/]
|
|
187
|
+
pattern = /IOS XR.*Version (.*)$/ if platform[/ios_xr/]
|
|
188
|
+
|
|
189
|
+
assert_output_check(command: 'show version',
|
|
190
|
+
pattern: pattern,
|
|
191
|
+
check: node.os_version,
|
|
192
|
+
msg: 'Error, OS version does not match')
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def test_get_host_name_when_not_set
|
|
196
|
+
if platform == :nexus
|
|
197
|
+
s = @device.cmd('show running-config all | no-more')
|
|
198
|
+
else
|
|
199
|
+
s = @device.cmd('show running-config all')
|
|
200
|
+
end
|
|
201
|
+
pattern = /.*\nhostname (\S+)/
|
|
202
|
+
md = pattern.match(s)
|
|
203
|
+
if md
|
|
204
|
+
configured_name = md[1]
|
|
205
|
+
switchname = false
|
|
206
|
+
else
|
|
207
|
+
# No hostname configured. Lets check if we have switchname instead.
|
|
208
|
+
pattern = /.*\nswitchname (\S+)/
|
|
209
|
+
md = pattern.match(s)
|
|
210
|
+
if md
|
|
211
|
+
configured_name = md[1]
|
|
212
|
+
switchname = true
|
|
213
|
+
else
|
|
214
|
+
configured_name = nil
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
switchname ? config('no switchname') : config('no hostname')
|
|
219
|
+
|
|
220
|
+
name = node.host_name
|
|
221
|
+
if platform == :nexus
|
|
222
|
+
assert_equal('switch', name)
|
|
223
|
+
else
|
|
224
|
+
assert_equal('ios', name)
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
return unless configured_name
|
|
228
|
+
config("hostname #{configured_name}") if switchname == false
|
|
229
|
+
config("switchname #{configured_name}") if switchname == true
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def test_get_host_name_when_set
|
|
233
|
+
if platform == :nexus
|
|
234
|
+
s = @device.cmd('show running-config all | no-more')
|
|
235
|
+
else
|
|
236
|
+
s = @device.cmd('show running-config all')
|
|
237
|
+
end
|
|
238
|
+
pattern = /.*\nhostname (\S+)/
|
|
239
|
+
md = pattern.match(s)
|
|
240
|
+
if md
|
|
241
|
+
configured_name = md[1]
|
|
242
|
+
switchname = false
|
|
243
|
+
else
|
|
244
|
+
# No hostname configured. Lets check if we have switchname instead.
|
|
245
|
+
pattern = /.*\nswitchname (\S+)/
|
|
246
|
+
md = pattern.match(s)
|
|
247
|
+
if md
|
|
248
|
+
configured_name = md[1]
|
|
249
|
+
switchname = true
|
|
250
|
+
else
|
|
251
|
+
configured_name = nil
|
|
252
|
+
switchname = false
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
switchname ? config('switchname xyz') : config('hostname xyz')
|
|
257
|
+
|
|
258
|
+
host_name = node.host_name
|
|
259
|
+
assert_equal('xyz', host_name)
|
|
260
|
+
|
|
261
|
+
if configured_name
|
|
262
|
+
config("hostname #{configured_name}") if switchname == false
|
|
263
|
+
config("switchname #{configured_name}") if switchname == true
|
|
264
|
+
else
|
|
265
|
+
switchname ? config('no switchname') : config('no hostname')
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
def test_get_domain_name_when_not_set
|
|
270
|
+
# Test with default vrf only
|
|
271
|
+
s = @device.cmd("show running-config | incl '^#{@domain}'")
|
|
272
|
+
pattern = /^#{@domain} (\S+)/
|
|
273
|
+
md = pattern.match(s)
|
|
274
|
+
if md
|
|
275
|
+
configured_domain_name = md[1]
|
|
276
|
+
else
|
|
277
|
+
configured_domain_name = nil
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
config("no #{@domain} #{configured_domain_name}") unless
|
|
281
|
+
configured_domain_name.nil?
|
|
282
|
+
|
|
283
|
+
domain_name = node.domain_name
|
|
284
|
+
assert_equal('', domain_name)
|
|
285
|
+
|
|
286
|
+
if configured_domain_name
|
|
287
|
+
config("#{@domain} #{configured_domain_name}")
|
|
288
|
+
else
|
|
289
|
+
config("no #{@domain} abc.com")
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def test_get_domain_name_when_set
|
|
294
|
+
s = @device.cmd('show running-config | no-more')
|
|
295
|
+
pattern = /.*\n#{@domain} (\S+)/
|
|
296
|
+
md = pattern.match(s)
|
|
297
|
+
if md
|
|
298
|
+
configured_domain_name = md[1]
|
|
299
|
+
else
|
|
300
|
+
configured_domain_name = nil
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
config("#{@domain} abc.com")
|
|
304
|
+
|
|
305
|
+
domain_name = node.domain_name
|
|
306
|
+
assert_equal('abc.com', domain_name)
|
|
307
|
+
|
|
308
|
+
if configured_domain_name
|
|
309
|
+
config("#{@domain} #{configured_domain_name}")
|
|
310
|
+
else
|
|
311
|
+
config("no #{@domain} abc.com")
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
def test_get_system_uptime
|
|
316
|
+
node.cache_flush
|
|
317
|
+
|
|
318
|
+
cmd = node.cmd_ref.lookup('show_system', 'uptime').get_command
|
|
319
|
+
pattern = node.cmd_ref.lookup('show_system', 'uptime').get_value
|
|
320
|
+
|
|
321
|
+
md = assert_show_match(command: cmd, pattern: pattern)
|
|
322
|
+
node_uptime = node.system_uptime
|
|
323
|
+
|
|
324
|
+
observed_system_uptime = (
|
|
325
|
+
(md[1].to_i * 86_400) +
|
|
326
|
+
(md[2].to_i * 3600) +
|
|
327
|
+
(md[3].to_i * 60) +
|
|
328
|
+
(md[4].to_i)
|
|
329
|
+
)
|
|
330
|
+
delta = node_uptime - observed_system_uptime
|
|
331
|
+
assert(delta < 10,
|
|
332
|
+
"Error, System uptime delta is (#{delta}), expected (delta < 10)")
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
def test_get_last_reset_time
|
|
336
|
+
if validate_property_excluded?('show_version', 'last_reset_time')
|
|
337
|
+
assert_nil(node.last_reset_time)
|
|
338
|
+
else
|
|
339
|
+
refute_nil(node.last_reset_time) unless virtual_platform?
|
|
340
|
+
end
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def test_get_last_reset_reason
|
|
344
|
+
if validate_property_excluded?('show_version', 'last_reset_reason')
|
|
345
|
+
assert_nil(node.last_reset_reason)
|
|
346
|
+
return
|
|
347
|
+
end
|
|
348
|
+
assert_output_check(command: 'show version',
|
|
349
|
+
pattern: /.*\nLast reset.*\n\n? Reason: (.*)\n/,
|
|
350
|
+
check: node.last_reset_reason,
|
|
351
|
+
msg: 'Error, Last reset reason does not match') unless
|
|
352
|
+
virtual_platform?
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
def test_get_system_cpu_utilization
|
|
356
|
+
if validate_property_excluded?('system', 'resources')
|
|
357
|
+
assert_nil(node.system_cpu_utilization)
|
|
358
|
+
else
|
|
359
|
+
refute_nil(node.system_cpu_utilization)
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|
|
363
|
+
def test_get_boot
|
|
364
|
+
if validate_property_excluded?('show_version', 'boot_image')
|
|
365
|
+
assert_nil(node.boot)
|
|
366
|
+
return
|
|
367
|
+
end
|
|
368
|
+
|
|
369
|
+
# /N(5|6|7)/
|
|
370
|
+
# kickstart image file is: bootflash:///n7000-s2-kickstart.7.3.0.D1.1.bin
|
|
371
|
+
# /N(3|8|9)/
|
|
372
|
+
# NXOS image file is: bootflash:///nxos.7.0.3.I3.1.bin
|
|
373
|
+
|
|
374
|
+
pattern = /(?:kickstart|NXOS) image file is:\s+(.*)$/
|
|
375
|
+
assert_output_check(command: 'show version',
|
|
376
|
+
pattern: pattern,
|
|
377
|
+
check: node.boot,
|
|
378
|
+
msg: 'Error, Kickstart Image does not match')
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
def test_get_system
|
|
382
|
+
if validate_property_excluded?('show_version', 'system_image')
|
|
383
|
+
assert_nil(node.system)
|
|
384
|
+
return
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
# /N(5|6|7)/
|
|
388
|
+
# system image file is: bootflash:///n7000-s2-kickstart.7.3.0.D1.1.bin
|
|
389
|
+
# /N(3|8|9)/
|
|
390
|
+
# NXOS image file is: bootflash:///nxos.7.0.3.I3.1.bin
|
|
391
|
+
# /ios_xr/
|
|
392
|
+
# xrv9k-xr-6.1.1.19I version=6.1.1.19I [Boot image]
|
|
393
|
+
|
|
394
|
+
if platform[/ios_xr/]
|
|
395
|
+
cmd = 'show install active'
|
|
396
|
+
pattern = /^\s*(\S*)\s*version.*\[Boot image\]$/
|
|
397
|
+
else
|
|
398
|
+
cmd = 'show version'
|
|
399
|
+
pattern = /(?:system|NXOS) image file is:\s+(.*)$/
|
|
400
|
+
end
|
|
401
|
+
assert_output_check(command: cmd,
|
|
402
|
+
pattern: pattern,
|
|
403
|
+
check: node.system,
|
|
404
|
+
msg: 'Error, System Image does not match')
|
|
405
|
+
end
|
|
406
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
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/node_util'
|
|
17
|
+
|
|
18
|
+
# TestNodeUtil - Minitest for NodeUtil class
|
|
19
|
+
class TestNodeUtil < CiscoTestCase
|
|
20
|
+
attr_reader :nu
|
|
21
|
+
def setup
|
|
22
|
+
@nu = NodeUtil.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_node
|
|
26
|
+
assert_equal(node, nu.node)
|
|
27
|
+
assert_equal(node, NodeUtil.node)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_client
|
|
31
|
+
assert_equal(node.client, nu.client)
|
|
32
|
+
assert_equal(node.client, NodeUtil.client)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_config_get
|
|
36
|
+
result = node.config_get('show_version', 'system_image')
|
|
37
|
+
result2 = nu.config_get('show_version', 'system_image')
|
|
38
|
+
result3 = NodeUtil.config_get('show_version', 'system_image')
|
|
39
|
+
assert_equal(node.system, result)
|
|
40
|
+
assert_equal(result, result2)
|
|
41
|
+
assert_equal(result, result3)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_config_get_default
|
|
45
|
+
result = node.config_get_default('bgp', 'graceful_restart_timers_restart')
|
|
46
|
+
result2 = nu.config_get_default('bgp', 'graceful_restart_timers_restart')
|
|
47
|
+
result3 = NodeUtil.config_get_default('bgp',
|
|
48
|
+
'graceful_restart_timers_restart')
|
|
49
|
+
assert_equal(120, result)
|
|
50
|
+
assert_equal(result, result2)
|
|
51
|
+
assert_equal(result, result3)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_config_set_error_handling
|
|
55
|
+
# The Node error has no context information
|
|
56
|
+
e = assert_raises(Cisco::CliError) do
|
|
57
|
+
node.config_set('interface', 'shutdown',
|
|
58
|
+
name: interfaces[0], state: 'foobar')
|
|
59
|
+
end
|
|
60
|
+
assert_match(/^The command '.*shutdown' was rejected with error:/,
|
|
61
|
+
e.message)
|
|
62
|
+
rejected_input = e.rejected_input
|
|
63
|
+
clierror = e.clierror
|
|
64
|
+
|
|
65
|
+
# The NodeUtil class error just provides the class name by default...
|
|
66
|
+
e = assert_raises(Cisco::CliError) do
|
|
67
|
+
NodeUtil.config_set('interface', 'shutdown',
|
|
68
|
+
name: interfaces[0], state: 'foobar')
|
|
69
|
+
end
|
|
70
|
+
assert_match(
|
|
71
|
+
/^\[Cisco::NodeUtil\] The command '.*shutdown' was rejected with error:/,
|
|
72
|
+
e.message)
|
|
73
|
+
# Make sure error context from the Node was preserved
|
|
74
|
+
assert_equal(rejected_input, e.rejected_input)
|
|
75
|
+
assert_equal(clierror, e.clierror)
|
|
76
|
+
|
|
77
|
+
# ...but uses self.to_s if implemented
|
|
78
|
+
def NodeUtil.to_s
|
|
79
|
+
'Hello world'
|
|
80
|
+
end
|
|
81
|
+
e = assert_raises(Cisco::CliError) do
|
|
82
|
+
NodeUtil.config_set('interface', 'shutdown',
|
|
83
|
+
name: interfaces[0], state: 'foobar')
|
|
84
|
+
end
|
|
85
|
+
assert_match(
|
|
86
|
+
/^\[Hello world\] The command '.*shutdown' was rejected with error:/,
|
|
87
|
+
e.message)
|
|
88
|
+
# Make sure error context from the Node was preserved
|
|
89
|
+
assert_equal(rejected_input, e.rejected_input)
|
|
90
|
+
assert_equal(clierror, e.clierror)
|
|
91
|
+
|
|
92
|
+
# Similarly, the nu instance error provides the instance by default...
|
|
93
|
+
e = assert_raises(Cisco::CliError) do
|
|
94
|
+
nu.config_set('interface', 'shutdown',
|
|
95
|
+
name: interfaces[0], state: 'foobar')
|
|
96
|
+
end
|
|
97
|
+
assert_match(
|
|
98
|
+
/^\[#<Cisco::NodeUtil:0x.*>\] The command '.*shutdown' was rejected/,
|
|
99
|
+
e.message)
|
|
100
|
+
# Make sure error context from the Node was preserved
|
|
101
|
+
assert_equal(rejected_input, e.rejected_input)
|
|
102
|
+
assert_equal(clierror, e.clierror)
|
|
103
|
+
|
|
104
|
+
# ...but is happy to use the instance to_s
|
|
105
|
+
def nu.to_s
|
|
106
|
+
'NodeUtil #1'
|
|
107
|
+
end
|
|
108
|
+
e = assert_raises(Cisco::CliError) do
|
|
109
|
+
nu.config_set('interface', 'shutdown',
|
|
110
|
+
name: interfaces[0], state: 'foobar')
|
|
111
|
+
end
|
|
112
|
+
assert_match(
|
|
113
|
+
/^\[NodeUtil #1\] The command '.*shutdown' was rejected with error:/,
|
|
114
|
+
e.message)
|
|
115
|
+
# Make sure error context from the Node was preserved
|
|
116
|
+
assert_equal(rejected_input, e.rejected_input)
|
|
117
|
+
assert_equal(clierror, e.clierror)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Minitest for NtpAuthKey class
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2014-2017 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/ntp_auth_key'
|
|
20
|
+
|
|
21
|
+
# TestNtpAuthKey - Minitest for NtpAuthKey node utility.
|
|
22
|
+
class TestNtpAuthKey < CiscoTestCase
|
|
23
|
+
def setup
|
|
24
|
+
# setup runs at the beginning of each test
|
|
25
|
+
super
|
|
26
|
+
no_ntpkey
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def teardown
|
|
30
|
+
# teardown runs at the end of each test
|
|
31
|
+
no_ntpkey
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def no_ntpkey
|
|
36
|
+
# Turn the feature off for a clean test.
|
|
37
|
+
config('no ntp authentication-key 111 md5 test 7',
|
|
38
|
+
'no ntp authentication-key 999 md5 test 7')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# TESTS
|
|
42
|
+
|
|
43
|
+
def test_create_defaults
|
|
44
|
+
id = '111'
|
|
45
|
+
options = { 'name' => id, 'password' => 'test' }
|
|
46
|
+
refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
|
|
47
|
+
|
|
48
|
+
key = Cisco::NtpAuthKey.new(options, true)
|
|
49
|
+
assert_includes(Cisco::NtpAuthKey.ntpkeys, id)
|
|
50
|
+
assert_equal(key, Cisco::NtpAuthKey.ntpkeys[id])
|
|
51
|
+
|
|
52
|
+
assert_equal(id, Cisco::NtpAuthKey.ntpkeys[id].name)
|
|
53
|
+
assert_equal('md5', Cisco::NtpAuthKey.ntpkeys[id].algorithm)
|
|
54
|
+
assert_equal('7', Cisco::NtpAuthKey.ntpkeys[id].mode)
|
|
55
|
+
|
|
56
|
+
key.destroy
|
|
57
|
+
refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_create_options
|
|
61
|
+
id = '999'
|
|
62
|
+
options = { 'name' => id, 'password' => 'test', 'algorithm' => 'md5',
|
|
63
|
+
'mode' => '7' }
|
|
64
|
+
refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
|
|
65
|
+
|
|
66
|
+
key = Cisco::NtpAuthKey.new(options, true)
|
|
67
|
+
assert_includes(Cisco::NtpAuthKey.ntpkeys, id)
|
|
68
|
+
assert_equal(key, Cisco::NtpAuthKey.ntpkeys[id])
|
|
69
|
+
|
|
70
|
+
assert_equal(id, Cisco::NtpAuthKey.ntpkeys[id].name)
|
|
71
|
+
assert_equal('md5', Cisco::NtpAuthKey.ntpkeys[id].algorithm)
|
|
72
|
+
assert_equal('7', Cisco::NtpAuthKey.ntpkeys[id].mode)
|
|
73
|
+
|
|
74
|
+
key.destroy
|
|
75
|
+
refute_includes(Cisco::NtpAuthKey.ntpkeys, id)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Minitest for NtpConfig class
|
|
3
|
+
#
|
|
4
|
+
# Copyright (c) 2015-2017 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/ntp_config'
|
|
20
|
+
|
|
21
|
+
# TestNtpConfig - Minitest for NtpConfig node utility.
|
|
22
|
+
class TestNtpConfig < CiscoTestCase
|
|
23
|
+
def setup
|
|
24
|
+
# setup runs at the beginning of each test
|
|
25
|
+
super
|
|
26
|
+
no_ntpconfig
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def teardown
|
|
30
|
+
# teardown runs at the end of each test
|
|
31
|
+
no_ntpconfig
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def no_ntpconfig
|
|
36
|
+
# Turn the feature off for a clean test.
|
|
37
|
+
if platform == :ios_xr
|
|
38
|
+
config("no ntp source #{interfaces[1]}")
|
|
39
|
+
else
|
|
40
|
+
config("no ntp source-interface #{interfaces[1]}",
|
|
41
|
+
'no ntp authentication-key 111 md5 test 7',
|
|
42
|
+
'no ntp authentication-key 999 md5 test 7',
|
|
43
|
+
'no ntp trusted-key 111',
|
|
44
|
+
'no ntp trusted-key 999',
|
|
45
|
+
'no ntp authenticate')
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# TESTS
|
|
50
|
+
|
|
51
|
+
def test_source_interface
|
|
52
|
+
id = 'default'
|
|
53
|
+
|
|
54
|
+
ntp = Cisco::NtpConfig.new(id)
|
|
55
|
+
assert_includes(Cisco::NtpConfig.ntpconfigs, id)
|
|
56
|
+
assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
|
|
57
|
+
|
|
58
|
+
assert_nil(Cisco::NtpConfig.ntpconfigs[id].source_interface)
|
|
59
|
+
assert_nil(ntp.source_interface)
|
|
60
|
+
|
|
61
|
+
ntp.source_interface = interfaces[1]
|
|
62
|
+
assert_equal(Cisco::NtpConfig.ntpconfigs[id].source_interface,
|
|
63
|
+
interfaces[1].downcase)
|
|
64
|
+
assert_equal(Cisco::NtpConfig.ntpconfigs[id].source_interface,
|
|
65
|
+
ntp.source_interface)
|
|
66
|
+
|
|
67
|
+
ntp.source_interface = nil
|
|
68
|
+
assert_nil(Cisco::NtpConfig.ntpconfigs[id].source_interface)
|
|
69
|
+
assert_nil(ntp.source_interface)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_authenticate
|
|
73
|
+
id = 'default'
|
|
74
|
+
|
|
75
|
+
ntp = Cisco::NtpConfig.new(id)
|
|
76
|
+
assert_includes(Cisco::NtpConfig.ntpconfigs, id)
|
|
77
|
+
assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
|
|
78
|
+
|
|
79
|
+
assert_equal(false, Cisco::NtpConfig.ntpconfigs[id].authenticate)
|
|
80
|
+
|
|
81
|
+
ntp.authenticate = true
|
|
82
|
+
assert_equal(true, Cisco::NtpConfig.ntpconfigs[id].authenticate)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_trusted_key
|
|
86
|
+
id = 'default'
|
|
87
|
+
|
|
88
|
+
ntp = Cisco::NtpConfig.new(id)
|
|
89
|
+
assert_includes(Cisco::NtpConfig.ntpconfigs, id)
|
|
90
|
+
assert_equal(Cisco::NtpConfig.ntpconfigs[id], ntp)
|
|
91
|
+
|
|
92
|
+
assert_nil(Cisco::NtpConfig.ntpconfigs[id].trusted_key)
|
|
93
|
+
|
|
94
|
+
config('ntp authentication-key 111 md5 test 7',
|
|
95
|
+
'ntp authentication-key 999 md5 test 7')
|
|
96
|
+
ntp.trusted_key_set(true, 111)
|
|
97
|
+
ntp.trusted_key_set(true, 999)
|
|
98
|
+
assert_equal(%w(111 999), Cisco::NtpConfig.ntpconfigs[id].trusted_key)
|
|
99
|
+
end
|
|
100
|
+
end
|