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,210 @@
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/interface'
17
+
18
+ include Cisco
19
+
20
+ # TestSvi - Minitest for Interface configuration of SVI interfaces.
21
+ class TestSvi < CiscoTestCase
22
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
23
+ attr_reader :svi
24
+
25
+ def self.runnable_methods
26
+ # We don't have a separate YAML file to key off, so we check platform
27
+ return super unless platform == :ios_xr
28
+ remove_method :setup
29
+ remove_method :teardown
30
+ [:xr_unsupported]
31
+ end
32
+
33
+ def xr_unsupported
34
+ skip("Skipping #{self.class}; Vlan interfaces are not supported on IOS XR")
35
+ end
36
+
37
+ def setup
38
+ super
39
+ remove_all_svis if @@pre_clean_needed
40
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
41
+ @svi = Interface.new('Vlan23')
42
+ end
43
+
44
+ def remove_all_svis
45
+ Interface.interfaces.each do |int, obj|
46
+ next unless int[/vlan/]
47
+ next if int[/vlan1/]
48
+ obj.destroy
49
+ end
50
+ end
51
+
52
+ def teardown
53
+ remove_all_svis
54
+ config_no_warn('no feature private-vlan')
55
+ super
56
+ end
57
+
58
+ def skip_autostate_test?
59
+ skip('svi autostate properties are not supported on this platform') if
60
+ node.product_id =~ /N(5|6)K/
61
+ end
62
+
63
+ def system_default_svi_autostate(state='')
64
+ s = config("#{state}system default interface-vlan autostate")
65
+ if s[/Invalid input/] # rubocop:disable Style/GuardClause
66
+ skip("'system default interface-vlan autostate' is not supported")
67
+ end
68
+ end
69
+
70
+ def test_prop_nil_when_eth
71
+ skip_autostate_test?
72
+ intf = Interface.new(interfaces[0])
73
+ assert_nil(intf.svi_autostate,
74
+ 'Error: svi_autostate should be nil when interface is ethernet')
75
+ assert_nil(intf.svi_management,
76
+ 'Error: svi_management should be nil when interface is ethernet')
77
+ end
78
+
79
+ def test_create_valid
80
+ @default_show_command = 'show run interface all | inc Vlan'
81
+ assert_show_match(pattern: /interface Vlan1/,
82
+ msg: 'Error: Failed to create svi Vlan1')
83
+
84
+ assert_show_match(pattern: /interface Vlan23/,
85
+ msg: 'Error: Failed to create svi Vlan23')
86
+
87
+ svi.destroy
88
+
89
+ # Verify that svi23 got removed now that we invoked svi.destroy
90
+ refute_show_match(pattern: /interface Vlan23/,
91
+ msg: 'Error: svi Vlan23 still configured')
92
+ end
93
+
94
+ def test_create_invalid
95
+ assert_raises(CliError) { Interface.new('10.1.1.1') }
96
+ assert_raises(CliError, Cisco::UnsupportedError) { Interface.new('Vlan0') }
97
+ end
98
+
99
+ def test_create_vlan_nil
100
+ assert_raises(TypeError) { Interface.new(nil) }
101
+ end
102
+
103
+ def test_name
104
+ assert_equal('vlan23', svi.name, 'Error: svi vlan name is wrong')
105
+ end
106
+
107
+ def test_assignment
108
+ svi.svi_management = true
109
+ assert(svi.svi_management, 'Error: svi svi_management, false')
110
+ svi_extra = Interface.new('Vlan23')
111
+ assert(svi_extra.svi_management, 'Error: new svi svi_management, false')
112
+ end
113
+
114
+ def test_get_autostate
115
+ # TBD: autostate is also tested in test_interface_switchport.rb so remove
116
+ # tests from one or the other
117
+ skip_autostate_test?
118
+
119
+ config('interface vlan 23', 'no autostate')
120
+ refute(svi.svi_autostate, 'Error: svi autostate not correct.')
121
+
122
+ config('interface vlan 23', 'autostate')
123
+ assert(svi.svi_autostate, 'Error: svi autostate not correct.')
124
+ end
125
+
126
+ def test_set_autostate
127
+ skip_autostate_test?
128
+ svi.svi_autostate = false
129
+ refute(svi.svi_autostate, 'Error: svi autostate not set to false')
130
+
131
+ svi.svi_autostate = true
132
+ assert(svi.svi_autostate, 'Error: svi autostate not set to true')
133
+
134
+ svi.svi_autostate = svi.default_svi_autostate
135
+ assert_equal(svi.default_svi_autostate, svi.svi_autostate,
136
+ 'Error: svi autostate not set to default')
137
+ end
138
+
139
+ def test_get_management
140
+ config('interface vlan 23', 'management')
141
+
142
+ assert(svi.svi_management)
143
+ end
144
+
145
+ def test_set_management
146
+ svi.svi_management = false
147
+ refute(svi.svi_management)
148
+
149
+ svi.svi_management = true
150
+ assert(svi.svi_management)
151
+
152
+ svi.svi_management = svi.default_svi_management
153
+ assert_equal(svi.default_svi_management, svi.svi_management)
154
+ end
155
+
156
+ def config_svi_properties(state)
157
+ # We don't want the default vlan23 for this test:
158
+ svi.destroy
159
+ # Skip default vlan1
160
+ (2..6).each do |i|
161
+ svi = Interface.new('Vlan' + i.to_s)
162
+ svi.svi_autostate = state unless /N(5|6)K/.match(node.product_id)
163
+ svi.svi_management = state
164
+ end
165
+ end
166
+
167
+ def test_get_svis
168
+ config_svi_properties(true)
169
+ Interface.interfaces.each do |id, obj|
170
+ next if id[/vlan1/]
171
+ next unless id[/vlan/]
172
+ unless /N(5|6)K/.match(node.product_id)
173
+ assert(obj.svi_autostate, "svi autostate should be enabled #{id}")
174
+ end
175
+ assert(obj.svi_management, "svi management should be enabled #{id}")
176
+ end
177
+
178
+ config_svi_properties(false)
179
+ Interface.interfaces.each do |id, obj|
180
+ next if id[/vlan1/]
181
+ next unless id[/vlan/]
182
+ unless /N(5|6)K/.match(node.product_id)
183
+ refute(obj.svi_autostate, "svi autostate should be disabled #{id}")
184
+ end
185
+ refute(obj.svi_management, "svi management should be disabled #{id}")
186
+ end
187
+ end
188
+
189
+ def test_description
190
+ description = 'Test description'
191
+ svi.description = description
192
+ assert_equal(description, svi.description,
193
+ 'Error: Description not configured')
194
+ end
195
+
196
+ def test_sys_def_svi_autostate
197
+ skip_autostate_test?
198
+ skip_legacy_defect?('8.0.1|8.1.1|8\.3', 'CSC: Behavior change after helsinki')
199
+ interface = Interface.new(interfaces[0])
200
+
201
+ system_default_svi_autostate('no ')
202
+ refute(interface.system_default_svi_autostate,
203
+ 'Test for disabled - failed')
204
+
205
+ # common default is enabled
206
+ system_default_svi_autostate('')
207
+ assert(interface.system_default_svi_autostate,
208
+ 'Test for enabled - failed')
209
+ end
210
+ end
@@ -0,0 +1,468 @@
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/interface'
17
+ require_relative '../lib/cisco_node_utils/vtp'
18
+
19
+ include Cisco
20
+
21
+ # TestInterfaceSwitchport
22
+ # Parent class for specific types of switchport tests (below)
23
+ class TestInterfaceSwitchport < CiscoTestCase
24
+ attr_reader :interface
25
+
26
+ def platform_supports_vtp_switchport_access?
27
+ skip('Platform does not support VTP when switchport mode is access') if
28
+ node.product_id =~ /N(5|6|7)/
29
+ end
30
+
31
+ def setup
32
+ super
33
+ config_no_warn('no feature vtp', 'no feature interface-vlan')
34
+ @interface = Interface.new(interfaces[0])
35
+ end
36
+
37
+ def teardown
38
+ interface_ethernet_default(interfaces[0])
39
+ super
40
+ end
41
+
42
+ def interface_ethernet_default(ethernet_intf)
43
+ config("default interface #{ethernet_intf}")
44
+ end
45
+
46
+ def mgmt_intf
47
+ if platform == :nexus
48
+ 'mgmt0'
49
+ elsif platform == :ios_xr
50
+ 'MgmtEth0/RP0/CPU0/0'
51
+ end
52
+ end
53
+ end
54
+
55
+ # TestSwitchport - general interface switchport tests.
56
+ class TestSwitchport < TestInterfaceSwitchport
57
+ DEFAULT_IF_ACCESS_VLAN = 1
58
+ DEFAULT_IF_SWITCHPORT_NATIVE_VLAN = 1
59
+
60
+ def system_default_switchport(state='')
61
+ config("#{state} system default switchport")
62
+ end
63
+
64
+ def system_default_switchport_shutdown(state='')
65
+ config("#{state} system default switchport shutdown")
66
+ end
67
+
68
+ def test_access_vlan
69
+ interface.switchport_mode = :disabled
70
+ if platform == :ios_xr
71
+ assert_raises(Cisco::UnsupportedError) do
72
+ interface.switchport_mode = :access
73
+ end
74
+ assert_nil(interface.access_vlan)
75
+ else
76
+ interface.switchport_mode = :access
77
+ assert_equal(DEFAULT_IF_ACCESS_VLAN, interface.access_vlan)
78
+ end
79
+ end
80
+
81
+ def test_access_vlan_sw_disabled
82
+ interface.switchport_mode = :disabled
83
+ assert_nil(interface.access_vlan)
84
+ end
85
+
86
+ def test_access_vlan_sw_trunk
87
+ interface.switchport_mode = :disabled
88
+ if platform == :ios_xr
89
+ assert_raises(Cisco::UnsupportedError) do
90
+ interface.switchport_mode = :trunk
91
+ end
92
+ assert_nil(interface.access_vlan)
93
+ else
94
+ interface.switchport_mode = :trunk
95
+ assert_equal(DEFAULT_IF_ACCESS_VLAN, interface.access_vlan)
96
+ end
97
+ end
98
+
99
+ def test_sw_vtp_disabled
100
+ refute(interface.switchport_vtp,
101
+ 'Error: interface, access, vtp not disabled')
102
+
103
+ # mgmt
104
+ interface = Interface.new(mgmt_intf)
105
+ refute(interface.switchport_vtp,
106
+ 'Error: interface, access, vtp not disabled')
107
+
108
+ # no switchport
109
+ interface.switchport_mode = :disabled
110
+ refute(interface.switchport_vtp,
111
+ 'Error: interface, access, vtp not disabled')
112
+ end
113
+
114
+ def test_sw_vtp_disabled_fex
115
+ if validate_property_excluded?('feature', 'fex')
116
+ assert_raises(Cisco::UnsupportedError) do
117
+ Feature.fex_enable
118
+ end
119
+ return
120
+ end
121
+ if validate_property_excluded?('interface', 'switchport')
122
+ assert_raises(Cisco::UnsupportedError) do
123
+ interface.switchport_mode = :fex_fabric
124
+ end
125
+ return
126
+ end
127
+ interface.switchport_mode = :fex_fabric
128
+ refute(interface.switchport_vtp,
129
+ 'Error: interface, access, vtp not disabled')
130
+ rescue Cisco::CliError => e
131
+ incompatible_interface?(e.message)
132
+ end
133
+
134
+ def test_sw_autostate_disabled
135
+ refute(interface.switchport_autostate_exclude,
136
+ 'Error: interface, access, autostate exclude not disabled')
137
+
138
+ # mgmt
139
+ interface = Interface.new(mgmt_intf)
140
+ refute(interface.switchport_autostate_exclude,
141
+ 'Error: interface, access, autostate exclude not disabled')
142
+
143
+ # no switchport
144
+ if platform == :ios_xr
145
+ assert_nil(interface.switchport_autostate_exclude)
146
+ else
147
+ interface.switchport_mode = :disabled
148
+ refute(interface.switchport_autostate_exclude,
149
+ 'Error: interface, access, autostate exclude not disabled')
150
+ end
151
+ end
152
+
153
+ def test_sw_mode_disabled
154
+ if platform == :ios_xr
155
+ assert_raises(Cisco::UnsupportedError) do
156
+ interface.switchport_autostate_exclude = true
157
+ end
158
+ else
159
+ interface.switchport_enable(false)
160
+
161
+ assert_raises(RuntimeError) do
162
+ interface.switchport_autostate_exclude = true
163
+ end
164
+ end
165
+ end
166
+
167
+ def test_sw_mode_invalid
168
+ assert_raises(ArgumentError) { interface.switchport_mode = :unknown }
169
+
170
+ interface = Interface.new(mgmt_intf)
171
+ assert_raises(Cisco::CliError, Cisco::UnsupportedError) do
172
+ interface.switchport_mode = :access
173
+ end
174
+ end
175
+
176
+ def test_sw_mode_valid
177
+ if platform == :ios_xr
178
+ # We don't support any switchport modes on IOS XR
179
+ # but we allow the user to set :disabled since that's the default.
180
+ interface.switchport_mode = :disabled
181
+ assert_nil(interface.switchport_mode)
182
+ assert_raises(Cisco::UnsupportedError) do
183
+ interface.switchport_mode = :access
184
+ end
185
+ assert_raises(Cisco::UnsupportedError) do
186
+ interface.switchport_mode = :trunk
187
+ end
188
+ assert_nil(interface.switchport_mode)
189
+ return
190
+ end
191
+
192
+ switchport_modes = [
193
+ :unknown,
194
+ :disabled,
195
+ :access,
196
+ :trunk,
197
+ :tunnel,
198
+ ]
199
+
200
+ switchport_modes.each do |start|
201
+ switchport_modes.each do |finish|
202
+ next if start == :unknown || finish == :unknown
203
+ begin
204
+ # puts "#{start},#{finish}"
205
+ interface.switchport_mode = start
206
+ assert_equal(start, interface.switchport_mode,
207
+ "Error: Switchport mode, #{start}, not as expected")
208
+ # puts "now finish #{finish}"
209
+ interface.switchport_mode = finish
210
+ assert_equal(finish, interface.switchport_mode,
211
+ "Error: Switchport mode, #{finish}, not as expected")
212
+ rescue Cisco::CliError
213
+ next
214
+ end
215
+ end
216
+ end
217
+ end
218
+
219
+ def test_sw_mode_valid_fex
220
+ if validate_property_excluded?('feature', 'fex')
221
+ assert_raises(Cisco::UnsupportedError) do
222
+ Feature.fex_enable
223
+ end
224
+ return
225
+ end
226
+ if validate_property_excluded?('interface', 'switchport')
227
+ assert_raises(Cisco::UnsupportedError) do
228
+ interface.switchport_mode = :fex_fabric
229
+ end
230
+ return
231
+ end
232
+
233
+ interface.switchport_mode = :fex_fabric
234
+ rescue Cisco::CliError => e
235
+ incompatible_interface?(e.message)
236
+ end
237
+
238
+ def test_sw_trunk_allowed_vlan
239
+ if platform == :ios_xr
240
+ assert_nil(interface.default_switchport_trunk_allowed_vlan)
241
+ assert_nil(interface.switchport_trunk_allowed_vlan)
242
+ assert_raises(Cisco::UnsupportedError) do
243
+ interface.switchport_trunk_allowed_vlan = 'all'
244
+ end
245
+ assert_raises(Cisco::UnsupportedError) do
246
+ interface.switchport_trunk_allowed_vlan = '20'
247
+ end
248
+ assert_raises(Cisco::UnsupportedError) do
249
+ interface.switchport_trunk_allowed_vlan = 'none'
250
+ end
251
+ else
252
+ interface.switchport_enable
253
+ interface.switchport_trunk_allowed_vlan = 'all'
254
+ assert_equal(interface.default_switchport_trunk_allowed_vlan,
255
+ interface.switchport_trunk_allowed_vlan)
256
+
257
+ interface.switchport_trunk_allowed_vlan = '20'
258
+ assert_equal('20', interface.switchport_trunk_allowed_vlan)
259
+
260
+ interface.switchport_trunk_allowed_vlan = '30'
261
+ assert_equal('30', interface.switchport_trunk_allowed_vlan)
262
+
263
+ interface.switchport_trunk_allowed_vlan =
264
+ interface.default_switchport_trunk_allowed_vlan
265
+ assert_equal(interface.default_switchport_trunk_allowed_vlan,
266
+ interface.switchport_trunk_allowed_vlan)
267
+
268
+ interface.switchport_trunk_allowed_vlan = 'none'
269
+ assert_equal('none', interface.switchport_trunk_allowed_vlan)
270
+
271
+ interface.switchport_trunk_allowed_vlan = '20, 30'
272
+ assert_equal('20,30', interface.switchport_trunk_allowed_vlan)
273
+
274
+ # Some images have behavior where 'vlan add' is separate line
275
+ # This behavior is triggered for vlan ranges that exceed character limit
276
+ vlans = '500-528,530,532,534,587,590-593,597-598,600,602,604'
277
+ interface.switchport_trunk_allowed_vlan = vlans
278
+ assert_equal(vlans, interface.switchport_trunk_allowed_vlan)
279
+ end
280
+ end
281
+
282
+ def test_sw_trunk_native_vlan
283
+ if platform == :ios_xr
284
+ assert_nil(interface.switchport_trunk_native_vlan)
285
+ assert_nil(interface.default_switchport_trunk_native_vlan)
286
+ assert_raises(Cisco::UnsupportedError) do
287
+ interface.switchport_trunk_native_vlan = 20
288
+ end
289
+ else
290
+ interface.switchport_enable
291
+
292
+ interface.switchport_trunk_native_vlan = 20
293
+ assert_equal(20, interface.switchport_trunk_native_vlan)
294
+
295
+ interface.switchport_trunk_native_vlan = 30
296
+ assert_equal(30, interface.switchport_trunk_native_vlan)
297
+
298
+ interface.switchport_trunk_native_vlan =
299
+ interface.default_switchport_trunk_native_vlan
300
+ assert_equal(DEFAULT_IF_SWITCHPORT_NATIVE_VLAN,
301
+ interface.switchport_trunk_native_vlan)
302
+ end
303
+ end
304
+
305
+ def test_sys_def_sw_on_off
306
+ if platform == :nexus
307
+ system_default_switchport('')
308
+ assert(interface.system_default_switchport,
309
+ 'Test for enabled - failed')
310
+
311
+ # common default is "no switch"
312
+ system_default_switchport('no ')
313
+ end
314
+ refute(interface.system_default_switchport,
315
+ 'Test for disabled - failed')
316
+ rescue RuntimeError => e
317
+ skip('NX-OS defect: system default switchport nvgens twice') if
318
+ e.message[/Expected zero.one value/]
319
+ flunk(e.message)
320
+ end
321
+
322
+ def test_sys_def_sw_shut_on_off
323
+ if platform == :nexus
324
+ system_default_switchport_shutdown('no ')
325
+ refute(interface.system_default_switchport_shutdown,
326
+ 'Test for disabled - failed')
327
+
328
+ # common default is "shutdown"
329
+ system_default_switchport_shutdown('')
330
+ end
331
+ assert(interface.system_default_switchport_shutdown,
332
+ 'Test for enabled - failed')
333
+ end
334
+
335
+ def test_svi_cmd_on_non_vlan
336
+ assert_raises(RuntimeError) { interface.svi_autostate = true }
337
+ assert_raises(RuntimeError) { interface.svi_management = true }
338
+ end
339
+ end
340
+
341
+ # TestInterfaceSwitchportSvi
342
+ # Minitest for Interface switchport configuration in combo with interface-vlan
343
+ # Not applicable to IOS XR
344
+ class TestInterfaceSwSvi < TestInterfaceSwitchport
345
+ attr_reader :svi
346
+
347
+ def setup
348
+ super
349
+ skip('VLAN interfaces are not supported on IOS XR') if platform == :ios_xr
350
+ @svi = Interface.new('Vlan23')
351
+ end
352
+
353
+ def teardown
354
+ svi.destroy unless platform == :ios_xr || svi.nil?
355
+ super
356
+ end
357
+
358
+ def test_sw_autostate
359
+ i = interface
360
+ if validate_property_excluded?('interface', 'switchport_autostate_exclude')
361
+ assert_raises(Cisco::UnsupportedError) do
362
+ i.switchport_autostate_exclude = false
363
+ end
364
+ return
365
+ end
366
+
367
+ default = i.default_switchport_autostate_exclude
368
+
369
+ # access
370
+ i.switchport_mode = :access
371
+ assert_equal(default, i.switchport_autostate_exclude)
372
+
373
+ i.switchport_autostate_exclude = true
374
+ assert(i.switchport_autostate_exclude)
375
+
376
+ i.switchport_autostate_exclude = false
377
+ refute(i.switchport_autostate_exclude)
378
+
379
+ i.switchport_autostate_exclude = default
380
+ assert_equal(default, i.switchport_autostate_exclude)
381
+
382
+ # trunk
383
+ i.switchport_mode = :trunk
384
+ i.switchport_autostate_exclude = true
385
+ assert(i.switchport_autostate_exclude)
386
+
387
+ i.switchport_autostate_exclude = false
388
+ refute(i.switchport_autostate_exclude)
389
+
390
+ i.switchport_autostate_exclude = default
391
+ assert_equal(default, i.switchport_autostate_exclude)
392
+
393
+ # disabled
394
+ interface.switchport_mode = :disabled
395
+ assert_raises RuntimeError do
396
+ interface.switchport_autostate_exclude = true
397
+ end
398
+
399
+ assert_raises RuntimeError do
400
+ interface.switchport_autostate_exclude = false
401
+ end
402
+ end
403
+ end
404
+
405
+ # TestInterfaceSwitchportVtp
406
+ # Minitest for Interface switchport configuration in combo with Vtp class
407
+ # Not applicable to IOS XR
408
+ class TestInterfaceSwVtp < TestInterfaceSwitchport
409
+ attr_reader :vtp
410
+
411
+ def setup
412
+ super
413
+ skip('VTP is not supported on IOS XR or fretta') if
414
+ platform == :ios_xr || product_tag[/n(3|9)k-f/]
415
+ @vtp = Vtp.new(true)
416
+ end
417
+
418
+ def teardown
419
+ vtp.destroy unless platform == :ios_xr || product_tag[/n(3|9)k-f/]
420
+ super
421
+ end
422
+
423
+ def test_mode_access
424
+ # Basic test
425
+ refute(interface.switchport_vtp,
426
+ 'Error: interface, access, vtp not disabled')
427
+
428
+ # Now :access
429
+ platform_supports_vtp_switchport_access?
430
+ interface.switchport_mode = :access
431
+
432
+ default = interface.default_switchport_vtp
433
+ assert_equal(default, interface.switchport_vtp)
434
+
435
+ interface.switchport_vtp = true
436
+ assert(interface.switchport_vtp)
437
+
438
+ interface.switchport_vtp = false
439
+ refute(interface.switchport_vtp)
440
+
441
+ interface.switchport_vtp = default
442
+ assert_equal(default, interface.switchport_vtp)
443
+ end
444
+
445
+ def test_mode_trunk
446
+ platform_supports_vtp_switchport_access?
447
+ interface.switchport_mode = :trunk
448
+
449
+ default = interface.default_switchport_vtp
450
+ assert_equal(default, interface.switchport_vtp)
451
+
452
+ interface.switchport_vtp = true
453
+ assert(interface.switchport_vtp)
454
+
455
+ interface.switchport_vtp = false
456
+ refute(interface.switchport_vtp)
457
+
458
+ interface.switchport_vtp = default
459
+ assert_equal(default, interface.switchport_vtp)
460
+ end
461
+
462
+ def test_mode_disabled
463
+ platform_supports_vtp_switchport_access?
464
+ interface.switchport_mode = :disabled
465
+ refute(interface.switchport_vtp,
466
+ 'Error: interface, access, vtp is enabled')
467
+ end
468
+ end