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,436 @@
1
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/tacacs_server'
17
+
18
+ # TestTacacsServer - Minitest for TacacsServer node utility
19
+ class TestTacacsServer < CiscoTestCase
20
+ @skip_unless_supported = 'tacacs_server'
21
+
22
+ def assert_tacacsserver_feature
23
+ assert_show_match(command: 'show run all | no-more',
24
+ pattern: /feature tacacs\+/) if platform == :nexus
25
+ end
26
+
27
+ def refute_tacacsserver_feature
28
+ refute_show_match(command: 'show run all | no-more',
29
+ pattern: /feature tacacs\+/) if platform == :nexus
30
+ end
31
+
32
+ def setup
33
+ super
34
+ if platform == :nexus
35
+ # Most commands appear under 'show run tacacs all' but the
36
+ # 'directed-request' command is under 'show run aaa all'
37
+ @default_show_command = 'show run tacacs all | no-more ; ' \
38
+ 'show run aaa all | no-more'
39
+ config_no_warn('no feature tacacs+')
40
+
41
+ elsif platform == :ios_xr
42
+ @default_show_command = 'show running-config tacacs-server'
43
+ no_tacacs_global
44
+ end
45
+ end
46
+
47
+ def teardown
48
+ config_no_warn('no feature tacacs+') if platform == :nexus
49
+ super
50
+ end
51
+
52
+ def no_tacacs_global
53
+ # Turn the feature off for a clean test.
54
+ config('no tacacs-server timeout 2')
55
+ end
56
+
57
+ def test_create_valid
58
+ tacacs = TacacsServer.new
59
+ assert_tacacsserver_feature
60
+ tacacs.destroy
61
+ end
62
+
63
+ def test_get_encryption_type
64
+ if platform == :nexus
65
+ config_no_warn('feature tacacs+')
66
+
67
+ # The tacacs-server key is 'sticky'.
68
+ # If a key is configured it will remain configured even if
69
+ # the tacacs feature is disabled so to be safe go ahead
70
+ # and remove any key that might exist before the test.d
71
+ config_no_warn('no tacacs-server key')
72
+
73
+ encryption_type = TACACS_SERVER_ENC_UNKNOWN
74
+ # Get encryption password when not configured
75
+ tacacs = TacacsServer.new
76
+ assert_equal(encryption_type,
77
+ tacacs.encryption_type,
78
+ 'Error: Tacacs Server, encryption type incorrect')
79
+ tacacs.destroy
80
+
81
+ # Get encryption password when configured
82
+ encryption_type = TACACS_SERVER_ENC_NONE
83
+ # This one is needed since the 'sh run' will always display the type
84
+ # differently than the used encryption config type.
85
+ sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
86
+ config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
87
+
88
+ tacacs = TacacsServer.new
89
+ assert_equal(sh_run_encryption_type,
90
+ tacacs.encryption_type,
91
+ 'Error: Tacacs Server, encryption type incorrect')
92
+
93
+ encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
94
+ config("tacacs-server key #{encryption_type} TEST")
95
+
96
+ assert_equal(sh_run_encryption_type,
97
+ tacacs.encryption_type,
98
+ 'Error: Tacacs Server, encryption type incorrect')
99
+ tacacs.destroy
100
+ elsif platform == :ios_xr
101
+ encryption_type = TACACS_SERVER_ENC_NONE
102
+ sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
103
+ config("tacacs-server key #{encryption_type} TEST")
104
+
105
+ tacacs = TacacsServer.new
106
+ assert_equal(sh_run_encryption_type,
107
+ tacacs.encryption_type,
108
+ 'Error: Tacacs Server, encryption type incorrect')
109
+ tacacs.destroy
110
+ end
111
+ end
112
+
113
+ def test_get_default_encryption
114
+ # Ruby can use defines, but only they're not initialized from an enum
115
+ assert_equal(TACACS_SERVER_ENC_NONE,
116
+ TacacsServer.default_encryption_type,
117
+ 'Error: Tacacs Server, default encryption incorrect')
118
+ end
119
+
120
+ def test_get_encryption_password
121
+ config('no tacacs-server key') if platform == :ios_xr
122
+
123
+ tacacs = TacacsServer.new
124
+ assert_equal(node.config_get_default('tacacs_server',
125
+ 'encryption_password'),
126
+ tacacs.encryption_password,
127
+ 'Error: Tacacs Server, encryption password incorrect')
128
+ tacacs.destroy
129
+
130
+ # Get encryption password when configured
131
+ sh_run_encryption_password = 'WAWY'
132
+ encryption_type = TACACS_SERVER_ENC_NONE
133
+ # This one is needed since the 'sh run' will always display the password
134
+ # differently than the used encryption config type.
135
+ if platform == :nexus
136
+ config('feature tacacs+', "tacacs-server key #{encryption_type} TEST")
137
+ elsif platform == :ios_xr
138
+ config("tacacs-server key #{encryption_type} TEST")
139
+ end
140
+ tacacs = TacacsServer.new
141
+
142
+ if platform == :nexus
143
+ assert_match(/#{sh_run_encryption_password}/,
144
+ tacacs.encryption_password,
145
+ 'Error: Tacacs Server, encryption password incorrect')
146
+ elsif platform == :ios_xr
147
+ # When a password is set on ios_xr it is always encrypted,
148
+ # even as a return value, hence here checking for not nil.
149
+ assert(!tacacs.encryption_password.nil?)
150
+ end
151
+
152
+ tacacs.destroy
153
+ end
154
+
155
+ def test_get_default_encryption_password
156
+ assert_equal(node.config_get_default('tacacs_server',
157
+ 'encryption_password'),
158
+ TacacsServer.default_encryption_password,
159
+ 'Error: Tacacs Server, default encryption password incorrect')
160
+ end
161
+
162
+ def test_key_set
163
+ enc_type = TACACS_SERVER_ENC_NONE
164
+ # This one is needed since the 'sh run' will always display the type
165
+ # differently than the used encryption config type.
166
+ sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
167
+ password = 'TEST_NEW'
168
+
169
+ tacacs = TacacsServer.new
170
+ tacacs.encryption_key_set(enc_type, password)
171
+ # Get the password from the running config since its encoded
172
+ if platform == :nexus
173
+ line = assert_show_match(
174
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
175
+ msg: 'Error: Tacacs Server, key not configured')
176
+ elsif platform == :ios_xr
177
+ line = assert_show_match(
178
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
179
+ msg: 'Error: Tacacs Server, key not configured')
180
+ end
181
+ # Extract encrypted password, and git rid of the "" around the pasword
182
+ md = line.to_s
183
+ encrypted_password = md.to_s.split(' ').last.tr('\"', '')
184
+ # Extract encryption type
185
+ md = /tacacs-server\skey\s\d/.match(line.to_s)
186
+ encrypted_type = md.to_s.split(' ').last.to_i
187
+ assert_equal(encrypted_type, tacacs.encryption_type,
188
+ 'Error: Tacacs Server, encryption type incorrect')
189
+ assert_match(/#{encrypted_password}/, tacacs.encryption_password,
190
+ 'Error: Tacacs Server, encryption password incorrect')
191
+ tacacs.destroy
192
+ end
193
+
194
+ def test_key_unconfigure
195
+ enc_type = TACACS_SERVER_ENC_NONE
196
+ # This one is needed since the 'sh run' will always display the type
197
+ # differently than the used encryption config type.
198
+ sh_run_encryption_type = TACACS_SERVER_ENC_CISCO_TYPE_7
199
+ password = 'TEST_NEW'
200
+
201
+ tacacs = TacacsServer.new
202
+ tacacs.encryption_key_set(enc_type, password)
203
+ if platform == :nexus
204
+ assert_show_match(
205
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
206
+ msg: 'Error: Tacacs Server, key not configured')
207
+ elsif platform == :ios_xr
208
+ assert_show_match(
209
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
210
+ msg: 'Error: Tacacs Server, key not configured')
211
+ end
212
+ enc_type = TACACS_SERVER_ENC_UNKNOWN
213
+ password = ''
214
+ tacacs.encryption_key_set(enc_type, password)
215
+ if platform == :nexus
216
+ refute_show_match(
217
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s".*"/,
218
+ msg: 'Error: Tacacs Server, key configured')
219
+ elsif platform == :ios_xr
220
+ refute_show_match(
221
+ pattern: /tacacs-server key\s#{sh_run_encryption_type}\s.*/,
222
+ msg: 'Error: Tacacs Server, key configured')
223
+ end
224
+ tacacs.destroy
225
+ end
226
+
227
+ def test_get_timeout
228
+ tacacs = TacacsServer.new
229
+ timeout = node.config_get_default('tacacs_server', 'timeout')
230
+ assert_equal(timeout, tacacs.timeout,
231
+ 'Error: Tacacs Server, timeout not default')
232
+
233
+ timeout = 35
234
+ config("tacacs-server timeout #{timeout}")
235
+ assert_equal(timeout, tacacs.timeout,
236
+ 'Error: Tacacs Server, timeout not configured')
237
+ tacacs.destroy
238
+ end
239
+
240
+ def test_get_default_timeout
241
+ assert_equal(node.config_get_default('tacacs_server', 'timeout'),
242
+ TacacsServer.default_timeout,
243
+ 'Error: Tacacs Server, default timeout incorrect')
244
+ end
245
+
246
+ def test_set_timeout
247
+ timeout = 45
248
+
249
+ tacacs = TacacsServer.new
250
+ tacacs.timeout = timeout
251
+ line = assert_show_match(pattern: /tacacs-server timeout\s.*/,
252
+ msg: 'Error: timeout not configured')
253
+ # Extract timeout
254
+ md = /tacacs-server\stimeout\s\d*/.match(line.to_s)
255
+ sh_run_timeout = md.to_s.split(' ').last.to_i
256
+ # Need a better way to extract the timeout
257
+ assert_equal(sh_run_timeout, tacacs.timeout,
258
+ 'Error: Tacacs Server, timeout value incorrect')
259
+
260
+ # Invalid case
261
+ timeout = 80 if platform == :nexus
262
+ timeout = 80_000 if platform == :ios_xr
263
+
264
+ assert_raises(Cisco::CliError) do
265
+ tacacs.timeout = timeout
266
+ end
267
+ tacacs.destroy
268
+ end
269
+
270
+ def test_get_deadtime
271
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
272
+
273
+ tacacs = TacacsServer.new
274
+ deadtime = node.config_get_default('tacacs_server', 'deadtime')
275
+ assert_equal(deadtime, tacacs.deadtime,
276
+ 'Error: Tacacs Server, deadtime not default')
277
+
278
+ deadtime = 850
279
+ config("tacacs-server deadtime #{deadtime}")
280
+ assert_equal(deadtime, tacacs.deadtime,
281
+ 'Error: Tacacs Server, deadtime not configured')
282
+ tacacs.destroy
283
+ end
284
+
285
+ def test_get_default_deadtime
286
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
287
+
288
+ assert_equal(node.config_get_default('tacacs_server', 'deadtime'),
289
+ TacacsServer.default_deadtime,
290
+ 'Error: Tacacs Server, default deadtime incorrect')
291
+ end
292
+
293
+ def test_set_deadtime
294
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
295
+ deadtime = 1250
296
+
297
+ tacacs = TacacsServer.new
298
+ tacacs.deadtime = deadtime
299
+ line = assert_show_match(pattern: /tacacs-server deadtime\s.*/,
300
+ msg: 'Error: deadtime not configured')
301
+ # Extract deadtime
302
+ md = /tacacs-server\sdeadtime\s\d*/.match(line.to_s)
303
+ sh_run_deadtime = md.to_s.split(' ').last.to_i
304
+ assert_equal(sh_run_deadtime, tacacs.deadtime,
305
+ 'Error: Tacacs Server, deadtime incorrect')
306
+ # Invalid case
307
+ deadtime = 2450
308
+ assert_raises(Cisco::CliError) do
309
+ tacacs.deadtime = deadtime
310
+ end
311
+ tacacs.destroy
312
+ end
313
+
314
+ def test_get_directed_request
315
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
316
+
317
+ config('feature tacacs', 'tacacs-server directed-request')
318
+ tacacs = TacacsServer.new
319
+ assert(tacacs.directed_request?,
320
+ 'Error: Tacacs Server, directed-request not set')
321
+
322
+ config('no tacacs-server directed-request')
323
+ refute(tacacs.directed_request?,
324
+ 'Error: Tacacs Server, directed-request set')
325
+ tacacs.destroy
326
+ end
327
+
328
+ def test_get_default_directed_request
329
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
330
+ assert_equal(node.config_get_default('tacacs_server', 'directed_request'),
331
+ TacacsServer.default_directed_request,
332
+ 'Error: Tacacs Server, default directed-request incorrect')
333
+ end
334
+
335
+ def test_set_directed_request
336
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
337
+ config('feature tacacs', 'tacacs-server directed-request')
338
+ state = true
339
+ tacacs = TacacsServer.new
340
+ tacacs.directed_request = state
341
+ assert_show_match(pattern: /tacacs-server directed-request/,
342
+ msg: 'directed-request not configured')
343
+ assert(tacacs.directed_request?,
344
+ 'Error: Tacacs Server, directed-request not set')
345
+
346
+ # Turn it off
347
+ config('no tacacs-server directed-request')
348
+ refute(tacacs.directed_request?,
349
+ 'Error: Tacacs Server, directed-request set')
350
+
351
+ # Turn it back on then go to default
352
+ config('no tacacs-server directed-request')
353
+ state = node.config_get_default('tacacs_server', 'directed_request')
354
+ tacacs.directed_request = state
355
+ line = assert_show_match(pattern: /no tacacs-server directed-request/,
356
+ msg: 'default directed-request not configed')
357
+
358
+ # Extract the state of directed-request
359
+ sh_run_directed_request = line.to_s.split(' ').first
360
+ assert_equal('no', sh_run_directed_request,
361
+ 'Error: Tacacs Server, directed-request not unconfigured')
362
+
363
+ refute(tacacs.directed_request?,
364
+ 'Error: Tacacs Server, directed-request set')
365
+
366
+ # Invalid case
367
+ state = 'TEST'
368
+ assert_raises(TypeError) do
369
+ tacacs.directed_request = state
370
+ end
371
+ tacacs.destroy
372
+ end
373
+
374
+ def test_get_source_interface
375
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
376
+
377
+ config_no_warn('no ip tacacs source-interface')
378
+ tacacs = TacacsServer.new
379
+ intf = node.config_get_default('tacacs_server', 'source_interface')
380
+ assert_equal(intf, tacacs.source_interface,
381
+ 'Error: Tacacs Server, source-interface set')
382
+
383
+ intf = 'loopback41'
384
+ config("ip tacacs source-interface #{intf}")
385
+ assert_equal(intf, tacacs.source_interface,
386
+ 'Error: Tacacs Server, source-interface not correct')
387
+ tacacs.destroy
388
+ end
389
+
390
+ def test_get_default_source_interface
391
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
392
+
393
+ assert_equal(node.config_get_default('tacacs_server', 'source_interface'),
394
+ TacacsServer.default_source_interface,
395
+ 'Error: Tacacs Server, default source-interface incorrect')
396
+ end
397
+
398
+ def test_set_source_interface
399
+ return if validate_property_excluded?('tacacs_server', 'deadtime')
400
+
401
+ config('feature tacacs+', 'no ip tacacs source-int')
402
+ intf = node.config_get_default('tacacs_server', 'source_interface')
403
+ tacacs = TacacsServer.new
404
+ assert_equal(intf, tacacs.source_interface,
405
+ 'Error: Tacacs Server, source-interface set')
406
+
407
+ intf = 'loopback41'
408
+ tacacs.source_interface = intf
409
+ line = assert_show_match(pattern: /ip tacacs source-interface #{intf}/,
410
+ msg: 'source-interface not configured')
411
+ # Extract source-interface
412
+ sh_run_source_interface = line.to_s.split(' ').last
413
+ assert_equal(sh_run_source_interface, tacacs.source_interface,
414
+ 'Error: Tacacs Server, source-interface not correct')
415
+
416
+ # Now bring it back to default
417
+ intf = node.config_get_default('tacacs_server', 'source_interface')
418
+ tacacs.source_interface = intf
419
+ assert_show_match(pattern: /no ip tacacs source-interface/,
420
+ msg: 'source-interface not default')
421
+
422
+ # Invalid case
423
+ state = true
424
+ assert_raises(TypeError) do
425
+ tacacs.source_interface = state
426
+ end
427
+ tacacs.destroy
428
+ end
429
+
430
+ def test_destroy
431
+ tacacs = TacacsServer.new
432
+ assert_tacacsserver_feature
433
+ tacacs.destroy
434
+ refute_tacacsserver_feature
435
+ end
436
+ end