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,427 @@
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_host'
17
+
18
+ include Cisco
19
+
20
+ DEFAULT_TACACS_SERVER_HOST_PORT = 49
21
+ DEFAULT_TACACS_SERVER_HOST_TIMEOUT = 0
22
+ DEFAULT_TACACS_SERVER_HOST_ENCRYPTION_PASSWORD = ''
23
+
24
+ # TestTacacsServerHost - Minitest for TacacsServerHost node utility
25
+ class TestTacacsSvrHost < CiscoTestCase
26
+ @skip_unless_supported = 'tacacs_server_host'
27
+
28
+ def setup
29
+ super
30
+ if platform == :nexus
31
+ @host_name = 'testhost'
32
+ @default_show_command = 'show run all | inc "tacacs-server" | no-more'
33
+ else
34
+ @default_show_command = 'show running-config tacacs-server'
35
+ @host_name = '2.2.2.2'
36
+ end
37
+ @default_output_pattern = /tacacs-server host\s(#{@host_name})(.*)/
38
+ end
39
+
40
+ # Not for Nexus
41
+ def no_tacacsserver
42
+ # Turn the feature off for a clean test.
43
+ config('no aaa group server tacacs red',
44
+ 'no aaa group server tacacs blue')
45
+ end
46
+
47
+ def test_collection_empty
48
+ hosts = TacacsServerHost.hosts
49
+ hosts.each_value(&:destroy)
50
+ hosts = TacacsServerHost.hosts
51
+
52
+ assert_empty(hosts, 'Error: Tacacs Host collection is not empty')
53
+ end
54
+
55
+ def test_collection
56
+ hosts_hash = {}
57
+ hosts_hash['4.4.4.4'] = 1138
58
+ hosts_hash['5.5.5.5'] = DEFAULT_TACACS_SERVER_HOST_PORT
59
+
60
+ hosts_hash.each do |name, port|
61
+ if platform != :ios_xr
62
+ host = TacacsServerHost.new(name)
63
+ host.port = port
64
+ else
65
+ TacacsServerHost.new(name, true, port)
66
+ end
67
+ end
68
+
69
+ hosts = TacacsServerHost.hosts
70
+ refute_empty(hosts, 'Error: Tacacs Host collection is empty')
71
+ hosts_hash.each do |name, port|
72
+ # host must have been created to be found in the list
73
+ assert(hosts.include?(name),
74
+ "Error: Tacacs Host #{name} not in collection")
75
+ # port numbers differentiate the hosts
76
+ assert_equal(port, hosts[name].port,
77
+ "Error: Tacacs Host #{name} port mismatch")
78
+ end
79
+
80
+ hosts_hash.each_key { |name| hosts[name].destroy }
81
+ end
82
+
83
+ def test_negative
84
+ assert_raises(TypeError) { TacacsServerHost.new(nil) }
85
+ assert_raises(ArgumentError) { TacacsServerHost.new('') }
86
+ end
87
+
88
+ def test_create
89
+ host = TacacsServerHost.new(@host_name)
90
+ assert_show_match(msg: 'Error: Tacacs Host not created')
91
+ host.destroy
92
+ end
93
+
94
+ def test_destroy
95
+ host = TacacsServerHost.new(@host_name)
96
+ assert_show_match(msg: 'Error: Tacacs Host not created')
97
+ host.destroy
98
+
99
+ refute_show_match(msg: 'Error: Tacacs Host still present')
100
+ end
101
+
102
+ def test_name
103
+ host = TacacsServerHost.new(@host_name)
104
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
105
+ assert_equal(@host_name, line.captures[0],
106
+ "Error: #{@host_name} name mismatch")
107
+ assert_equal(@host_name, host.name,
108
+ "Error: #{@host_name} name get value mismatch")
109
+ host.destroy
110
+ end
111
+
112
+ def test_name_preconfigured
113
+ config("tacacs-server host #{@host_name}")
114
+
115
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
116
+ hosts = TacacsServerHost.hosts()
117
+
118
+ assert_equal(@host_name, line.captures[0],
119
+ "Error: #{@host_name} name mismatch")
120
+ refute_nil(hosts[@host_name], "Error: #{@host_name} not retrieved.")
121
+ assert_equal(@host_name, hosts[@host_name].name,
122
+ "Error: #{@host_name} name get value mismatch")
123
+
124
+ hosts.each_value(&:destroy)
125
+ end
126
+
127
+ def test_name_formats
128
+ host_name = 'testhost.example.com'
129
+ host_ip = '192.168.1.1'
130
+
131
+ config("tacacs-server host #{host_name}") unless platform == :ios_xr
132
+ config("tacacs-server host #{host_ip}")
133
+
134
+ line_name = assert_show_match(
135
+ pattern: /tacacs-server host\s(testhost\.example\.com)(.*)/,
136
+ msg: 'Error: Tacacs Host not found') unless platform == :ios_xr
137
+ line_ip = assert_show_match(
138
+ pattern: /tacacs-server host\s(192\.168\.1\.1)(.*)/,
139
+ msg: 'Error: Tacacs Host not found')
140
+ hosts = TacacsServerHost.hosts
141
+
142
+ unless platform == :ios_xr
143
+ assert_equal(host_name, line_name.captures[0],
144
+ "Error: #{host_name} name mismatch")
145
+ refute_nil(hosts[host_name], "Error: #{host_name} not retrieved.")
146
+ assert_equal(host_name, hosts[host_name].name,
147
+ "Error: #{host_name} name get value mismatch")
148
+ end
149
+
150
+ assert_equal(host_ip, line_ip.captures[0],
151
+ "Error: #{host_ip} name mismatch")
152
+ refute_nil(hosts[host_ip], "Error: #{host_ip} not retrieved.")
153
+ assert_equal(host_ip, hosts[host_ip].name,
154
+ "Error: #{host_ip} name get value mismatch")
155
+
156
+ hosts.each_value(&:destroy)
157
+ end
158
+
159
+ def test_port_get
160
+ host = TacacsServerHost.new(@host_name)
161
+
162
+ # not previously configured
163
+ port = DEFAULT_TACACS_SERVER_HOST_PORT
164
+ assert_equal(port, host.port, 'Error: Tacacs Host port incorrect')
165
+
166
+ # IOS XR support the same host using different ports
167
+ unless platform == :ios_xr
168
+ # when configured
169
+ port = 1138
170
+ host.port = port
171
+ assert_equal(port, host.port, 'Error: Tacacs Host port incorrect')
172
+ end
173
+
174
+ host.destroy
175
+ end
176
+
177
+ def test_port_default
178
+ host = TacacsServerHost.new(@host_name)
179
+
180
+ port = DEFAULT_TACACS_SERVER_HOST_PORT
181
+ assert_equal(port, TacacsServerHost.default_port,
182
+ 'Error: Tacacs Host default port incorrect')
183
+ host.destroy
184
+ end
185
+
186
+ def test_port_set
187
+ return if platform == :ios_xr
188
+
189
+ host = TacacsServerHost.new(@host_name)
190
+
191
+ port = 1138
192
+ host.port = port
193
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
194
+ assert_match(/port\s(\d*)/, line.captures[1])
195
+ md = /port\s(\d*)/.match(line.captures[1])
196
+ assert_equal(port, md.captures[0].to_i, 'Error: Tacacs Host port mismatch')
197
+ assert_equal(port, host.port, 'Error: Tacacs Host port incorrect')
198
+
199
+ host.destroy
200
+ end
201
+
202
+ def test_timeout_get
203
+ # Cleanup first
204
+ s = @device.cmd("show run | i 'tacacs.*timeout'")[/^tacacs.*timeout.*$/]
205
+ config("no #{s}") if s
206
+
207
+ host = TacacsServerHost.new(@host_name)
208
+
209
+ # not previously configured
210
+ timeout = DEFAULT_TACACS_SERVER_HOST_TIMEOUT
211
+ assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
212
+
213
+ # when configured
214
+ timeout = 30
215
+ host.timeout = timeout
216
+ assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
217
+
218
+ host.destroy
219
+ end
220
+
221
+ def test_timeout_default
222
+ host = TacacsServerHost.new(@host_name)
223
+
224
+ timeout = DEFAULT_TACACS_SERVER_HOST_TIMEOUT
225
+ assert_equal(timeout, TacacsServerHost.default_timeout,
226
+ 'Error: Tacacs Host default timeout incorrect')
227
+ host.destroy
228
+ end
229
+
230
+ def test_timeout_set
231
+ host = TacacsServerHost.new(@host_name)
232
+
233
+ timeout = 30
234
+ host.timeout = timeout
235
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
236
+
237
+ if platform != :ios_xr
238
+ assert_match(/timeout\s(\d*)/, line.captures[1])
239
+ md = /timeout\s(\d*)/.match(line.captures[1])
240
+ assert_equal(timeout, md.captures[0].to_i,
241
+ 'Error: Tacacs Host timeout mismatch')
242
+ end
243
+
244
+ assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
245
+
246
+ host.destroy
247
+ end
248
+
249
+ def test_timeout_unset
250
+ host = TacacsServerHost.new(@host_name)
251
+
252
+ timeout = DEFAULT_TACACS_SERVER_HOST_TIMEOUT
253
+ host.timeout = timeout
254
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
255
+ refute_match(/timeout\s(\d*)/, line.captures[1])
256
+ assert_equal(timeout, host.timeout, 'Error: Tacacs Host timeout incorrect')
257
+
258
+ host.destroy
259
+ end
260
+
261
+ def test_encryption_type
262
+ host = TacacsServerHost.new(@host_name)
263
+
264
+ # when not configured
265
+ enctype = TACACS_SERVER_ENC_UNKNOWN
266
+
267
+ assert_equal(enctype, host.encryption_type,
268
+ 'Error: Tacacs Host encryption type incorrect')
269
+
270
+ # when configured
271
+ enctype = TACACS_SERVER_ENC_NONE
272
+ sh_run_enctype = TACACS_SERVER_ENC_CISCO_TYPE_7
273
+ host.encryption_key_set(enctype, 'TEST')
274
+ assert_equal(sh_run_enctype, host.encryption_type,
275
+ 'Error: Tacacs Host encryption type incorrect')
276
+ host.destroy
277
+ end
278
+
279
+ def test_encryption_type_default
280
+ host = TacacsServerHost.new(@host_name)
281
+
282
+ assert_equal(TACACS_SERVER_ENC_NONE,
283
+ TacacsServerHost.default_encryption_type,
284
+ 'Error: Tacacs Host default encryption type incorrect')
285
+ host.destroy
286
+ end
287
+
288
+ def test_encryption_password
289
+ host = TacacsServerHost.new(@host_name)
290
+
291
+ # when not configured
292
+ pass = DEFAULT_TACACS_SERVER_HOST_ENCRYPTION_PASSWORD
293
+ assert_equal(pass, host.encryption_password,
294
+ 'Error: Tacacs Host encryption password incorrect')
295
+
296
+ # when configured
297
+ pass = 'TEST'
298
+ sh_run_pass = 'WAWY'
299
+ host.encryption_key_set(0, pass)
300
+
301
+ if platform != :ios_xr
302
+ assert_match(/#{sh_run_pass}/, host.encryption_password,
303
+ 'Error: Tacacs Host encryption password incorrect')
304
+ else
305
+ # Only do not-nil checking for IOS XR
306
+ assert(!host.encryption_password.nil?)
307
+ end
308
+
309
+ host.destroy
310
+ end
311
+
312
+ def test_encryption_password_default
313
+ host = TacacsServerHost.new(@host_name)
314
+
315
+ assert_equal('', TacacsServerHost.default_encryption_password,
316
+ 'Error: Tacacs Host default encryption password incorrect')
317
+ host.destroy
318
+ end
319
+
320
+ def test_key
321
+ host = TacacsServerHost.new(@host_name)
322
+
323
+ enctype = TACACS_SERVER_ENC_NONE
324
+ sh_run_enctype = TACACS_SERVER_ENC_CISCO_TYPE_7
325
+ pass = 'TEST'
326
+ sh_run_pass = 'WAWY'
327
+ host.encryption_key_set(enctype, pass)
328
+
329
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
330
+
331
+ if platform != :ios_xr
332
+ assert_match(/key\s(\d*)\s(\S*)/, line.captures[1])
333
+ md = /key\s(\d*)\s(\S*)/.match(line.captures[1])
334
+ assert_equal(sh_run_enctype, md.captures[0].to_i,
335
+ 'Error: Tacacs Host encryption type mismatch')
336
+ assert_equal(sh_run_enctype, host.encryption_type,
337
+ 'Error: Tacacs Host encryption type incorrect')
338
+ # remove quotes surrounding the encrypted password
339
+ pass_no_quotes = md.captures[1].gsub(/(?:^\")|(?:\"$)/, '')
340
+ assert_equal(sh_run_pass, pass_no_quotes,
341
+ 'Error: Tacacs Host encryption password mismatch')
342
+ assert_match(/#{sh_run_pass}/, host.encryption_password,
343
+ 'Error: Tacacs Host encryption password incorrect')
344
+ else
345
+ # Only do not-nil checking for IOS XR
346
+ assert(!host.encryption_password.nil?)
347
+ end
348
+
349
+ host.destroy
350
+ end
351
+
352
+ def test_key_unset
353
+ # Cleanup first
354
+ s = @device.cmd("show run | i 'tacacs.*host'")[/^tacacs.*host.*$/]
355
+ config("no #{s}") if s
356
+
357
+ host = TacacsServerHost.new(@host_name)
358
+
359
+ # First configure key value. Whether that can be passed
360
+ # will be decided by test_key
361
+ enctype = TACACS_SERVER_ENC_NONE
362
+ pass = 'TEST'
363
+ host.encryption_key_set(enctype, pass)
364
+
365
+ # Now unconfigure the key and verify
366
+ enctype = TACACS_SERVER_ENC_UNKNOWN
367
+ pass = DEFAULT_TACACS_SERVER_HOST_ENCRYPTION_PASSWORD
368
+ host.encryption_key_set(enctype, pass)
369
+
370
+ line = assert_show_match(msg: 'Error: Tacacs Host not found')
371
+ refute_match(/key\s(\d*)\s(\S*)/, line.captures[1])
372
+ assert_equal(enctype, host.encryption_type,
373
+ 'Error: Tacacs Host encryption type incorrect')
374
+ assert_equal(pass, host.encryption_password,
375
+ 'Error: Tacacs Host encryption password incorrect')
376
+ host.destroy
377
+ end
378
+
379
+ def setup_duplicates
380
+ return if platform != :ios_xr
381
+ config('tacacs-server host 8.8.8.8 port 11',
382
+ 'tacacs-server host 8.8.8.8 port 22',
383
+ 'tacacs-server host 8.8.8.8 port 33')
384
+ end
385
+
386
+ def no_duplicates
387
+ return if platform != :ios_xr
388
+ config('no tacacs-server host 8.8.8.8 port 11',
389
+ 'no tacacs-server host 8.8.8.8 port 22',
390
+ 'no tacacs-server host 8.8.8.8 port 33')
391
+ end
392
+
393
+ def test_duplicates
394
+ return if platform != :ios_xr
395
+ setup_duplicates
396
+
397
+ id = '8.8.8.8'
398
+
399
+ server = Cisco::TacacsServerHost.new(id, true, 55)
400
+
401
+ assert_includes(Cisco::TacacsServerHost.hosts, id)
402
+ assert_equal(server, Cisco::TacacsServerHost.hosts[id])
403
+
404
+ assert_equal(55, Cisco::TacacsServerHost.hosts[id].port)
405
+
406
+ if platform != :ios_xr
407
+ server.port = 66
408
+ assert_equal(66, Cisco::TacacsServerHost.hosts[id].port)
409
+
410
+ server.encryption_key_set(nil, nil)
411
+ assert_equal(nil,
412
+ Cisco::TacacsServerHost.hosts[id].encryption_password)
413
+
414
+ server.encryption_key_set('44444444', nil)
415
+ assert_equal('44444444',
416
+ Cisco::TacacsServerHost.hosts[id].encryption_password)
417
+ end
418
+
419
+ server.timeout = 33
420
+ assert_equal(33, Cisco::TacacsServerHost.hosts[id].timeout)
421
+
422
+ server.destroy
423
+ refute_includes(Cisco::TacacsServerHost.hosts, id)
424
+
425
+ no_duplicates
426
+ end
427
+ end
@@ -0,0 +1,105 @@
1
+ # Copyright (c) 2016-2017 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/upgrade'
17
+
18
+ include Cisco
19
+
20
+ # TestUpgrade - Minitest for router Upgrade node Utility class
21
+ class TestUpgrade < CiscoTestCase
22
+ @skip_unless_supported = 'upgrade'
23
+
24
+ def preconfig_upgrade_info
25
+ path = File.expand_path('../upgrade_info.yaml', __FILE__)
26
+ skip('Cannot find tests/upgrade_info.yaml') unless File.file?(path)
27
+ info = YAML.load(File.read(path))
28
+ valid_info?(info)
29
+ info
30
+ end
31
+
32
+ def valid_info?(info)
33
+ skip('tests/upgrade_info.yaml file is empty') unless info
34
+ msg = 'Missing key in tests/upgrade_info.yaml'
35
+ %w(install_image install_uri).each do |key|
36
+ skip("#{msg}: #{key}") if info[key].nil?
37
+ end
38
+ end
39
+
40
+ ###################
41
+ # Upgrade tests #
42
+ ###################
43
+
44
+ def test_clear_status
45
+ Upgrade.clear_status
46
+ refute(Upgrade.upgraded?)
47
+ end
48
+
49
+ def test_delete
50
+ config('show version > bootflash:foobar')
51
+ Upgrade.delete('foobar')
52
+ assert_raises(CliError) do
53
+ Upgrade.delete('foobar')
54
+ end
55
+ end
56
+
57
+ def test_delete_negative
58
+ assert_raises(CliError) do
59
+ # Delete a file that doesn't exist
60
+ Upgrade.delete('foobar')
61
+ end
62
+ assert_raises(CliError) do
63
+ # Delete a file that doesn't exist
64
+ Upgrade.delete('foobar', 'logflash:')
65
+ end
66
+ end
67
+
68
+ # def test_delete_boot
69
+ # Upgrade.delete_boot
70
+ # end
71
+
72
+ def test_image_version
73
+ version = Upgrade.image_version
74
+ assert_match(/^\d.\d\(\d(?:.\d+)?\)(?:\S+\(\S+\))?$/, version)
75
+ end
76
+
77
+ def test_box_online
78
+ assert(Upgrade.box_online?)
79
+ end
80
+
81
+ def test_upgrade
82
+ image_info = preconfig_upgrade_info
83
+ Upgrade.upgrade(image_info['install_image'], image_info['install_uri'])
84
+ # Wait 15 seconds for device to start rebooting
85
+ # TODO : Consider getting the sleep value dynamically
86
+ sleep 15
87
+ begin
88
+ assert(Upgrade.upgraded?)
89
+ rescue
90
+ tries ||= 1
91
+ retry unless (tries += 1) > 5
92
+ raise
93
+ end
94
+ end
95
+
96
+ def test_upgrade_boot_image
97
+ preconfig_upgrade_info
98
+ image_uri = node.config_get('show_version', 'system_image')
99
+ image = image_uri.split('/')[-1]
100
+ uri = image_uri.split('/')[0]
101
+ skip('Boot image not on bootflash:') unless uri == 'bootflash:'
102
+ Upgrade.upgrade(image, uri)
103
+ assert(Upgrade.upgraded?)
104
+ end
105
+ end
data/tests/test_vdc.rb ADDED
@@ -0,0 +1,64 @@
1
+ # Copyright (c) 2015-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/vdc'
17
+
18
+ include Cisco
19
+
20
+ # TestVdc - Minitest for general functionality of the Vdc class.
21
+ class TestVdc < CiscoTestCase
22
+ # This test suite currently has very limited use because:
23
+ # a) VDC support is limited to a narrow list of platforms.
24
+ # b) License restrictions may limit platforms to a single vdc
25
+ # c) Linecard restrictions may limit some tests to specific linecards
26
+ @skip_unless_supported = 'vdc'
27
+
28
+ def setup
29
+ super
30
+ end
31
+
32
+ def test_all_vdcs
33
+ # This test is limited because our vdc provider does not yet support
34
+ # vdc creation. For now just check that we get a non-empty list and
35
+ # that it at least contains the default vdc.
36
+ v = Vdc.vdcs
37
+ refute_empty(v.keys, 'vdc hash should have at least one vdc')
38
+ assert(v.key?(Vdc.default_vdc_name), 'default vdc name not found')
39
+ end
40
+
41
+ def test_create
42
+ assert_raises(ArgumentError) do
43
+ Vdc.new('non_def', 'Currently no support for non-default VDCs')
44
+ end
45
+ end
46
+
47
+ def test_limit_resource_module_type
48
+ mt_full_interface?
49
+ v = Vdc.new('default')
50
+ # Set limit-resource module-type to default (this is variable for each
51
+ # device, so the default is for this device only)
52
+ v.limit_resource_module_type = ''
53
+ default = v.limit_resource_module_type
54
+
55
+ # Limit to F3 cards only
56
+ type = 'f3'
57
+ v.limit_resource_module_type = type
58
+ assert_equal(type, v.limit_resource_module_type)
59
+
60
+ # Reset to device-default
61
+ v.limit_resource_module_type = ''
62
+ assert_equal(default, v.limit_resource_module_type)
63
+ end
64
+ end