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
data/tests/test_vtp.rb ADDED
@@ -0,0 +1,278 @@
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/vtp'
17
+
18
+ # TestVtp - Minitest for Vtp node utility class
19
+ class TestVtp < CiscoTestCase
20
+ @skip_unless_supported = 'vtp'
21
+
22
+ def setup
23
+ super
24
+ config('no feature vtp')
25
+ end
26
+
27
+ def teardown
28
+ config('no feature vtp')
29
+ super
30
+ end
31
+
32
+ def vtp_domain(domain)
33
+ vtp = Vtp.new
34
+ vtp.domain = domain
35
+ vtp
36
+ end
37
+
38
+ def test_disabled
39
+ vtp = Vtp.new(false)
40
+ assert_empty(vtp.domain)
41
+ assert_equal(vtp.default_password, vtp.password)
42
+ assert_equal(vtp.default_filename, vtp.filename)
43
+ assert_equal(vtp.default_version, vtp.version)
44
+ refute(Feature.vtp_enabled?, 'VTP feature was unexpectedly enabled?')
45
+ end
46
+
47
+ def test_enabled_but_no_domain
48
+ vtp = Vtp.new(false)
49
+ config('feature vtp')
50
+ assert(Feature.vtp_enabled?)
51
+ assert_empty(vtp.domain)
52
+ assert_equal(vtp.default_password, vtp.password)
53
+ assert_equal(vtp.default_filename, vtp.filename)
54
+ assert_equal(vtp.default_version, vtp.version)
55
+ # Can set these without setting domain
56
+ vtp.filename = 'bootflash:/foo.bar'
57
+ assert_equal('bootflash:/foo.bar', vtp.filename)
58
+ vtp.version = 1
59
+ assert_equal(1, vtp.version)
60
+ # Can't set any of the below without setting a domain first
61
+ assert_raises(CliError) do
62
+ vtp.password = 'hello'
63
+ end
64
+ end
65
+
66
+ def test_domain_enable_disable
67
+ assert_empty(Vtp.domain)
68
+ vtp = vtp_domain('enable')
69
+ assert_equal('enable', Vtp.domain)
70
+ vtp.destroy
71
+ assert_empty(Vtp.domain)
72
+ end
73
+
74
+ def test_create_valid
75
+ vtp = vtp_domain('accounting')
76
+ assert_equal('accounting', vtp.domain)
77
+ end
78
+
79
+ def test_domain_name_change
80
+ vtp = vtp_domain('accounting')
81
+ vtp_domain('uplink')
82
+ assert_equal('uplink', vtp.domain,
83
+ 'Error: vtp domain name incorrect')
84
+ end
85
+
86
+ def test_negative
87
+ assert_raises(ArgumentError) { vtp_domain(nil) }
88
+ assert_raises(ArgumentError) { vtp_domain('') }
89
+
90
+ vtp = vtp_domain('accounting')
91
+
92
+ # Set password to nil
93
+ assert_raises(TypeError) { vtp.password = nil }
94
+
95
+ # Password too long
96
+ password = 'a' * (Vtp::MAX_VTP_PASSWORD_SIZE + 1)
97
+ assert_raises(ArgumentError) { vtp.password = password }
98
+
99
+ # Set filename to nil
100
+ assert_raises(TypeError) { vtp.filename = nil }
101
+
102
+ # Invalid version
103
+ assert_raises(Cisco::CliError) { vtp.version = 34 }
104
+ end
105
+
106
+ def test_assignment
107
+ vtp = vtp_domain('accounting')
108
+ vtp.password = 'copy_test'
109
+ assert_equal('copy_test', vtp.password,
110
+ 'Error: vtp password not set')
111
+ vtp_extra = vtp
112
+ assert_equal('copy_test', vtp_extra.password,
113
+ 'Error: vtp password not set')
114
+ end
115
+
116
+ def test_domain_get
117
+ vtp = vtp_domain('accounting')
118
+ assert_equal('accounting', vtp.domain,
119
+ 'Error: vtp domain incorrect')
120
+ end
121
+
122
+ def test_password_default
123
+ vtp = vtp_domain('accounting')
124
+ vtp.password = 'test_me'
125
+ assert_equal('test_me', vtp.password,
126
+ 'Error: vtp password not correct')
127
+
128
+ vtp.password = vtp.default_password
129
+ assert_equal(node.config_get_default('vtp', 'password'), vtp.password,
130
+ 'Error: vtp password not correct')
131
+ end
132
+
133
+ def test_password_zero_length
134
+ vtp = vtp_domain('accounting')
135
+ vtp.password = ''
136
+ assert_equal('', vtp.password,
137
+ 'Error: vtp password not empty')
138
+ end
139
+
140
+ def test_password_get
141
+ vtp = vtp_domain('accounting')
142
+
143
+ config('vtp password cisco123')
144
+ assert_equal('cisco123', vtp.password,
145
+ 'Error: vtp password not correct')
146
+ end
147
+
148
+ def test_password_get_not_set
149
+ vtp = vtp_domain('accounting')
150
+ assert_equal('', vtp.password,
151
+ 'Error: vtp password not empty')
152
+ end
153
+
154
+ def test_password_clear
155
+ vtp = vtp_domain('accounting')
156
+ vtp.password = 'cisco123'
157
+ assert_equal('cisco123', vtp.password,
158
+ 'Error: vtp password not set')
159
+
160
+ vtp.password = ''
161
+ assert_equal('', vtp.password,
162
+ 'Error: vtp default password not set')
163
+ end
164
+
165
+ def test_password_valid
166
+ vtp = vtp_domain('accounting')
167
+ alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789'
168
+ password = ''
169
+ 1.upto(Vtp::MAX_VTP_PASSWORD_SIZE - 1) do |i|
170
+ password += alphabet[i % alphabet.size, 1]
171
+ vtp.password = password
172
+ assert_equal(password.rstrip, vtp.password,
173
+ 'Error: vtp password not set')
174
+ end
175
+ end
176
+
177
+ # this fails on n7k running 7.3(0)D1.1 image but it
178
+ # is fixed in some later releases. The bugID is CSCuy87970
179
+ # which is already verified.
180
+ def test_password_special_characters
181
+ skip_legacy_defect?('7.3.[012].(N1|D1)',
182
+ 'CSCuy87970: NXAPI incorrect backslash escape')
183
+ # N6k output may triple-escape forward slashes. For now simplify pattern.
184
+ test_pass = node.product_id[/N[56]/] ? 'hello!//#%$x' : 'hello!//\\#%$x'
185
+ vtp = vtp_domain('password')
186
+ vtp.password = test_pass
187
+ assert_equal(test_pass, vtp.password)
188
+ end
189
+
190
+ def test_filename_valid
191
+ vtp = vtp_domain('accounting')
192
+ vtp.filename = 'bootflash:/test.dat'
193
+ assert_equal('bootflash:/test.dat', vtp.filename,
194
+ 'Error: vtp file content wrong')
195
+ end
196
+
197
+ def test_filename_zero_length
198
+ vtp = vtp_domain('accounting')
199
+ vtp.filename = vtp.default_filename
200
+ assert_equal(node.config_get_default('vtp', 'filename'), vtp.filename,
201
+ 'Error: vtp file content wrong')
202
+
203
+ # send in 'no' to remove the config. That will cause the default
204
+ # to get reapplied.
205
+ vtp.filename = ''
206
+ assert_equal(node.config_get_default('vtp', 'filename'), vtp.filename,
207
+ 'Error: vtp file content wrong')
208
+ end
209
+
210
+ def test_filename_auto_enable
211
+ vtp = Vtp.new(false)
212
+ refute(Feature.vtp_enabled?, 'VTP should not be enabled')
213
+ vtp.filename = 'bootflash:/foo.bar'
214
+ assert(Feature.vtp_enabled?)
215
+ assert_equal('bootflash:/foo.bar', vtp.filename)
216
+ end
217
+
218
+ def test_version_valid
219
+ vtp = vtp_domain('accounting')
220
+ vtp.version = vtp.default_version
221
+ assert_equal(node.config_get_default('vtp', 'version'), vtp.version,
222
+ 'Error: vtp version not default')
223
+ end
224
+
225
+ def test_version3_valid
226
+ vtp = vtp_domain('accounting')
227
+
228
+ ref = cmd_ref.lookup('vtp', 'version')
229
+ assert(ref, 'Error, reference not found for vtp version3')
230
+
231
+ case node.product_id
232
+ when /N(5|6|7)K/
233
+ vtp.version = 3
234
+ assert_equal(vtp.version, 3)
235
+ else
236
+ assert_raises(Cisco::CliError) { vtp.version = 3 }
237
+ end
238
+ end
239
+
240
+ # Decides whether to check for a raised Exception or an equal value.
241
+ def assert_result(expected_result, err_msg, &block)
242
+ if /Error/ =~ expected_result.to_s
243
+ if expected_result.is_a?(String)
244
+ expected_result = Object.const_get(expected_result)
245
+ end
246
+ assert_raises(expected_result, &block)
247
+ else
248
+ value = block.call
249
+ assert_equal(expected_result, value, err_msg)
250
+ end
251
+ end
252
+
253
+ def test_version_default
254
+ vtp = vtp_domain('accounting')
255
+ vtp.version = 2
256
+ assert_equal(2, vtp.version,
257
+ 'Error: vtp version not correct')
258
+ vtp.version = vtp.default_version
259
+ assert_equal(node.config_get_default('vtp', 'version'), vtp.version,
260
+ 'Error: vtp version not default')
261
+ end
262
+
263
+ def test_version_auto_enable
264
+ vtp = Vtp.new(false)
265
+ refute(Feature.vtp_enabled?, 'VTP should not be enabled')
266
+ vtp.version = 1
267
+ assert(Feature.vtp_enabled?)
268
+ assert_equal(1, vtp.version)
269
+ end
270
+
271
+ def test_feature_enable_disable
272
+ Feature.vtp_enable
273
+ assert(Feature.vtp_enabled?, 'Error: vtp is not enabled')
274
+
275
+ Feature.vtp_disable
276
+ refute(Feature.vtp_enabled?, 'Error: vtp is not disabled')
277
+ end
278
+ end
@@ -0,0 +1,327 @@
1
+ # Copyright (c) 2013-2018 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/feature'
17
+ require_relative '../lib/cisco_node_utils/vxlan_vtep'
18
+ require_relative '../lib/cisco_node_utils/vdc'
19
+ require_relative '../lib/cisco_node_utils/evpn_multisite'
20
+
21
+ include Cisco
22
+
23
+ # TestVxlanVtep - Minitest for VxlanVtep node utility
24
+ class TestVxlanVtep < CiscoTestCase
25
+ @skip_unless_supported = 'vxlan_vtep'
26
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
27
+ @@feature_unsupported = false # rubocop:disable Style/ClassVars
28
+
29
+ def setup
30
+ super
31
+ skip('setup: Feature is unsupported on this device') if @@feature_unsupported
32
+ skip('Platform does not support MT-full or MT-lite') unless
33
+ VxlanVtep.mt_full_support || VxlanVtep.mt_lite_support
34
+ Interface.interfaces(:nve).each { |_nve, obj| obj.destroy }
35
+ vdc_limit_f3_no_intf_needed(:set)
36
+ feature_cleanup if @@pre_clean_needed
37
+ Feature.nv_overlay_enable
38
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
39
+ rescue RuntimeError => e
40
+ # Skip locally to shortcut the dependencies above for the next test
41
+ @@feature_unsupported = hardware_supports_feature?(e.message, status_only: true) # rubocop:disable Style/ClassVars
42
+ @@feature_unsupported ? skip(e.message) : raise(e.message)
43
+ end
44
+
45
+ def teardown
46
+ if first_or_last_teardown
47
+ vdc_limit_f3_no_intf_needed(:clear)
48
+ feature_cleanup
49
+ end
50
+ super
51
+ end
52
+
53
+ def feature_cleanup
54
+ config_no_warn('no feature-set fabricpath')
55
+ config_no_warn('no feature vni')
56
+ config_no_warn('no feature vn-segment-vlan-based')
57
+ config_no_warn('no nv overlay evpn ; no feature nv overlay')
58
+ # Rapid nv feature toggle can cause failures on some platforms;
59
+ # symptom e.g. 'show runn | i ^feature' will hang
60
+ sleep 5
61
+ end
62
+
63
+ def test_create_destroy_one
64
+ # VxlanVtep.new() will enable 'feature nv overlay'
65
+ id = 'nve1'
66
+ vtep = VxlanVtep.new(id)
67
+ @default_show_command = "show running | i 'interface #{id}'"
68
+
69
+ assert_show_match(pattern: /^interface #{id}$/,
70
+ msg: "failed to create interface #{id}")
71
+
72
+ assert_includes(Cisco::VxlanVtep.vteps, id)
73
+ assert_equal(Cisco::VxlanVtep.vteps[id], vtep)
74
+
75
+ vtep.destroy
76
+ refute_show_match(pattern: /^interface #{id}$/,
77
+ msg: "failed to destroy interface #{id}")
78
+ end
79
+
80
+ def test_mt_full_create_destroy_multiple
81
+ skip('Platform does not support MT-full') unless VxlanVtep.mt_full_support
82
+
83
+ id1 = 'nve1'
84
+ id2 = 'nve2'
85
+ id3 = 'nve3'
86
+ id4 = 'nve4'
87
+ vtep1 = VxlanVtep.new(id1)
88
+ vtep2 = VxlanVtep.new(id2)
89
+ vtep3 = VxlanVtep.new(id3)
90
+ vtep4 = VxlanVtep.new(id4)
91
+
92
+ [id1, id2, id3, id4].each do |id|
93
+ assert_show_match(command: "show running | i 'interface #{id}'",
94
+ pattern: /^interface #{id}$/,
95
+ msg: "failed to create interface #{id}")
96
+ assert_includes(Cisco::VxlanVtep.vteps, id)
97
+ end
98
+
99
+ vtep1.destroy
100
+ vtep2.destroy
101
+ vtep3.destroy
102
+ vtep4.destroy
103
+
104
+ [id1, id2, id3, id4].each do |id|
105
+ refute_show_match(command: "show running | i 'interface #{id}'",
106
+ pattern: /^interface #{id}$/,
107
+ msg: "failed to create interface #{id}")
108
+ end
109
+ end
110
+
111
+ def test_create_negative
112
+ # MT-lite supports a single nve int, MT-full supports 4.
113
+ if VxlanVtep.mt_lite_support
114
+ VxlanVtep.new('nve1')
115
+ negative_id = 'nve2'
116
+
117
+ elsif VxlanVtep.mt_full_support
118
+ (1..4).each { |n| VxlanVtep.new("nve#{n}") }
119
+ negative_id = 'nve5'
120
+ end
121
+
122
+ assert_raises(CliError) do
123
+ VxlanVtep.new(negative_id)
124
+ end
125
+ end
126
+
127
+ def test_description
128
+ vtep = VxlanVtep.new('nve1')
129
+
130
+ # Set description to non-default value and verify
131
+ desc = 'vxlan interface'
132
+ vtep.description = desc
133
+ assert_equal(desc, vtep.description)
134
+
135
+ # Set description to default value and verify
136
+ desc = vtep.default_description
137
+ vtep.description = desc
138
+ assert_equal(desc, vtep.description)
139
+ end
140
+
141
+ def test_host_reachability
142
+ skip("Test not supported on #{node.product_id}") if
143
+ cmd_ref.lookup('vxlan_vtep', 'host_reachability').default_value.nil?
144
+
145
+ vtep = VxlanVtep.new('nve1')
146
+
147
+ vtep.host_reachability = 'flood'
148
+ assert_equal('flood', vtep.host_reachability)
149
+ vtep.host_reachability = 'evpn'
150
+ assert_equal('evpn', vtep.host_reachability)
151
+
152
+ # Set value back to flood, currently evpn.
153
+ vtep.host_reachability = 'flood'
154
+ assert_equal('flood', vtep.host_reachability)
155
+ end
156
+
157
+ def test_shutdown
158
+ vtep = VxlanVtep.new('nve1')
159
+
160
+ vtep.shutdown = true
161
+ assert(vtep.shutdown, 'source_interface is not shutdown')
162
+
163
+ vtep.shutdown = false
164
+ refute(vtep.shutdown, 'source_interface is shutdown')
165
+
166
+ vtep.shutdown = vtep.default_shutdown
167
+ assert(vtep.shutdown, 'source_interface is not shutdown')
168
+ end
169
+
170
+ def test_source_interface
171
+ vtep = VxlanVtep.new('nve1')
172
+
173
+ # Set source_interface to non-default value
174
+ val = 'loopback55'
175
+ vtep.source_interface = val
176
+ assert_equal(val, vtep.source_interface)
177
+
178
+ # Change source_interface when nve interface is in a 'no shutdown' state
179
+ vtep.shutdown = false
180
+ val = 'loopback77'
181
+ vtep.source_interface = val
182
+ assert_equal(val, vtep.source_interface)
183
+ # source_interface should 'no shutdown' after the change.
184
+ refute(vtep.shutdown, 'source_interface is shutdown')
185
+
186
+ # Set source_interface to default value
187
+ val = vtep.default_source_interface
188
+ vtep.source_interface = val
189
+ assert_equal(val, vtep.source_interface)
190
+ end
191
+
192
+ def test_multisite_bg_interface
193
+ skip("#{node.product_id} doesn't support this feature") unless
194
+ node.product_id[/N9K.*EX/]
195
+ vtep = VxlanVtep.new('nve1')
196
+
197
+ # Set multisite_bg_interface to non-default value
198
+ val = 'loopback55'
199
+ ms = EvpnMultisite.new(100)
200
+ vtep.multisite_border_gateway_interface = val
201
+ assert_equal(val, vtep.multisite_border_gateway_interface)
202
+
203
+ vtep.multisite_border_gateway_interface = vtep.default_multisite_border_gateway_interface
204
+ assert_equal(vtep.default_multisite_border_gateway_interface,
205
+ vtep.multisite_border_gateway_interface)
206
+
207
+ # Should Error when no 'evpn multisite border-gateway' set
208
+ ms.destroy
209
+ assert_raises(Cisco::CliError) do
210
+ vtep.multisite_border_gateway_interface = val
211
+ end
212
+ end
213
+
214
+ def test_source_interface_hold_down_time
215
+ vtep = VxlanVtep.new('nve1')
216
+ if validate_property_excluded?('vxlan_vtep', 'source_intf_hold_down_time')
217
+ assert_nil(vtep.source_interface_hold_down_time)
218
+ assert_nil(vtep.default_source_interface_hold_down_time)
219
+ assert_raises(Cisco::UnsupportedError) do
220
+ vtep.source_interface_hold_down_time = 50
221
+ end
222
+ return
223
+ end
224
+
225
+ skip_incompat_version?('vxlan_vtep', 'source_intf_hold_down_time')
226
+ # Set source_interface to non-default value
227
+ val = 'loopback55'
228
+ vtep.source_interface = val
229
+ assert_equal(val, vtep.source_interface)
230
+
231
+ # Set source_interface_hold_down_time
232
+ time = 50
233
+ vtep.source_interface_hold_down_time = time
234
+ assert_equal(time, vtep.source_interface_hold_down_time)
235
+
236
+ # Set source_interface_hold_down_time to default value
237
+ val = vtep.default_source_interface_hold_down_time
238
+ vtep.source_interface_hold_down_time = val
239
+ assert_equal(val, vtep.source_interface_hold_down_time)
240
+ end
241
+
242
+ def test_global_ingress_replication_bgp
243
+ skip_incompat_version?('vxlan_vtep', 'global_ingress_replication_bgp')
244
+
245
+ vtep = VxlanVtep.new('nve1')
246
+ vtep.host_reachability = 'evpn'
247
+ if validate_property_excluded?('vxlan_vtep', 'global_ingress_replication_bgp')
248
+ assert_raises(Cisco::UnsupportedError) { vtep.global_ingress_replication_bgp = true }
249
+ return
250
+ end
251
+
252
+ # Test: Check global_ingress_replication_bgp is not configured.
253
+ refute(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be disabled')
254
+
255
+ # Test: Enable global_ingress_replication_bgp
256
+ vtep.global_ingress_replication_bgp = true
257
+ assert(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be enabled')
258
+ # Test: Default
259
+ vtep.global_ingress_replication_bgp = vtep.default_global_ingress_replication_bgp
260
+ refute(vtep.global_ingress_replication_bgp, 'global_ingress_replication_bgp should be disabled')
261
+ end
262
+
263
+ def test_global_suppress_arp
264
+ skip_incompat_version?('vxlan_vtep', 'global_suppress_arp')
265
+
266
+ vtep = VxlanVtep.new('nve1')
267
+ vtep.host_reachability = 'evpn'
268
+ if validate_property_excluded?('vxlan_vtep', 'global_suppress_arp')
269
+ assert_raises(Cisco::UnsupportedError) { vtep.global_suppress_arp = true }
270
+ return
271
+ end
272
+
273
+ # Test: Check global_suppress_arp is not configured.
274
+ refute(vtep.global_suppress_arp, 'global_suppress_arp should be disabled')
275
+
276
+ # Test: Enable global_suppress_arp
277
+ begin
278
+ vtep.global_suppress_arp = true
279
+ rescue CliError => e
280
+ skip(e.to_s) if /ERROR: Please configure TCAM/.match(e.to_s)
281
+ end
282
+ assert(vtep.global_suppress_arp, 'global_suppress_arp should be enabled')
283
+ # Test: Default
284
+ vtep.global_suppress_arp = vtep.default_global_suppress_arp
285
+ refute(vtep.global_suppress_arp, 'global_suppress_arp should be disabled')
286
+ end
287
+
288
+ def test_global_mcast_group_l2
289
+ vtep = VxlanVtep.new('nve1')
290
+ if validate_property_excluded?('vxlan_vtep', 'global_mcast_group_l2')
291
+ assert_raises(Cisco::UnsupportedError) do
292
+ vtep.global_mcast_group_l2 = '225.1.1.1'
293
+ end
294
+ return
295
+ end
296
+ skip_incompat_version?('vxlan_vtep', 'global_mcast_group_l2')
297
+
298
+ assert_equal(vtep.global_mcast_group_l2, vtep.default_global_mcast_group_l2)
299
+ vtep.global_mcast_group_l2 = '225.1.1.1'
300
+ assert_equal('225.1.1.1', vtep.global_mcast_group_l2)
301
+ vtep.global_mcast_group_l2 = vtep.default_global_mcast_group_l2
302
+ assert_equal(vtep.global_mcast_group_l2, vtep.default_global_mcast_group_l2)
303
+ end
304
+
305
+ def test_global_mcast_group_l3
306
+ vtep = VxlanVtep.new('nve1')
307
+ if validate_property_excluded?('vxlan_vtep', 'global_mcast_group_l3')
308
+ assert_raises(Cisco::UnsupportedError) do
309
+ vtep.global_mcast_group_l3 = '225.1.1.1'
310
+ end
311
+ return
312
+ end
313
+ skip_incompat_version?('vxlan_vtep', 'global_mcast_group_l3')
314
+
315
+ assert_equal(vtep.global_mcast_group_l3, vtep.default_global_mcast_group_l3)
316
+
317
+ begin
318
+ # global_mcast_group_l3 is only supported on certain vxlan capable N9ks
319
+ vtep.global_mcast_group_l3 = '225.1.1.1'
320
+ rescue CliError => e
321
+ skip(e.to_s) if /TRM not supported on this platform/.match(e.to_s)
322
+ end
323
+ assert_equal('225.1.1.1', vtep.global_mcast_group_l3)
324
+ vtep.global_mcast_group_l3 = vtep.default_global_mcast_group_l3
325
+ assert_equal(vtep.global_mcast_group_l3, vtep.default_global_mcast_group_l3)
326
+ end
327
+ end