cisco_node_utils 1.1.0 → 1.2.0

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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/CHANGELOG.md +126 -1
  4. data/README.md +19 -12
  5. data/Rakefile +1 -0
  6. data/bin/git/hooks/commit-msg/enforce_style +8 -0
  7. data/cisco_node_utils.gemspec +4 -3
  8. data/docs/README-develop-best-practices.md +127 -109
  9. data/docs/README-develop-node-utils-APIs.md +47 -39
  10. data/docs/template-router.rb +3 -7
  11. data/lib/.rubocop.yml +4 -4
  12. data/lib/cisco_node_utils.rb +1 -1
  13. data/lib/cisco_node_utils/aaa_authentication_login.rb +96 -0
  14. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +133 -0
  15. data/lib/cisco_node_utils/aaa_authorization_service.rb +150 -0
  16. data/lib/cisco_node_utils/ace.rb +196 -0
  17. data/lib/cisco_node_utils/acl.rb +100 -0
  18. data/lib/cisco_node_utils/bgp.rb +301 -163
  19. data/lib/cisco_node_utils/bgp_af.rb +187 -19
  20. data/lib/cisco_node_utils/bgp_neighbor.rb +18 -33
  21. data/lib/cisco_node_utils/bgp_neighbor_af.rb +25 -48
  22. data/lib/cisco_node_utils/cisco_cmn_utils.rb +23 -4
  23. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +593 -0
  24. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +22 -0
  25. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +31 -0
  26. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +22 -0
  27. data/lib/cisco_node_utils/cmd_ref/acl.yaml +43 -0
  28. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +242 -0
  29. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +164 -0
  30. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +131 -0
  31. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +179 -0
  32. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +34 -0
  33. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +42 -0
  34. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +172 -0
  35. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +35 -0
  36. data/lib/cisco_node_utils/cmd_ref/feature.yaml +42 -0
  37. data/lib/cisco_node_utils/cmd_ref/fex.yaml +9 -0
  38. data/lib/cisco_node_utils/cmd_ref/images.yaml +7 -0
  39. data/lib/cisco_node_utils/cmd_ref/interface.yaml +339 -0
  40. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +28 -0
  41. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +61 -0
  42. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +54 -0
  43. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +32 -0
  44. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
  45. data/lib/cisco_node_utils/cmd_ref/memory.yaml +13 -0
  46. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +7 -0
  47. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +14 -0
  48. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +74 -0
  49. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +33 -0
  50. data/lib/cisco_node_utils/cmd_ref/pim.yaml +40 -0
  51. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +69 -0
  52. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +25 -0
  53. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +64 -0
  54. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +14 -0
  55. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +5 -0
  56. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +72 -0
  57. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +23 -0
  58. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +7 -0
  59. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +50 -0
  60. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +51 -0
  61. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +55 -0
  62. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +11 -0
  63. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +18 -0
  64. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +7 -0
  65. data/lib/cisco_node_utils/cmd_ref/system.yaml +6 -0
  66. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +49 -0
  67. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +33 -0
  68. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +35 -0
  69. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +38 -0
  70. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +6 -0
  71. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +56 -0
  72. data/lib/cisco_node_utils/cmd_ref/vni.yaml +76 -0
  73. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +197 -0
  74. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +88 -0
  75. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +38 -0
  76. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +60 -0
  77. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +39 -0
  78. data/lib/cisco_node_utils/cmd_ref/yum.yaml +13 -0
  79. data/lib/cisco_node_utils/command_reference.rb +359 -187
  80. data/lib/cisco_node_utils/configparser_lib.rb +1 -1
  81. data/lib/cisco_node_utils/dns_domain.rb +19 -5
  82. data/lib/cisco_node_utils/domain_name.rb +4 -8
  83. data/lib/cisco_node_utils/evpn_vni.rb +157 -0
  84. data/lib/cisco_node_utils/fabricpath_global.rb +388 -0
  85. data/lib/cisco_node_utils/fabricpath_topology.rb +150 -0
  86. data/lib/cisco_node_utils/feature.rb +111 -0
  87. data/lib/cisco_node_utils/interface.rb +390 -97
  88. data/lib/cisco_node_utils/interface_channel_group.rb +124 -0
  89. data/lib/cisco_node_utils/interface_ospf.rb +11 -34
  90. data/lib/cisco_node_utils/interface_portchannel.rb +157 -0
  91. data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
  92. data/lib/cisco_node_utils/name_server.rb +1 -1
  93. data/lib/cisco_node_utils/node.rb +55 -249
  94. data/lib/cisco_node_utils/node_util.rb +5 -1
  95. data/lib/cisco_node_utils/ntp_config.rb +2 -2
  96. data/lib/cisco_node_utils/ntp_server.rb +14 -5
  97. data/lib/cisco_node_utils/overlay_global.rb +153 -0
  98. data/lib/cisco_node_utils/pim.rb +124 -0
  99. data/lib/cisco_node_utils/pim_group_list.rb +108 -0
  100. data/lib/cisco_node_utils/pim_rp_address.rb +102 -0
  101. data/lib/cisco_node_utils/platform.rb +8 -9
  102. data/lib/cisco_node_utils/portchannel_global.rb +277 -0
  103. data/lib/cisco_node_utils/radius_global.rb +9 -19
  104. data/lib/cisco_node_utils/radius_server.rb +31 -41
  105. data/lib/cisco_node_utils/radius_server_group.rb +117 -0
  106. data/lib/cisco_node_utils/router_ospf.rb +1 -1
  107. data/lib/cisco_node_utils/router_ospf_vrf.rb +14 -19
  108. data/lib/cisco_node_utils/snmp_notification_receiver.rb +158 -0
  109. data/lib/cisco_node_utils/snmpcommunity.rb +3 -5
  110. data/lib/cisco_node_utils/snmpgroup.rb +1 -1
  111. data/lib/cisco_node_utils/snmpnotification.rb +57 -0
  112. data/lib/cisco_node_utils/snmpserver.rb +8 -17
  113. data/lib/cisco_node_utils/snmpuser.rb +67 -28
  114. data/lib/cisco_node_utils/syslog_server.rb +3 -9
  115. data/lib/cisco_node_utils/syslog_settings.rb +2 -10
  116. data/lib/cisco_node_utils/tacacs_server.rb +9 -14
  117. data/lib/cisco_node_utils/tacacs_server_group.rb +145 -0
  118. data/lib/cisco_node_utils/tacacs_server_host.rb +5 -9
  119. data/lib/cisco_node_utils/vdc.rb +88 -0
  120. data/lib/cisco_node_utils/version.rb +5 -2
  121. data/lib/cisco_node_utils/vlan.rb +71 -8
  122. data/lib/cisco_node_utils/vni.rb +227 -0
  123. data/lib/cisco_node_utils/vpc.rb +377 -0
  124. data/lib/cisco_node_utils/vrf.rb +60 -9
  125. data/lib/cisco_node_utils/vrf_af.rb +191 -0
  126. data/lib/cisco_node_utils/vtp.rb +8 -6
  127. data/lib/cisco_node_utils/vxlan_vtep.rb +151 -0
  128. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +234 -0
  129. data/lib/cisco_node_utils/yum.rb +1 -1
  130. data/tests/.rubocop.yml +1 -1
  131. data/tests/basetest.rb +16 -7
  132. data/tests/ciscotest.rb +55 -13
  133. data/tests/cmd_config.yaml +2 -2
  134. data/tests/platform_info.rb +3 -2
  135. data/tests/test_aaa_authentication_login.rb +219 -0
  136. data/tests/test_aaa_authentication_login_service.rb +759 -0
  137. data/tests/test_aaa_authorization_service.rb +1041 -0
  138. data/tests/test_ace.rb +160 -0
  139. data/tests/test_acl.rb +176 -0
  140. data/tests/test_bgp_af.rb +269 -13
  141. data/tests/test_bgp_neighbor.rb +38 -40
  142. data/tests/test_bgp_neighbor_af.rb +92 -32
  143. data/tests/test_command_config.rb +5 -5
  144. data/tests/test_command_reference.rb +284 -101
  145. data/tests/test_dns_domain.rb +1 -1
  146. data/tests/test_domain_name.rb +1 -1
  147. data/tests/test_evpn_vni.rb +106 -0
  148. data/tests/test_fabricpath_global.rb +243 -0
  149. data/tests/test_fabricpath_topology.rb +98 -0
  150. data/tests/test_interface.rb +292 -74
  151. data/tests/test_interface_channel_group.rb +74 -0
  152. data/tests/test_interface_ospf.rb +9 -4
  153. data/tests/test_interface_portchannel.rb +105 -0
  154. data/tests/test_interface_service_vni.rb +232 -0
  155. data/tests/test_interface_svi.rb +77 -62
  156. data/tests/test_interface_switchport.rb +17 -5
  157. data/tests/test_name_server.rb +1 -1
  158. data/tests/test_node.rb +1 -1
  159. data/tests/test_node_ext.rb +10 -20
  160. data/tests/test_ntp_config.rb +1 -1
  161. data/tests/test_ntp_server.rb +18 -6
  162. data/tests/test_overlay_global.rb +102 -0
  163. data/tests/test_pim.rb +177 -0
  164. data/tests/test_pim_group_list.rb +181 -0
  165. data/tests/test_pim_rp_address.rb +153 -0
  166. data/tests/test_platform.rb +3 -3
  167. data/tests/test_portchannel_global.rb +202 -0
  168. data/tests/test_radius_global.rb +1 -1
  169. data/tests/test_radius_server.rb +92 -57
  170. data/tests/test_radius_server_group.rb +149 -0
  171. data/tests/test_router_bgp.rb +283 -112
  172. data/tests/test_router_ospf.rb +2 -2
  173. data/tests/test_router_ospf_vrf.rb +4 -4
  174. data/tests/test_snmp_notification_receiver.rb +167 -0
  175. data/tests/test_snmpcommunity.rb +1 -1
  176. data/tests/test_snmpgroup.rb +1 -1
  177. data/tests/test_snmpnotification.rb +72 -0
  178. data/tests/test_snmpserver.rb +29 -105
  179. data/tests/test_snmpuser.rb +32 -30
  180. data/tests/test_syslog_server.rb +36 -10
  181. data/tests/test_syslog_settings.rb +1 -1
  182. data/tests/test_tacacs_server.rb +1 -1
  183. data/tests/test_tacacs_server_group.rb +405 -0
  184. data/tests/test_tacacs_server_host.rb +1 -1
  185. data/tests/test_vdc.rb +78 -0
  186. data/tests/test_vlan.rb +74 -19
  187. data/tests/test_vlan_mt_full.rb +95 -0
  188. data/tests/test_vni.rb +106 -0
  189. data/tests/test_vpc.rb +361 -0
  190. data/tests/test_vrf.rb +172 -29
  191. data/tests/test_vtp.rb +1 -1
  192. data/tests/test_vxlan_vtep.rb +214 -0
  193. data/tests/test_vxlan_vtep_vni.rb +201 -0
  194. data/tests/test_yum.rb +1 -1
  195. metadata +120 -11
  196. data/lib/cisco_node_utils/README_YAML.md +0 -325
  197. data/lib/cisco_node_utils/command_reference_common.yaml +0 -1051
  198. data/lib/cisco_node_utils/command_reference_common_bgp.yaml +0 -535
  199. data/lib/cisco_node_utils/command_reference_n3064.yaml +0 -13
  200. data/lib/cisco_node_utils/command_reference_n7k.yaml +0 -52
  201. data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -26
  202. data/tests/platform_info.yaml +0 -10
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for DnsDomain class
3
3
  #
4
- # Copyright (c) 2014-2015 Cisco and/or its affiliates.
4
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for DomainName class
3
3
  #
4
- # Copyright (c) 2014-2015 Cisco and/or its affiliates.
4
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
@@ -0,0 +1,106 @@
1
+ # Evpn Vni Unit Tests
2
+ #
3
+ # Andi Shen, December, 2015
4
+ #
5
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'ciscotest'
20
+ require_relative '../lib/cisco_node_utils/evpn_vni'
21
+
22
+ # TestEvpnVni - Minitest for EvpnVni class
23
+ class TestEvpnVni < CiscoTestCase
24
+ def setup
25
+ # Disable feature bgp and no overlay evpn before each test to
26
+ # ensure we are starting with a clean slate for each test.
27
+ super
28
+ config('no feature bgp')
29
+ config('no nv overlay evpn')
30
+ config('no evpn')
31
+ end
32
+
33
+ def test_create_and_destroy
34
+ vni = EvpnVni.new(4096)
35
+ vni_list = EvpnVni.vnis
36
+ assert(vni_list.key?('4096'), 'Error: failed to create evpn vni 4096')
37
+
38
+ vni.destroy
39
+ vni_list = EvpnVni.vnis
40
+ refute(vni_list.key?('4096'), 'Error: failed to destroy evpn vni 4096')
41
+ end
42
+
43
+ def test_vni_collection
44
+ vni_list = EvpnVni.vnis
45
+ assert_equal(true, vni_list.empty?, 'VLAN collection is empty')
46
+ end
47
+
48
+ def test_route_distinguisher
49
+ vni = EvpnVni.new(4096)
50
+ vni.route_distinguisher = 'auto'
51
+ assert_equal('auto', vni.route_distinguisher,
52
+ "vni route_distinguisher should be set to 'auto'")
53
+ vni.route_distinguisher = '1:1'
54
+ assert_equal('1:1', vni.route_distinguisher,
55
+ "vni route_distinguisher should be set to '1:1'")
56
+ vni.route_distinguisher = vni.default_route_distinguisher
57
+ assert_empty(vni.route_distinguisher,
58
+ 'vni route_distinguisher should *NOT* be configured')
59
+ vni.destroy
60
+ end
61
+
62
+ # test route_target
63
+ def test_route_target
64
+ vni = EvpnVni.new(4096)
65
+
66
+ # test route target both auto and route target both auto evpn
67
+ opts = [:both, :import, :export]
68
+
69
+ # Master list of communities to test against
70
+ master = ['1.2.3.4:55', '2:2', '55:33', 'auto']
71
+
72
+ # Test 1: both/import/export when no commands are present. Each target
73
+ should = master.clone
74
+ route_target_tester(vni, opts, should, 'Test 1')
75
+
76
+ # Test 2: remove half of the entries
77
+ should = ['2:2', 'auto']
78
+ route_target_tester(vni, opts, should, 'Test 2')
79
+
80
+ # Test 3: restore the removed entries
81
+ should = master.clone
82
+ route_target_tester(vni, opts, should, 'Test 3')
83
+
84
+ # Test 4: 'default'
85
+ should = vni.default_route_target_import
86
+ route_target_tester(vni, opts, should, 'Test 4')
87
+
88
+ vni .destroy
89
+ end
90
+
91
+ def route_target_tester(vni, opts, should, test_id)
92
+ # First configure all four property types
93
+ opts.each do |opt|
94
+ # non-evpn
95
+ vni.send("route_target_#{opt}=", should)
96
+ end
97
+
98
+ # Now check the results
99
+ opts.each do |opt|
100
+ # non-evpn
101
+ result = vni.send("route_target_#{opt}")
102
+ assert_equal(should, result,
103
+ "#{test_id} : route_target_#{opt}")
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,243 @@
1
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/cisco_cmn_utils'
17
+ require_relative '../lib/cisco_node_utils/fabricpath_global'
18
+
19
+ include Cisco
20
+
21
+ # TestFabricpathGlobal - Minitest for Fabricpath Global node utils
22
+ class TestFabricpathGlobal < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ skip("Test not supported on #{node.product_id}") if
27
+ cmd_ref.lookup('fabricpath', 'feature').default_value.nil?
28
+ no_feature_fabricpath
29
+ end
30
+
31
+ def teardown
32
+ # teardown runs at the end of each test
33
+ no_feature_fabricpath
34
+ super
35
+ end
36
+
37
+ def no_feature_fabricpath
38
+ # Turn the feature off for a clean test.
39
+ config('no feature-set fabricpath')
40
+ end
41
+
42
+ def n5k6k_platforms?
43
+ /N[56]K/ =~ node.product_id
44
+ end
45
+
46
+ # TESTS
47
+
48
+ def test_global_collection_empty
49
+ globals = FabricpathGlobal.globals
50
+ assert_equal(true, globals.empty?,
51
+ 'Globals should be empty for this test')
52
+ end
53
+
54
+ def test_global_create
55
+ @global = FabricpathGlobal.new('default')
56
+ assert_equal(true, @global.name == 'default',
57
+ "Global name not set correctly #{@global.name}")
58
+ assert_equal(:enabled, FabricpathGlobal.fabricpath_feature,
59
+ 'Fabricpath feature should have been enabled')
60
+ refute(FabricpathGlobal.globals.empty?,
61
+ 'Globals should not be empty after create')
62
+ end
63
+
64
+ def test_global_destroy
65
+ # create and test again
66
+ test_global_create
67
+ @global.destroy
68
+ # now it should be wiped out
69
+ test_global_collection_empty
70
+ end
71
+
72
+ def test_aggregate_multicast_routes
73
+ return if n5k6k_platforms?
74
+ @global = FabricpathGlobal.new('default')
75
+ @global.aggregate_multicast_routes = true
76
+ assert(@global.aggregate_multicast_routes,
77
+ 'Aggregate multicast routes not set')
78
+ @global.aggregate_multicast_routes = false
79
+ refute(@global.aggregate_multicast_routes,
80
+ 'Aggregate multicast routes not reset')
81
+ end
82
+
83
+ def test_allocate_delay
84
+ @global = FabricpathGlobal.new('default')
85
+ # test default value
86
+ assert_equal(@global.default_allocate_delay,
87
+ @global.allocate_delay,
88
+ 'Default allocate_delay not set correctly')
89
+ @global.allocate_delay = 20
90
+ assert_equal(20, @global.allocate_delay,
91
+ 'allocate_delay not set to 20')
92
+ end
93
+
94
+ def test_graceful_merge
95
+ @global = FabricpathGlobal.new('default')
96
+ # test default value
97
+ assert_equal(:enable, @global.graceful_merge,
98
+ 'Default graceful_merge not set correctly')
99
+ @global.graceful_merge = :disable
100
+ assert_equal(:disable, @global.graceful_merge,
101
+ 'graceful merge not set to disable')
102
+ end
103
+
104
+ def test_linkup_delay_all
105
+ @global = FabricpathGlobal.new('default')
106
+ # test default value
107
+ assert_equal(@global.default_linkup_delay,
108
+ @global.linkup_delay,
109
+ 'Default linkup_delay not set correctly')
110
+ @global.linkup_delay = 25
111
+ assert_equal(25, @global.linkup_delay,
112
+ 'linkup_delay not set to 25')
113
+
114
+ return if n5k6k_platforms?
115
+
116
+ refute(@global.linkup_delay_always,
117
+ 'linkup_delay_always should not be set by default')
118
+ @global.linkup_delay_always = true
119
+ assert(@global.linkup_delay_always,
120
+ 'linkup_delay_always is not getting set')
121
+
122
+ @global.linkup_delay_enable = true
123
+ @global.linkup_delay_enable = false
124
+ refute(@global.linkup_delay_enable,
125
+ 'linkup_delay is not getting disabled')
126
+ end
127
+
128
+ def test_loadbalance_algorithm
129
+ @global = FabricpathGlobal.new('default')
130
+ # test default value
131
+ check_val = n5k6k_platforms? ? 'source-destination' : 'symmetric'
132
+ assert_equal(check_val, @global.loadbalance_algorithm,
133
+ "default algo should be #{check_val} but is
134
+ #{@global.loadbalance_algorithm}")
135
+ @global.loadbalance_algorithm = 'source'
136
+ assert_equal('source', @global.loadbalance_algorithm,
137
+ 'algo not getting set to source-destination')
138
+ end
139
+
140
+ def test_loadbalance_multicast
141
+ return if n5k6k_platforms?
142
+ @global = FabricpathGlobal.new('default')
143
+ # test default values first
144
+ assert_equal(@global.default_loadbalance_multicast_rotate,
145
+ @global.loadbalance_multicast_rotate,
146
+ "default mcast rotate should be 6
147
+ but is #{@global.loadbalance_multicast_rotate}")
148
+ assert(@global.loadbalance_multicast_has_vlan,
149
+ "default mcast include-vlan should be true
150
+ but is #{@global.loadbalance_multicast_has_vlan}")
151
+ @global.send(:loadbalance_multicast=, 3, false)
152
+ assert_equal(3, @global.loadbalance_multicast_rotate,
153
+ "mcast rotate should now be 3
154
+ but is #{@global.loadbalance_multicast_rotate}")
155
+ refute(@global.loadbalance_multicast_has_vlan,
156
+ "mcast include-vlan should now be false
157
+ but is #{@global.loadbalance_multicast_has_vlan}")
158
+ end
159
+
160
+ def test_loadbalance_unicast
161
+ @global = FabricpathGlobal.new('default')
162
+ # test default values first
163
+ assert_equal(@global.default_loadbalance_unicast_layer,
164
+ @global.loadbalance_unicast_layer,
165
+ "default unicast layer should be mixed
166
+ but is #{@global.loadbalance_unicast_layer}")
167
+ assert_equal(@global.default_loadbalance_unicast_rotate,
168
+ @global.loadbalance_unicast_rotate,
169
+ "default unicast rotate not set correctly
170
+ but is set to #{@global.loadbalance_unicast_rotate}") unless
171
+ n5k6k_platforms?
172
+ assert(@global.loadbalance_unicast_has_vlan,
173
+ "default unicast include-vlan should be true
174
+ but is #{@global.loadbalance_unicast_has_vlan}")
175
+ @global.send(:loadbalance_unicast=, 'layer4', 3, false)
176
+ assert_equal('layer4', @global.loadbalance_unicast_layer,
177
+ "unicast layer should be layer4
178
+ but is #{@global.loadbalance_unicast_layer}")
179
+ assert_equal(3, @global.loadbalance_unicast_rotate,
180
+ "unicast rotate should now be 3
181
+ but is #{@global.loadbalance_unicast_rotate}") unless
182
+ n5k6k_platforms?
183
+ refute(@global.loadbalance_unicast_has_vlan,
184
+ "unicast include-vlan should now be false
185
+ but is #{@global.loadbalance_unicast_has_vlan}")
186
+ end
187
+
188
+ def test_mode
189
+ @global = FabricpathGlobal.new('default')
190
+ # test default value
191
+ assert_equal(@global.default_mode, @global.mode,
192
+ "default mode should be normal but is #{@global.mode}")
193
+ @global.mode = 'transit'
194
+ assert_equal('transit', @global.mode,
195
+ 'mode not getting set to transit')
196
+ @global.mode = 'normal'
197
+ assert_equal('normal', @global.mode,
198
+ 'mode not getting set to transit')
199
+ end
200
+
201
+ def test_switch_id
202
+ @global = FabricpathGlobal.new('default')
203
+ # auto_id = @global.switch_id
204
+ @global.switch_id = 100
205
+ assert_equal(100, @global.switch_id,
206
+ 'switchid not getting set to 100')
207
+ end
208
+
209
+ def test_transition_delay
210
+ @global = FabricpathGlobal.new('default')
211
+ # test default value
212
+ assert_equal(@global.default_transition_delay,
213
+ @global.transition_delay,
214
+ 'Default allocate_delay not set correctly')
215
+ @global.transition_delay = 20
216
+ assert_equal(20, @global.transition_delay,
217
+ 'transition_delay not set to 20')
218
+ end
219
+
220
+ def test_ttl_multicast
221
+ return if n5k6k_platforms?
222
+ @global = FabricpathGlobal.new('default')
223
+ # test default value
224
+ assert_equal(@global.default_ttl_multicast,
225
+ @global.ttl_multicast,
226
+ 'Default multicast ttl not set correctly')
227
+ @global.ttl_multicast = 16
228
+ assert_equal(16, @global.ttl_multicast,
229
+ 'multicast ttl not getting set to 16')
230
+ end
231
+
232
+ def test_ttl_unicast
233
+ return if n5k6k_platforms?
234
+ @global = FabricpathGlobal.new('default')
235
+ # test default value
236
+ assert_equal(@global.default_ttl_unicast,
237
+ @global.ttl_unicast,
238
+ 'Default unicast ttl not set correctly')
239
+ @global.ttl_unicast = 40
240
+ assert_equal(40, @global.ttl_unicast,
241
+ 'unicast ttl not getting set to 40')
242
+ end
243
+ end
@@ -0,0 +1,98 @@
1
+ # Copyright (c) 2014-2016 Cisco and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require_relative 'ciscotest'
16
+ require_relative '../lib/cisco_node_utils/cisco_cmn_utils'
17
+ require_relative '../lib/cisco_node_utils/fabricpath_topology'
18
+
19
+ include Cisco
20
+
21
+ # TestFabricpathTopo - Minitest for Fabricpath Topo node utils
22
+ class TestFabricpathTopo < CiscoTestCase
23
+ def setup
24
+ # setup runs at the beginning of each test
25
+ super
26
+ skip("Test not supported on #{node.product_id}") if
27
+ cmd_ref.lookup('fabricpath', 'feature').default_value.nil?
28
+ no_feature_fabricpath
29
+ end
30
+
31
+ def teardown
32
+ # teardown runs at the end of each test
33
+ no_feature_fabricpath
34
+ super
35
+ end
36
+
37
+ def no_feature_fabricpath
38
+ # Turn the feature off for a clean test.
39
+ config('no feature-set fabricpath')
40
+ config('no install feature-set fabricpath')
41
+ end
42
+
43
+ # TESTS
44
+
45
+ def test_topo_create
46
+ @topo = FabricpathTopo.new('1')
47
+ @topo.topo_name = 'Topo-1'
48
+ assert_equal('Topo-1', @topo.topo_name,
49
+ "Topo name not set correctly #{@topo.topo_name}")
50
+ assert_equal(:enabled, @topo.fabricpath_feature,
51
+ 'Fabricpath feature should have been enabled')
52
+ topos = FabricpathTopo.topos
53
+ assert_equal(2, topos.length,
54
+ 'Number of Topos should be 2')
55
+ end
56
+
57
+ def test_topo_destroy
58
+ # create and test again
59
+ test_topo_create
60
+ # puts "deleting Topo #{@topo.topo_name}"
61
+ @topo.destroy
62
+ # now it should be wiped out
63
+ topos = FabricpathTopo.topos
64
+ assert_equal(1, topos.length,
65
+ 'Number of Topos should be 1 (default)')
66
+ end
67
+
68
+ def test_invalid_topo_id
69
+ e = assert_raises(CliError) { FabricpathTopo.new('64') }
70
+ assert_match(/Invalid number.* range/, e.message)
71
+ end
72
+
73
+ def test_member_vlans
74
+ @topo = FabricpathTopo.new('25')
75
+ topos = FabricpathTopo.topos
76
+ default_topo = topos['0']
77
+ default_topo_vlans = default_topo.member_vlans.first
78
+ # puts "vlans in default topo is #{default_topo_vlans}"
79
+ assert_equal('1..4096', default_topo_vlans,
80
+ 'default topo should have all VLANS')
81
+ @topo.member_vlans = ['2..10', '100', '500']
82
+ topo25_vlans = @topo.member_vlans.join(',')
83
+ # puts "Topo #{@topo.topo_name} member vlans #{topo25_vlans}"
84
+ assert_equal('2..10,100,500', topo25_vlans,
85
+ 'Topo 25 not getting set with member vlans')
86
+ default_topo_vlans = default_topo.member_vlans.join(',')
87
+ # puts "vlans in default topo is #{default_topo_vlans}"
88
+ assert_equal('1,11..99,101..499,501..4096', default_topo_vlans,
89
+ 'default topo should now have the set
90
+ 1,11..99,101..499,501..4096')
91
+ end
92
+
93
+ def test_member_vlans_invalid
94
+ @topo = FabricpathTopo.new('25')
95
+ e = assert_raises(RuntimeError) { @topo.member_vlans = ['1..4095'] }
96
+ assert_match(%r{Invalid value/range}, e.message)
97
+ end
98
+ end