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,146 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Minitest for NtpServer 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_server'
|
|
20
|
+
|
|
21
|
+
# TestNtpServer - Minitest for NtpServer node utility.
|
|
22
|
+
class TestNtpServer < CiscoTestCase
|
|
23
|
+
def setup
|
|
24
|
+
# setup runs at the beginning of each test
|
|
25
|
+
super
|
|
26
|
+
no_ntpserver
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def teardown
|
|
30
|
+
# teardown runs at the end of each test
|
|
31
|
+
no_ntpserver
|
|
32
|
+
super
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def no_ntpserver
|
|
36
|
+
# Turn the feature off for a clean test.
|
|
37
|
+
config('no ntp server 130.88.203.12',
|
|
38
|
+
'no ntp server 2003::5',
|
|
39
|
+
'no ntp server 0.us.pool.ntp.org',
|
|
40
|
+
'no ntp authentication-key 999 md5 test 7',
|
|
41
|
+
'no vrf context red')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# TESTS
|
|
45
|
+
|
|
46
|
+
def test_create_name_invalid
|
|
47
|
+
assert_raises(ArgumentError) do
|
|
48
|
+
Cisco::NtpServer.new({ 'name' => '1_com' }, true)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_ipv4
|
|
53
|
+
id = '130.88.203.12'
|
|
54
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
55
|
+
|
|
56
|
+
ntp = Cisco::NtpServer.new({ 'name' => id }, true)
|
|
57
|
+
assert_includes(Cisco::NtpServer.ntpservers, id)
|
|
58
|
+
assert_equal(ntp, Cisco::NtpServer.ntpservers[id])
|
|
59
|
+
|
|
60
|
+
ntp.destroy
|
|
61
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_ipv6
|
|
65
|
+
id = '2003::5'
|
|
66
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
67
|
+
|
|
68
|
+
ntp = Cisco::NtpServer.new({ 'name' => id }, true)
|
|
69
|
+
assert_includes(Cisco::NtpServer.ntpservers, id)
|
|
70
|
+
assert_equal(ntp, Cisco::NtpServer.ntpservers[id])
|
|
71
|
+
|
|
72
|
+
ntp.destroy
|
|
73
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def test_multiple
|
|
77
|
+
id1 = '130.88.203.12'
|
|
78
|
+
id2 = '2003::5'
|
|
79
|
+
refute_includes(Cisco::NtpServer.ntpservers, id1)
|
|
80
|
+
refute_includes(Cisco::NtpServer.ntpservers, id2)
|
|
81
|
+
|
|
82
|
+
ntp1 = Cisco::NtpServer.new({ 'name' => id1 }, true)
|
|
83
|
+
ntp2 = Cisco::NtpServer.new({ 'name' => id2 }, true)
|
|
84
|
+
refute_equal(ntp1, ntp2)
|
|
85
|
+
assert_includes(Cisco::NtpServer.ntpservers, id1)
|
|
86
|
+
assert_includes(Cisco::NtpServer.ntpservers, id2)
|
|
87
|
+
assert_equal(ntp1, Cisco::NtpServer.ntpservers[id1])
|
|
88
|
+
assert_equal(ntp2, Cisco::NtpServer.ntpservers[id2])
|
|
89
|
+
|
|
90
|
+
ntp1.destroy
|
|
91
|
+
ntp2.destroy
|
|
92
|
+
refute_includes(Cisco::NtpServer.ntpservers, id1)
|
|
93
|
+
refute_includes(Cisco::NtpServer.ntpservers, id2)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# This test requires DNS resolution be avaabile - leaving for reference
|
|
97
|
+
# def test_domain_name
|
|
98
|
+
# id = '0.us.pool.ntp.org'
|
|
99
|
+
# refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
100
|
+
#
|
|
101
|
+
# ntp = Cisco::NtpServer.new({ 'name' => id }, true)
|
|
102
|
+
# assert_includes(Cisco::NtpServer.ntpservers, id)
|
|
103
|
+
# assert_equal(ntp, Cisco::NtpServer.ntpservers[id])
|
|
104
|
+
#
|
|
105
|
+
# ntp.destroy
|
|
106
|
+
# refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
107
|
+
# end
|
|
108
|
+
|
|
109
|
+
def test_defaults
|
|
110
|
+
id = '130.88.203.12'
|
|
111
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
112
|
+
|
|
113
|
+
ntp = Cisco::NtpServer.new({ 'name' => id }, true)
|
|
114
|
+
assert_includes(Cisco::NtpServer.ntpservers, id)
|
|
115
|
+
assert_equal('default', Cisco::NtpServer.ntpservers[id].vrf)
|
|
116
|
+
assert_nil(Cisco::NtpServer.ntpservers[id].key)
|
|
117
|
+
assert_nil(Cisco::NtpServer.ntpservers[id].maxpoll)
|
|
118
|
+
assert_nil(Cisco::NtpServer.ntpservers[id].minpoll)
|
|
119
|
+
refute(Cisco::NtpServer.ntpservers[id].prefer)
|
|
120
|
+
|
|
121
|
+
ntp.destroy
|
|
122
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_create_options
|
|
126
|
+
id = '130.88.203.12'
|
|
127
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
128
|
+
|
|
129
|
+
options = { 'name' => id, 'key' => '999', 'prefer' => 'true',
|
|
130
|
+
'minpoll' => '5', 'maxpoll' => '8', 'vrf' => 'red' }
|
|
131
|
+
|
|
132
|
+
config('vrf context red')
|
|
133
|
+
config('ntp authentication-key 999 md5 test 7')
|
|
134
|
+
|
|
135
|
+
ntp = Cisco::NtpServer.new(options, true)
|
|
136
|
+
assert_includes(Cisco::NtpServer.ntpservers, id)
|
|
137
|
+
assert_equal('red', Cisco::NtpServer.ntpservers[id].vrf)
|
|
138
|
+
assert_equal('999', Cisco::NtpServer.ntpservers[id].key)
|
|
139
|
+
assert_equal('5', Cisco::NtpServer.ntpservers[id].minpoll)
|
|
140
|
+
assert_equal('8', Cisco::NtpServer.ntpservers[id].maxpoll)
|
|
141
|
+
assert(Cisco::NtpServer.ntpservers[id].prefer)
|
|
142
|
+
|
|
143
|
+
ntp.destroy
|
|
144
|
+
refute_includes(Cisco::NtpServer.ntpservers, id)
|
|
145
|
+
end
|
|
146
|
+
end
|
data/tests/test_nxapi.rb
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# November 2014, Glenn F. Matthews
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2014-2016 Cisco and/or its affiliates.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative 'ciscotest'
|
|
18
|
+
require_relative '../lib/cisco_node_utils/node'
|
|
19
|
+
|
|
20
|
+
# TestNxapi - NXAPI client unit tests
|
|
21
|
+
class TestNxapi < CiscoTestCase
|
|
22
|
+
@@client = nil # rubocop:disable Style/ClassVars
|
|
23
|
+
|
|
24
|
+
def self.runnable_methods
|
|
25
|
+
# If we're pointed to a gRPC node (as evidenced by presence of a port num)
|
|
26
|
+
# then these tests don't apply
|
|
27
|
+
return [:all_skipped] if Cisco::Environment.environment[:port]
|
|
28
|
+
super
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def all_skipped
|
|
32
|
+
skip 'Node under test does not appear to use the NXAPI client'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def setup
|
|
36
|
+
super
|
|
37
|
+
@device.cmd('configure terminal')
|
|
38
|
+
@device.cmd('feature nxapi')
|
|
39
|
+
@device.cmd('nxapi http port 80')
|
|
40
|
+
@device.cmd('end')
|
|
41
|
+
@product_id = Cisco::Node.new.product_id if @product_id.nil?
|
|
42
|
+
cleanup
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def teardown
|
|
46
|
+
@device.cmd('configure terminal')
|
|
47
|
+
@device.cmd('feature nxapi')
|
|
48
|
+
@device.cmd('nxapi http port 80')
|
|
49
|
+
@device.cmd('end')
|
|
50
|
+
cleanup
|
|
51
|
+
super
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def cleanup
|
|
55
|
+
return if Cisco::Environment.environment[:port]
|
|
56
|
+
config_no_warn('no interface loopback41', 'no interface loopback42')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def client
|
|
60
|
+
unless @@client
|
|
61
|
+
client = Cisco::Client::NXAPI.new(Cisco::Environment.environment)
|
|
62
|
+
client.cache_enable = true
|
|
63
|
+
client.cache_auto = true
|
|
64
|
+
@@client = client # rubocop:disable Style/ClassVars
|
|
65
|
+
end
|
|
66
|
+
@@client
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Test cases for new NXAPI client APIs
|
|
70
|
+
|
|
71
|
+
def test_cli_set_string
|
|
72
|
+
client.set(context: 'interface loopback41', values: 'descr panda')
|
|
73
|
+
run = client.get(command: 'show run int loopback41')
|
|
74
|
+
desc = run.match(/description (.*)/)[1]
|
|
75
|
+
assert_equal(desc, 'panda')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_cli_set_array
|
|
79
|
+
client.set(context: ['int loopback41'], values: ['descr elephant'])
|
|
80
|
+
run = client.get(command: 'show run int loopback41')
|
|
81
|
+
desc = run.match(/description (.*)/)[1]
|
|
82
|
+
assert_equal(desc, 'elephant')
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_cli_set_invalid
|
|
86
|
+
input = ['int loopback41', 'exit', 'int loopback42', 'plover']
|
|
87
|
+
successful = ['int loopback41', 'exit', 'int loopback42']
|
|
88
|
+
rejected = 'plover'
|
|
89
|
+
|
|
90
|
+
msg = case @product_id
|
|
91
|
+
when /N(5|6|7)/
|
|
92
|
+
'Input CLI command error'
|
|
93
|
+
when /N(3|8|9)/
|
|
94
|
+
'CLI execution error'
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
e = assert_raises Cisco::CliError do
|
|
98
|
+
client.set(values: input)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
cli_rcs = "
|
|
102
|
+
cli return codes:
|
|
103
|
+
successful : #{e.successful_input}
|
|
104
|
+
rejected : #{e.rejected_input}
|
|
105
|
+
msg : #{e.msg}
|
|
106
|
+
code : #{e.code}
|
|
107
|
+
clierror : #{e.clierror}
|
|
108
|
+
"
|
|
109
|
+
assert_equal(successful, e.successful_input, cli_rcs)
|
|
110
|
+
assert_equal(rejected, e.rejected_input, cli_rcs)
|
|
111
|
+
|
|
112
|
+
assert_match(msg, e.msg, cli_rcs)
|
|
113
|
+
assert_equal('400', e.code, cli_rcs)
|
|
114
|
+
assert_match('% Invalid command', e.clierror, cli_rcs)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_get_cli_default
|
|
118
|
+
result = client.get(command: 'show hostname')
|
|
119
|
+
s = @device.cmd('show hostname')
|
|
120
|
+
assert_equal(result.strip, s.split("\n")[1].strip)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_get_cli_invalid
|
|
124
|
+
assert_raises Cisco::CliError do
|
|
125
|
+
client.get(command: 'show plugh')
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_element_get_cli_incomplete
|
|
130
|
+
assert_raises Cisco::CliError do
|
|
131
|
+
client.get(command: 'show ')
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def test_get_cli_explicit
|
|
136
|
+
result = client.get(command: 'show hostname', data_format: :cli)
|
|
137
|
+
s = @device.cmd('show hostname')
|
|
138
|
+
assert_equal(result.strip, s.split("\n")[1].strip)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_get_cli_empty
|
|
142
|
+
result = client.get(command: 'show hostname | incl foo | excl foo',
|
|
143
|
+
data_format: :cli)
|
|
144
|
+
assert_nil(result)
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
def test_get_nxapi_structured
|
|
148
|
+
result = client.get(command: 'show hostname',
|
|
149
|
+
data_format: :nxapi_structured)
|
|
150
|
+
s = @device.cmd('show hostname')
|
|
151
|
+
assert_equal(result['hostname'], s.split("\n")[1].strip)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def test_get_nxapi_structured_invalid
|
|
155
|
+
assert_raises Cisco::CliError do
|
|
156
|
+
client.get(command: 'show frobozz', data_format: :nxapi_structured)
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def test_get_nxapi_structured_unsupported
|
|
161
|
+
cmd = { command: 'show snmp internal globals',
|
|
162
|
+
data_format: :nxapi_structured }
|
|
163
|
+
if @product_id[/N(5|6)/]
|
|
164
|
+
assert_empty(client.get(cmd).to_s)
|
|
165
|
+
else
|
|
166
|
+
assert_raises(Cisco::RequestNotSupported) { client.get(cmd) }
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def test_connection_refused
|
|
171
|
+
@device.cmd('configure terminal')
|
|
172
|
+
@device.cmd('no feature nxapi')
|
|
173
|
+
@device.cmd('end')
|
|
174
|
+
assert_raises Cisco::ConnectionRefused do
|
|
175
|
+
client.cache_flush
|
|
176
|
+
client.get(command: 'show version')
|
|
177
|
+
end
|
|
178
|
+
assert_raises Cisco::ConnectionRefused do
|
|
179
|
+
client.set(values: 'interface loopback41')
|
|
180
|
+
end
|
|
181
|
+
# On the off chance that things behave differently when NXAPI is
|
|
182
|
+
# disabled while we're connected, versus trying to connect afresh...
|
|
183
|
+
@@client = nil # rubocop:disable Style/ClassVars
|
|
184
|
+
assert_raises Cisco::ConnectionRefused do
|
|
185
|
+
client.get(command: 'show version')
|
|
186
|
+
end
|
|
187
|
+
assert_raises Cisco::ConnectionRefused do
|
|
188
|
+
client.set(values: 'interface loopback41')
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def test_unauthorized
|
|
193
|
+
def client.password=(new) # rubocop:disable Style/TrivialAccessors
|
|
194
|
+
@password = new
|
|
195
|
+
end
|
|
196
|
+
client.password = 'wrong_password'
|
|
197
|
+
client.cache_flush
|
|
198
|
+
assert_raises Cisco::AuthenticationFailed do
|
|
199
|
+
client.get(command: 'show version')
|
|
200
|
+
end
|
|
201
|
+
assert_raises Cisco::AuthenticationFailed do
|
|
202
|
+
client.set(values: 'interface loopback41')
|
|
203
|
+
end
|
|
204
|
+
ensure
|
|
205
|
+
client.password = password
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def test_unsupported
|
|
209
|
+
# Add a method to the NXAPI that sends a request of invalid type
|
|
210
|
+
if !product_tag[/n(3|9)k-f/]
|
|
211
|
+
def client.hello
|
|
212
|
+
req('hello', 'world')
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
assert_raises Cisco::RequestNotSupported do
|
|
216
|
+
client.hello
|
|
217
|
+
end
|
|
218
|
+
else
|
|
219
|
+
def client.hello
|
|
220
|
+
req('hello', 'world')
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
assert_raises Cisco::ClientError do
|
|
224
|
+
client.hello
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def test_smart_create
|
|
230
|
+
autoclient = Cisco::Client.create
|
|
231
|
+
assert_equal(Cisco::Client::NXAPI, autoclient.class)
|
|
232
|
+
assert(autoclient.supports?(:cli))
|
|
233
|
+
assert(autoclient.supports?(:nxapi_structured))
|
|
234
|
+
assert_equal(:nexus, autoclient.platform)
|
|
235
|
+
end
|
|
236
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Copyright (c) 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/object_group'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/object_group_entry'
|
|
18
|
+
|
|
19
|
+
# TestObject_group - Minitest for Object_group
|
|
20
|
+
# node utility class
|
|
21
|
+
class TestObjectGroup < CiscoTestCase
|
|
22
|
+
@skip_unless_supported = 'object_group'
|
|
23
|
+
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
24
|
+
|
|
25
|
+
def setup
|
|
26
|
+
super
|
|
27
|
+
@og_name_v4 = 'test-my-v4'
|
|
28
|
+
@og_name_v6 = 'test-my-v6'
|
|
29
|
+
@og_name_port = 'test-my-port'
|
|
30
|
+
remove_all_object_groups if @@pre_clean_needed
|
|
31
|
+
@@pre_clean_needed = false # rubocop:disable Style/ClassVars
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def teardown
|
|
35
|
+
remove_all_object_groups
|
|
36
|
+
super
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def remove_all_object_groups
|
|
40
|
+
ObjectGroup.object_groups.each do |_afis, types|
|
|
41
|
+
types.each do |_type, grps|
|
|
42
|
+
grps.values.each(&:destroy)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_create_object_group
|
|
48
|
+
%w(ipv4 ipv6).each do |afi|
|
|
49
|
+
og_name = afi[/ipv6/] ? @og_name_v6 : @og_name_v4
|
|
50
|
+
og = ObjectGroup.new(afi, 'address', og_name)
|
|
51
|
+
assert(ObjectGroup.object_groups[afi]['address'].key?(og_name))
|
|
52
|
+
og.destroy
|
|
53
|
+
assert_nil(ObjectGroup.object_groups[afi])
|
|
54
|
+
end
|
|
55
|
+
og_name = @og_name_port
|
|
56
|
+
og = ObjectGroup.new('ipv4', 'port', og_name)
|
|
57
|
+
assert(ObjectGroup.object_groups['ipv4']['port'].key?(og_name))
|
|
58
|
+
og.destroy
|
|
59
|
+
assert_nil(ObjectGroup.object_groups['ipv4'])
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def entry_helper(afi, type, name, props=nil)
|
|
63
|
+
test_hash = {
|
|
64
|
+
address: 'host 1.1.1.1',
|
|
65
|
+
port: 'eq 200',
|
|
66
|
+
}
|
|
67
|
+
test_hash.merge!(props) unless props.nil?
|
|
68
|
+
|
|
69
|
+
ObjectGroup.new(afi, type, name)
|
|
70
|
+
e = ObjectGroupEntry.new(afi, type, name, 10)
|
|
71
|
+
e.entry_set(test_hash)
|
|
72
|
+
e
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def test_ipv4_address_host
|
|
76
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, port: nil)
|
|
77
|
+
assert_equal('host 1.1.1.1', e.address)
|
|
78
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: 'host 2.2.2.2', port: nil)
|
|
79
|
+
assert_equal('host 2.2.2.2', e.address)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_ipv4_address_prefix
|
|
83
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '2.2.2.2/17', port: nil)
|
|
84
|
+
assert_equal('2.2.2.2/17', e.address)
|
|
85
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '3.3.3.3/31', port: nil)
|
|
86
|
+
assert_equal('3.3.3.3/31', e.address)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_ipv4_address_netmask
|
|
90
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '2.2.2.2 255.255.255.0', port: nil)
|
|
91
|
+
assert_equal('2.2.2.2 255.255.255.0', e.address)
|
|
92
|
+
e = entry_helper('ipv4', 'address', @og_name_v4, address: '3.3.3.3 10.11.12.13', port: nil)
|
|
93
|
+
assert_equal('3.3.3.3 10.11.12.13', e.address)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_ipv6_address_host
|
|
97
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: 'host 2000::1', port: nil)
|
|
98
|
+
assert_equal('host 2000::1', e.address)
|
|
99
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: 'host 2001::2', port: nil)
|
|
100
|
+
assert_equal('host 2001::2', e.address)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_ipv6_address_prefix
|
|
104
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: '2000::1/127', port: nil)
|
|
105
|
+
assert_equal('2000::1/127', e.address)
|
|
106
|
+
e = entry_helper('ipv6', 'address', @og_name_v6, address: '2001::10/64', port: nil)
|
|
107
|
+
assert_equal('2001::10/64', e.address)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def test_ipv4_port
|
|
111
|
+
e = entry_helper('ipv4', 'port', @og_name_port, address: nil)
|
|
112
|
+
assert_equal('eq 200', e.port)
|
|
113
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'lt 100', address: nil)
|
|
114
|
+
assert_equal('lt 100', e.port)
|
|
115
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'neq 150', address: nil)
|
|
116
|
+
assert_equal('neq 150', e.port)
|
|
117
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'gt 350', address: nil)
|
|
118
|
+
assert_equal('gt 350', e.port)
|
|
119
|
+
e = entry_helper('ipv4', 'port', @og_name_port, port: 'range 400 1000', address: nil)
|
|
120
|
+
assert_equal('range 400 1000', e.port)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Copyright (c) 2013-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/cisco_cmn_utils'
|
|
17
|
+
require_relative '../lib/cisco_node_utils/feature'
|
|
18
|
+
require_relative '../lib/cisco_node_utils/overlay_global'
|
|
19
|
+
|
|
20
|
+
include Cisco
|
|
21
|
+
|
|
22
|
+
# TestOverlayGlobal - Minitest for OverlayGlobal node utility
|
|
23
|
+
class TestOverlayGlobal < CiscoTestCase
|
|
24
|
+
@skip_unless_supported = 'overlay_global'
|
|
25
|
+
|
|
26
|
+
def setup
|
|
27
|
+
super
|
|
28
|
+
vdc_limit_f3_no_intf_needed(:set)
|
|
29
|
+
config_no_warn('no feature fabric forwarding')
|
|
30
|
+
config_no_warn('no nv overlay evpn')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def teardown
|
|
34
|
+
config_no_warn('no feature fabric forwarding')
|
|
35
|
+
config_no_warn('no nv overlay evpn')
|
|
36
|
+
vdc_limit_f3_no_intf_needed(:clear) if first_or_last_teardown
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_dup_host_ip_addr_detection
|
|
40
|
+
o = OverlayGlobal.new
|
|
41
|
+
if validate_property_excluded?('overlay_global',
|
|
42
|
+
'dup_host_ip_addr_detection')
|
|
43
|
+
assert_raises(Cisco::UnsupportedError) do
|
|
44
|
+
o.dup_host_ip_addr_detection_set(200, 20)
|
|
45
|
+
end
|
|
46
|
+
return
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
assert_equal(o.default_dup_host_ip_addr_detection_host_moves,
|
|
50
|
+
o.dup_host_ip_addr_detection_host_moves)
|
|
51
|
+
assert_equal(o.default_dup_host_ip_addr_detection_timeout,
|
|
52
|
+
o.dup_host_ip_addr_detection_timeout)
|
|
53
|
+
|
|
54
|
+
# Set them to the default value and they should now be present
|
|
55
|
+
default = [o.default_dup_host_ip_addr_detection_host_moves,
|
|
56
|
+
o.default_dup_host_ip_addr_detection_timeout]
|
|
57
|
+
o.dup_host_ip_addr_detection_set(*default)
|
|
58
|
+
assert_equal(default[0], o.dup_host_ip_addr_detection_host_moves)
|
|
59
|
+
assert_equal(default[1], o.dup_host_ip_addr_detection_timeout)
|
|
60
|
+
assert(Feature.nv_overlay_evpn_enabled?)
|
|
61
|
+
|
|
62
|
+
# Set them to non-default values
|
|
63
|
+
val = [200, 20]
|
|
64
|
+
o.dup_host_ip_addr_detection_set(*val)
|
|
65
|
+
assert_equal(val, o.dup_host_ip_addr_detection)
|
|
66
|
+
assert_equal(val[0], o.dup_host_ip_addr_detection_host_moves)
|
|
67
|
+
assert_equal(val[1], o.dup_host_ip_addr_detection_timeout)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_dup_host_mac_detection
|
|
71
|
+
o = OverlayGlobal.new
|
|
72
|
+
|
|
73
|
+
skip_incompat_version?('overlay_global', 'dup_host_mac_detection')
|
|
74
|
+
# Set to a non-default value
|
|
75
|
+
val = [160, 16]
|
|
76
|
+
o.dup_host_mac_detection_set(*val)
|
|
77
|
+
assert_equal(val, o.dup_host_mac_detection)
|
|
78
|
+
refute(Feature.nv_overlay_evpn_enabled?)
|
|
79
|
+
|
|
80
|
+
# These properties always exist, even without 'nv overlay evpn'
|
|
81
|
+
default = [o.default_dup_host_mac_detection_host_moves,
|
|
82
|
+
o.default_dup_host_mac_detection_timeout]
|
|
83
|
+
o.dup_host_mac_detection_set(*default)
|
|
84
|
+
assert_equal(default, o.dup_host_mac_detection)
|
|
85
|
+
refute(Feature.nv_overlay_evpn_enabled?)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_anycast_gateway_mac
|
|
89
|
+
o = OverlayGlobal.new
|
|
90
|
+
if validate_property_excluded?('overlay_global', 'anycast_gateway_mac')
|
|
91
|
+
assert_raises(Cisco::UnsupportedError) { o.anycast_gateway_mac = '1.1.1' }
|
|
92
|
+
return
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
assert_equal(o.default_anycast_gateway_mac, o.anycast_gateway_mac)
|
|
96
|
+
|
|
97
|
+
# Explicitly set to default and it should be enabled
|
|
98
|
+
o.anycast_gateway_mac = o.default_anycast_gateway_mac
|
|
99
|
+
assert_equal(o.default_anycast_gateway_mac, o.anycast_gateway_mac)
|
|
100
|
+
assert(Feature.nv_overlay_evpn_enabled?)
|
|
101
|
+
|
|
102
|
+
# Set to various non-default values
|
|
103
|
+
%w(1.1.1 55.a10.ffff 1223.3445.5668).each do |mac|
|
|
104
|
+
o.anycast_gateway_mac = mac
|
|
105
|
+
assert_equal(Utils.zero_pad_macaddr(mac), o.anycast_gateway_mac)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|