cisco_node_utils 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,153 @@
1
+ # Copyright (c) 2013-2016 Cisco and/or its affiliates.
2
+ #
3
+ # Smitha Gopalan, November 2015
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ # ---------------------------------------------------------------------
17
+ # Cli: <afi> pim rp-address <rp-address> (under different VRFs)
18
+ # ---------------------------------------------------------------------
19
+ # Testcases: All Tests create and destroy all instances within a test
20
+ #
21
+ # 1. test_all_rp_addrs
22
+ #
23
+ # 2. test_single_invalid_rpaddr_single_vrf:
24
+ # vrf default, ip pim rp-address 256.256.256.256
25
+ # ---------------------------------------------------------------------
26
+
27
+ require_relative 'ciscotest'
28
+ require_relative '../lib/cisco_node_utils/pim_rp_address'
29
+
30
+ include Cisco
31
+
32
+ # TestPimRpAddress - Minitest for PimRpAddress
33
+ class TestPimRpAddress < CiscoTestCase
34
+ # Enables feature pim
35
+ #--------------------
36
+ def setup
37
+ super
38
+ config('no feature pim')
39
+ end
40
+
41
+ # Test PimRpAddress.rp_addresses
42
+ # - multiple vrfs, rp_addrs
43
+ # - same rp_addr, different vrf
44
+ #--------------------------------------------
45
+ def all_rp_addrs(afi)
46
+ rp_addr1 = '11.11.11.11'
47
+ rp_addr2 = '22.22.22.22'
48
+
49
+ # Basic setup
50
+ vrf = 'default'
51
+ pd1 = PimRpAddress.new(afi, vrf, rp_addr1)
52
+ pd2 = PimRpAddress.new(afi, vrf, rp_addr2)
53
+ hash = PimRpAddress.rp_addresses
54
+ assert(hash.key?(afi))
55
+ assert(hash[afi].key?(vrf))
56
+ assert_equal(2, hash[afi][vrf].keys.count,
57
+ "hash[#{afi}][#{vrf}] should have 2 rp-address")
58
+ assert(hash[afi][vrf].key?(rp_addr1),
59
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr1}")
60
+ assert(hash[afi][vrf].key?(rp_addr2),
61
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr2}")
62
+
63
+ # vrf with same rp_addrs as in default
64
+ vrf = 'red'
65
+ pd3 = PimRpAddress.new(afi, vrf, rp_addr1)
66
+ pd4 = PimRpAddress.new(afi, vrf, rp_addr2)
67
+ hash = PimRpAddress.rp_addresses
68
+ assert_equal(2, hash[afi].keys.count,
69
+ "hash[#{afi}] does not have 2 vrfs")
70
+ assert(hash[afi].key?(vrf))
71
+ assert_equal(2, hash[afi][vrf].keys.count,
72
+ "hash[#{afi}][#{vrf}] should have 2 rp-address")
73
+ assert(hash[afi][vrf].key?(rp_addr1),
74
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr1}")
75
+ assert(hash[afi][vrf].key?(rp_addr2),
76
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr2}")
77
+
78
+ # different vrf, same/diff rps
79
+ vrf = 'black'
80
+ rp_addr7 = '7.7.7.7'
81
+ pd5 = PimRpAddress.new(afi, vrf, rp_addr1)
82
+ pd6 = PimRpAddress.new(afi, vrf, rp_addr2)
83
+ pd7 = PimRpAddress.new(afi, vrf, rp_addr7)
84
+ hash = PimRpAddress.rp_addresses
85
+ assert_equal(3, hash[afi].keys.count,
86
+ "hash[#{afi}] does not have 3 vrfs")
87
+ assert(hash[afi].key?(vrf))
88
+ assert_equal(3, hash[afi][vrf].keys.count,
89
+ "hash[#{afi}][#{vrf}] should have 3 rp-address")
90
+ assert(hash[afi][vrf].key?(rp_addr1),
91
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr1}")
92
+ assert(hash[afi][vrf].key?(rp_addr1),
93
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr2}")
94
+ assert(hash[afi][vrf].key?(rp_addr7),
95
+ "hash[#{afi}][#{vrf}] does not contain #{rp_addr7}")
96
+
97
+ # Test removal
98
+ vrf = 'default'
99
+ pd1.destroy
100
+ hash = PimRpAddress.rp_addresses
101
+ assert_equal(1, hash[afi][vrf].keys.count,
102
+ "hash[#{afi}][#{vrf}] should have 1 rp-address")
103
+ refute(hash[afi][vrf].key?(rp_addr1),
104
+ "hash[#{afi}][#{vrf}] should not contain #{rp_addr1}")
105
+
106
+ vrf = 'red'
107
+ pd3.destroy
108
+ hash = PimRpAddress.rp_addresses
109
+ assert_equal(1, hash[afi][vrf].keys.count,
110
+ "hash[#{afi}][#{vrf}] should have 1 rp-address")
111
+ refute(hash[afi][vrf].key?(rp_addr1),
112
+ "hash[#{afi}][#{vrf}] should not contain #{rp_addr1}")
113
+
114
+ vrf = 'black'
115
+ pd5.destroy
116
+ pd7.destroy
117
+ hash = PimRpAddress.rp_addresses
118
+ assert_equal(1, hash[afi][vrf].keys.count,
119
+ "hash[#{afi}][#{vrf}] should have 1 rp-address")
120
+ refute(hash[afi][vrf].key?([rp_addr1]),
121
+ "hash[#{afi}][#{vrf}] should not contain [#{rp_addr1}]")
122
+ pd2.destroy
123
+ pd4.destroy
124
+ pd6.destroy
125
+ hash = PimRpAddress.rp_addresses
126
+ assert_empty(hash[afi], 'hash[#{afi}] is not empty')
127
+ end
128
+
129
+ # Tests PimRpAddress.rp_addresses
130
+ #------------------------------------------
131
+ def test_all_rp_addrs
132
+ %w(ipv4).each do |afi|
133
+ all_rp_addrs(afi)
134
+ end
135
+ end
136
+
137
+ # Creates single invalid rp address under vrf default
138
+ #---------------------------------------------------
139
+ def create_single_invalid_rpaddr_single_vrf(afi)
140
+ rp_addr = '256.256.256.256'
141
+ assert_raises(CliError) do
142
+ PimRpAddress.new(afi, 'default', rp_addr)
143
+ end
144
+ end
145
+
146
+ # Tests single invalid rp address under vrf default
147
+ #---------------------------------------------------
148
+ def test_single_invalid_rpaddr_single_vrf
149
+ %w(ipv4).each do |afi|
150
+ create_single_invalid_rpaddr_single_vrf(afi)
151
+ end
152
+ end
153
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2015 Cisco and/or its affiliates.
1
+ # Copyright (c) 2015-2016 Cisco and/or its affiliates.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -181,7 +181,7 @@ class TestPlatform < CiscoTestCase
181
181
  vir_hsh_hsh = {}
182
182
  unless vir_arr.nil?
183
183
  vir_arr.each do |serv|
184
- # rubocop:disable Style/AlignHash, Style/ExtraSpacing
184
+ # rubocop:disable Style/AlignHash
185
185
  vir_hsh_hsh[serv['name']] = {
186
186
  'package_info' => { 'name' => serv['package_name'],
187
187
  'path' => serv['ova_path'],
@@ -201,7 +201,7 @@ class TestPlatform < CiscoTestCase
201
201
  'cpu' => serv['cpu_reservation'],
202
202
  },
203
203
  }
204
- # rubocop:enable Style/AlignHash, Style/ExtraSpacing
204
+ # rubocop:enable Style/AlignHash
205
205
  end
206
206
  end
207
207
  assert_equal(vir_hsh_hsh, Platform.virtual_services)
@@ -0,0 +1,202 @@
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/portchannel_global'
17
+
18
+ # TestX__CLASS_NAME__X - Minitest for X__CLASS_NAME__X node utility class
19
+ class TestPortchannelGlobal < CiscoTestCase
20
+ # TESTS
21
+
22
+ DEFAULT_NAME = 'default'
23
+
24
+ def setup
25
+ super
26
+ config 'no port-channel load-balance' unless n6k_platform?
27
+ config 'no port-channel load-balance ethernet' unless
28
+ n9k_platform? || n7k_platform?
29
+ end
30
+
31
+ def teardown
32
+ config 'no port-channel load-balance' unless n6k_platform?
33
+ config 'no port-channel load-balance ethernet' unless
34
+ n9k_platform? || n7k_platform?
35
+ super
36
+ end
37
+
38
+ def n3k_in_n3k_mode?
39
+ return unless /N3/ =~ node.product_id
40
+ mode = config('show system switch-mode')
41
+ # note: an n3k in n9k mode displays: 'system switch-mode n9k'
42
+ patterns = ['system switch-mode n3k',
43
+ 'Switch mode configuration is not not applicable']
44
+ mode[Regexp.union(patterns)] ? true : false
45
+ end
46
+
47
+ def n7k_platform?
48
+ /N7/ =~ node.product_id
49
+ end
50
+
51
+ def n9k_platform?
52
+ /N(3|9)/ =~ node.product_id
53
+ end
54
+
55
+ def n6k_platform?
56
+ /N(5|6)/ =~ node.product_id
57
+ end
58
+
59
+ def create_portchannel_global(name=DEFAULT_NAME)
60
+ PortChannelGlobal.new(name)
61
+ end
62
+
63
+ def test_get_hash_distribution
64
+ skip('Platform does not support this property') if n6k_platform? ||
65
+ n9k_platform?
66
+ @global = create_portchannel_global
67
+ @global.hash_distribution = 'fixed'
68
+ assert_equal('fixed', @global.hash_distribution)
69
+ @global.hash_distribution =
70
+ @global.default_hash_distribution
71
+ assert_equal(@global.default_hash_distribution,
72
+ @global.hash_distribution)
73
+ end
74
+
75
+ def test_get_set_load_defer
76
+ skip('Platform does not support this property') if n6k_platform? ||
77
+ n9k_platform?
78
+ @global = create_portchannel_global
79
+ @global.load_defer = 1000
80
+ assert_equal(1000, @global.load_defer)
81
+ @global.load_defer =
82
+ @global.default_load_defer
83
+ assert_equal(@global.default_load_defer,
84
+ @global.load_defer)
85
+ end
86
+
87
+ def test_get_set_resilient
88
+ skip('Platform does not support this property') if n6k_platform? ||
89
+ n7k_platform?
90
+ @global = create_portchannel_global
91
+ @global.resilient = true
92
+ assert_equal(true, @global.resilient)
93
+ @global.resilient = @global.default_resilient
94
+ assert_equal(@global.default_resilient, @global.resilient)
95
+ end
96
+
97
+ def test_get_set_port_channel_load_balance_sym_concat_rot
98
+ skip('Platform does not support this property') if
99
+ n6k_platform? || n7k_platform? || n3k_in_n3k_mode?
100
+ @global = create_portchannel_global
101
+ @global.send(:port_channel_load_balance=,
102
+ 'src-dst', 'ip-l4port', nil, nil, true, true, 4)
103
+ assert_equal('src-dst',
104
+ @global.bundle_select)
105
+ assert_equal('ip-l4port',
106
+ @global.bundle_hash)
107
+ assert_equal(true, @global.symmetry)
108
+ assert_equal(true, @global.concatenation)
109
+ assert_equal(4, @global.rotate)
110
+ @global.send(
111
+ :port_channel_load_balance=,
112
+ @global.default_bundle_select,
113
+ @global.default_bundle_hash,
114
+ nil,
115
+ nil,
116
+ @global.default_symmetry,
117
+ @global.default_concatenation,
118
+ @global.default_rotate)
119
+ assert_equal(
120
+ @global.default_bundle_select,
121
+ @global.bundle_select)
122
+ assert_equal(
123
+ @global.default_bundle_hash,
124
+ @global.bundle_hash)
125
+ assert_equal(
126
+ @global.default_symmetry,
127
+ @global.symmetry)
128
+ assert_equal(
129
+ @global.default_concatenation,
130
+ @global.concatenation)
131
+ assert_equal(@global.default_rotate,
132
+ @global.rotate)
133
+ end
134
+
135
+ def test_get_set_port_channel_load_balance_hash_poly
136
+ skip('Platform does not support this property') if n7k_platform? ||
137
+ n9k_platform?
138
+ @global = create_portchannel_global
139
+ @global.send(:port_channel_load_balance=,
140
+ 'src-dst', 'ip-only', 'CRC10c', nil, nil, nil, nil)
141
+ assert_equal('src-dst',
142
+ @global.bundle_select)
143
+ assert_equal('ip-only',
144
+ @global.bundle_hash)
145
+ assert_equal('CRC10c', @global.hash_poly)
146
+ @global.send(:port_channel_load_balance=,
147
+ 'dst', 'mac', 'CRC10a', nil, nil, nil, nil)
148
+ assert_equal('dst',
149
+ @global.bundle_select)
150
+ assert_equal('mac',
151
+ @global.bundle_hash)
152
+ assert_equal('CRC10a', @global.hash_poly)
153
+ @global.send(
154
+ :port_channel_load_balance=,
155
+ @global.default_bundle_select,
156
+ @global.default_bundle_hash,
157
+ @global.default_hash_poly,
158
+ nil, nil, nil, nil)
159
+ assert_equal(
160
+ @global.default_bundle_select,
161
+ @global.bundle_select)
162
+ assert_equal(
163
+ @global.default_bundle_hash,
164
+ @global.bundle_hash)
165
+ assert_equal(@global.default_hash_poly,
166
+ @global.hash_poly)
167
+ end
168
+
169
+ def test_get_set_port_channel_load_balance_asym_rot
170
+ skip('Platform does not support this property') if n6k_platform? ||
171
+ n9k_platform?
172
+ @global = create_portchannel_global
173
+ @global.send(:port_channel_load_balance=,
174
+ 'src-dst', 'ip-vlan', nil, true, nil, nil, 4)
175
+ assert_equal('src-dst',
176
+ @global.bundle_select)
177
+ assert_equal('ip-vlan',
178
+ @global.bundle_hash)
179
+ assert_equal(true, @global.asymmetric)
180
+ assert_equal(4, @global.rotate)
181
+ @global.send(
182
+ :port_channel_load_balance=,
183
+ @global.default_bundle_select,
184
+ @global.default_bundle_hash,
185
+ nil,
186
+ @global.default_asymmetric,
187
+ nil,
188
+ nil,
189
+ @global.default_rotate)
190
+ assert_equal(
191
+ @global.default_bundle_select,
192
+ @global.bundle_select)
193
+ assert_equal(
194
+ @global.default_bundle_hash,
195
+ @global.bundle_hash)
196
+ assert_equal(
197
+ @global.default_asymmetric,
198
+ @global.asymmetric)
199
+ assert_equal(@global.default_rotate,
200
+ @global.rotate)
201
+ end
202
+ end
@@ -1,7 +1,7 @@
1
1
  #
2
2
  # Minitest for RadiusGlobal 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 RadiusServer 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.
@@ -35,24 +35,25 @@ class TestRadiusServer < CiscoTestCase
35
35
  def no_radiusserver
36
36
  # Turn the feature off for a clean test.
37
37
  config('no radius-server host 8.8.8.8',
38
- 'no radius-server host 9.9.9.9')
38
+ 'no radius-server host 2004::3',
39
+ 'no radius-server host 2005::7')
39
40
  end
40
41
 
41
42
  # TESTS
42
43
 
43
- def test_radiusserver_create_destroy_single
44
+ def test_create_destroy_single
44
45
  id = '8.8.8.8'
45
46
  refute_includes(Cisco::RadiusServer.radiusservers, id)
46
47
 
47
48
  server = Cisco::RadiusServer.new(id, true)
48
49
  assert_includes(Cisco::RadiusServer.radiusservers, id)
49
- assert_equal(Cisco::RadiusServer.radiusservers[id], server)
50
+ assert_equal(server, Cisco::RadiusServer.radiusservers[id])
50
51
 
51
52
  # Default checking
52
- assert_equal(server.acct_port, server.default_acct_port)
53
- assert_equal(server.auth_port, server.default_auth_port)
54
- assert_equal(server.accounting, server.default_accounting)
55
- assert_equal(server.authentication, server.default_authentication)
53
+ assert_equal(server.default_acct_port, server.acct_port)
54
+ assert_equal(server.default_auth_port, server.auth_port)
55
+ assert_equal(server.default_accounting, server.accounting)
56
+ assert_equal(server.default_authentication, server.authentication)
56
57
 
57
58
  server.accounting = true
58
59
  assert(Cisco::RadiusServer.radiusservers[id].accounting)
@@ -61,30 +62,72 @@ class TestRadiusServer < CiscoTestCase
61
62
  assert(Cisco::RadiusServer.radiusservers[id].authentication)
62
63
 
63
64
  server.acct_port = 44
64
- assert_equal(Cisco::RadiusServer.radiusservers[id].acct_port,
65
- 44)
65
+ assert_equal(44, Cisco::RadiusServer.radiusservers[id].acct_port)
66
66
 
67
67
  server.auth_port = 55
68
- assert_equal(Cisco::RadiusServer.radiusservers[id].auth_port,
69
- 55)
68
+ assert_equal(55, Cisco::RadiusServer.radiusservers[id].auth_port)
70
69
 
71
70
  server.retransmit_count = 3
72
- assert_equal(Cisco::RadiusServer.radiusservers[id].retransmit_count,
73
- 3)
71
+ assert_equal(3, Cisco::RadiusServer.radiusservers[id].retransmit_count)
74
72
 
75
73
  server.key_set('44444444', nil)
76
- assert_equal(Cisco::RadiusServer.radiusservers[id].key,
77
- '44444444')
74
+ assert_equal('44444444', Cisco::RadiusServer.radiusservers[id].key)
78
75
 
79
76
  # Setting back to default and re-checking
80
77
  server.acct_port = server.default_acct_port
81
78
  server.auth_port = server.default_auth_port
82
79
  server.accounting = server.default_accounting
83
80
  server.authentication = server.default_authentication
84
- assert_equal(server.acct_port, server.default_acct_port)
85
- assert_equal(server.auth_port, server.default_auth_port)
86
- assert_equal(server.accounting, server.default_accounting)
87
- assert_equal(server.authentication, server.default_authentication)
81
+ assert_equal(server.default_acct_port, server.acct_port)
82
+ assert_equal(server.default_auth_port, server.auth_port)
83
+ assert_equal(server.default_accounting, server.accounting)
84
+ assert_equal(server.default_authentication, server.authentication)
85
+
86
+ server.destroy
87
+ refute_includes(Cisco::RadiusServer.radiusservers, id)
88
+ end
89
+
90
+ def test_create_destroy_single_ipv6
91
+ id = '2004::3'
92
+ refute_includes(Cisco::RadiusServer.radiusservers, id)
93
+
94
+ server = Cisco::RadiusServer.new(id, true)
95
+ assert_includes(Cisco::RadiusServer.radiusservers, id)
96
+ assert_equal(server, Cisco::RadiusServer.radiusservers[id])
97
+
98
+ # Default checking
99
+ assert_equal(server.default_acct_port, server.acct_port)
100
+ assert_equal(server.default_auth_port, server.auth_port)
101
+ assert_equal(server.default_accounting, server.accounting)
102
+ assert_equal(server.default_authentication, server.authentication)
103
+
104
+ server.accounting = true
105
+ assert(Cisco::RadiusServer.radiusservers[id].accounting)
106
+
107
+ server.authentication = true
108
+ assert(Cisco::RadiusServer.radiusservers[id].authentication)
109
+
110
+ server.acct_port = 44
111
+ assert_equal(44, Cisco::RadiusServer.radiusservers[id].acct_port)
112
+
113
+ server.auth_port = 55
114
+ assert_equal(55, Cisco::RadiusServer.radiusservers[id].auth_port)
115
+
116
+ server.retransmit_count = 3
117
+ assert_equal(3, Cisco::RadiusServer.radiusservers[id].retransmit_count)
118
+
119
+ server.key_set('44444444', nil)
120
+ assert_equal('44444444', Cisco::RadiusServer.radiusservers[id].key)
121
+
122
+ # Setting back to default and re-checking
123
+ server.acct_port = server.default_acct_port
124
+ server.auth_port = server.default_auth_port
125
+ server.accounting = server.default_accounting
126
+ server.authentication = server.default_authentication
127
+ assert_equal(server.default_acct_port, server.acct_port)
128
+ assert_equal(server.default_auth_port, server.auth_port)
129
+ assert_equal(server.default_accounting, server.accounting)
130
+ assert_equal(server.default_authentication, server.authentication)
88
131
 
89
132
  server.destroy
90
133
  refute_includes(Cisco::RadiusServer.radiusservers, id)
@@ -92,26 +135,27 @@ class TestRadiusServer < CiscoTestCase
92
135
 
93
136
  def test_radiusserver_create_destroy_multiple
94
137
  id = '8.8.8.8'
95
- id2 = '9.9.9.9'
138
+ id2 = '2005::7'
139
+
96
140
  refute_includes(Cisco::RadiusServer.radiusservers, id)
97
141
  refute_includes(Cisco::RadiusServer.radiusservers, id2)
98
142
 
99
143
  server = Cisco::RadiusServer.new(id, true)
100
144
  server2 = Cisco::RadiusServer.new(id2, true)
101
145
  assert_includes(Cisco::RadiusServer.radiusservers, id)
102
- assert_equal(Cisco::RadiusServer.radiusservers[id], server)
146
+ assert_equal(server, Cisco::RadiusServer.radiusservers[id])
103
147
  assert_includes(Cisco::RadiusServer.radiusservers, id2)
104
- assert_equal(Cisco::RadiusServer.radiusservers[id2], server2)
148
+ assert_equal(server2, Cisco::RadiusServer.radiusservers[id2])
105
149
 
106
150
  # Default checking
107
- assert_equal(server.acct_port, server.default_acct_port)
108
- assert_equal(server.auth_port, server.default_auth_port)
109
- assert_equal(server.accounting, server.default_accounting)
110
- assert_equal(server.authentication, server.default_authentication)
111
- assert_equal(server2.acct_port, server2.default_acct_port)
112
- assert_equal(server2.auth_port, server2.default_auth_port)
113
- assert_equal(server2.accounting, server2.default_accounting)
114
- assert_equal(server2.authentication, server2.default_authentication)
151
+ assert_equal(server.default_acct_port, server.acct_port)
152
+ assert_equal(server.default_auth_port, server.auth_port)
153
+ assert_equal(server.default_accounting, server.accounting)
154
+ assert_equal(server.default_authentication, server.authentication)
155
+ assert_equal(server2.default_acct_port, server2.acct_port)
156
+ assert_equal(server2.default_auth_port, server2.auth_port)
157
+ assert_equal(server2.default_accounting, server2.accounting)
158
+ assert_equal(server2.default_authentication, server2.authentication)
115
159
 
116
160
  server.accounting = true
117
161
  assert(Cisco::RadiusServer.radiusservers[id].accounting)
@@ -120,22 +164,17 @@ class TestRadiusServer < CiscoTestCase
120
164
  assert(Cisco::RadiusServer.radiusservers[id].authentication)
121
165
 
122
166
  server.acct_port = 44
123
- assert_equal(Cisco::RadiusServer.radiusservers[id].acct_port,
124
- 44)
167
+ assert_equal(44, Cisco::RadiusServer.radiusservers[id].acct_port)
125
168
 
126
169
  server.auth_port = 55
127
- assert_equal(Cisco::RadiusServer.radiusservers[id].auth_port,
128
- 55)
170
+ assert_equal(55, Cisco::RadiusServer.radiusservers[id].auth_port)
129
171
 
130
172
  server.retransmit_count = 3
131
- assert_equal(Cisco::RadiusServer.radiusservers[id].retransmit_count,
132
- 3)
173
+ assert_equal(3, Cisco::RadiusServer.radiusservers[id].retransmit_count)
133
174
 
134
175
  server.key_set('44444444', nil)
135
- assert_equal(Cisco::RadiusServer.radiusservers[id].key,
136
- '44444444')
137
- assert_equal(server.key,
138
- '44444444')
176
+ assert_equal('44444444', Cisco::RadiusServer.radiusservers[id].key)
177
+ assert_equal('44444444', server.key)
139
178
 
140
179
  server2.accounting = true
141
180
  assert(Cisco::RadiusServer.radiusservers[id2].accounting)
@@ -144,20 +183,16 @@ class TestRadiusServer < CiscoTestCase
144
183
  assert(Cisco::RadiusServer.radiusservers[id2].authentication)
145
184
 
146
185
  server2.acct_port = 44
147
- assert_equal(Cisco::RadiusServer.radiusservers[id2].acct_port,
148
- 44)
186
+ assert_equal(44, Cisco::RadiusServer.radiusservers[id2].acct_port)
149
187
 
150
188
  server2.auth_port = 55
151
- assert_equal(Cisco::RadiusServer.radiusservers[id2].auth_port,
152
- 55)
189
+ assert_equal(55, Cisco::RadiusServer.radiusservers[id2].auth_port)
153
190
 
154
191
  server2.retransmit_count = 3
155
- assert_equal(Cisco::RadiusServer.radiusservers[id2].retransmit_count,
156
- 3)
192
+ assert_equal(3, Cisco::RadiusServer.radiusservers[id2].retransmit_count)
157
193
 
158
194
  server2.key_set('44444444', nil)
159
- assert_equal(Cisco::RadiusServer.radiusservers[id2].key,
160
- '44444444')
195
+ assert_equal('44444444', Cisco::RadiusServer.radiusservers[id2].key)
161
196
 
162
197
  # Setting back to default and re-checking
163
198
  server.acct_port = server.default_acct_port
@@ -168,14 +203,14 @@ class TestRadiusServer < CiscoTestCase
168
203
  server2.auth_port = server2.default_auth_port
169
204
  server2.accounting = server2.default_accounting
170
205
  server2.authentication = server2.default_authentication
171
- assert_equal(server.acct_port, server.default_acct_port)
172
- assert_equal(server.auth_port, server.default_auth_port)
173
- assert_equal(server.accounting, server.default_accounting)
174
- assert_equal(server.authentication, server.default_authentication)
175
- assert_equal(server2.acct_port, server2.default_acct_port)
176
- assert_equal(server2.auth_port, server2.default_auth_port)
177
- assert_equal(server2.accounting, server2.default_accounting)
178
- assert_equal(server2.authentication, server2.default_authentication)
206
+ assert_equal(server.default_acct_port, server.acct_port)
207
+ assert_equal(server.default_auth_port, server.auth_port)
208
+ assert_equal(server.default_accounting, server.accounting)
209
+ assert_equal(server.default_authentication, server.authentication)
210
+ assert_equal(server2.default_acct_port, server2.acct_port)
211
+ assert_equal(server2.default_auth_port, server2.auth_port)
212
+ assert_equal(server2.default_accounting, server2.accounting)
213
+ assert_equal(server2.default_authentication, server2.authentication)
179
214
 
180
215
  server.destroy
181
216
  server2.destroy