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,108 @@
1
+ # Copyright (c) 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/bgp_af'
17
+ require_relative '../lib/cisco_node_utils/bgp_af_aggr_addr'
18
+
19
+ include Cisco
20
+ # TestBgpAfAggrAddr - Minitest for BgpAFAggrAddr class
21
+ class TestBgpAfAggrAddr < CiscoTestCase
22
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
23
+
24
+ def setup
25
+ super
26
+ config('no feature bgp')
27
+ remove_all_vrfs if @@pre_clean_needed
28
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
29
+ end
30
+
31
+ def teardown
32
+ config('no feature bgp')
33
+ remove_all_vrfs
34
+ super
35
+ end
36
+
37
+ def test_collection_empty
38
+ node.cache_flush
39
+ aas = RouterBgpAFAggrAddr.aas
40
+ assert_empty(aas, 'BGP AF Aggregate Address collection is not empty')
41
+ end
42
+
43
+ def test_collection_not_empty
44
+ bgp_af = []
45
+ bgp_af_aa = []
46
+ %w(default red).each do |vrf|
47
+ [%w(ipv4 unicast), %w(ipv6 unicast),
48
+ %w(ipv4 multicast), %w(ipv6 multicast)].each do |af|
49
+ bgp_af.push(RouterBgpAF.new(55, vrf, af))
50
+ if af[0] == 'ipv4'
51
+ ['1.1.1.0/24', '2.2.2.2/32'].each do |addr|
52
+ bgp_af_aa.push(RouterBgpAFAggrAddr.new(55, vrf, af, addr))
53
+ end
54
+ else
55
+ ['2001::12/128', '2000::31/128'].each do |addr|
56
+ bgp_af_aa.push(RouterBgpAFAggrAddr.new(55, vrf, af, addr))
57
+ end
58
+ end
59
+ assert_equal(2, RouterBgpAFAggrAddr.aas[55][vrf][af].size)
60
+ end
61
+ end
62
+ end
63
+
64
+ def test_destroy
65
+ af = %w(ipv4 unicast)
66
+ RouterBgpAF.new(55, 'red', af)
67
+ obj = RouterBgpAFAggrAddr.new(55, 'red', af, '1.1.1.0/24')
68
+ aas = RouterBgpAFAggrAddr.aas[55]['red'][af]
69
+ assert_equal(1, aas.size)
70
+ obj.destroy
71
+ aas = RouterBgpAFAggrAddr.aas[55]['red'][af]
72
+ assert_empty(aas, 'BGP AF Aggregate Address collection is not empty')
73
+ end
74
+
75
+ def aa_helper(props)
76
+ af = %w(ipv4 unicast)
77
+ RouterBgpAF.new(55, 'red', af)
78
+ obj = RouterBgpAFAggrAddr.new(55, 'red', af, '1.1.1.0/24')
79
+ test_hash = {
80
+ advertise_map: obj.default_advertise_map,
81
+ as_set: obj.default_as_set,
82
+ attribute_map: obj.default_attribute_map,
83
+ summary_only: obj.default_summary_only,
84
+ suppress_map: obj.default_suppress_map,
85
+ }.merge!(props)
86
+ obj.aa_set(test_hash)
87
+ obj
88
+ end
89
+
90
+ def test_aa
91
+ obj = aa_helper(advertise_map: 'adm',
92
+ as_set: true,
93
+ attribute_map: 'atm',
94
+ suppress_map: 'sum')
95
+ assert(obj.as_set)
96
+ assert_equal('adm', obj.advertise_map)
97
+ assert_equal('atm', obj.attribute_map)
98
+ assert_equal('sum', obj.suppress_map)
99
+ obj = aa_helper(advertise_map: 'adm',
100
+ as_set: true,
101
+ attribute_map: 'atm',
102
+ summary_only: true)
103
+ assert(obj.as_set)
104
+ assert(obj.summary_only)
105
+ assert_equal('adm', obj.advertise_map)
106
+ assert_equal('atm', obj.attribute_map)
107
+ end
108
+ end
@@ -0,0 +1,596 @@
1
+ #!/usr/bin/env ruby
2
+ # RouterBgpNeighbor Unit Tests
3
+ #
4
+ # Jie Yang, August 2015
5
+ #
6
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+
20
+ require_relative 'ciscotest'
21
+ require_relative '../lib/cisco_node_utils/bgp'
22
+ require_relative '../lib/cisco_node_utils/bgp_neighbor'
23
+ require_relative '../lib/cisco_node_utils/logger'
24
+
25
+ # TestBgpNeighbor - Minitest for RouterBgpNeighbor node utility class
26
+ class TestBgpNeighbor < CiscoTestCase
27
+ ASN = 55
28
+ ADDR = '1.1.1.1'
29
+ REMOTE_ASN = 99
30
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
31
+
32
+ def setup
33
+ super
34
+ remove_all_bgps if @@pre_clean_needed
35
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
36
+ # BGP Neighbor requires the presence of a basic bgp global config
37
+ RouterBgp.new(ASN)
38
+ end
39
+
40
+ def teardown
41
+ remove_all_bgps
42
+ super
43
+ end
44
+
45
+ # Returns some test data for use in several tests.
46
+ def test_data
47
+ test_data = []
48
+ test_data << { vrf: 'default', neighbors: ['1.1.1.1'] }
49
+
50
+ if platform == :ios_xr
51
+ # XR doesn't support prefix/len addresses
52
+ test_data << { vrf: 'red',
53
+ neighbors: ['2.2.2.0', '2000::2'] }
54
+ else
55
+ test_data << { vrf: 'red',
56
+ neighbors: ['2.2.2.0/24', '2000::2', '2000:123:38::/64'] }
57
+ end
58
+ end
59
+
60
+ # Finds and returns the neighbor with the specified address
61
+ # and vrf, or nil if it is not found.
62
+ def find_neighbor(addr, vrf='default',
63
+ bgp_neighbors=RouterBgpNeighbor.neighbors)
64
+ bgp_neighbors.each_value do |vrfs|
65
+ vrfs.each do |vrf_name, neighbors|
66
+ next unless vrf_name == vrf
67
+ neighbors.each_value do |neighbor|
68
+ next unless neighbor.nbr == addr
69
+ Cisco::Logger.debug("neighbor '#{addr}' with vrf '#{vrf}' found")
70
+ return neighbor
71
+ end
72
+ end
73
+ end
74
+ Cisco::Logger.debug("neighbor '#{addr}' with vrf '#{vrf}' not found")
75
+ nil
76
+ end
77
+
78
+ # Does the neighbor with the specified address and vrf exist?
79
+ def neighbor_exists?(addr, vrf='default',
80
+ bgp_neighbors=RouterBgpNeighbor.neighbors)
81
+ find_neighbor(addr, vrf, bgp_neighbors) != nil
82
+ end
83
+
84
+ # Finds the neighbor with the specified address in the
85
+ # output from a show cmd. Returns the matching line of
86
+ # output if found, otherwise nil.
87
+ def get_bgpneighbor_match_line(addr, vrf='default')
88
+ regex = /neighbor #{addr}/
89
+ if vrf == 'default'
90
+ if platform == :ios_xr
91
+ cmd = 'show run router bgp'
92
+ regex = /^ neighbor #{addr}/
93
+ else
94
+ cmd = "show run bgp all | section 'router bgp' | no-more"
95
+ end
96
+ else
97
+ if platform == :ios_xr
98
+ cmd = "show run router bgp #{ASN} vrf #{vrf}"
99
+ else
100
+ cmd = "show run bgp all | section 'vrf #{vrf}' | no-more"
101
+ end
102
+ end
103
+ s = @device.cmd("#{cmd}")
104
+ Cisco::Logger.debug("matching '#{addr}' with vrf '#{vrf}', output: \n#{s}")
105
+ line = regex.match(s)
106
+ Cisco::Logger.debug(line)
107
+ line
108
+ end
109
+
110
+ # Creates a neighbor for use in tests, and sets its remote_as.
111
+ def create_neighbor(vrf, addr=ADDR)
112
+ neighbor = RouterBgpNeighbor.new(ASN, vrf, addr)
113
+
114
+ # XR requires a remote_as in order to set other properties
115
+ # (description, password, etc.)
116
+ neighbor.remote_as = REMOTE_ASN
117
+ neighbor
118
+ end
119
+
120
+ def test_collection_empty
121
+ remove_all_bgps
122
+ neighbors = RouterBgpNeighbor.neighbors
123
+ assert_empty(neighbors, 'BGP neighbor collection is not empty')
124
+ end
125
+
126
+ def test_collection_not_empty
127
+ test_data_hash = {}
128
+
129
+ cmds = ['router bgp 55']
130
+
131
+ test = test_data
132
+ test.each do |d|
133
+ test_data_hash[d[:vrf]] = d[:neighbors]
134
+ cmds << "vrf #{d[:vrf]}" unless d[:vrf] == 'default'
135
+ d[:neighbors].each do |neighbor|
136
+ cmds << "neighbor #{neighbor}" << "remote-as #{REMOTE_ASN}"
137
+ end
138
+ end
139
+
140
+ config(*cmds)
141
+
142
+ bgp_neighbors = RouterBgpNeighbor.neighbors
143
+ refute_empty(bgp_neighbors, 'BGP neighbor collection is empty')
144
+
145
+ # see if all expected neighbors are there
146
+ test.each do |d|
147
+ d[:neighbors].each do |neighbor|
148
+ # see if the neighbor exists in the list returned by the API
149
+ assert(neighbor_exists?(neighbor, d[:vrf], bgp_neighbors),
150
+ 'Did not find in neighbor list: '\
151
+ "nbr '#{neighbor}', vrf '#{d[:vrf]}'")
152
+
153
+ # see if the neighbor exists via show cmd output
154
+ line = get_bgpneighbor_match_line(neighbor, d[:vrf])
155
+ refute_nil(line, 'Did not find in show output: '\
156
+ "nbr '#{neighbor}', vrf '#{d[:vrf]}'")
157
+ end
158
+ end
159
+ end
160
+
161
+ def test_create_destroy
162
+ test_data.each do |d|
163
+ d[:neighbors].each do |addr|
164
+ neighbor = create_neighbor(d[:vrf], addr)
165
+ exists = neighbor_exists?(addr, d[:vrf])
166
+ assert(exists, "Failed to create bgp neighbor #{addr}")
167
+ line = get_bgpneighbor_match_line(addr, d[:vrf])
168
+ refute_nil(line, "failed to create bgp neighbor #{addr}")
169
+ neighbor.destroy
170
+ exists = neighbor_exists?(addr, d[:vrf])
171
+ refute(exists, "Failed to delete bgp neighbor #{addr}")
172
+ line = get_bgpneighbor_match_line(addr, d[:vrf])
173
+ assert_nil(line, "failed to delete bgp neighbor #{addr}")
174
+ end
175
+ end
176
+ end
177
+
178
+ def test_description
179
+ %w(default test_vrf).each do |vrf|
180
+ neighbor = create_neighbor(vrf)
181
+ description = "tested by mini test for vrf #{vrf}"
182
+ neighbor.description = description
183
+ assert_equal(description, neighbor.description)
184
+ neighbor.description = ' '
185
+ assert(neighbor.description.empty?)
186
+ neighbor.description = neighbor.default_description
187
+ assert_equal(neighbor.description, neighbor.default_description)
188
+ neighbor.destroy
189
+ end
190
+ end
191
+
192
+ def test_multiple_descriptions
193
+ # First create multiple routers with multiple descriptions.
194
+ test_data.each do |d|
195
+ d[:neighbors].each do |addr|
196
+ neighbor = create_neighbor(d[:vrf], addr)
197
+ neighbor.description = "#{d[:vrf]}:#{addr}"
198
+ end
199
+ end
200
+
201
+ # Now test if the description has been correctly set
202
+ RouterBgpNeighbor.neighbors.each_value do |bgp_vrfs|
203
+ bgp_vrfs.each do |vrf, neighbors|
204
+ neighbors.each do |addr, neighbor|
205
+ assert_equal("#{vrf}:#{addr}", neighbor.description)
206
+ neighbor.description = ''
207
+ assert(neighbor.description.empty?)
208
+ neighbor.description = neighbor.default_description
209
+ assert_equal(neighbor.description, neighbor.default_description)
210
+ neighbor.destroy
211
+ end
212
+ end
213
+ end
214
+ end
215
+
216
+ def test_connected_check
217
+ %w(default test_vrf).each do |vrf|
218
+ neighbor = create_neighbor(vrf)
219
+ check = [true, false, neighbor.default_connected_check]
220
+ check.each do |value|
221
+ neighbor.connected_check = value
222
+ assert_equal(value, neighbor.connected_check)
223
+ end
224
+ neighbor.destroy
225
+ end
226
+ end
227
+
228
+ def test_capability_negotiation
229
+ %w(default test_vrf).each do |vrf|
230
+ neighbor = create_neighbor(vrf)
231
+ if platform == :ios_xr
232
+ assert_nil(neighbor.capability_negotiation)
233
+ assert_nil(neighbor.default_capability_negotiation)
234
+ assert_raises(Cisco::UnsupportedError) do
235
+ neighbor.capability_negotiation = true
236
+ end
237
+ else
238
+ check = [true, false, neighbor.default_capability_negotiation]
239
+ check.each do |value|
240
+ neighbor.capability_negotiation = value
241
+ assert_equal(value, neighbor.capability_negotiation)
242
+ end
243
+ end
244
+ neighbor.destroy
245
+ end
246
+ end
247
+
248
+ def test_dynamic_capability
249
+ %w(default test_vrf).each do |vrf|
250
+ neighbor = create_neighbor(vrf)
251
+ if platform == :ios_xr
252
+ assert_nil(neighbor.dynamic_capability)
253
+ assert_nil(neighbor.default_dynamic_capability)
254
+ assert_raises(Cisco::UnsupportedError) do
255
+ neighbor.dynamic_capability = true
256
+ end
257
+ else
258
+ check = [true, false, neighbor.default_dynamic_capability]
259
+ check.each do |value|
260
+ neighbor.dynamic_capability = value
261
+ assert_equal(value, neighbor.dynamic_capability)
262
+ end
263
+ end
264
+ neighbor.destroy
265
+ end
266
+ end
267
+
268
+ def test_bfd
269
+ %w(default test_vrf).each do |vrf|
270
+ neighbor = create_neighbor(vrf)
271
+ if validate_property_excluded?('bgp_neighbor', 'bfd')
272
+ assert_nil(neighbor.bfd)
273
+ assert_nil(neighbor.default_bfd)
274
+ assert_raises(Cisco::UnsupportedError) do
275
+ neighbor.bfd = true
276
+ end
277
+ else
278
+ check = [false, true, neighbor.default_bfd]
279
+ check.each do |value|
280
+ neighbor.bfd = value
281
+ assert_equal(value, neighbor.bfd)
282
+ end
283
+ end
284
+ neighbor.destroy
285
+ end
286
+ end
287
+
288
+ def test_ebgp_multihop
289
+ %w(default test_vrf).each do |vrf|
290
+ neighbor = create_neighbor(vrf)
291
+ ttls = [24, neighbor.default_ebgp_multihop]
292
+ ttls.each do |ebgp_multihop|
293
+ neighbor.ebgp_multihop = ebgp_multihop
294
+ assert_equal(ebgp_multihop, neighbor.ebgp_multihop)
295
+ end
296
+ neighbor.destroy
297
+ end
298
+ end
299
+
300
+ def test_local_as
301
+ %w(default test_vrf).each do |vrf|
302
+ neighbor = create_neighbor(vrf)
303
+ local_asnum = [42, '52', '1.1', neighbor.default_local_as]
304
+ local_asnum.each do |asnum|
305
+ neighbor.local_as = asnum
306
+ assert_equal(asnum.to_s, neighbor.local_as)
307
+ end
308
+
309
+ # test a negative value
310
+ assert_raises(CliError) do
311
+ neighbor.local_as = '52 15'
312
+ end
313
+ neighbor.destroy
314
+ end
315
+ end
316
+
317
+ def test_log_neighbor_changes
318
+ if platform == :ios_xr || node.product_id[/N(5|6)/]
319
+ b = create_neighbor('blue')
320
+ assert_nil(b.log_neighbor_changes)
321
+ assert_nil(b.default_log_neighbor_changes)
322
+ assert_raises(Cisco::UnsupportedError) do
323
+ b.log_neighbor_changes = :enable
324
+ end
325
+ return
326
+ end
327
+ skip_incompat_version?('bgp_neighbor', 'log_neighbor_changes')
328
+ %w(default test_vrf).each do |vrf|
329
+ neighbor = create_neighbor(vrf)
330
+ check = [:enable, :disable, :inherit, 'enable', 'disable', 'inherit',
331
+ neighbor.default_log_neighbor_changes]
332
+
333
+ check.each do |value|
334
+ neighbor.log_neighbor_changes = value
335
+ assert_equal(value.to_sym, neighbor.log_neighbor_changes)
336
+ end
337
+ neighbor.destroy
338
+ end
339
+ end
340
+
341
+ def test_low_memory_exempt
342
+ %w(default test_vrf).each do |vrf|
343
+ neighbor = create_neighbor(vrf)
344
+ if platform == :ios_xr
345
+ assert_nil(neighbor.low_memory_exempt)
346
+ assert_nil(neighbor.default_low_memory_exempt)
347
+ assert_raises(Cisco::UnsupportedError) do
348
+ neighbor.low_memory_exempt = true
349
+ end
350
+ else
351
+ check = [true, false, neighbor.default_low_memory_exempt]
352
+ check.each do |value|
353
+ neighbor.low_memory_exempt = value
354
+ assert_equal(value, neighbor.low_memory_exempt)
355
+ end
356
+ end
357
+ neighbor.destroy
358
+ end
359
+ end
360
+
361
+ def test_maximum_peers
362
+ skip('Maximum-peers does not apply to IOS XR') if platform == :ios_xr
363
+
364
+ # only "address/prefix" type of neighbor address will accept
365
+ # maximum_peers command, so not supported on XR
366
+ addr = '1.1.1.0/24'
367
+ %w(default test_vrf).each do |vrf|
368
+ neighbor = create_neighbor(vrf, addr)
369
+ peers = [200, neighbor.default_maximum_peers]
370
+ peers.each do |num|
371
+ neighbor.maximum_peers = num
372
+ assert_equal(num, neighbor.maximum_peers)
373
+ end
374
+ neighbor.destroy
375
+ end
376
+ end
377
+
378
+ def test_password
379
+ %w(default test_vrf).each do |vrf|
380
+ neighbor = create_neighbor(vrf)
381
+ passwords = {}
382
+ if platform == :ios_xr
383
+ passwords[:cleartext] = 'test'
384
+ passwords[:md5] = '386c0565965f89de'
385
+ # not currently supporting XR specific 'password inheritance-disable'
386
+ else
387
+ passwords[:cleartext] = 'test'
388
+ passwords[:"3des"] = '386c0565965f89de'
389
+ passwords[:cisco_type_7] = '046E1803362E595C260E0B240619050A2D'
390
+ end
391
+
392
+ passwords.each do |type, password|
393
+ neighbor.password_set(password, type)
394
+ if platform == :ios_xr
395
+ if type == :cleartext
396
+ # will always be type "encrypted" on XR
397
+ assert_equal(:md5, neighbor.password_type)
398
+ # don't know what the encrypted password will look like
399
+ # so just make sure it is not empty
400
+ refute_empty(neighbor.password)
401
+ else
402
+ assert_equal(type, neighbor.password_type)
403
+ assert_equal(password, neighbor.password)
404
+ end
405
+ else
406
+ if type == :cleartext
407
+ assert_equal(:"3des", neighbor.password_type)
408
+ assert_equal(passwords[:"3des"], neighbor.password)
409
+ else
410
+ assert_equal(type, neighbor.password_type)
411
+ assert_equal(password, neighbor.password)
412
+ end
413
+ end
414
+ # now test removing the password setting
415
+ neighbor.password_set(' ')
416
+ assert(neighbor.password.empty?)
417
+ # now test default password
418
+ neighbor.password_set(neighbor.default_password)
419
+ assert_equal(neighbor.default_password, neighbor.password)
420
+ end
421
+ neighbor.destroy
422
+ end
423
+ end
424
+
425
+ def test_default_password_type
426
+ %w(default test_vrf).each do |vrf|
427
+ neighbor = create_neighbor(vrf)
428
+ password = 'test'
429
+ expected_password = '386c0565965f89de'
430
+
431
+ test = proc do
432
+ if platform == :ios_xr
433
+ assert_equal(:md5, neighbor.password_type)
434
+ refute_empty(neighbor.password)
435
+ else
436
+ assert_equal(expected_password, neighbor.password)
437
+ assert_equal(:"3des", neighbor.password_type)
438
+ end
439
+ # clear password
440
+ neighbor.password_set('')
441
+ assert(neighbor.password.empty?)
442
+ end
443
+
444
+ # Test 1: if we don't set password type, default should be cleartext,
445
+ # we can verify by checking return type to be
446
+ # :3des/:md5, and encrypted text.
447
+ neighbor.password_set(password)
448
+ test.call
449
+
450
+ # Test 2: we set explicitly the password type to be default password type:
451
+ # cleartext, and verify.
452
+ neighbor.password_set(password, neighbor.default_password_type)
453
+ test.call
454
+ neighbor.destroy
455
+ end
456
+ end
457
+
458
+ def test_remote_as
459
+ %w(default test_vrf).each do |vrf|
460
+ neighbor = RouterBgpNeighbor.new(ASN, vrf, ADDR)
461
+ [42, '1.1', neighbor.default_remote_as].each do |asnum|
462
+ neighbor.remote_as = asnum
463
+ assert_equal(asnum.to_s, neighbor.remote_as)
464
+ end
465
+ neighbor.destroy
466
+ end
467
+ end
468
+
469
+ def test_remove_private_as_options
470
+ %w(default test_vrf).each do |vrf|
471
+ neighbor = create_neighbor(vrf)
472
+ if platform == :ios_xr
473
+ assert_nil(neighbor.remove_private_as)
474
+ assert_nil(neighbor.default_remove_private_as)
475
+ assert_raises(Cisco::UnsupportedError) do
476
+ neighbor.remove_private_as = :enable
477
+ end
478
+ else
479
+ options = [:enable, :disable, :all, :"replace-as", 'enable', 'disable',
480
+ 'all', 'replace-as', neighbor.default_remove_private_as]
481
+
482
+ options.each do |option|
483
+ neighbor.remove_private_as = option
484
+ assert_equal(option.to_sym, neighbor.remove_private_as)
485
+ end
486
+
487
+ neighbor.remove_private_as = neighbor.default_remove_private_as
488
+ assert_equal(neighbor.default_remove_private_as,
489
+ neighbor.remove_private_as)
490
+ end
491
+ neighbor.destroy
492
+ end
493
+ end
494
+
495
+ def test_shutdown
496
+ %w(default test_vrf).each do |vrf|
497
+ neighbor = create_neighbor(vrf)
498
+ check = [true, false, neighbor.default_shutdown]
499
+ check.each do |value|
500
+ neighbor.shutdown = value
501
+ assert_equal(value, neighbor.shutdown)
502
+ end
503
+ neighbor.destroy
504
+ end
505
+ end
506
+
507
+ def test_suppress_4_byte_as
508
+ %w(default test_vrf).each do |vrf|
509
+ neighbor = create_neighbor(vrf)
510
+ check = [true, false, neighbor.default_suppress_4_byte_as]
511
+ check.each do |value|
512
+ neighbor.suppress_4_byte_as = value
513
+ assert_equal(value, neighbor.suppress_4_byte_as)
514
+ end
515
+ neighbor.destroy
516
+ end
517
+ end
518
+
519
+ def test_timers
520
+ %w(default test_vrf).each do |vrf|
521
+ neighbor = create_neighbor(vrf)
522
+ timers = [{ keep: 40, hold: 90 },
523
+ { keep: neighbor.default_timers_keepalive,
524
+ hold: neighbor.default_timers_holdtime },
525
+ { keep: neighbor.default_timers_keepalive,
526
+ hold: 90 },
527
+ { keep: 40, hold: neighbor.default_timers_holdtime },
528
+ ]
529
+ timers.each do |timer|
530
+ neighbor.timers_set(timer[:keep], timer[:hold])
531
+ assert_equal(timer[:keep], neighbor.timers_keepalive)
532
+ assert_equal(timer[:hold], neighbor.timers_holdtime)
533
+ end
534
+ neighbor.destroy
535
+ end
536
+ end
537
+
538
+ def test_transport_passive_mode
539
+ %w(default test_vrf).each do |vrf|
540
+ neighbor = create_neighbor(vrf)
541
+ check = []
542
+ if platform == :ios_xr
543
+ check = [:active_only, :passive_only, :both, :none,
544
+ neighbor.default_transport_passive_mode]
545
+ else
546
+ check = [:passive_only, :none,
547
+ neighbor.default_transport_passive_mode]
548
+ end
549
+ check.each do |value|
550
+ neighbor.transport_passive_mode = value
551
+ assert_equal(value, neighbor.transport_passive_mode)
552
+ end
553
+ neighbor.destroy
554
+ end
555
+ end
556
+
557
+ def test_transport_passive_only
558
+ %w(default test_vrf).each do |vrf|
559
+ neighbor = create_neighbor(vrf)
560
+ check = [true, false, neighbor.default_transport_passive_only]
561
+ check.each do |value|
562
+ neighbor.transport_passive_only = value
563
+ assert_equal(value, neighbor.transport_passive_only)
564
+ end
565
+ neighbor.destroy
566
+ end
567
+ end
568
+
569
+ def test_update_source
570
+ %w(default test_vrf).each do |vrf|
571
+ neighbor = create_neighbor(vrf)
572
+ test_interfaces = ['loopback1', interfaces[0], interfaces[0].downcase,
573
+ neighbor.default_update_source]
574
+ test_interfaces.each do |interface|
575
+ neighbor.update_source = interface
576
+ assert_equal(interface.downcase, neighbor.update_source)
577
+ end
578
+ neighbor.destroy
579
+ end
580
+ end
581
+
582
+ def test_peer_type
583
+ skip("#{node.product_id} doesn't support this feature") unless
584
+ node.product_id[/N9K.*EX/]
585
+ %w(default test_vrf).each do |vrf|
586
+ neighbor = RouterBgpNeighbor.new(ASN, vrf, ADDR)
587
+ check = ['fabric-border-leaf', 'fabric-external',
588
+ neighbor.default_peer_type]
589
+ check.each do |val|
590
+ neighbor.peer_type = val
591
+ assert_equal(val, neighbor.peer_type)
592
+ end
593
+ neighbor.destroy
594
+ end
595
+ end
596
+ end