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,1325 @@
1
+ #!/usr/bin/env ruby
2
+ # RouterBgp Unit Tests
3
+ #
4
+ # Mike Wiebe, June, 2015
5
+ #
6
+ # Copyright (c) 2015-2017 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
+
23
+ # Temporary debug helper. Not for production and not to replace Cisco debugging.
24
+ def debug_bgp
25
+ s = @device.cmd('show running-config router bgp')
26
+ caller_locations(1, 1).first.tap do |loc|
27
+ puts "\nDEBUG BGP: #{__FILE__}:#{loc.path}:#{loc.lineno}:\n#{s}"
28
+ end
29
+ end
30
+
31
+ def create_bgp_vrf(asnum, vrf)
32
+ if platform == :nexus
33
+ bgp = RouterBgp.new(asnum, vrf)
34
+ else
35
+ # IOS XR requires 'rd <id>' for any created VRF.
36
+ # But 'rd' requires a global router id. From a puppet p.o.v
37
+ # this is fine; the user is required to add a router-id to
38
+ # their manifest. For the minitest fudge this by calling
39
+ # RouterBgp.new twice. Once to create the BGP process,
40
+ # add a router-id, then call it again to create the VRF,
41
+ # and add a VRF level router-id (which is needed to make SYSDB
42
+ # behave).
43
+ bgp = RouterBgp.new(asnum)
44
+ bgp.router_id = '1.2.3.4'
45
+ bgp = RouterBgp.new(asnum, vrf)
46
+ bgp.router_id = '4.5.6.7'
47
+ end
48
+ bgp
49
+ end
50
+
51
+ def setup_default
52
+ @asnum = 55
53
+ @vrf = 'default'
54
+ RouterBgp.new(@asnum)
55
+ end
56
+
57
+ def setup_vrf
58
+ # nexus does not support multiple BGP instances; VRF AS must be same as default AS
59
+ @asnum = platform == :nexus ? 55 : 99
60
+ @vrf = 'yamllll'
61
+ create_bgp_vrf(@asnum, @vrf)
62
+ end
63
+
64
+ # TestRouterBgp - Minitest for RouterBgp class
65
+ class TestRouterBgp < CiscoTestCase
66
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
67
+
68
+ def setup
69
+ super
70
+ remove_all_bgps if @@pre_clean_needed
71
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
72
+ end
73
+
74
+ def teardown
75
+ remove_all_bgps
76
+ super
77
+ end
78
+
79
+ def get_routerbgp_match_line(as_number, vrf='default')
80
+ if platform == :ios_xr
81
+ s = @device.cmd('show running-config router bgp')
82
+ else
83
+ s = @device.cmd("show run | section '^router bgp .*'")
84
+ end
85
+ if vrf == 'default'
86
+ line = /router bgp\s#{as_number}/.match(s)
87
+ else
88
+ line = /vrf #{vrf}/.match(s)
89
+ end
90
+ line
91
+ end
92
+
93
+ def test_collection_empty
94
+ if platform == :ios_xr
95
+ config('no router bgp')
96
+ else
97
+ config('no feature bgp')
98
+ end
99
+ node.cache_flush
100
+ routers = RouterBgp.routers
101
+ assert_empty(routers, 'RouterBgp collection is not empty')
102
+ end
103
+
104
+ def test_collection_not_empty
105
+ if platform == :nexus
106
+ config('feature bgp',
107
+ 'router bgp 55',
108
+ 'vrf blue',
109
+ 'vrf red',
110
+ 'vrf white')
111
+ else
112
+ config('router bgp 55',
113
+ 'bgp router-id 1.2.3.4',
114
+ 'vrf blue',
115
+ 'bgp router-id 4.5.6.7',
116
+ 'rd auto',
117
+ 'vrf red',
118
+ 'bgp router-id 4.5.6.7',
119
+ 'rd auto',
120
+ 'vrf white',
121
+ 'bgp router-id 4.5.6.7',
122
+ 'rd auto')
123
+ end
124
+ routers = RouterBgp.routers
125
+ refute_empty(routers, 'RouterBgp collection is empty')
126
+ # validate the collection
127
+ routers.each do |asnum, vrfs|
128
+ line = get_routerbgp_match_line(asnum)
129
+ refute_nil(line)
130
+ vrfs.each_key do |name|
131
+ unless name == 'default'
132
+ line = get_routerbgp_match_line(asnum, name)
133
+ refute_nil(line)
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ def test_asnum_invalid
140
+ ['', 'Fifty_Five'].each do |test|
141
+ assert_raises(ArgumentError, "#{test} not a valid asn") do
142
+ RouterBgp.new(test)
143
+ end
144
+ end
145
+ end
146
+
147
+ def test_vrf_invalid
148
+ ['', 55].each do |test|
149
+ assert_raises(ArgumentError, "#{test} not a valid vrf name") do
150
+ RouterBgp.new(88, test)
151
+ end
152
+ end
153
+ end
154
+
155
+ def test_create_vrfname_zero_length
156
+ asnum = 55
157
+ assert_raises(ArgumentError) do
158
+ RouterBgp.new(asnum, '')
159
+ end
160
+ end
161
+
162
+ def test_create_valid
163
+ bgp = setup_default
164
+ line = get_routerbgp_match_line(@asnum)
165
+ refute_nil(line, "Error: 'router bgp #{@asnum}' not configured")
166
+ bgp.destroy
167
+
168
+ vrf = 'wolfpack'
169
+ bgp = create_bgp_vrf(55, vrf)
170
+ line = get_routerbgp_match_line(@asnum, vrf)
171
+ refute_nil(line,
172
+ "Error: 'router bgp #{@asnum}' vrf '#{vrf}' not configured")
173
+ bgp.destroy
174
+ end
175
+
176
+ def test_process_initialized
177
+ return if validate_property_excluded?('bgp', 'process_initialized')
178
+
179
+ # Cleanup may be slow on some platforms; make sure it's really dead
180
+ bgp = RouterBgp.new('55', 'default', false)
181
+ if bgp.process_initialized?
182
+ sleep 4
183
+ node.cache_flush
184
+ end
185
+ refute(bgp.process_initialized?, 'bgp should not be initialized')
186
+
187
+ bgp = RouterBgp.new('55', 'default')
188
+ bgp.wait_for_process_initialized unless bgp.process_initialized?
189
+ assert(bgp.process_initialized?, 'bgp should be initialized')
190
+ end
191
+
192
+ def wait_for_process_kill(bgp)
193
+ return unless node.product_id[/N(5|6)/]
194
+ # Hack for slow-start platforms which can also be slow-to-die.
195
+ # Tests that involve many quick process-start / process-stop cycles
196
+ # are prone to failure without this delay.
197
+ 4.times do
198
+ return unless bgp.process_initialized?
199
+ sleep 1
200
+ node.cache_flush
201
+ end
202
+ fail "#{bgp} :: process is still running"
203
+ end
204
+
205
+ def test_valid_asn
206
+ [1, 4_294_967_295, '55', '1.0', '1.65535', '65535.0', '65535.65535'
207
+ ].each do |asn|
208
+ b = RouterBgp.new(asn)
209
+ assert_equal(asn.to_s, RouterBgp.routers.keys[0].to_s)
210
+ b.destroy
211
+ wait_for_process_kill(b)
212
+ end
213
+ end
214
+
215
+ def test_destroy
216
+ bgp = setup_default
217
+ line = get_routerbgp_match_line(@asnum)
218
+ refute_nil(line, "Error: 'router bgp #{@asnum}' not configured")
219
+ bgp.destroy
220
+
221
+ if platform == :ios_xr
222
+ command = 'show run router bgp'
223
+ pattern = /"router bgp"/
224
+ else
225
+ command = 'show run all | no-more'
226
+ pattern = /"feature bgp"/
227
+ end
228
+
229
+ refute_show_match(
230
+ command: command, pattern: pattern,
231
+ msg: "Error: 'router bgp' still configured")
232
+ end
233
+
234
+ def test_create_invalid_multiple
235
+ asnum = 55
236
+ bgp1 = RouterBgp.new(asnum)
237
+ line = get_routerbgp_match_line(asnum)
238
+ refute_nil(line, "Error: 'router bgp #{asnum}' not configured")
239
+
240
+ # Only one bgp instance supported so try to create another.
241
+ assert_raises(CliError) do
242
+ bgp2 = RouterBgp.new(88)
243
+ bgp2.destroy unless bgp2.nil?
244
+ end
245
+ bgp1.destroy
246
+ end
247
+
248
+ def test_asnum_dot
249
+ asnum = 65_540
250
+ bgp = RouterBgp.new(asnum)
251
+ assert_equal(asnum.to_s, bgp.asnum, 'Error: router asnum incorrect')
252
+
253
+ # Create a new object with the same ASN value but using AS_DOT notation
254
+ assert_raises(CliError) do
255
+ RouterBgp.new('1.4')
256
+ end
257
+ end
258
+
259
+ def test_nsr
260
+ skip_if_UnsupportedCmdRef('bgp', 'nsr')
261
+ nsr(setup_default)
262
+ nsr(setup_vrf)
263
+ end
264
+
265
+ def nsr(bgp)
266
+ if platform == :ios_xr && !@vrf[/default/]
267
+ assert_nil(bgp.default_nsr,
268
+ 'default bgp nsr should return nil on XR with non-default' \
269
+ ' vrf')
270
+ assert_nil(bgp.nsr,
271
+ 'bgp nsr should return nil on XR with non-default vrf')
272
+ assert_raises(Cisco::UnsupportedError) do
273
+ bgp.nsr = true
274
+ end
275
+ else
276
+ assert_equal(bgp.nsr, bgp.default_nsr)
277
+ bgp.nsr = true
278
+ assert(bgp.nsr,
279
+ 'bgp nsr should be enabled')
280
+ bgp.nsr = false
281
+ refute(bgp.nsr,
282
+ 'bgp nsr should be disabled')
283
+ end
284
+ bgp.destroy
285
+ end
286
+
287
+ def test_bestpath_default
288
+ bestpath(setup_default)
289
+ end
290
+
291
+ def test_bestpath_vrf
292
+ bestpath(setup_vrf)
293
+ end
294
+
295
+ def bestpath(bgp)
296
+ bgp.bestpath_always_compare_med = true
297
+ assert(bgp.bestpath_always_compare_med,
298
+ 'bgp bestpath_always_compare_med should be enabled')
299
+ bgp.bestpath_aspath_multipath_relax = true
300
+ assert(bgp.bestpath_aspath_multipath_relax,
301
+ 'bgp bestpath_aspath_multipath_relax should be enabled')
302
+ bgp.bestpath_compare_routerid = true
303
+ assert(bgp.bestpath_compare_routerid,
304
+ 'bgp bestpath_compare_routerid should be enabled')
305
+ bgp.bestpath_cost_community_ignore = true
306
+ assert(bgp.bestpath_cost_community_ignore,
307
+ 'bgp bestpath_cost_community_ignore should be enabled')
308
+ if platform == :ios_xr && !@vrf[/default/]
309
+ assert_raises(Cisco::UnsupportedError) do
310
+ bgp.bestpath_med_confed = true
311
+ end
312
+ else
313
+ bgp.bestpath_med_confed = true
314
+ assert(bgp.bestpath_med_confed,
315
+ 'bgp bestpath_med_confed should be enabled')
316
+ end
317
+ bgp.bestpath_med_missing_as_worst = true
318
+ assert(bgp.bestpath_med_missing_as_worst,
319
+ 'bgp bestpath_med_missing_as_worst should be enabled')
320
+ if platform == :nexus
321
+ bgp.bestpath_med_non_deterministic = true
322
+ assert(bgp.bestpath_med_non_deterministic,
323
+ 'bgp bestpath_med_non_deterministic should be enabled')
324
+ else
325
+ assert_raises(Cisco::UnsupportedError) do
326
+ bgp.bestpath_med_non_deterministic = true
327
+ end
328
+ end
329
+ bgp.bestpath_always_compare_med = false
330
+ refute(bgp.bestpath_always_compare_med,
331
+ 'bgp bestpath_always_compare_med should be disabled')
332
+ bgp.bestpath_aspath_multipath_relax = false
333
+ refute(bgp.bestpath_aspath_multipath_relax,
334
+ 'bgp bestpath_aspath_multipath_relax should be disabled')
335
+ bgp.bestpath_compare_routerid = false
336
+ refute(bgp.bestpath_compare_routerid,
337
+ 'bgp bestpath_compare_routerid should be disabled')
338
+ bgp.bestpath_cost_community_ignore = false
339
+ refute(bgp.bestpath_cost_community_ignore,
340
+ 'bgp bestpath_cost_community_ignore should be disabled')
341
+ unless platform == :ios_xr && !@vrf[/default/]
342
+ bgp.bestpath_med_confed = false
343
+ refute(bgp.bestpath_med_confed,
344
+ 'bgp bestpath_med_confed should be disabled')
345
+ end
346
+ bgp.bestpath_med_missing_as_worst = false
347
+ refute(bgp.bestpath_med_missing_as_worst,
348
+ 'bgp bestpath_med_missing_as_worst should be disabled')
349
+ if platform == :nexus
350
+ bgp.bestpath_med_non_deterministic = false
351
+ refute(bgp.bestpath_med_non_deterministic,
352
+ 'bgp bestpath_med_non_deterministic should be disabled')
353
+ else
354
+ assert_raises(Cisco::UnsupportedError) do
355
+ bgp.bestpath_med_non_deterministic = false
356
+ end
357
+ end
358
+ bgp.destroy
359
+ end
360
+
361
+ def test_bestpath_not_configured_default
362
+ bestpath_not_configured(setup_default)
363
+ end
364
+
365
+ def test_bestpath_not_configured_vrf
366
+ bestpath_not_configured(setup_vrf)
367
+ end
368
+
369
+ def bestpath_not_configured(bgp)
370
+ refute(bgp.bestpath_always_compare_med,
371
+ 'bgp bestpath_always_compare_med should *NOT* be enabled')
372
+ refute(bgp.bestpath_aspath_multipath_relax,
373
+ 'bgp bestpath_aspath_multipath_relax should *NOT* be enabled')
374
+ refute(bgp.bestpath_compare_routerid,
375
+ 'bgp bestpath_compare_routerid should be *NOT* enabled')
376
+ refute(bgp.bestpath_cost_community_ignore,
377
+ 'bgp bestpath_cost_community_ignore should *NOT* be enabled')
378
+ refute(bgp.bestpath_med_confed,
379
+ 'bgp bestpath_med_confed should *NOT* be enabled')
380
+ refute(bgp.bestpath_med_missing_as_worst,
381
+ 'bgp bestpath_med_missing_as_worst should *NOT* be enabled')
382
+ if platform == :nexus
383
+ refute(bgp.bestpath_med_non_deterministic,
384
+ 'bgp bestpath_med_non_deterministic should *NOT* be enabled')
385
+ else
386
+ assert_nil(bgp.bestpath_med_non_deterministic,
387
+ 'bgp bestpath_med_non_deterministic should *NOT* be supported')
388
+ end
389
+ bgp.destroy
390
+ end
391
+
392
+ def test_default_bestpath
393
+ bgp = setup_default
394
+ refute(bgp.default_bestpath_always_compare_med,
395
+ 'default value for bestpath_always_compare_med should be false')
396
+ refute(bgp.default_bestpath_aspath_multipath_relax,
397
+ 'default value for bestpath_aspath_multipath_relax should be false')
398
+ refute(bgp.default_bestpath_compare_routerid,
399
+ 'default value for bestpath_compare_routerid should be false')
400
+ refute(bgp.default_bestpath_cost_community_ignore,
401
+ 'default value for bestpath_cost_community_ignore should be false')
402
+ refute(bgp.default_bestpath_med_confed,
403
+ 'default value for bestpath_med_confed should be false')
404
+ refute(bgp.default_bestpath_med_missing_as_worst,
405
+ 'default value for bestpath_med_missing_as_worst should be false')
406
+ if platform == :nexus
407
+ refute(bgp.default_bestpath_med_non_deterministic,
408
+ 'default value for bestpath_med_non_deterministic should be false')
409
+ else
410
+ assert_nil(bgp.default_bestpath_med_non_deterministic,
411
+ 'bgp default_bestpath_med_non_deterministic should ' \
412
+ '*NOT* be supported')
413
+ end
414
+ bgp.destroy
415
+ end
416
+
417
+ def test_cluster_id_default
418
+ cluster_id(setup_default)
419
+ end
420
+
421
+ def test_cluster_id_vrf
422
+ cluster_id(setup_vrf)
423
+ end
424
+
425
+ def cluster_id(bgp)
426
+ if platform == :ios_xr && @vrf != 'default'
427
+ # XR does not support this under a VRF, so test the getter and setter
428
+ assert_nil(bgp.cluster_id,
429
+ 'cluster_id should return nil on XR with non-default vrf')
430
+ assert_raises(Cisco::UnsupportedError) do
431
+ bgp.cluster_id = 34
432
+ end
433
+ bgp.destroy
434
+ return
435
+ end
436
+ bgp.cluster_id = 34
437
+ assert_equal('34', bgp.cluster_id,
438
+ "bgp cluster_id should be set to '34'")
439
+ bgp.cluster_id = '1.2.3.4'
440
+ assert_equal('1.2.3.4', bgp.cluster_id,
441
+ "bgp cluster_id should be set to '1.2.3.4'")
442
+ bgp.cluster_id = ''
443
+ assert_empty(bgp.cluster_id,
444
+ 'bgp cluster_id should *NOT* be configured')
445
+ bgp.destroy
446
+ end
447
+
448
+ def test_cluster_id_not_configured
449
+ bgp = setup_default
450
+ assert_empty(bgp.cluster_id,
451
+ 'bgp cluster_id should *NOT* be configured')
452
+ bgp.destroy
453
+ end
454
+
455
+ def test_default_cluster_id
456
+ bgp = setup_default
457
+ assert_empty(bgp.default_cluster_id,
458
+ 'bgp cluster_id default value should be empty')
459
+ bgp.destroy
460
+ end
461
+
462
+ def test_disable_policy_batching
463
+ bgp = setup_default
464
+ if platform == :ios_xr
465
+ assert_nil(bgp.disable_policy_batching)
466
+ assert_raises(Cisco::UnsupportedError) do
467
+ bgp.disable_policy_batching = true
468
+ end
469
+ else
470
+ bgp.disable_policy_batching = true
471
+ assert(bgp.disable_policy_batching,
472
+ 'bgp disable-policy-batching should be enabled')
473
+ bgp.disable_policy_batching = false
474
+ refute(bgp.disable_policy_batching,
475
+ 'bgp disable-policy-batching should be disabled')
476
+ end
477
+ bgp.destroy
478
+ end
479
+
480
+ def test_default_disable_policy_batching
481
+ bgp = setup_default
482
+ if platform == :ios_xr
483
+ assert_nil(bgp.disable_policy_batching)
484
+ assert_nil(bgp.default_disable_policy_batching)
485
+ else
486
+ refute(bgp.disable_policy_batching,
487
+ 'bgp disable-policy-batching value should be false')
488
+ end
489
+ bgp.destroy
490
+ end
491
+
492
+ def test_disable_policy_batching_ipv4
493
+ if platform == :ios_xr || node.product_id[/N(5|6)/]
494
+ b = RouterBgp.new(1)
495
+ assert_nil(b.disable_policy_batching_ipv4)
496
+ assert_nil(b.default_disable_policy_batching_ipv4)
497
+ assert_raises(Cisco::UnsupportedError) do
498
+ b.disable_policy_batching_ipv4 = 'xx'
499
+ end
500
+ return
501
+ end
502
+ skip_incompat_version?('bgp', 'disable_policy_batching_ipv4')
503
+ bgp = setup_default
504
+ default = bgp.default_disable_policy_batching_ipv4
505
+ assert_equal(default, bgp.disable_policy_batching_ipv4,
506
+ 'bgp disable_policy_batching_ipv4 not set to default')
507
+
508
+ bgp.disable_policy_batching_ipv4 = 'xx'
509
+ assert_equal('xx', bgp.disable_policy_batching_ipv4,
510
+ "bgp disable_policy_batching_ipv4 should be set to 'xx'")
511
+ bgp.disable_policy_batching_ipv4 = \
512
+ bgp.default_disable_policy_batching_ipv4
513
+ assert_empty(bgp.disable_policy_batching_ipv4,
514
+ 'bgp disable_policy_batching_ipv4 should be empty')
515
+
516
+ bgp.disable_policy_batching_ipv4 = default
517
+ assert_equal(default, bgp.disable_policy_batching_ipv4,
518
+ 'bgp disable_policy_batching_ipv4 not set to default')
519
+ bgp.destroy
520
+ end
521
+
522
+ def test_disable_policy_batching_ipv6
523
+ if platform == :ios_xr || node.product_id[/N(5|6)/]
524
+ b = RouterBgp.new(1)
525
+ assert_nil(b.disable_policy_batching_ipv6)
526
+ assert_nil(b.default_disable_policy_batching_ipv6)
527
+ assert_raises(Cisco::UnsupportedError) do
528
+ b.disable_policy_batching_ipv6 = 'xx'
529
+ end
530
+ return
531
+ end
532
+ skip_incompat_version?('bgp', 'disable_policy_batching_ipv6')
533
+ bgp = setup_default
534
+ default = bgp.default_disable_policy_batching_ipv6
535
+ assert_equal(default, bgp.disable_policy_batching_ipv6,
536
+ 'bgp disable_policy_batching_ipv6 not set to default')
537
+
538
+ bgp.disable_policy_batching_ipv6 = 'xx'
539
+ assert_equal('xx', bgp.disable_policy_batching_ipv6,
540
+ "bgp disable_policy_batching_ipv6 should be set to 'xx'")
541
+ bgp.disable_policy_batching_ipv6 = \
542
+ bgp.default_disable_policy_batching_ipv6
543
+ assert_empty(bgp.disable_policy_batching_ipv6,
544
+ 'bgp disable_policy_batching_ipv6 should be empty')
545
+
546
+ bgp.disable_policy_batching_ipv6 = default
547
+ assert_equal(default, bgp.disable_policy_batching_ipv6,
548
+ 'bgp disable_policy_batching_ipv6 not set to default')
549
+ bgp.destroy
550
+ end
551
+
552
+ def test_enforce_first_as
553
+ bgp = setup_default
554
+ if platform == :ios_xr
555
+ @default_show_command = 'show running-config router bgp 55'
556
+ @default_output_pattern = /bgp enforce-first-as disable/
557
+ else
558
+ @default_show_command = 'show run bgp all'
559
+ @default_output_pattern = /no enforce-first-as/
560
+ end
561
+ bgp.enforce_first_as = false
562
+ refute(bgp.enforce_first_as)
563
+ assert_show_match(msg: 'enforce-first-as should be disabled')
564
+
565
+ bgp.enforce_first_as = true
566
+ assert(bgp.enforce_first_as)
567
+ refute_show_match(msg: 'enforce-first-as should be enabled')
568
+
569
+ bgp.destroy
570
+ end
571
+
572
+ def test_default_enforce_first_as
573
+ bgp = setup_default
574
+ assert_equal(bgp.default_enforce_first_as,
575
+ bgp.enforce_first_as,
576
+ 'bgp enforce-first-as default value is incorrect')
577
+ bgp.destroy
578
+ end
579
+
580
+ def test_event_history_cli
581
+ bgp = setup_default
582
+ if validate_property_excluded?('bgp', 'event_history_cli')
583
+ assert_nil(bgp.event_history_cli)
584
+ assert_raises(Cisco::UnsupportedError) do
585
+ bgp.event_history_cli = 'size_large'
586
+ end
587
+ return
588
+ end
589
+ bgp.event_history_cli = 'size_large'
590
+ assert_equal('size_large', bgp.event_history_cli)
591
+ end
592
+
593
+ def test_event_history_detail
594
+ bgp = setup_default
595
+ if validate_property_excluded?('bgp', 'event_history_detail')
596
+ assert_nil(bgp.event_history_detail)
597
+ assert_raises(Cisco::UnsupportedError) do
598
+ bgp.event_history_detail = 'size_large'
599
+ end
600
+ return
601
+ end
602
+ bgp.event_history_detail = 'size_large'
603
+ assert_equal('size_large', bgp.event_history_detail)
604
+ end
605
+
606
+ def test_event_history_errors
607
+ bgp = setup_default
608
+ if validate_property_excluded?('bgp', 'event_history_errors')
609
+ assert_nil(bgp.event_history_errors)
610
+ assert_raises(Cisco::UnsupportedError) do
611
+ bgp.event_history_errors = 'true'
612
+ end
613
+ return
614
+ end
615
+ skip_incompat_version?('bgp', 'event_history_errors')
616
+ bgp.event_history_errors = 'size_large'
617
+ assert_equal('size_large', bgp.event_history_errors)
618
+ end
619
+
620
+ def test_event_history_events
621
+ bgp = setup_default
622
+ if validate_property_excluded?('bgp', 'event_history_events')
623
+ assert_nil(bgp.event_history_events)
624
+ assert_raises(Cisco::UnsupportedError) do
625
+ bgp.event_history_events = 'size_medium'
626
+ end
627
+ return
628
+ end
629
+ bgp.event_history_events = 'size_medium'
630
+ assert_equal('size_medium', bgp.event_history_events)
631
+ end
632
+
633
+ def test_event_history_objstore
634
+ bgp = setup_default
635
+ if validate_property_excluded?('bgp', 'event_history_objstore')
636
+ assert_nil(bgp.event_history_objstore)
637
+ assert_raises(Cisco::UnsupportedError) do
638
+ bgp.event_history_objstore = 'true'
639
+ end
640
+ return
641
+ end
642
+ skip_incompat_version?('bgp', 'event_history_objstore')
643
+ bgp.event_history_objstore = 'size_medium'
644
+ assert_equal('size_medium', bgp.event_history_objstore)
645
+ end
646
+
647
+ def test_event_history_periodic
648
+ bgp = setup_default
649
+ if validate_property_excluded?('bgp', 'event_history_periodic')
650
+ assert_nil(bgp.event_history_periodic)
651
+ assert_raises(Cisco::UnsupportedError) do
652
+ bgp.event_history_periodic = 'size_large'
653
+ end
654
+ return
655
+ end
656
+ bgp.event_history_periodic = 'size_large'
657
+ assert_equal('size_large', bgp.event_history_periodic)
658
+ end
659
+
660
+ def test_fast_external_fallover
661
+ bgp = setup_default
662
+ bgp.fast_external_fallover = true
663
+ assert(bgp.fast_external_fallover,
664
+ 'bgp fast-external-fallover should be enabled')
665
+ bgp.fast_external_fallover = false
666
+ refute(bgp.fast_external_fallover,
667
+ 'bgp fast-external-fallover should be disabled')
668
+ bgp.destroy
669
+ end
670
+
671
+ def test_default_fast_external_fallover
672
+ bgp = setup_default
673
+ assert(bgp.fast_external_fallover,
674
+ 'bgp fast-external-fallover default value should be true')
675
+ bgp.destroy
676
+ end
677
+
678
+ def test_flush_routes
679
+ bgp = setup_default
680
+ if platform == :ios_xr
681
+ assert_nil(bgp.flush_routes)
682
+ assert_raises(UnsupportedError) { bgp.flush_routes = true }
683
+ else
684
+ bgp.flush_routes = true
685
+ assert(bgp.flush_routes,
686
+ 'bgp flush-routes should be enabled')
687
+ bgp.flush_routes = false
688
+ refute(bgp.flush_routes,
689
+ 'bgp flush-routes should be disabled')
690
+ end
691
+ bgp.destroy
692
+ end
693
+
694
+ def test_default_flush_routes
695
+ bgp = setup_default
696
+ refute(bgp.flush_routes,
697
+ 'bgp flush-routes value default value should be false')
698
+ bgp.destroy
699
+ end
700
+
701
+ def test_graceful_restart_default
702
+ graceful_restart(setup_default)
703
+ end
704
+
705
+ def test_graceful_restart_vrf
706
+ graceful_restart(setup_vrf)
707
+ end
708
+
709
+ def graceful_restart(bgp)
710
+ if platform == :ios_xr && @vrf != 'default'
711
+ # XR does not support this under a VRF, so test the getter and setter
712
+ assert_nil(bgp.graceful_restart,
713
+ 'graceful_restart should return nil on XR with ' \
714
+ 'non-default vrf')
715
+ assert_raises(Cisco::UnsupportedError) do
716
+ bgp.graceful_restart = true
717
+ end
718
+
719
+ assert_nil(bgp.graceful_restart_timers_restart,
720
+ 'graceful_restart_timers_restart should return nil on XR ' \
721
+ 'with non-default vrf')
722
+ assert_raises(Cisco::UnsupportedError) do
723
+ bgp.graceful_restart_timers_restart = 55
724
+ end
725
+
726
+ assert_nil(bgp.graceful_restart_timers_stalepath_time,
727
+ 'graceful_restart_timers_stalepath_time should return nil ' \
728
+ 'on XR with non-default vrf')
729
+ assert_raises(Cisco::UnsupportedError) do
730
+ bgp.graceful_restart_timers_stalepath_time = 77
731
+ end
732
+ bgp.destroy
733
+ return
734
+ end
735
+ bgp.graceful_restart = true
736
+ assert(bgp.graceful_restart,
737
+ 'bgp graceful restart should be enabled')
738
+ bgp.graceful_restart_timers_restart = 55
739
+ assert_equal(55, bgp.graceful_restart_timers_restart,
740
+ 'bgp graceful restart timers restart' \
741
+ "should be set to '55'")
742
+ bgp.graceful_restart_timers_stalepath_time = 77
743
+ assert_equal(77, bgp.graceful_restart_timers_stalepath_time,
744
+ 'bgp graceful restart timers stalepath time' \
745
+ "should be set to '77'")
746
+ if platform == :nexus
747
+ bgp.graceful_restart_helper = true
748
+ assert(bgp.graceful_restart_helper,
749
+ 'bgp graceful restart helper should be enabled')
750
+ else
751
+ assert_raises(Cisco::UnsupportedError) do
752
+ bgp.graceful_restart_helper = true
753
+ end
754
+ end
755
+ bgp.graceful_restart = false
756
+ refute(bgp.graceful_restart,
757
+ 'bgp graceful_restart should be disabled')
758
+ bgp.graceful_restart_timers_restart = 120
759
+ assert_equal(120, bgp.graceful_restart_timers_restart,
760
+ 'bgp graceful restart timers restart' \
761
+ "should be set to default value of '120'")
762
+ bgp.graceful_restart_timers_stalepath_time = 300
763
+ assert_equal(300, bgp.graceful_restart_timers_stalepath_time,
764
+ 'bgp graceful restart timers stalepath time' \
765
+ "should be set to default value of '300'")
766
+ if platform == :nexus
767
+ bgp.graceful_restart_helper = false
768
+ refute(bgp.graceful_restart_helper,
769
+ 'bgp graceful restart helper should be disabled')
770
+ else
771
+ assert_raises(Cisco::UnsupportedError) do
772
+ bgp.graceful_restart_helper = false
773
+ end
774
+ end
775
+ bgp.destroy
776
+ end
777
+
778
+ def test_default_graceful_restart
779
+ bgp = setup_default
780
+ assert(bgp.default_graceful_restart,
781
+ 'bgp graceful restart default value should be enabled = true')
782
+ assert_equal(120, bgp.default_graceful_restart_timers_restart,
783
+ "bgp graceful restart default timer value should be '120'")
784
+ assert_equal(300, bgp.default_graceful_restart_timers_stalepath_time,
785
+ "bgp graceful restart default timer value should be '300'")
786
+ if platform == :nexus
787
+ refute(bgp.default_graceful_restart_helper,
788
+ 'graceful restart helper default value ' \
789
+ 'should be enabled = false')
790
+ else
791
+ assert_nil(bgp.default_graceful_restart_helper,
792
+ 'bgp default_graceful_restart_helper should ' \
793
+ '*NOT* be supported')
794
+ end
795
+ bgp.destroy
796
+ end
797
+
798
+ def test_confederation_id_default
799
+ confederation_id(setup_default)
800
+ end
801
+
802
+ def test_confederation_id_vrf
803
+ confederation_id(setup_vrf)
804
+ end
805
+
806
+ def confederation_id(bgp)
807
+ if platform == :ios_xr && @vrf != 'default'
808
+ # XR does not support this under a VRF, so test the getter and setter
809
+ assert_nil(bgp.confederation_id,
810
+ 'confederation_id should return nil on XR with ' \
811
+ 'non-default vrf')
812
+ assert_raises(Cisco::UnsupportedError) do
813
+ bgp.confederation_id = 77
814
+ end
815
+ bgp.destroy
816
+ return
817
+ end
818
+ bgp.confederation_id = 77
819
+ assert_equal('77', bgp.confederation_id,
820
+ "bgp confederation_id should be set to '77'")
821
+ bgp.confederation_id = ''
822
+ assert_empty(bgp.confederation_id, '' \
823
+ 'bgp confederation_id should *NOT* be configured')
824
+ bgp.destroy
825
+ end
826
+
827
+ def test_confed_id_uu76828
828
+ bgp = setup_default
829
+ bgp.confederation_id = 55.77
830
+ assert_equal('55.77', bgp.confederation_id,
831
+ "bgp confederation_id should be set to '55.77'")
832
+ bgp.destroy
833
+ end
834
+
835
+ def test_confederation_id_not_configured
836
+ bgp = setup_default
837
+ assert_empty(bgp.confederation_id,
838
+ 'bgp confederation_id should *NOT* be configured')
839
+ bgp.destroy
840
+ end
841
+
842
+ def test_default_confederation_id
843
+ bgp = setup_default
844
+ assert_empty(bgp.default_confederation_id,
845
+ 'bgp confederation_id default value should be empty')
846
+ bgp.destroy
847
+ end
848
+
849
+ def test_confederation_peers_default
850
+ confed_peers_test(setup_default)
851
+ end
852
+
853
+ def test_confederation_peers_vrf
854
+ confed_peers_test(setup_vrf)
855
+ end
856
+
857
+ def confed_peers_test(bgp)
858
+ # Confederation peer configuration requires that a
859
+ # confederation id be configured first so the expectation
860
+ # in the next test is an empty peer list
861
+ if platform == :ios_xr && @vrf != 'default'
862
+ # XR does not support this under a VRF, so test the getter and setter
863
+ assert_nil(bgp.confederation_peers,
864
+ 'confederation_peers should return nil on XR ' \
865
+ 'with non-default vrf')
866
+ assert_raises(Cisco::UnsupportedError) do
867
+ bgp.confederation_peers = ['15', '55.77', '16', '18', '555', '299']
868
+ end
869
+ bgp.destroy
870
+ return
871
+ end
872
+ bgp.confederation_id = 55
873
+
874
+ assert_empty(bgp.confederation_peers,
875
+ 'bgp confederation_peers list should be empty')
876
+ bgp.confederation_peers = [15]
877
+ assert_equal(['15'], bgp.confederation_peers,
878
+ "bgp confederation_peers list should be ['15']")
879
+ bgp.confederation_peers = [16]
880
+ assert_equal(['16'], bgp.confederation_peers,
881
+ "bgp confederation_peers list should be ['16']")
882
+ bgp.confederation_peers = [55.77]
883
+ assert_equal(['55.77'], bgp.confederation_peers,
884
+ 'bgp confederation_peers list should be ' \
885
+ "['55.77']")
886
+ bgp.confederation_peers = ['15', '55.77', '16', '18', '555', '299']
887
+ assert_equal(['15', '16', '18', '299', '55.77', '555'],
888
+ bgp.confederation_peers,
889
+ 'bgp confederation_peers list should be ' \
890
+ "'['15', '16', '18', '299', '55.77', '555']'")
891
+ bgp.confederation_peers = []
892
+ assert_empty(bgp.confederation_peers,
893
+ 'bgp confederation_peers list should be empty')
894
+ bgp.destroy
895
+ end
896
+
897
+ def test_confederation_peers_not_configured
898
+ bgp = setup_default
899
+ assert_empty(bgp.confederation_peers,
900
+ 'bgp confederation_peers list should *NOT* be configured')
901
+ bgp.destroy
902
+ end
903
+
904
+ def test_default_confederation_peers
905
+ bgp = setup_default
906
+ assert_empty(bgp.default_confederation_peers,
907
+ 'bgp confederation_peers default value should be empty')
908
+ bgp.destroy
909
+ end
910
+
911
+ def test_isolate
912
+ bgp = setup_default
913
+ if platform == :ios_xr
914
+ assert_nil(bgp.isolate)
915
+ assert_nil(bgp.default_isolate)
916
+ assert_raises(UnsupportedError) { bgp.isolate = true }
917
+ else
918
+ bgp.isolate = true
919
+ assert(bgp.isolate,
920
+ 'bgp isolate should be enabled')
921
+ bgp.isolate = false
922
+ refute(bgp.isolate,
923
+ 'bgp isolate should be disabled')
924
+ end
925
+ bgp.destroy
926
+ end
927
+
928
+ def test_default_isolate
929
+ bgp = setup_default
930
+ refute(bgp.isolate,
931
+ 'bgp isolate default value should be false')
932
+ bgp.destroy
933
+ end
934
+
935
+ def test_log_neighbor_changes_default
936
+ log_neighbor_changes(setup_default)
937
+ end
938
+
939
+ def test_log_neighbor_changes_vrf
940
+ log_neighbor_changes(setup_vrf)
941
+ end
942
+
943
+ def log_neighbor_changes(bgp)
944
+ if platform == :ios_xr
945
+ vrf_str = @vrf == 'default' ? '' : "vrf #{@vrf}"
946
+ @default_show_command =
947
+ "show running-config router bgp #{@asnum} #{vrf_str}"
948
+ @default_output_pattern = /bgp log neighbor changes disable/
949
+ else
950
+ @default_show_command = 'show run bgp all'
951
+ @default_output_pattern = /log-neighbor-changes/
952
+ end
953
+ bgp.log_neighbor_changes = false
954
+ refute(bgp.log_neighbor_changes)
955
+
956
+ msg_disable = 'log neighbor changes should be disabled'
957
+ msg_enable = 'log neighbor changes should be enabled'
958
+
959
+ if platform == :ios_xr
960
+ # XR the disable keyword added
961
+ assert_show_match(msg: msg_disable)
962
+ else
963
+ # Nexus the command is removed
964
+ refute_show_match(msg: msg_disable)
965
+ end
966
+ bgp.log_neighbor_changes = true
967
+ assert(bgp.log_neighbor_changes)
968
+ if platform == :ios_xr
969
+ # XR removes the whole command including disable keyword
970
+ refute_show_match(msg: msg_enable)
971
+ else
972
+ # Nexus adds the log-neighbor-changes command
973
+ assert_show_match(msg: msg_enable)
974
+ end
975
+ bgp.destroy
976
+ end
977
+
978
+ def test_default_log_neighbor_changes
979
+ bgp = setup_default
980
+ if bgp.default_log_neighbor_changes
981
+ # XR logging is on by default
982
+ assert(bgp.log_neighbor_changes,
983
+ 'bgp log_neighbor_changes should be enabled')
984
+ else
985
+ refute(bgp.log_neighbor_changes,
986
+ 'bgp log_neighbor_changes should be disabled')
987
+ end
988
+ bgp.destroy
989
+ end
990
+
991
+ def test_maxas_limit_default
992
+ maxas_limit(setup_default)
993
+ end
994
+
995
+ def test_maxas_limit_vrf
996
+ maxas_limit(setup_vrf)
997
+ end
998
+
999
+ def maxas_limit(bgp)
1000
+ if platform == :ios_xr
1001
+ assert_raises(Cisco::UnsupportedError) do
1002
+ bgp.maxas_limit = 50
1003
+ end
1004
+ else
1005
+ bgp.maxas_limit = 50
1006
+ assert_equal(50, bgp.maxas_limit,
1007
+ "bgp maxas-limit should be set to '50'")
1008
+ bgp.maxas_limit = bgp.default_maxas_limit
1009
+ assert_equal(bgp.default_maxas_limit, bgp.maxas_limit,
1010
+ 'bgp maxas-limit should be set to default value')
1011
+ end
1012
+ bgp.destroy
1013
+ end
1014
+
1015
+ def test_default_maxas_limit
1016
+ bgp = setup_default
1017
+ assert_equal(bgp.default_maxas_limit, bgp.maxas_limit,
1018
+ 'bgp maxas-limit should be default value')
1019
+ bgp.destroy
1020
+ end
1021
+
1022
+ def test_neighbor_down_fib_accelerate
1023
+ if platform == :ios_xr || node.product_id[/N(5|6)/]
1024
+ b = RouterBgp.new(1)
1025
+ assert_nil(b.neighbor_down_fib_accelerate)
1026
+ assert_nil(b.default_neighbor_down_fib_accelerate)
1027
+ assert_raises(Cisco::UnsupportedError) do
1028
+ b.neighbor_down_fib_accelerate = true
1029
+ end
1030
+ return
1031
+ end
1032
+ skip_incompat_version?('bgp', 'neighbor_down_fib_accelerate')
1033
+ %w(test_default test_vrf).each do |t|
1034
+ if t == 'test_default'
1035
+ bgp = setup_default
1036
+ else
1037
+ bgp = setup_vrf
1038
+ end
1039
+ default = bgp.default_neighbor_down_fib_accelerate
1040
+ assert_equal(default, bgp.neighbor_down_fib_accelerate,
1041
+ 'bgp neighbor_fib_down_accelerate not set to default value')
1042
+
1043
+ bgp.neighbor_down_fib_accelerate = true
1044
+ assert(bgp.neighbor_down_fib_accelerate,
1045
+ "vrf #{@vrf}: bgp neighbor_down_fib_accelerate "\
1046
+ 'should be enabled')
1047
+ bgp.neighbor_down_fib_accelerate = false
1048
+ refute(bgp.neighbor_down_fib_accelerate,
1049
+ "vrf #{@vrf}: bgp neighbor_down_fib_accelerate "\
1050
+ 'should be disabled')
1051
+
1052
+ bgp.neighbor_down_fib_accelerate = default
1053
+ assert_equal(default, bgp.neighbor_down_fib_accelerate,
1054
+ 'bgp neighbor_fib_down_accelerate not set to default value')
1055
+ bgp.destroy
1056
+ end
1057
+ end
1058
+
1059
+ def test_reconnect_interval
1060
+ if platform == :ios_xr || node.product_id[/N(5|6)/]
1061
+ b = RouterBgp.new(1)
1062
+ assert_nil(b.reconnect_interval)
1063
+ assert_nil(b.default_reconnect_interval)
1064
+ assert_raises(Cisco::UnsupportedError) do
1065
+ b.reconnect_interval = 34
1066
+ end
1067
+ return
1068
+ end
1069
+ skip_incompat_version?('bgp', 'reconnect_interval')
1070
+ %w(test_default test_vrf).each do |t|
1071
+ if t == 'test_default'
1072
+ bgp = setup_default
1073
+ else
1074
+ bgp = setup_vrf
1075
+ end
1076
+ if platform == :ios_xr
1077
+ assert_raises(Cisco::UnsupportedError) do
1078
+ bgp.reconnect_interval = 34
1079
+ end
1080
+ else
1081
+ bgp.reconnect_interval = 34
1082
+ assert_equal(34, bgp.reconnect_interval,
1083
+ "vrf #{@vrf}: bgp reconnect_interval should be set to 34")
1084
+ bgp.reconnect_interval = 60
1085
+ assert_equal(60, bgp.reconnect_interval,
1086
+ "vrf #{@vrf}: bgp reconnect_interval should be set to 60")
1087
+ end
1088
+ bgp.destroy
1089
+ end
1090
+ end
1091
+
1092
+ def test_reconnect_interval_default
1093
+ bgp = setup_default
1094
+ if platform == :ios_xr
1095
+ assert_nil(bgp.reconnect_interval,
1096
+ 'reconnect_interval should return nil on XR')
1097
+ else
1098
+ skip_if_UnsupportedCmdRef('bgp', 'reconnect_interval')
1099
+ skip_incompat_version?('bgp', 'reconnect_interval')
1100
+ assert_equal(bgp.default_reconnect_interval, bgp.reconnect_interval,
1101
+ "reconnect_interval should be set to default value of '60'")
1102
+ bgp.destroy
1103
+ end
1104
+ end
1105
+
1106
+ def test_route_distinguisher
1107
+ skip_nexus_i2_image?
1108
+ remove_all_vrfs
1109
+ vdc_limit_f3_no_intf_needed(:set)
1110
+
1111
+ bgp = setup_vrf
1112
+ assert_empty(bgp.route_distinguisher,
1113
+ 'bgp route_distinguisher should *NOT* be configured')
1114
+
1115
+ bgp.route_distinguisher = 'auto'
1116
+ assert_equal('auto', bgp.route_distinguisher)
1117
+
1118
+ bgp.route_distinguisher = '1:1'
1119
+ assert_equal('1:1', bgp.route_distinguisher)
1120
+
1121
+ bgp.route_distinguisher = '2:3'
1122
+ assert_equal('2:3', bgp.route_distinguisher)
1123
+
1124
+ bgp.route_distinguisher = bgp.default_route_distinguisher
1125
+ assert_empty(bgp.route_distinguisher,
1126
+ 'bgp route_distinguisher should *NOT* be configured')
1127
+ bgp.destroy
1128
+ remove_all_vrfs
1129
+ vdc_limit_f3_no_intf_needed(:clear)
1130
+ config_no_warn('no nv overlay evpn ; no feature nv overlay')
1131
+ end
1132
+
1133
+ def test_router_id
1134
+ %w(test_default test_vrf).each do |t|
1135
+ if t == 'test_default'
1136
+ bgp = setup_default
1137
+ else
1138
+ bgp = setup_vrf
1139
+ end
1140
+ bgp.router_id = '7.8.9.11'
1141
+ assert_equal('7.8.9.11', bgp.router_id,
1142
+ "vrf #{@vrf}: bgp router_id invalid")
1143
+ bgp.router_id = ''
1144
+ assert_empty(bgp.router_id,
1145
+ "vrf #{@vrf}: bgp router_id should *NOT* be configured")
1146
+ bgp.destroy
1147
+ end
1148
+ end
1149
+
1150
+ def test_router_id_not_configured
1151
+ bgp = setup_default
1152
+ assert_empty(bgp.router_id,
1153
+ 'bgp router_id should *NOT* be configured')
1154
+ bgp.destroy
1155
+ end
1156
+
1157
+ def test_default_router_id
1158
+ bgp = setup_default
1159
+ assert_empty(bgp.default_router_id,
1160
+ 'bgp router_id default value should be empty')
1161
+ bgp.destroy
1162
+ end
1163
+
1164
+ def test_shutdown
1165
+ bgp = setup_default
1166
+ if platform == :ios_xr
1167
+ assert_raises(Cisco::UnsupportedError) do
1168
+ bgp.shutdown = true
1169
+ end
1170
+ else
1171
+ bgp.shutdown = true
1172
+ assert(bgp.shutdown, 'bgp should be shutdown')
1173
+ bgp.shutdown = false
1174
+ refute(bgp.shutdown, "bgp should in 'no shutdown' state")
1175
+ end
1176
+ bgp.destroy
1177
+ end
1178
+
1179
+ def test_shutdown_not_configured
1180
+ bgp = setup_default
1181
+ refute(bgp.shutdown,
1182
+ "bgp should be in 'no shutdown' state")
1183
+ bgp.destroy
1184
+ end
1185
+
1186
+ def test_default_shutdown
1187
+ bgp = setup_default
1188
+ refute(bgp.default_shutdown,
1189
+ 'bgp shutdown default value should be false')
1190
+ bgp.destroy
1191
+ end
1192
+
1193
+ def test_suppress_fib_pending
1194
+ skip_legacy_defect?('7.0.3.I4',
1195
+ 'CSCvd41536: Unable to remove suppress-fib-pending')
1196
+ bgp = setup_default
1197
+ if validate_property_excluded?('bgp', 'suppress_fib_pending')
1198
+ assert_raises(Cisco::UnsupportedError) do
1199
+ bgp.suppress_fib_pending = true
1200
+ end
1201
+ else
1202
+ bgp.suppress_fib_pending = true
1203
+ assert(bgp.suppress_fib_pending,
1204
+ 'bgp suppress_fib_pending should be enabled')
1205
+ bgp.suppress_fib_pending = false
1206
+ refute(bgp.suppress_fib_pending,
1207
+ 'bgp suppress_fib_pending should be disabled')
1208
+ bgp.suppress_fib_pending = bgp.default_suppress_fib_pending
1209
+ assert_equal(bgp.default_suppress_fib_pending, bgp.suppress_fib_pending)
1210
+ end
1211
+ bgp.destroy
1212
+ end
1213
+
1214
+ def test_timer_bestpath_limit
1215
+ %w(test_default test_vrf).each do |t|
1216
+ if t == 'test_default'
1217
+ bgp = setup_default
1218
+ else
1219
+ bgp = setup_vrf
1220
+ end
1221
+ if platform == :ios_xr
1222
+ assert_raises(Cisco::UnsupportedError) do
1223
+ bgp.timer_bestpath_limit_set(34)
1224
+ end
1225
+ else
1226
+ bgp.timer_bestpath_limit_set(34)
1227
+ assert_equal(34, bgp.timer_bestpath_limit, "vrf #{@vrf}: " \
1228
+ "bgp timer_bestpath_limit should be set to '34'")
1229
+ bgp.timer_bestpath_limit_set(300)
1230
+ assert_equal(300, bgp.timer_bestpath_limit, "vrf #{@vrf}: " \
1231
+ "bgp timer_bestpath_limit should be set to '300'")
1232
+ end
1233
+ bgp.destroy
1234
+ end
1235
+ end
1236
+
1237
+ def test_timer_bestpath_limit_default
1238
+ bgp = setup_default
1239
+ if platform == :ios_xr
1240
+ assert_nil(bgp.timer_bestpath_limit,
1241
+ 'timer_bestpath_limit should be nil for XR')
1242
+ else
1243
+ assert_equal(300, bgp.timer_bestpath_limit,
1244
+ "timer_bestpath_limit should be default value of '300'")
1245
+ end
1246
+ bgp.destroy
1247
+ end
1248
+
1249
+ def test_timer_bestpath_limit_always_default
1250
+ timer_bestpath_limit_always(setup_default)
1251
+ end
1252
+
1253
+ def test_timer_bestpath_limit_always_vrf
1254
+ timer_bestpath_limit_always(setup_vrf)
1255
+ end
1256
+
1257
+ def timer_bestpath_limit_always(bgp)
1258
+ if platform == :ios_xr
1259
+ assert_raises(Cisco::UnsupportedError) do
1260
+ bgp.timer_bestpath_limit_set(34, true)
1261
+ end
1262
+ else
1263
+ bgp.timer_bestpath_limit_set(34, true)
1264
+ assert(bgp.timer_bestpath_limit_always,
1265
+ "vrf #{@vrf}: bgp timer_bestpath_limit_always should be enabled")
1266
+ bgp.timer_bestpath_limit_set(34, false)
1267
+ refute(bgp.timer_bestpath_limit_always,
1268
+ "vrf #{@vrf}: bgp timer_bestpath_limit_always should be disabled")
1269
+ end
1270
+ bgp.destroy
1271
+ end
1272
+
1273
+ def test_timer_bestpath_limit_always_not_configured
1274
+ bgp = setup_default
1275
+ refute(bgp.timer_bestpath_limit_always,
1276
+ 'bgp timer_bestpath_limit_always should be disabled')
1277
+ bgp.destroy
1278
+ end
1279
+
1280
+ def test_default_timer_bestpath_limit_always
1281
+ bgp = setup_default
1282
+ refute(bgp.default_timer_bestpath_limit_always,
1283
+ 'bgp timer_bestpath_limit_always default value should be false')
1284
+ bgp.destroy
1285
+ end
1286
+
1287
+ def test_timer_bgp_keepalive_hold
1288
+ %w(test_default test_vrf).each do |t|
1289
+ if t == 'test_default'
1290
+ bgp = setup_default
1291
+ else
1292
+ bgp = setup_vrf
1293
+ end
1294
+ bgp.timer_bgp_keepalive_hold_set(25, 45)
1295
+ assert_equal(%w(25 45), bgp.timer_bgp_keepalive_hold, "vrf #{@vrf}: " \
1296
+ "keepalive and hold values should be '25 and 45'")
1297
+ bgp.timer_bgp_keepalive_hold_set(60, 180)
1298
+ assert_equal(%w(60 180), bgp.timer_bgp_keepalive_hold, "vrf #{@vrf}: " \
1299
+ "keepalive and hold values should be '60 and 180'")
1300
+ assert_equal(60, bgp.timer_bgp_keepalive, "vrf #{@vrf}: " \
1301
+ "keepalive value should be '60'")
1302
+ assert_equal(180, bgp.timer_bgp_holdtime, "vrf #{@vrf}: " \
1303
+ "keepalive value should be '180'")
1304
+ bgp.timer_bgp_keepalive_hold_set(500, 3600)
1305
+ assert_equal(%w(500 3600), bgp.timer_bgp_keepalive_hold, "vrf #{@vrf}: " \
1306
+ "keepalive and hold values should be '500 and 3600'")
1307
+ assert_equal(500, bgp.timer_bgp_keepalive, "vrf #{@vrf}: " \
1308
+ "keepalive value should be '500'")
1309
+ assert_equal(3600, bgp.timer_bgp_holdtime, "vrf #{@vrf}: " \
1310
+ "keepalive value should be '3600'")
1311
+ bgp.destroy
1312
+ end
1313
+ end
1314
+
1315
+ def test_default_timer_keepalive_hold_default
1316
+ bgp = setup_default
1317
+ assert_equal(%w(60 180), bgp.default_timer_bgp_keepalive_hold,
1318
+ 'bgp timer_bestpath_timer_keepalive_hold_default values ' \
1319
+ "should be '60' and '180'")
1320
+ assert_equal(%w(60 180), bgp.timer_bgp_keepalive_hold,
1321
+ 'bgp timer_bestpath_timer_keepalive_hold_default should be' \
1322
+ "set to default values of '60' and '180'")
1323
+ bgp.destroy
1324
+ end
1325
+ end