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.
Files changed (357) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +96 -0
  5. data/.travis.yml +17 -0
  6. data/CHANGELOG.md +676 -0
  7. data/CONTRIBUTING.md +43 -0
  8. data/Gemfile +10 -0
  9. data/LICENSE +201 -0
  10. data/README.md +246 -0
  11. data/Rakefile +44 -0
  12. data/SUPPORT.md +3 -0
  13. data/bin/.rubocop.yml +18 -0
  14. data/bin/check_metric_limits.rb +109 -0
  15. data/bin/git/hooks/commit-msg/enforce_style +89 -0
  16. data/bin/git/hooks/hook_lib +115 -0
  17. data/bin/git/hooks/hooks-wrapper +38 -0
  18. data/bin/git/hooks/post-flow-hotfix-start/update-version +24 -0
  19. data/bin/git/hooks/post-flow-release-finish/update-version +29 -0
  20. data/bin/git/hooks/post-flow-release-start/update-version +19 -0
  21. data/bin/git/hooks/post-merge/update-hooks +6 -0
  22. data/bin/git/hooks/post-rewrite/update-hooks +6 -0
  23. data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
  24. data/bin/git/hooks/pre-commit/rubocop +25 -0
  25. data/bin/git/hooks/pre-commit/validate-diffs +45 -0
  26. data/bin/git/hooks/pre-commit/validate-yaml +18 -0
  27. data/bin/git/hooks/pre-push/check-changelog +24 -0
  28. data/bin/git/hooks/pre-push/rubocop +7 -0
  29. data/bin/git/update-hooks +123 -0
  30. data/bin/show_running_yang.rb +233 -0
  31. data/cisco_node_utils.gemspec +41 -0
  32. data/docs/README-develop-best-practices.md +521 -0
  33. data/docs/README-develop-node-utils-APIs.md +570 -0
  34. data/docs/README-maintainers.md +77 -0
  35. data/docs/README-test-execution.md +57 -0
  36. data/docs/README-utilities.md +14 -0
  37. data/docs/agent_files.png +0 -0
  38. data/docs/cisco_node_utils.yaml.example +36 -0
  39. data/docs/template-router.rb +123 -0
  40. data/docs/template-test_router.rb +104 -0
  41. data/ext/mkrf_conf.rb +63 -0
  42. data/lib/.rubocop.yml +18 -0
  43. data/lib/cisco_node_utils/aaa_authentication_login.rb +95 -0
  44. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +138 -0
  45. data/lib/cisco_node_utils/aaa_authorization_service.rb +156 -0
  46. data/lib/cisco_node_utils/ace.rb +467 -0
  47. data/lib/cisco_node_utils/acl.rb +101 -0
  48. data/lib/cisco_node_utils/banner.rb +63 -0
  49. data/lib/cisco_node_utils/bfd_global.rb +305 -0
  50. data/lib/cisco_node_utils/bgp.rb +988 -0
  51. data/lib/cisco_node_utils/bgp_af.rb +545 -0
  52. data/lib/cisco_node_utils/bgp_af_aggr_addr.rb +207 -0
  53. data/lib/cisco_node_utils/bgp_neighbor.rb +527 -0
  54. data/lib/cisco_node_utils/bgp_neighbor_af.rb +780 -0
  55. data/lib/cisco_node_utils/bridge_domain.rb +178 -0
  56. data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
  57. data/lib/cisco_node_utils/cisco_cmn_utils.rb +444 -0
  58. data/lib/cisco_node_utils/client/client.rb +238 -0
  59. data/lib/cisco_node_utils/client/grpc/client.rb +395 -0
  60. data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
  61. data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
  62. data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
  63. data/lib/cisco_node_utils/client/grpc.rb +33 -0
  64. data/lib/cisco_node_utils/client/nxapi/client.rb +368 -0
  65. data/lib/cisco_node_utils/client/nxapi.rb +31 -0
  66. data/lib/cisco_node_utils/client/utils.rb +180 -0
  67. data/lib/cisco_node_utils/client.rb +35 -0
  68. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +590 -0
  69. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +25 -0
  70. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +38 -0
  71. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +40 -0
  72. data/lib/cisco_node_utils/cmd_ref/acl.yaml +48 -0
  73. data/lib/cisco_node_utils/cmd_ref/banner.yaml +11 -0
  74. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
  75. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +383 -0
  76. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +223 -0
  77. data/lib/cisco_node_utils/cmd_ref/bgp_af_aa.yaml +38 -0
  78. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +174 -0
  79. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +236 -0
  80. data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +49 -0
  81. data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
  82. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +128 -0
  83. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +55 -0
  84. data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
  85. data/lib/cisco_node_utils/cmd_ref/evpn_multicast.yaml +12 -0
  86. data/lib/cisco_node_utils/cmd_ref/evpn_multisite.yaml +18 -0
  87. data/lib/cisco_node_utils/cmd_ref/evpn_stormcontrol.yaml +18 -0
  88. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +48 -0
  89. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +183 -0
  90. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +40 -0
  91. data/lib/cisco_node_utils/cmd_ref/feature.yaml +126 -0
  92. data/lib/cisco_node_utils/cmd_ref/hostname.yaml +8 -0
  93. data/lib/cisco_node_utils/cmd_ref/hsrp_global.yaml +25 -0
  94. data/lib/cisco_node_utils/cmd_ref/images.yaml +8 -0
  95. data/lib/cisco_node_utils/cmd_ref/interface.yaml +781 -0
  96. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +45 -0
  97. data/lib/cisco_node_utils/cmd_ref/interface_evpn_multisite.yaml +17 -0
  98. data/lib/cisco_node_utils/cmd_ref/interface_hsrp_group.yaml +120 -0
  99. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +112 -0
  100. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +87 -0
  101. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +42 -0
  102. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
  103. data/lib/cisco_node_utils/cmd_ref/ip_multicast.yaml +22 -0
  104. data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
  105. data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
  106. data/lib/cisco_node_utils/cmd_ref/memory.yaml +24 -0
  107. data/lib/cisco_node_utils/cmd_ref/ntp_auth_key.yaml +10 -0
  108. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +27 -0
  109. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +34 -0
  110. data/lib/cisco_node_utils/cmd_ref/object_group.yaml +32 -0
  111. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +91 -0
  112. data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
  113. data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
  114. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +37 -0
  115. data/lib/cisco_node_utils/cmd_ref/pim.yaml +43 -0
  116. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +86 -0
  117. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +37 -0
  118. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +100 -0
  119. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +19 -0
  120. data/lib/cisco_node_utils/cmd_ref/route_map.yaml +601 -0
  121. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +9 -0
  122. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +84 -0
  123. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +81 -0
  124. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +9 -0
  125. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +74 -0
  126. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +91 -0
  127. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +57 -0
  128. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +23 -0
  129. data/lib/cisco_node_utils/cmd_ref/span_session.yaml +65 -0
  130. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +235 -0
  131. data/lib/cisco_node_utils/cmd_ref/syslog_facility.yaml +10 -0
  132. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +34 -0
  133. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +45 -0
  134. data/lib/cisco_node_utils/cmd_ref/system.yaml +7 -0
  135. data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +37 -0
  136. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +63 -0
  137. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +45 -0
  138. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +64 -0
  139. data/lib/cisco_node_utils/cmd_ref/upgrade.yaml +38 -0
  140. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +52 -0
  141. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +8 -0
  142. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +106 -0
  143. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +233 -0
  144. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +86 -0
  145. data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +139 -0
  146. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +32 -0
  147. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +114 -0
  148. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +71 -0
  149. data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
  150. data/lib/cisco_node_utils/cmd_ref/yum.yaml +68 -0
  151. data/lib/cisco_node_utils/command_reference.rb +724 -0
  152. data/lib/cisco_node_utils/configparser_lib.rb +195 -0
  153. data/lib/cisco_node_utils/constants.rb +40 -0
  154. data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
  155. data/lib/cisco_node_utils/dns_domain.rb +93 -0
  156. data/lib/cisco_node_utils/domain_name.rb +82 -0
  157. data/lib/cisco_node_utils/encapsulation.rb +112 -0
  158. data/lib/cisco_node_utils/environment.rb +110 -0
  159. data/lib/cisco_node_utils/evpn_multicast.rb +66 -0
  160. data/lib/cisco_node_utils/evpn_multisite.rb +96 -0
  161. data/lib/cisco_node_utils/evpn_stormcontrol.rb +84 -0
  162. data/lib/cisco_node_utils/evpn_vni.rb +159 -0
  163. data/lib/cisco_node_utils/exceptions.rb +140 -0
  164. data/lib/cisco_node_utils/fabricpath_global.rb +405 -0
  165. data/lib/cisco_node_utils/fabricpath_topology.rb +137 -0
  166. data/lib/cisco_node_utils/feature.rb +377 -0
  167. data/lib/cisco_node_utils/hostname.rb +62 -0
  168. data/lib/cisco_node_utils/hsrp_global.rb +97 -0
  169. data/lib/cisco_node_utils/interface.rb +2128 -0
  170. data/lib/cisco_node_utils/interface_channel_group.rb +142 -0
  171. data/lib/cisco_node_utils/interface_evpn_multisite.rb +72 -0
  172. data/lib/cisco_node_utils/interface_hsrp_group.rb +557 -0
  173. data/lib/cisco_node_utils/interface_ospf.rb +378 -0
  174. data/lib/cisco_node_utils/interface_portchannel.rb +180 -0
  175. data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
  176. data/lib/cisco_node_utils/ip_multicast.rb +90 -0
  177. data/lib/cisco_node_utils/itd_device_group.rb +228 -0
  178. data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
  179. data/lib/cisco_node_utils/itd_service.rb +511 -0
  180. data/lib/cisco_node_utils/logger.rb +78 -0
  181. data/lib/cisco_node_utils/name_server.rb +64 -0
  182. data/lib/cisco_node_utils/node.rb +443 -0
  183. data/lib/cisco_node_utils/node_util.rb +111 -0
  184. data/lib/cisco_node_utils/ntp_auth_key.rb +67 -0
  185. data/lib/cisco_node_utils/ntp_config.rb +83 -0
  186. data/lib/cisco_node_utils/ntp_server.rb +86 -0
  187. data/lib/cisco_node_utils/object_group.rb +75 -0
  188. data/lib/cisco_node_utils/object_group_entry.rb +143 -0
  189. data/lib/cisco_node_utils/overlay_global.rb +142 -0
  190. data/lib/cisco_node_utils/pim.rb +131 -0
  191. data/lib/cisco_node_utils/pim_group_list.rb +109 -0
  192. data/lib/cisco_node_utils/pim_rp_address.rb +103 -0
  193. data/lib/cisco_node_utils/platform.rb +217 -0
  194. data/lib/cisco_node_utils/portchannel_global.rb +347 -0
  195. data/lib/cisco_node_utils/radius_global.rb +165 -0
  196. data/lib/cisco_node_utils/radius_server.rb +421 -0
  197. data/lib/cisco_node_utils/radius_server_group.rb +117 -0
  198. data/lib/cisco_node_utils/route_map.rb +2540 -0
  199. data/lib/cisco_node_utils/router_ospf.rb +77 -0
  200. data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
  201. data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
  202. data/lib/cisco_node_utils/router_ospf_vrf.rb +342 -0
  203. data/lib/cisco_node_utils/snmp_notification_receiver.rb +176 -0
  204. data/lib/cisco_node_utils/snmpcommunity.rb +109 -0
  205. data/lib/cisco_node_utils/snmpgroup.rb +54 -0
  206. data/lib/cisco_node_utils/snmpnotification.rb +57 -0
  207. data/lib/cisco_node_utils/snmpserver.rb +132 -0
  208. data/lib/cisco_node_utils/snmpuser.rb +403 -0
  209. data/lib/cisco_node_utils/span_session.rb +149 -0
  210. data/lib/cisco_node_utils/stp_global.rb +676 -0
  211. data/lib/cisco_node_utils/syslog_facility.rb +64 -0
  212. data/lib/cisco_node_utils/syslog_server.rb +146 -0
  213. data/lib/cisco_node_utils/syslog_settings.rb +174 -0
  214. data/lib/cisco_node_utils/tacacs_global.rb +137 -0
  215. data/lib/cisco_node_utils/tacacs_server.rb +173 -0
  216. data/lib/cisco_node_utils/tacacs_server_group.rb +149 -0
  217. data/lib/cisco_node_utils/tacacs_server_host.rb +216 -0
  218. data/lib/cisco_node_utils/upgrade.rb +122 -0
  219. data/lib/cisco_node_utils/vdc.rb +118 -0
  220. data/lib/cisco_node_utils/version.rb +21 -0
  221. data/lib/cisco_node_utils/vlan.rb +301 -0
  222. data/lib/cisco_node_utils/vpc.rb +466 -0
  223. data/lib/cisco_node_utils/vrf.rb +192 -0
  224. data/lib/cisco_node_utils/vrf_af.rb +327 -0
  225. data/lib/cisco_node_utils/vtp.rb +125 -0
  226. data/lib/cisco_node_utils/vxlan_vtep.rb +286 -0
  227. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +331 -0
  228. data/lib/cisco_node_utils/yang.rb +160 -0
  229. data/lib/cisco_node_utils/yum.rb +213 -0
  230. data/lib/cisco_node_utils.rb +21 -0
  231. data/lib/minitest/environment_plugin.rb +31 -0
  232. data/lib/minitest/log_level_plugin.rb +41 -0
  233. data/spec/client_spec.rb +7 -0
  234. data/spec/environment_spec.rb +384 -0
  235. data/spec/grpc_client_spec.rb +23 -0
  236. data/spec/isolate/all_clients_spec.rb +9 -0
  237. data/spec/isolate/grpc_only_spec.rb +16 -0
  238. data/spec/isolate/no_clients_spec.rb +26 -0
  239. data/spec/isolate/nxapi_only_spec.rb +16 -0
  240. data/spec/nxapi_client_spec.rb +42 -0
  241. data/spec/schema.yaml +82 -0
  242. data/spec/shared_examples_for_clients.rb +14 -0
  243. data/spec/spec_helper.rb +91 -0
  244. data/spec/whitespace_spec.rb +10 -0
  245. data/spec/yaml_spec.rb +42 -0
  246. data/tests/.rubocop.yml +18 -0
  247. data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
  248. data/tests/basetest.rb +243 -0
  249. data/tests/ciscotest.rb +577 -0
  250. data/tests/cmd_config.yaml +75 -0
  251. data/tests/cmd_config_invalid.yaml +16 -0
  252. data/tests/n9000_sample-1.0.0-7.0.3.x86_64.rpm +0 -0
  253. data/tests/noop.rb +7 -0
  254. data/tests/platform_info.rb +63 -0
  255. data/tests/tacacs_server.yaml.example +6 -0
  256. data/tests/test_aaa_authentication_login.rb +243 -0
  257. data/tests/test_aaa_authentication_login_service.rb +761 -0
  258. data/tests/test_aaa_authorization_service.rb +874 -0
  259. data/tests/test_ace.rb +304 -0
  260. data/tests/test_acl.rb +185 -0
  261. data/tests/test_banner.rb +85 -0
  262. data/tests/test_bfd_global.rb +272 -0
  263. data/tests/test_bgp_af.rb +875 -0
  264. data/tests/test_bgp_af_aa.rb +108 -0
  265. data/tests/test_bgp_neighbor.rb +596 -0
  266. data/tests/test_bgp_neighbor_af.rb +781 -0
  267. data/tests/test_bridge_domain.rb +198 -0
  268. data/tests/test_bridge_domain_vni.rb +109 -0
  269. data/tests/test_client_utils.rb +111 -0
  270. data/tests/test_cmn_utils.rb +76 -0
  271. data/tests/test_command_config.rb +206 -0
  272. data/tests/test_command_reference.rb +669 -0
  273. data/tests/test_dhcp_relay_global.rb +286 -0
  274. data/tests/test_dns_domain.rb +123 -0
  275. data/tests/test_domain_name.rb +96 -0
  276. data/tests/test_encapsulation.rb +75 -0
  277. data/tests/test_evpn_multicast.rb +65 -0
  278. data/tests/test_evpn_multisite.rb +70 -0
  279. data/tests/test_evpn_stormcontrol.rb +56 -0
  280. data/tests/test_evpn_vni.rb +131 -0
  281. data/tests/test_fabricpath_global.rb +246 -0
  282. data/tests/test_fabricpath_topology.rb +77 -0
  283. data/tests/test_feature.rb +272 -0
  284. data/tests/test_grpc.rb +166 -0
  285. data/tests/test_hostname.rb +64 -0
  286. data/tests/test_hsrp_global.rb +79 -0
  287. data/tests/test_interface.rb +1958 -0
  288. data/tests/test_interface_bdi.rb +80 -0
  289. data/tests/test_interface_channel_group.rb +131 -0
  290. data/tests/test_interface_evpn_multisite.rb +94 -0
  291. data/tests/test_interface_hsrp.rb +134 -0
  292. data/tests/test_interface_hsrp_group.rb +570 -0
  293. data/tests/test_interface_ospf.rb +820 -0
  294. data/tests/test_interface_portchannel.rb +135 -0
  295. data/tests/test_interface_private_vlan.rb +365 -0
  296. data/tests/test_interface_service_vni.rb +203 -0
  297. data/tests/test_interface_svi.rb +210 -0
  298. data/tests/test_interface_switchport.rb +468 -0
  299. data/tests/test_ip_multicast.rb +80 -0
  300. data/tests/test_itd_device_group.rb +145 -0
  301. data/tests/test_itd_device_group_node.rb +199 -0
  302. data/tests/test_itd_service.rb +314 -0
  303. data/tests/test_logger.rb +43 -0
  304. data/tests/test_name_server.rb +94 -0
  305. data/tests/test_node.rb +50 -0
  306. data/tests/test_node_ext.rb +406 -0
  307. data/tests/test_node_util.rb +119 -0
  308. data/tests/test_ntp_auth_key.rb +77 -0
  309. data/tests/test_ntp_config.rb +100 -0
  310. data/tests/test_ntp_server.rb +146 -0
  311. data/tests/test_nxapi.rb +236 -0
  312. data/tests/test_object_group.rb +122 -0
  313. data/tests/test_overlay_global.rb +108 -0
  314. data/tests/test_pim.rb +203 -0
  315. data/tests/test_pim_group_list.rb +147 -0
  316. data/tests/test_pim_rp_address.rb +155 -0
  317. data/tests/test_platform.rb +254 -0
  318. data/tests/test_portchannel_global.rb +322 -0
  319. data/tests/test_radius_global.rb +108 -0
  320. data/tests/test_radius_server.rb +377 -0
  321. data/tests/test_radius_server_group.rb +151 -0
  322. data/tests/test_route_map.rb +1479 -0
  323. data/tests/test_router_bgp.rb +1325 -0
  324. data/tests/test_router_ospf.rb +56 -0
  325. data/tests/test_router_ospf_area.rb +433 -0
  326. data/tests/test_router_ospf_area_vlink.rb +298 -0
  327. data/tests/test_router_ospf_vrf.rb +690 -0
  328. data/tests/test_snmp_notification_receiver.rb +169 -0
  329. data/tests/test_snmpcommunity.rb +422 -0
  330. data/tests/test_snmpgroup.rb +71 -0
  331. data/tests/test_snmpnotification.rb +91 -0
  332. data/tests/test_snmpserver.rb +251 -0
  333. data/tests/test_snmpuser.rb +666 -0
  334. data/tests/test_span_session.rb +155 -0
  335. data/tests/test_stp_global.rb +575 -0
  336. data/tests/test_syslog_facility.rb +80 -0
  337. data/tests/test_syslog_server.rb +119 -0
  338. data/tests/test_syslog_settings.rb +123 -0
  339. data/tests/test_tacacs_global.rb +109 -0
  340. data/tests/test_tacacs_server.rb +436 -0
  341. data/tests/test_tacacs_server_group.rb +434 -0
  342. data/tests/test_tacacs_server_host.rb +427 -0
  343. data/tests/test_upgrade.rb +105 -0
  344. data/tests/test_vdc.rb +64 -0
  345. data/tests/test_vlan.rb +386 -0
  346. data/tests/test_vlan_private.rb +656 -0
  347. data/tests/test_vpc.rb +548 -0
  348. data/tests/test_vrf.rb +248 -0
  349. data/tests/test_vrf_af.rb +288 -0
  350. data/tests/test_vtp.rb +278 -0
  351. data/tests/test_vxlan_vtep.rb +327 -0
  352. data/tests/test_vxlan_vtep_vni.rb +326 -0
  353. data/tests/test_yang.rb +369 -0
  354. data/tests/test_yum.rb +109 -0
  355. data/tests/upgrade_info.yaml.example +3 -0
  356. data/tests/yum_package.yaml +94 -0
  357. metadata +534 -0
@@ -0,0 +1,386 @@
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/vlan'
17
+ require_relative '../lib/cisco_node_utils/interface'
18
+
19
+ include Cisco
20
+
21
+ # TestVlan - Minitest for Vlan node utility
22
+ class TestVlan < CiscoTestCase
23
+ @skip_unless_supported = 'vlan'
24
+ @@cleaned = false # rubocop:disable Style/ClassVars
25
+
26
+ def setup
27
+ super
28
+ cleanup unless @@cleaned
29
+ @@cleaned = true # rubocop:disable Style/ClassVars
30
+ end
31
+
32
+ def teardown
33
+ cleanup
34
+ end
35
+
36
+ def cleanup
37
+ remove_all_vlans
38
+ interface_ethernet_default(interfaces[0])
39
+ config_no_warn('no feature vtp')
40
+ end
41
+
42
+ def overlay_cleanup
43
+ config_no_warn('no feature vn-segment-vlan-based')
44
+ config_no_warn('no nv overlay evpn ; no feature nv overlay')
45
+ end
46
+
47
+ def interface_ethernet_default(intf)
48
+ config("default interface #{intf}")
49
+ end
50
+
51
+ def linecard_cfg_change_not_allowed?(e)
52
+ skip('Linecard does not support this test') if
53
+ e.message[/requested config change not allowed/]
54
+ flunk(e.message)
55
+ end
56
+
57
+ def test_collection_not_empty
58
+ vlans = Vlan.vlans
59
+ assert_equal(false, vlans.empty?, 'VLAN collection is empty')
60
+ assert(vlans.key?('1'), 'VLAN 1 does not exist')
61
+ end
62
+
63
+ def test_create_invalid
64
+ e = assert_raises(CliError) { Vlan.new(5000) }
65
+ assert_match(/Invalid value.range/, e.message)
66
+ end
67
+
68
+ def test_create_invalid_non_numeric_vlan
69
+ e = assert_raises(ArgumentError) { Vlan.new('fred') }
70
+ assert_match(/Invalid value.non-numeric/, e.message)
71
+ end
72
+
73
+ def test_create_destroy
74
+ v = Vlan.new(1000)
75
+ vlans = Vlan.vlans
76
+ assert(vlans.key?('1000'), 'Error: failed to create vlan 1000')
77
+
78
+ v.destroy
79
+ vlans = Vlan.vlans
80
+ refute(vlans.key?('1000'), 'Error: failed to destroy vlan 1000')
81
+ end
82
+
83
+ def test_name_default_1000
84
+ v = Vlan.new(1000)
85
+ assert_equal(v.default_vlan_name, v.vlan_name,
86
+ 'Error: Vlan name not initialized to default')
87
+
88
+ name = 'Uplink-Chicago'
89
+ v.vlan_name = name
90
+ assert_equal(name, v.vlan_name, "Error: Vlan name not updated to #{name}")
91
+
92
+ v.vlan_name = v.default_vlan_name
93
+ assert_equal(v.default_vlan_name, v.vlan_name,
94
+ 'Error: Vlan name not restored to default')
95
+ v.destroy
96
+ end
97
+
98
+ def test_name_default_40
99
+ v = Vlan.new(40)
100
+ assert_equal(v.default_vlan_name, v.vlan_name,
101
+ 'Error: Vlan name not initialized to default')
102
+
103
+ name = 'Uplink-Chicago'
104
+ v.vlan_name = name
105
+ assert_equal(name, v.vlan_name, "Error: Vlan name not updated to #{name}")
106
+
107
+ v.vlan_name = v.default_vlan_name
108
+ assert_equal(v.default_vlan_name, v.vlan_name,
109
+ 'Error: Vlan name not restored to default')
110
+ v.destroy
111
+ end
112
+
113
+ def test_name_nil
114
+ v = Vlan.new(1000)
115
+ assert_raises(TypeError) do
116
+ v.vlan_name = nil
117
+ end
118
+ v.destroy
119
+ end
120
+
121
+ def test_name_invalid
122
+ v = Vlan.new(1000)
123
+ assert_raises(TypeError) do
124
+ v.vlan_name = Cisco::Node.instance
125
+ end
126
+ v.destroy
127
+ end
128
+
129
+ def test_name_zero_length
130
+ skip_legacy_defect?('7.0.3.I5.2|7.0.3.I5.3',
131
+ 'CSCvd09257: Configuration of vlan name via nxapi should be noop')
132
+ v = Vlan.new(1000)
133
+ v.vlan_name = ''
134
+ assert('', v.vlan_name)
135
+ v.destroy
136
+ end
137
+
138
+ def test_name_length_valid
139
+ v = Vlan.new(1000)
140
+ alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789'
141
+ name = ''
142
+ 1.upto(VLAN_NAME_SIZE - 1) do |i|
143
+ begin
144
+ name += alphabet[i % alphabet.size, 1]
145
+ if i == VLAN_NAME_SIZE - 1
146
+ v.vlan_name = name
147
+ assert_equal(name, v.vlan_name)
148
+ end
149
+ end
150
+ end
151
+ v.destroy
152
+ end
153
+
154
+ def test_name_long
155
+ config 'system vlan long-name'
156
+ v = Vlan.new(1000)
157
+ name = 'LONG_NAME' + ('E' * 119)
158
+ v.vlan_name = name
159
+ assert_equal(name, v.vlan_name)
160
+ v.destroy
161
+ config 'no system vlan long-name'
162
+ end
163
+
164
+ def test_id_similar
165
+ config 'system vlan long-name'
166
+ v2 = Vlan.new(2)
167
+ v102 = Vlan.new(102)
168
+ v222 = Vlan.new(222)
169
+
170
+ v2.vlan_name = 'NEW_YORK_OFFICE'
171
+ v102.vlan_name = 'RALEIGH_OFFICE'
172
+ long_name = 'LONG_NAME' + ('E' * 119)
173
+ v222.vlan_name = long_name
174
+
175
+ assert_equal('NEW_YORK_OFFICE', v2.vlan_name)
176
+ assert_equal('RALEIGH_OFFICE', v102.vlan_name)
177
+ assert_equal(long_name, v222.vlan_name)
178
+
179
+ v2.destroy
180
+ v102.destroy
181
+ v222.destroy
182
+ config 'no system vlan long-name'
183
+ end
184
+
185
+ def test_state_invalid
186
+ v = Vlan.new(1000)
187
+ assert_raises(CliError) do
188
+ v.state = 'unknown'
189
+ end
190
+ v.destroy
191
+ end
192
+
193
+ def test_state_valid
194
+ states = %w(unknown active suspend)
195
+ v = Vlan.new(1000)
196
+ states.each do |start|
197
+ states.each do |finish|
198
+ next if start == 'unknown' || finish == 'unknown'
199
+ v.state = start
200
+ assert_equal(start, v.state, 'start')
201
+ v.state = finish
202
+ assert_equal(finish, v.state, 'finish')
203
+ end
204
+ end
205
+ v.destroy
206
+ end
207
+
208
+ def test_shutdown_extended
209
+ v = Vlan.new(2000)
210
+ assert_raises(CliError, 'vlan misconfig did not raise CliError') do
211
+ v.shutdown = 'shutdown'
212
+ end
213
+ v.destroy
214
+ end
215
+
216
+ def test_shutdown_valid
217
+ shutdown_states = [true, false]
218
+ v = Vlan.new(1000)
219
+ shutdown_states.each do |start|
220
+ shutdown_states.each do |finish|
221
+ v.shutdown = start
222
+ assert_equal(start, v.shutdown, 'start')
223
+ v.shutdown = finish
224
+ assert_equal(finish, v.shutdown, 'finish')
225
+ end
226
+ end
227
+ v.destroy
228
+ end
229
+
230
+ def test_add_remove_interface
231
+ vlan_id = 1000
232
+ v = Vlan.new(vlan_id)
233
+
234
+ # Remove vlan_id from all interfaces currently using it
235
+ v.interfaces.each do |_name, i|
236
+ v.remove_interface(i)
237
+ end
238
+ assert_empty(v.interfaces, "access vlan #{vlan_id} should not be "\
239
+ 'present on any interfaces')
240
+
241
+ # Add test vlan to 3 ethernet interfaces
242
+ vlan_intf_list = interfaces.first(3)
243
+ vlan_intf_list.each do |intf, i|
244
+ interface_ethernet_default(intf)
245
+ i = Interface.new(intf)
246
+ i.switchport_mode = :access
247
+ assert_equal(i.default_access_vlan, i.access_vlan,
248
+ "access vlan is not default on #{intf}")
249
+
250
+ v.add_interface(i)
251
+ assert_equal(vlan_id, i.access_vlan,
252
+ "access vlan #{vlan_id} not present on #{intf}")
253
+ end
254
+ assert_equal(vlan_intf_list.count, v.interfaces.count)
255
+
256
+ # Remove test vlan from interfaces
257
+ vlan_intf_list.each do |intf|
258
+ i = Interface.new(intf)
259
+ v.remove_interface(i)
260
+ assert_equal(i.default_access_vlan, i.access_vlan,
261
+ "access vlan #{vlan_id} should not be present on #{intf}")
262
+ end
263
+ assert_empty(v.interfaces, "access vlan #{vlan_id} should not be "\
264
+ 'present on any interfaces')
265
+ v.destroy
266
+ end
267
+
268
+ def test_add_interface_invalid
269
+ v = Vlan.new(1000)
270
+ interface = Interface.new(interfaces[0])
271
+ interface.switchport_mode = :disabled
272
+ assert_raises(CliError) { v.add_interface(interface) }
273
+ v.destroy
274
+ rescue RuntimeError => e
275
+ linecard_cfg_change_not_allowed?(e)
276
+ end
277
+
278
+ def test_remove_interface_invalid
279
+ v = Vlan.new(1000)
280
+ interface = Interface.new(interfaces[0])
281
+ interface.switchport_mode = :access
282
+ v.add_interface(interface)
283
+ interface.switchport_mode = :disabled
284
+ assert_raises(CliError) { v.remove_interface(interface) }
285
+
286
+ v.destroy
287
+ rescue RuntimeError => e
288
+ linecard_cfg_change_not_allowed?(e)
289
+ end
290
+
291
+ def test_mapped_vnis
292
+ if validate_property_excluded?('vlan', 'mapped_vni')
293
+ assert_raises(Cisco::UnsupportedError) do
294
+ Vlan.new(100).mapped_vni = 10_000
295
+ end
296
+ return
297
+ end
298
+ # Map
299
+ v1 = Vlan.new(100)
300
+ vni1 = 10_000
301
+ v1.mapped_vni = vni1
302
+ assert_equal(vni1, v1.mapped_vni)
303
+
304
+ v2 = Vlan.new(500)
305
+ vni2 = 50_000
306
+ v2.mapped_vni = vni2
307
+ assert_equal(vni2, v2.mapped_vni)
308
+
309
+ v3 = Vlan.new(900)
310
+ vni3 = 90_000
311
+ v3.mapped_vni = vni3
312
+ assert_equal(vni3, v3.mapped_vni)
313
+ # Unmap
314
+ v1.mapped_vni = v1.default_mapped_vni
315
+ assert_equal(v1.default_mapped_vni, v1.mapped_vni)
316
+
317
+ v2.mapped_vni = v2.default_mapped_vni
318
+ assert_equal(v2.default_mapped_vni, v2.mapped_vni)
319
+
320
+ v3.mapped_vni = v3.default_mapped_vni
321
+ assert_equal(v3.default_mapped_vni, v3.mapped_vni)
322
+ rescue RuntimeError => e
323
+ hardware_supports_feature?(e.message)
324
+ end
325
+
326
+ def test_another_vlan_as_fabric_control
327
+ if validate_property_excluded?('vlan', 'fabric_control')
328
+ assert_raises(Cisco::UnsupportedError) do
329
+ Vlan.new('100').fabric_control = true
330
+ end
331
+ return
332
+ end
333
+
334
+ vlan = Vlan.new('100')
335
+ assert_equal(vlan.default_fabric_control, vlan.fabric_control,
336
+ 'Error: Vlan fabric-control is not matching')
337
+ vlan.fabric_control = true
338
+ assert(vlan.fabric_control)
339
+ another_vlan = Vlan.new(101)
340
+
341
+ assert_raises(CliError,
342
+ 'VLAN misconfig did not raise CliError') do
343
+ another_vlan.fabric_control = true
344
+ end
345
+ vlan.destroy
346
+ another_vlan.destroy
347
+ end
348
+
349
+ def test_mode_with_pvlan
350
+ v = Vlan.new(1000)
351
+ if validate_property_excluded?('vlan', 'pvlan_type') ||
352
+ validate_property_excluded?('vlan', 'mode')
353
+ features = 'pvlan_type and/or vlan mode'
354
+ skip("Skip test: Features #{features} are not supported on this device")
355
+ end
356
+ result = 'CE'
357
+ v.pvlan_type = 'primary'
358
+ assert_equal(result, v.mode)
359
+ end
360
+
361
+ def test_vlan_mode_fabricpath
362
+ if validate_property_excluded?('vlan', 'mode')
363
+ assert_raises(Cisco::UnsupportedError) { Vlan.new(2000).mode = 'foo' }
364
+ return
365
+ end
366
+ config_no_warn('no feature vn-segment-vlan-based')
367
+ config_no_warn('no nv overlay evpn ; no feature nv overlay')
368
+ # Test for valid mode
369
+ v = Vlan.new(2000)
370
+ default = v.default_mode
371
+ assert_equal(default, v.mode,
372
+ 'Mode should have been default value: #{default}')
373
+ v.mode = 'fabricpath'
374
+ assert_equal(:enabled, v.fabricpath_feature,
375
+ 'Fabricpath feature should have been enabled')
376
+ assert_equal('fabricpath', v.mode,
377
+ 'Mode should have been set to fabricpath')
378
+
379
+ # Test for invalid mode
380
+ v = Vlan.new(100)
381
+ assert_equal(default, v.mode,
382
+ 'Mode should have been default value: #{default}')
383
+
384
+ assert_raises(CliError) { v.mode = 'junk' }
385
+ end
386
+ end