cisco_node_utils 1.2.0 → 1.3.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 (255) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +13 -0
  5. data/.travis.yml +4 -1
  6. data/CHANGELOG.md +81 -2
  7. data/CONTRIBUTING.md +2 -17
  8. data/Gemfile +5 -0
  9. data/README.md +92 -47
  10. data/Rakefile +23 -1
  11. data/bin/git/hooks/hook_lib +7 -0
  12. data/bin/git/hooks/pre-commit/check_unstaged_changes +18 -0
  13. data/bin/git/hooks/pre-commit/rubocop +7 -2
  14. data/bin/git/hooks/pre-commit/validate-diffs +18 -4
  15. data/bin/git/hooks/pre-commit/validate-yaml +18 -0
  16. data/bin/git/update-hooks +64 -6
  17. data/cisco_node_utils.gemspec +9 -6
  18. data/docs/README-develop-best-practices.md +149 -50
  19. data/docs/README-develop-node-utils-APIs.md +92 -42
  20. data/docs/README-maintainers.md +7 -4
  21. data/docs/README-test-execution.md +57 -0
  22. data/docs/cisco_node_utils.yaml.example +30 -0
  23. data/docs/template-router.rb +4 -0
  24. data/ext/mkrf_conf.rb +63 -0
  25. data/lib/.rubocop.yml +2 -2
  26. data/lib/cisco_node_utils.rb +5 -0
  27. data/lib/cisco_node_utils/aaa_authentication_login.rb +5 -6
  28. data/lib/cisco_node_utils/aaa_authorization_service.rb +1 -1
  29. data/lib/cisco_node_utils/ace.rb +165 -12
  30. data/lib/cisco_node_utils/acl.rb +2 -1
  31. data/lib/cisco_node_utils/bgp.rb +184 -21
  32. data/lib/cisco_node_utils/bgp_af.rb +94 -249
  33. data/lib/cisco_node_utils/bgp_neighbor.rb +94 -14
  34. data/lib/cisco_node_utils/bgp_neighbor_af.rb +75 -8
  35. data/lib/cisco_node_utils/bridge_domain.rb +183 -0
  36. data/lib/cisco_node_utils/bridge_domain_vni.rb +206 -0
  37. data/lib/cisco_node_utils/cisco_cmn_utils.rb +85 -2
  38. data/lib/cisco_node_utils/client.rb +35 -0
  39. data/lib/cisco_node_utils/client/client.rb +234 -0
  40. data/lib/cisco_node_utils/client/grpc.rb +33 -0
  41. data/lib/cisco_node_utils/client/grpc/client.rb +311 -0
  42. data/lib/cisco_node_utils/client/grpc/ems.proto +148 -0
  43. data/lib/cisco_node_utils/client/grpc/ems.rb +111 -0
  44. data/lib/cisco_node_utils/client/grpc/ems_services.rb +49 -0
  45. data/lib/cisco_node_utils/client/nxapi.rb +31 -0
  46. data/lib/cisco_node_utils/client/nxapi/client.rb +305 -0
  47. data/lib/cisco_node_utils/client/utils.rb +164 -0
  48. data/lib/cisco_node_utils/cmd_ref/README_YAML.md +222 -254
  49. data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +11 -8
  50. data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +22 -15
  51. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +11 -8
  52. data/lib/cisco_node_utils/cmd_ref/acl.yaml +21 -16
  53. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +239 -109
  54. data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +114 -55
  55. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +76 -52
  56. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +106 -62
  57. data/lib/cisco_node_utils/cmd_ref/bridge_domain.yaml +71 -0
  58. data/lib/cisco_node_utils/cmd_ref/bridge_domain_vni.yaml +33 -0
  59. data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +35 -14
  60. data/lib/cisco_node_utils/cmd_ref/encapsulation.yaml +25 -0
  61. data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +23 -17
  62. data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +94 -83
  63. data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +22 -17
  64. data/lib/cisco_node_utils/cmd_ref/feature.yaml +76 -26
  65. data/lib/cisco_node_utils/cmd_ref/images.yaml +3 -2
  66. data/lib/cisco_node_utils/cmd_ref/interface.yaml +381 -153
  67. data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +21 -11
  68. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +21 -21
  69. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +30 -21
  70. data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +18 -13
  71. data/lib/cisco_node_utils/cmd_ref/inventory.yaml +26 -31
  72. data/lib/cisco_node_utils/cmd_ref/itd_device_group.yaml +83 -0
  73. data/lib/cisco_node_utils/cmd_ref/itd_service.yaml +119 -0
  74. data/lib/cisco_node_utils/cmd_ref/memory.yaml +17 -6
  75. data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +10 -3
  76. data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +17 -5
  77. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +33 -29
  78. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +12 -10
  79. data/lib/cisco_node_utils/cmd_ref/pim.yaml +16 -19
  80. data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +40 -25
  81. data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +17 -12
  82. data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +71 -35
  83. data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +10 -5
  84. data/lib/cisco_node_utils/cmd_ref/show_system.yaml +6 -2
  85. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +47 -43
  86. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +13 -11
  87. data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +4 -2
  88. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +23 -21
  89. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +26 -22
  90. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +19 -17
  91. data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +18 -6
  92. data/lib/cisco_node_utils/cmd_ref/stp_global.yaml +234 -0
  93. data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +24 -9
  94. data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +5 -3
  95. data/lib/cisco_node_utils/cmd_ref/system.yaml +4 -3
  96. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +22 -20
  97. data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +27 -15
  98. data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +45 -16
  99. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +21 -11
  100. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +3 -2
  101. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +60 -32
  102. data/lib/cisco_node_utils/cmd_ref/vpc.yaml +118 -101
  103. data/lib/cisco_node_utils/cmd_ref/vrf.yaml +54 -58
  104. data/lib/cisco_node_utils/cmd_ref/vrf_af.yaml +118 -0
  105. data/lib/cisco_node_utils/cmd_ref/vtp.yaml +19 -25
  106. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +28 -18
  107. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +34 -17
  108. data/lib/cisco_node_utils/cmd_ref/yum.yaml +6 -4
  109. data/lib/cisco_node_utils/command_reference.rb +261 -142
  110. data/lib/cisco_node_utils/constants.rb +33 -0
  111. data/lib/cisco_node_utils/encapsulation.rb +112 -0
  112. data/lib/cisco_node_utils/environment.rb +102 -0
  113. data/lib/cisco_node_utils/evpn_vni.rb +5 -3
  114. data/lib/cisco_node_utils/exceptions.rb +111 -0
  115. data/lib/cisco_node_utils/fabricpath_global.rb +52 -35
  116. data/lib/cisco_node_utils/fabricpath_topology.rb +44 -57
  117. data/lib/cisco_node_utils/feature.rb +165 -3
  118. data/lib/cisco_node_utils/interface.rb +1051 -260
  119. data/lib/cisco_node_utils/interface_channel_group.rb +11 -10
  120. data/lib/cisco_node_utils/interface_ospf.rb +1 -2
  121. data/lib/cisco_node_utils/interface_portchannel.rb +4 -12
  122. data/lib/cisco_node_utils/interface_service_vni.rb +7 -7
  123. data/lib/cisco_node_utils/itd_device_group.rb +248 -0
  124. data/lib/cisco_node_utils/itd_device_group_node.rb +144 -0
  125. data/lib/cisco_node_utils/itd_service.rb +523 -0
  126. data/lib/cisco_node_utils/logger.rb +75 -0
  127. data/lib/cisco_node_utils/node.rb +62 -192
  128. data/lib/cisco_node_utils/node_util.rb +56 -10
  129. data/lib/cisco_node_utils/overlay_global.rb +2 -2
  130. data/lib/cisco_node_utils/pim.rb +2 -13
  131. data/lib/cisco_node_utils/pim_group_list.rb +1 -1
  132. data/lib/cisco_node_utils/pim_rp_address.rb +1 -1
  133. data/lib/cisco_node_utils/platform.rb +52 -21
  134. data/lib/cisco_node_utils/portchannel_global.rb +89 -19
  135. data/lib/cisco_node_utils/radius_server.rb +168 -37
  136. data/lib/cisco_node_utils/router_ospf.rb +20 -35
  137. data/lib/cisco_node_utils/router_ospf_vrf.rb +4 -4
  138. data/lib/cisco_node_utils/snmpserver.rb +1 -6
  139. data/lib/cisco_node_utils/snmpuser.rb +6 -4
  140. data/lib/cisco_node_utils/stp_global.rb +676 -0
  141. data/lib/cisco_node_utils/syslog_server.rb +77 -18
  142. data/lib/cisco_node_utils/syslog_settings.rb +1 -1
  143. data/lib/cisco_node_utils/tacacs_server_group.rb +8 -4
  144. data/lib/cisco_node_utils/tacacs_server_host.rb +115 -25
  145. data/lib/cisco_node_utils/vdc.rb +12 -0
  146. data/lib/cisco_node_utils/version.rb +1 -1
  147. data/lib/cisco_node_utils/vlan.rb +147 -29
  148. data/lib/cisco_node_utils/vpc.rb +55 -3
  149. data/lib/cisco_node_utils/vrf.rb +72 -11
  150. data/lib/cisco_node_utils/vrf_af.rb +114 -29
  151. data/lib/cisco_node_utils/vtp.rb +34 -52
  152. data/lib/cisco_node_utils/vxlan_vtep.rb +34 -8
  153. data/lib/cisco_node_utils/vxlan_vtep_vni.rb +36 -4
  154. data/lib/minitest/environment_plugin.rb +31 -0
  155. data/lib/minitest/log_level_plugin.rb +41 -0
  156. data/spec/client_spec.rb +7 -0
  157. data/spec/environment_spec.rb +263 -0
  158. data/spec/grpc_client_spec.rb +23 -0
  159. data/spec/isolate/all_clients_spec.rb +9 -0
  160. data/spec/isolate/grpc_only_spec.rb +16 -0
  161. data/spec/isolate/no_clients_spec.rb +26 -0
  162. data/spec/isolate/nxapi_only_spec.rb +16 -0
  163. data/spec/nxapi_client_spec.rb +42 -0
  164. data/spec/schema.yaml +75 -0
  165. data/spec/shared_examples_for_clients.rb +14 -0
  166. data/spec/spec_helper.rb +91 -0
  167. data/spec/whitespace_spec.rb +10 -0
  168. data/spec/yaml_spec.rb +42 -0
  169. data/tests/.rubocop.yml +2 -2
  170. data/tests/CSCuxdublin-1.0.0-7.0.3.I3.1.lib32_n9000.rpm +0 -0
  171. data/tests/basetest.rb +96 -36
  172. data/tests/ciscotest.rb +220 -12
  173. data/tests/cmd_config.yaml +71 -49
  174. data/tests/cmd_config_invalid.yaml +1 -1
  175. data/tests/test_aaa_authentication_login.rb +1 -0
  176. data/tests/test_aaa_authentication_login_service.rb +9 -0
  177. data/tests/test_aaa_authorization_service.rb +173 -367
  178. data/tests/test_ace.rb +171 -100
  179. data/tests/test_acl.rb +10 -1
  180. data/tests/test_bgp_af.rb +395 -728
  181. data/tests/test_bgp_neighbor.rb +274 -115
  182. data/tests/test_bgp_neighbor_af.rb +178 -77
  183. data/tests/test_bridge_domain.rb +191 -0
  184. data/tests/test_bridge_domain_vni.rb +116 -0
  185. data/tests/test_client_utils.rb +111 -0
  186. data/tests/test_command_config.rb +9 -5
  187. data/tests/test_command_reference.rb +380 -102
  188. data/tests/test_dns_domain.rb +13 -3
  189. data/tests/test_domain_name.rb +13 -3
  190. data/tests/test_encapsulation.rb +77 -0
  191. data/tests/test_evpn_vni.rb +25 -7
  192. data/tests/test_fabricpath_global.rb +167 -163
  193. data/tests/test_fabricpath_topology.rb +12 -33
  194. data/tests/test_feature.rb +215 -0
  195. data/tests/test_grpc.rb +166 -0
  196. data/tests/test_interface.rb +585 -344
  197. data/tests/test_interface_bdi.rb +80 -0
  198. data/tests/test_interface_channel_group.rb +6 -3
  199. data/tests/test_interface_ospf.rb +26 -24
  200. data/tests/test_interface_portchannel.rb +1 -0
  201. data/tests/test_interface_private_vlan.rb +724 -0
  202. data/tests/test_interface_service_vni.rb +37 -66
  203. data/tests/test_interface_svi.rb +98 -101
  204. data/tests/test_interface_switchport.rb +419 -549
  205. data/tests/test_itd_device_group.rb +145 -0
  206. data/tests/test_itd_device_group_node.rb +199 -0
  207. data/tests/test_itd_service.rb +298 -0
  208. data/tests/test_logger.rb +43 -0
  209. data/tests/test_name_server.rb +11 -2
  210. data/tests/test_node.rb +16 -75
  211. data/tests/test_node_ext.rb +174 -163
  212. data/tests/test_node_util.rb +119 -0
  213. data/tests/test_ntp_config.rb +5 -1
  214. data/tests/test_ntp_server.rb +2 -2
  215. data/tests/test_nxapi.rb +221 -0
  216. data/tests/test_overlay_global.rb +47 -38
  217. data/tests/test_pim.rb +2 -0
  218. data/tests/test_pim_group_list.rb +2 -0
  219. data/tests/test_pim_rp_address.rb +2 -0
  220. data/tests/test_platform.rb +86 -39
  221. data/tests/test_portchannel_global.rb +211 -135
  222. data/tests/test_radius_global.rb +13 -5
  223. data/tests/test_radius_server.rb +256 -104
  224. data/tests/test_radius_server_group.rb +2 -0
  225. data/tests/test_router_bgp.rb +781 -485
  226. data/tests/test_router_ospf.rb +26 -103
  227. data/tests/test_router_ospf_vrf.rb +52 -57
  228. data/tests/test_snmp_notification_receiver.rb +2 -0
  229. data/tests/test_snmpcommunity.rb +2 -0
  230. data/tests/test_snmpgroup.rb +2 -0
  231. data/tests/test_snmpnotification.rb +40 -21
  232. data/tests/test_snmpserver.rb +2 -0
  233. data/tests/test_snmpuser.rb +2 -0
  234. data/tests/test_stp_global.rb +563 -0
  235. data/tests/test_syslog_server.rb +32 -8
  236. data/tests/test_syslog_settings.rb +22 -9
  237. data/tests/test_tacacs_server.rb +32 -27
  238. data/tests/test_tacacs_server_group.rb +100 -45
  239. data/tests/test_tacacs_server_host.rb +135 -43
  240. data/tests/test_vdc.rb +2 -16
  241. data/tests/test_vlan.rb +106 -54
  242. data/tests/test_vlan_mt_full.rb +11 -21
  243. data/tests/test_vlan_private.rb +669 -0
  244. data/tests/test_vpc.rb +312 -159
  245. data/tests/test_vrf.rb +122 -113
  246. data/tests/test_vrf_af.rb +238 -0
  247. data/tests/test_vtp.rb +58 -102
  248. data/tests/test_vxlan_vtep.rb +38 -17
  249. data/tests/test_vxlan_vtep_vni.rb +61 -9
  250. data/tests/test_yum.rb +49 -25
  251. metadata +122 -36
  252. data/lib/cisco_node_utils/cmd_ref/fex.yaml +0 -9
  253. data/lib/cisco_node_utils/cmd_ref/vni.yaml +0 -76
  254. data/lib/cisco_node_utils/vni.rb +0 -227
  255. data/tests/test_vni.rb +0 -106
@@ -0,0 +1,80 @@
1
+ # Copyright (c) 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/interface'
17
+ require_relative '../lib/cisco_node_utils/bridge_domain'
18
+
19
+ include Cisco
20
+
21
+ # TestBdi - Minitest for Interface configuration of BDI interfaces.
22
+ class TestBdi < CiscoTestCase
23
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
24
+ attr_reader :bdi
25
+
26
+ def self.runnable_methods
27
+ # We don't have a separate YAML file to key off, so we check platform
28
+ return super if node.product_id[/N7/]
29
+ remove_method :setup
30
+ remove_method :teardown
31
+ [:unsupported]
32
+ end
33
+
34
+ def unsupported
35
+ skip("Skipping #{self.class}; Bdi interfaces are not supported on the \
36
+ platform")
37
+ end
38
+
39
+ def setup
40
+ super
41
+ remove_all_bdis if @@pre_clean_needed
42
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
43
+ BridgeDomain.new('100')
44
+ @bdi = Interface.new('Bdi100')
45
+ end
46
+
47
+ def remove_all_bdis
48
+ Interface.interfaces.each do |int, obj|
49
+ next unless int[/bdi/i]
50
+ obj.destroy
51
+ end
52
+ remove_all_bridge_domains
53
+ end
54
+
55
+ def teardown
56
+ remove_all_bdis
57
+ super
58
+ end
59
+
60
+ def test_create_and_check_all_properties
61
+ # Check all the default values
62
+ assert_equal(@bdi.default_vrf, @bdi.vrf)
63
+ assert_equal(@bdi.default_ipv4_address, @bdi.ipv4_address)
64
+ assert_equal(@bdi.default_ipv4_netmask_length, @bdi.ipv4_netmask_length)
65
+ address = '8.7.1.1'
66
+ length = 15
67
+
68
+ @bdi.ipv4_addr_mask_set(address, length)
69
+ assert_equal(address, @bdi.ipv4_address,
70
+ 'Error: ipv4 address get value mismatch')
71
+ assert_equal(length, @bdi.ipv4_netmask_length,
72
+ 'Error: ipv4 netmask length get value mismatch')
73
+
74
+ vrf = 'test'
75
+ @bdi.vrf = vrf
76
+ assert_equal(vrf, @bdi.vrf)
77
+ @bdi.vrf = ''
78
+ assert_equal(@bdi.default_vrf, @bdi.vrf)
79
+ end
80
+ end
@@ -23,12 +23,12 @@ class TestInterfaceChannelGroup < CiscoTestCase
23
23
  @intf = InterfaceChannelGroup.new(interfaces[1])
24
24
 
25
25
  # Only pre-clean interface on initial setup
26
- config("default interface #{@intf}") unless @@clean
26
+ interface_cleanup(@intf.name) unless @@clean
27
27
  @@clean = true # rubocop:disable Style/ClassVars
28
28
  end
29
29
 
30
30
  def teardown
31
- config("default interface #{@intf}")
31
+ interface_cleanup(@intf.name)
32
32
  end
33
33
 
34
34
  def test_channel_group
@@ -44,6 +44,9 @@ class TestInterfaceChannelGroup < CiscoTestCase
44
44
  group = i.default_channel_group
45
45
  i.channel_group = group
46
46
  assert_equal(group, i.channel_group)
47
+ rescue Cisco::UnsupportedError => e
48
+ # Some platforms only support channel-group with certain software versions
49
+ skip(e.to_s)
47
50
  end
48
51
 
49
52
  def test_description
@@ -69,6 +72,6 @@ class TestInterfaceChannelGroup < CiscoTestCase
69
72
  refute(i.shutdown)
70
73
 
71
74
  i.shutdown = i.default_shutdown
72
- assert(i.shutdown)
75
+ assert_equal(i.default_shutdown, i.shutdown)
73
76
  end
74
77
  end
@@ -21,6 +21,8 @@ include Cisco
21
21
 
22
22
  # TestInterfaceOspf - Minitest for InterfaceOspf node utility class.
23
23
  class TestInterfaceOspf < CiscoTestCase
24
+ @skip_unless_supported = 'interface_ospf'
25
+
24
26
  def setup
25
27
  super
26
28
  config 'no feature ospf'
@@ -83,7 +85,7 @@ class TestInterfaceOspf < CiscoTestCase
83
85
  config('no interface loopback12')
84
86
  end
85
87
 
86
- def test_interfaceospf_collection_empty
88
+ def test_collection_empty
87
89
  config('no feature ospf', 'feature ospf', 'router ospf TestOSPF')
88
90
 
89
91
  routers = RouterOspf.routers()
@@ -94,7 +96,7 @@ class TestInterfaceOspf < CiscoTestCase
94
96
  end
95
97
  end
96
98
 
97
- def test_interfaceospf_collection_not_empty
99
+ def test_collection_not_empty
98
100
  ifname1 = interfaces[1].downcase
99
101
  ifname2 = interfaces[2].downcase
100
102
  ospf1 = 'TestOSPF'
@@ -152,13 +154,13 @@ class TestInterfaceOspf < CiscoTestCase
152
154
  end
153
155
  end
154
156
 
155
- def test_interfaceospf_create_routerospf_nil
157
+ def test_create_routerospf_nil
156
158
  assert_raises(TypeError) do
157
159
  InterfaceOspf.new(interfaces[0], nil, '0.0.0.0')
158
160
  end
159
161
  end
160
162
 
161
- def test_interfaceospf_create_interface_name_zero_length
163
+ def test_create_interface_name_zero_length
162
164
  name = 'ospfTest'
163
165
  ospf = RouterOspf.new(name)
164
166
  assert_raises(ArgumentError) do
@@ -166,7 +168,7 @@ class TestInterfaceOspf < CiscoTestCase
166
168
  end
167
169
  end
168
170
 
169
- def test_interfaceospf_create_interface_area_zero_length
171
+ def test_create_interface_area_zero_length
170
172
  name = 'ospfTest'
171
173
  ospf = RouterOspf.new(name)
172
174
  assert_raises(ArgumentError) do
@@ -189,7 +191,7 @@ class TestInterfaceOspf < CiscoTestCase
189
191
  'Error: area get value mismatch ')
190
192
  end
191
193
 
192
- def test_interfaceospf_destroy
194
+ def test_destroy
193
195
  ifname = interfaces[1]
194
196
  area = '0.0.0.0'
195
197
  ospf = create_routerospf
@@ -219,7 +221,7 @@ class TestInterfaceOspf < CiscoTestCase
219
221
  assert_equal(ospf.name, interface.ospf_name)
220
222
  end
221
223
 
222
- def test_interfaceospf_cost_invalid_range
224
+ def test_cost_invalid_range
223
225
  ospf = create_routerospf
224
226
  interface = create_interfaceospf(ospf)
225
227
  # upper range
@@ -232,7 +234,7 @@ class TestInterfaceOspf < CiscoTestCase
232
234
  # end
233
235
  end
234
236
 
235
- def test_interfaceospf_cost
237
+ def test_cost
236
238
  ospf = create_routerospf
237
239
  interface = create_interfaceospf(ospf)
238
240
  cost = 1000
@@ -248,7 +250,7 @@ class TestInterfaceOspf < CiscoTestCase
248
250
  msg: 'Error: default cost set failed')
249
251
  end
250
252
 
251
- def test_interfaceospf_hello_interval_invalid_range
253
+ def test_hello_interval_invalid_range
252
254
  ospf = create_routerospf
253
255
  interface = create_interfaceospf(ospf)
254
256
  # upper range
@@ -261,7 +263,7 @@ class TestInterfaceOspf < CiscoTestCase
261
263
  end
262
264
  end
263
265
 
264
- def test_interfaceospf_hello_interval
266
+ def test_hello_interval
265
267
  ospf = create_routerospf
266
268
  interface = create_interfaceospf(ospf)
267
269
  interval = 90
@@ -278,7 +280,7 @@ class TestInterfaceOspf < CiscoTestCase
278
280
  msg: 'Error: default hello-interval set failed')
279
281
  end
280
282
 
281
- def test_interfaceospf_dead_interval_invalid_range
283
+ def test_dead_interval_invalid_range
282
284
  ospf = create_routerospf
283
285
  interface = create_interfaceospf(ospf)
284
286
 
@@ -295,7 +297,7 @@ class TestInterfaceOspf < CiscoTestCase
295
297
  end
296
298
  end
297
299
 
298
- def test_interfaceospf_dead_interval
300
+ def test_dead_interval
299
301
  ospf = create_routerospf
300
302
  interface = create_interfaceospf(ospf)
301
303
  interval = 150
@@ -312,7 +314,7 @@ class TestInterfaceOspf < CiscoTestCase
312
314
  msg: 'Error: default dead-interval set failed')
313
315
  end
314
316
 
315
- def test_interfaceospf_passive_interface
317
+ def test_passive_interface
316
318
  ospf = create_routerospf
317
319
  interface = create_interfaceospf(ospf)
318
320
 
@@ -329,7 +331,7 @@ class TestInterfaceOspf < CiscoTestCase
329
331
  msg: 'default passive interface set failed')
330
332
  end
331
333
 
332
- def test_interfaceospf_create_valid_multiple
334
+ def test_create_valid_multiple
333
335
  # ospf and interfaces[0]
334
336
  ospf = create_routerospf
335
337
  interface = create_interfaceospf(ospf)
@@ -346,7 +348,7 @@ class TestInterfaceOspf < CiscoTestCase
346
348
  msg: "'ip router ospf #{ospf.name} area #{area}' is not configured")
347
349
  end
348
350
 
349
- def test_interfaceospf_create_multiple_delete_one
351
+ def test_create_multiple_delete_one
350
352
  # ospf and interfaces[0]
351
353
  ospf = create_routerospf
352
354
  interface = create_interfaceospf(ospf)
@@ -387,7 +389,7 @@ class TestInterfaceOspf < CiscoTestCase
387
389
  end
388
390
  # puts "k1: #{k1}, k: #{k}, area #{v1[:area]}"
389
391
  cfg << "ip router ospf #{k} area #{v1[:area]}"
390
- cfg << "ip ospf cost #{v1[:cost]}" unless v1[:cost].nil?
392
+ cfg << "ip ospf cost #{v1[:cost]}" unless v1[:cost] == 0
391
393
  cfg << "ip ospf hello-interval #{v1[:hello]}" unless v1[:hello].nil?
392
394
  cfg << "ip ospf dead-interval #{v1[:dead]}" unless v1[:dead].nil?
393
395
  cfg << 'ip ospf passive-interface' if !v1[:pass].nil? &&
@@ -432,7 +434,7 @@ class TestInterfaceOspf < CiscoTestCase
432
434
  end
433
435
  end
434
436
 
435
- def test_interfaceospf_collection_multiple_interface
437
+ def test_collection_multiple_interface
436
438
  s = config('int port-channel 42', 'descr foo')
437
439
  known_failure = s[/ERROR:.*port channel not present/]
438
440
  refute(known_failure, 'ERROR: port channel not present')
@@ -443,9 +445,9 @@ class TestInterfaceOspf < CiscoTestCase
443
445
  config('no feature ospf',
444
446
  'feature ospf',
445
447
  'feature interface-vlan',
446
- 'default interface interfaces[0]',
447
- 'default interface interfaces[1]',
448
- 'default interface interfaces[2]',
448
+ "default interface #{interfaces[0]}",
449
+ "default interface #{interfaces[1]}",
450
+ "default interface #{interfaces[2]}",
449
451
  )
450
452
 
451
453
  # pre-configure
@@ -490,7 +492,7 @@ class TestInterfaceOspf < CiscoTestCase
490
492
  end # ospf_h each
491
493
  end
492
494
 
493
- def test_interfaceospf_message_digest
495
+ def test_message_digest
494
496
  ospf = create_routerospf
495
497
  interface = create_interfaceospf(ospf)
496
498
 
@@ -510,7 +512,7 @@ class TestInterfaceOspf < CiscoTestCase
510
512
  'Error: message digest is true but should be false (default)')
511
513
  end
512
514
 
513
- def test_interfaceospf_message_digest_key
515
+ def test_message_digest_key
514
516
  ospf = create_routerospf
515
517
  interface = create_interfaceospf(ospf)
516
518
  # auth params
@@ -575,7 +577,7 @@ class TestInterfaceOspf < CiscoTestCase
575
577
  assert_equal(encr, interface.message_digest_encryption_type)
576
578
  end
577
579
 
578
- def test_interfaceospf_message_digest_key_invalid_password
580
+ def test_message_digest_key_invalid_password
579
581
  ospf = create_routerospf
580
582
  interface = create_interfaceospf(ospf)
581
583
 
@@ -596,7 +598,7 @@ class TestInterfaceOspf < CiscoTestCase
596
598
  end
597
599
  end
598
600
 
599
- def test_interfaceospf_nonexistent
601
+ def test_nonexistent
600
602
  # If the interface does exist but the OSPF instance does not, this is OK
601
603
  config('interface loopback122')
602
604
  interface = InterfaceOspf.new('loopback122', 'nonexistentOspf', '0')
@@ -18,6 +18,7 @@ require_relative '../lib/cisco_node_utils/interface_portchannel'
18
18
 
19
19
  # TestX__CLASS_NAME__X - Minitest for X__CLASS_NAME__X node utility class
20
20
  class TestInterfacePortChannel < CiscoTestCase
21
+ @skip_unless_supported = 'interface_portchannel'
21
22
  # TESTS
22
23
 
23
24
  DEFAULT_NAME = 'port-channel134'
@@ -0,0 +1,724 @@
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/interface'
17
+ require_relative '../lib/cisco_node_utils/vlan'
18
+
19
+ include Cisco
20
+
21
+ # TestInterfaceSwitchport
22
+ # Parent class for specific types of switchport tests (below)
23
+ class TestInterfaceSwitchport < CiscoTestCase
24
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
25
+ attr_reader :interface
26
+
27
+ def setup
28
+ super
29
+ @interface = Interface.new(interfaces[0])
30
+ cleanup if @@pre_clean_needed
31
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
32
+ end
33
+
34
+ def teardown
35
+ cleanup
36
+ super
37
+ end
38
+
39
+ def cleanup
40
+ remove_svis
41
+ cleanup_pvlan_intfs
42
+ remove_all_vlans
43
+ config_no_warn('no feature private-vlan', 'no feature vtp')
44
+ end
45
+
46
+ def remove_svis
47
+ Interface.interfaces.each do |name, _i|
48
+ next unless name[/vlan/] || name.match(/^vlan1$/)
49
+ config("no interface #{name}")
50
+ end
51
+ end
52
+
53
+ def cleanup_pvlan_intfs
54
+ pvlan_intfs = Interface.interfaces(:private_vlan_any)
55
+ pvlan_intfs.keys.each { |name| interface_cleanup(name) }
56
+ end
57
+ end
58
+
59
+ # TestSwitchport - general interface switchport tests.
60
+ class TestSwitchport < TestInterfaceSwitchport
61
+ def test_interface_switchport_private_host_mode
62
+ if validate_property_excluded?('interface',
63
+ 'switchport_mode_private_vlan_host')
64
+ assert_raises(Cisco::UnsupportedError) do
65
+ interface.switchport_mode_private_vlan_host = :host
66
+ end
67
+ return
68
+ end
69
+ switchport_modes = [
70
+ :host,
71
+ :promiscuous,
72
+ ]
73
+
74
+ switchport_modes.each do |start|
75
+ interface.switchport_mode_private_vlan_host = start
76
+ assert_equal(start, interface.switchport_mode_private_vlan_host,
77
+ "Err: Switchport mode, #{start}, not as expected")
78
+ end
79
+ end
80
+
81
+ def test_interface_switchport_private_trunk_promisc
82
+ if validate_property_excluded?(
83
+ 'interface',
84
+ 'switchport_mode_private_vlan_trunk_secondary')
85
+ assert_raises(Cisco::UnsupportedError) do
86
+ interface.switchport_mode_private_vlan_trunk_promiscuous = true
87
+ end
88
+ return
89
+ end
90
+ interface.switchport_mode_private_vlan_trunk_promiscuous = true
91
+ assert(interface.switchport_mode_private_vlan_trunk_promiscuous,
92
+ 'Err: Switchport mode, not as expected')
93
+ end
94
+
95
+ def test_interface_switchport_private_trunk_secondary
96
+ if validate_property_excluded?(
97
+ 'interface',
98
+ 'switchport_mode_private_vlan_trunk_secondary')
99
+ assert_raises(Cisco::UnsupportedError) do
100
+ interface.switchport_mode_private_vlan_trunk_secondary = true
101
+ end
102
+ return
103
+ end
104
+ interface.switchport_mode_private_vlan_trunk_secondary = true
105
+ assert(interface.switchport_mode_private_vlan_trunk_secondary,
106
+ 'Err: Switchport mode, not as expected')
107
+ end
108
+
109
+ def test_interface_no_switchport_private_host_mode
110
+ if validate_property_excluded?('interface',
111
+ 'switchport_mode_private_vlan_host')
112
+ assert_raises(Cisco::UnsupportedError) do
113
+ interface.switchport_mode_private_vlan_host = :host
114
+ end
115
+ return
116
+ end
117
+ switchport_modes = [
118
+ :host,
119
+ :promiscuous,
120
+ ]
121
+
122
+ switchport_modes.each do |start|
123
+ interface.switchport_mode_private_vlan_host = start
124
+ assert_equal(start, interface.switchport_mode_private_vlan_host,
125
+ "Err: Switchport mode, #{start}, not as expected")
126
+ interface.switchport_mode_private_vlan_host = :disabled
127
+ assert_equal(:disabled, interface.switchport_mode_private_vlan_host,
128
+ 'Error: Switchport mode not disabled')
129
+ end
130
+ end
131
+
132
+ def test_interface_no_switchport_private_trunk_mode
133
+ if validate_property_excluded?(
134
+ 'interface',
135
+ 'switchport_mode_private_vlan_trunk_secondary')
136
+ assert_raises(Cisco::UnsupportedError) do
137
+ interface.switchport_mode_private_vlan_trunk_secondary = true
138
+ end
139
+ return
140
+ end
141
+ interface.switchport_mode_private_vlan_trunk_secondary = true
142
+ assert(interface.switchport_mode_private_vlan_trunk_secondary,
143
+ 'Err: Switchport mode not as expected')
144
+ interface.switchport_mode_private_vlan_trunk_secondary = false
145
+ refute(interface.switchport_mode_private_vlan_trunk_secondary,
146
+ 'Err: Switchport mode not disabled')
147
+ end
148
+
149
+ def test_interface_switchport_private_host_association
150
+ if validate_property_excluded?('interface',
151
+ 'switchport_mode_private_vlan_host')
152
+ assert_raises(Cisco::UnsupportedError) do
153
+ interface.switchport_mode_private_vlan_host = :host
154
+ end
155
+ return
156
+ end
157
+ v1 = Vlan.new(10)
158
+ v1.private_vlan_type = 'primary'
159
+ v2 = Vlan.new(11)
160
+ v2.private_vlan_type = 'community'
161
+ v1.private_vlan_association = ['11']
162
+
163
+ interface.switchport_mode_private_vlan_host = :host
164
+ assert_equal(:host, interface.switchport_mode_private_vlan_host,
165
+ 'Err: Switchport mode not as expected')
166
+
167
+ input = %w(10 11)
168
+
169
+ interface.switchport_mode_private_vlan_host_association = input
170
+ assert_equal(input,
171
+ interface.switchport_mode_private_vlan_host_association,
172
+ 'Err: switchport private host_association not configured')
173
+ end
174
+
175
+ def test_interface_switchport_pvlan_host_assoc_change
176
+ if validate_property_excluded?('interface',
177
+ 'switchport_mode_private_vlan_host')
178
+ assert_raises(Cisco::UnsupportedError) do
179
+ interface.switchport_mode_private_vlan_host = :host
180
+ end
181
+ return
182
+ end
183
+ v1 = Vlan.new(10)
184
+ v1.private_vlan_type = 'primary'
185
+ v2 = Vlan.new(11)
186
+ v2.private_vlan_type = 'community'
187
+ v1.private_vlan_association = ['11']
188
+
189
+ interface.switchport_mode_private_vlan_host = :host
190
+ assert_equal(:host, interface.switchport_mode_private_vlan_host,
191
+ 'Error: Switchport mode not as expected')
192
+
193
+ input = %w(10 11)
194
+
195
+ interface.switchport_mode_private_vlan_host_association = input
196
+ assert_equal(input,
197
+ interface.switchport_mode_private_vlan_host_association,
198
+ 'Err: switchport private host_association not configured')
199
+
200
+ v3 = Vlan.new(20)
201
+ v3.private_vlan_type = 'primary'
202
+
203
+ v4 = Vlan.new(21)
204
+ v4.private_vlan_type = 'community'
205
+ v3.private_vlan_association = ['21']
206
+
207
+ input = %w(20 21)
208
+ interface.switchport_mode_private_vlan_host_association = input
209
+ assert_equal(input,
210
+ interface.switchport_mode_private_vlan_host_association,
211
+ 'Err: switchport private host_association not configured')
212
+
213
+ input = []
214
+ interface.switchport_mode_private_vlan_host_association = input
215
+ assert_equal(input,
216
+ interface.switchport_mode_private_vlan_host_association,
217
+ 'Err: switchport private host_association not configured')
218
+ end
219
+
220
+ def test_interface_switchport_no_pvlan_host_assoc
221
+ if validate_property_excluded?('interface',
222
+ 'switchport_mode_private_vlan_host')
223
+
224
+ assert_raises(Cisco::UnsupportedError) do
225
+ interface.switchport_mode_private_vlan_host = :host
226
+ end
227
+ return
228
+ end
229
+ v1 = Vlan.new(10)
230
+ v1.private_vlan_type = 'primary'
231
+ v2 = Vlan.new(11)
232
+ v2.private_vlan_type = 'community'
233
+ v1.private_vlan_association = ['11']
234
+
235
+ input = %w(10 11)
236
+ interface.switchport_mode_private_vlan_host = :host
237
+ assert_equal(:host, interface.switchport_mode_private_vlan_host,
238
+ 'Err: Switchport mode not as expected')
239
+ interface.switchport_mode_private_vlan_host_association = input
240
+ assert_equal(input,
241
+ interface.switchport_mode_private_vlan_host_association,
242
+ 'Err: switchport private host_association not configured')
243
+ input = []
244
+ interface.switchport_mode_private_vlan_host_association = input
245
+ assert_equal(input,
246
+ interface.switchport_mode_private_vlan_host_association,
247
+ 'Err: switchport private host_association not configured')
248
+ end
249
+
250
+ def test_interface_switchport_pvlan_host_assoc_default
251
+ if validate_property_excluded?('interface',
252
+ 'switchport_mode_private_vlan_host')
253
+
254
+ assert_raises(Cisco::UnsupportedError) do
255
+ interface.switchport_mode_private_vlan_host = :host
256
+ end
257
+ return
258
+ end
259
+ val = interface.default_switchport_mode_private_vlan_host_association
260
+ assert_equal(val, interface.switchport_mode_private_vlan_host_association,
261
+ 'Err: host association failed')
262
+ end
263
+
264
+ def test_interface_switchport_pvlan_host_assoc_bad_arg
265
+ if validate_property_excluded?('interface',
266
+ 'switchport_mode_private_vlan_host')
267
+
268
+ assert_raises(Cisco::UnsupportedError) do
269
+ interface.switchport_mode_private_vlan_host = :host
270
+ end
271
+ return
272
+ end
273
+ interface.switchport_mode_private_vlan_host = :host
274
+ assert_equal(:host, interface.switchport_mode_private_vlan_host,
275
+ 'Err: Switchport mode not as expected')
276
+
277
+ input = %w(10)
278
+ assert_raises(CliError) do
279
+ interface.switchport_mode_private_vlan_host_association = input
280
+ end
281
+
282
+ input = %w(10 ten)
283
+ assert_raises(CliError) do
284
+ interface.switchport_mode_private_vlan_host_association = input
285
+ end
286
+
287
+ input = %w(10,12)
288
+ assert_raises(CliError) do
289
+ interface.switchport_mode_private_vlan_host_association = input
290
+ end
291
+
292
+ input = %w(10 10)
293
+ assert_raises(RuntimeError,
294
+ 'host association did not raise RuntimeError') do
295
+ interface.switchport_mode_private_vlan_host_association = input
296
+ end
297
+ end
298
+
299
+ def test_interface_switchport_pvlan_host_primisc_default
300
+ if validate_property_excluded?('interface',
301
+ 'switchport_mode_private_vlan_host')
302
+
303
+ assert_raises(Cisco::UnsupportedError) do
304
+ interface.switchport_mode_private_vlan_host = :host
305
+ end
306
+ return
307
+ end
308
+ val = interface.default_switchport_mode_private_vlan_host_promisc
309
+ assert_equal(val, interface.switchport_mode_private_vlan_host_promisc,
310
+ 'Err: promisc association failed')
311
+ end
312
+
313
+ def test_interface_switchport_private_host_promisc
314
+ if validate_property_excluded?('interface',
315
+ 'switchport_mode_private_vlan_host')
316
+
317
+ assert_raises(Cisco::UnsupportedError) do
318
+ interface.switchport_mode_private_vlan_host = :host
319
+ end
320
+ return
321
+ end
322
+ v1 = Vlan.new(10)
323
+ v1.private_vlan_type = 'primary'
324
+ v2 = Vlan.new(11)
325
+ v2.private_vlan_type = 'community'
326
+ v1.private_vlan_association = ['11']
327
+
328
+ input = %w(10 11)
329
+ interface.switchport_mode_private_vlan_host = :promiscuous
330
+ assert_equal(:promiscuous,
331
+ interface.switchport_mode_private_vlan_host,
332
+ 'Error: Switchport mode not as expected')
333
+ interface.switchport_mode_private_vlan_host_promisc = input
334
+ assert_equal(input,
335
+ interface.switchport_mode_private_vlan_host_promisc,
336
+ 'Error: switchport private host promisc not configured')
337
+
338
+ v3 = Vlan.new(12)
339
+ v3.private_vlan_type = 'community'
340
+
341
+ v1.private_vlan_association = ['12']
342
+ input = %w(10 12)
343
+ interface.switchport_mode_private_vlan_host_promisc = input
344
+ assert_equal(input,
345
+ interface.switchport_mode_private_vlan_host_promisc,
346
+ 'Error: switchport private host promisc not configured')
347
+
348
+ v4 = Vlan.new(12)
349
+ v4.private_vlan_type = 'community'
350
+
351
+ v5 = Vlan.new(13)
352
+ v5.private_vlan_type = 'community'
353
+
354
+ v6 = Vlan.new(18)
355
+ v6.private_vlan_type = 'community'
356
+
357
+ v7 = Vlan.new(30)
358
+ v7.private_vlan_type = 'community'
359
+
360
+ v1.private_vlan_association = ['12-13', '18', '30']
361
+ input = %w(10 12-13,18,30)
362
+ interface.switchport_mode_private_vlan_host_promisc = input
363
+ assert_equal(input,
364
+ interface.switchport_mode_private_vlan_host_promisc,
365
+ 'Error: switchport private host promisc not configured')
366
+ end
367
+
368
+ def test_interface_switchport_private_host_promisc_bad_arg
369
+ if validate_property_excluded?('interface',
370
+ 'switchport_mode_private_vlan_host')
371
+
372
+ assert_raises(Cisco::UnsupportedError) do
373
+ interface.switchport_mode_private_vlan_host = :host
374
+ end
375
+ return
376
+ end
377
+
378
+ input = %w(10)
379
+ interface.switchport_mode_private_vlan_host = :promiscuous
380
+ assert_equal(:promiscuous, interface.switchport_mode_private_vlan_host,
381
+ 'Error: Switchport mode not as expected')
382
+
383
+ assert_raises(TypeError, 'private vlan host promisc raise typeError') do
384
+ interface.switchport_mode_private_vlan_host_promisc = input
385
+ end
386
+
387
+ input = %w(10,)
388
+ assert_raises(TypeError, 'private vlan host promisc raise typeError') do
389
+ interface.switchport_mode_private_vlan_host_promisc = input
390
+ end
391
+
392
+ input = %w(10 11 12)
393
+
394
+ assert_raises(TypeError, 'private vlan host promisc raise typeError') do
395
+ interface.switchport_mode_private_vlan_host_promisc = input
396
+ end
397
+
398
+ input = %w(10 ten)
399
+ assert_raises(CliError) do
400
+ interface.switchport_mode_private_vlan_host_promisc = input
401
+ end
402
+
403
+ input = %w(10 10)
404
+ assert_raises(CliError) do
405
+ interface.switchport_mode_private_vlan_host_promisc = input
406
+ end
407
+
408
+ input = %w(10 10)
409
+ assert_raises(RuntimeError,
410
+ 'promisc association did not raise RuntimeError') do
411
+ interface.switchport_mode_private_vlan_host_promisc = input
412
+ end
413
+ end
414
+
415
+ def test_interface_no_switchport_private_host_promisc
416
+ if validate_property_excluded?('interface',
417
+ 'switchport_mode_private_vlan_host')
418
+
419
+ assert_raises(Cisco::UnsupportedError) do
420
+ interface.switchport_mode_private_vlan_host = :host
421
+ end
422
+ return
423
+ end
424
+ v1 = Vlan.new(10)
425
+ v1.private_vlan_type = 'primary'
426
+
427
+ v2 = Vlan.new(11)
428
+ v2.private_vlan_type = 'community'
429
+ v1.private_vlan_association = ['11']
430
+
431
+ input = %w(10 11)
432
+ interface.switchport_mode_private_vlan_host = :promiscuous
433
+ assert_equal(:promiscuous, interface.switchport_mode_private_vlan_host,
434
+ 'Error: Switchport mode not as expected')
435
+
436
+ interface.switchport_mode_private_vlan_host_promisc = input
437
+ assert_equal(input, interface.switchport_mode_private_vlan_host_promisc,
438
+ 'Error: switchport private host promisc not configured')
439
+ input = []
440
+ interface.switchport_mode_private_vlan_host_promisc = input
441
+ assert_equal(input, interface.switchport_mode_private_vlan_host_promisc,
442
+ 'Error: switchport private host promisc not configured')
443
+ end
444
+
445
+ def test_interface_switchport_pvlan_trunk_allow_default
446
+ if validate_property_excluded?('interface',
447
+ 'switchport_mode_private_vlan_host')
448
+
449
+ assert_raises(Cisco::UnsupportedError) do
450
+ interface.switchport_mode_private_vlan_host = :host
451
+ end
452
+ return
453
+ end
454
+ val = interface.default_switchport_private_vlan_trunk_allowed_vlan
455
+ assert_equal(val, interface.switchport_private_vlan_trunk_allowed_vlan,
456
+ 'Err: trunk allowed vlan failed')
457
+ end
458
+
459
+ def test_interface_switchport_pvlan_trunk_allow_bad_arg
460
+ if validate_property_excluded?('interface',
461
+ 'switchport_mode_private_vlan_host')
462
+
463
+ assert_raises(Cisco::UnsupportedError) do
464
+ interface.switchport_mode_private_vlan_host = :host
465
+ end
466
+ return
467
+ end
468
+ input = %w(ten)
469
+ assert_raises(CliError) do
470
+ interface.switchport_private_vlan_trunk_allowed_vlan = input
471
+ end
472
+
473
+ input = %w(5000)
474
+ assert_raises(CliError) do
475
+ interface.switchport_private_vlan_trunk_allowed_vlan = input
476
+ end
477
+ end
478
+
479
+ def test_interface_switchport_pvlan_trunk_allow
480
+ if validate_property_excluded?('interface',
481
+ 'switchport_mode_private_vlan_host')
482
+
483
+ assert_raises(Cisco::UnsupportedError) do
484
+ interface.switchport_mode_private_vlan_host = :host
485
+ end
486
+ return
487
+ end
488
+ input = %w(10)
489
+ interface.switchport_private_vlan_trunk_allowed_vlan = input
490
+ assert_equal(input, interface.switchport_private_vlan_trunk_allowed_vlan,
491
+ 'Error: switchport private trunk allow vlan not configured')
492
+
493
+ input = %w(10-20)
494
+ result = %w(10-20)
495
+ interface.switchport_private_vlan_trunk_allowed_vlan = input
496
+ assert_equal(result, interface.switchport_private_vlan_trunk_allowed_vlan,
497
+ 'Error: switchport private trunk allow vlan not configured')
498
+
499
+ input = %w(10 13-14 40)
500
+ result = %w(10 13-14 40)
501
+ interface.switchport_private_vlan_trunk_allowed_vlan = input
502
+ assert_equal(result, interface.switchport_private_vlan_trunk_allowed_vlan,
503
+ 'Error: switchport private trunk allow vlan not configured')
504
+
505
+ input = []
506
+ interface.switchport_private_vlan_trunk_allowed_vlan = input
507
+ assert_equal(input, interface.switchport_private_vlan_trunk_allowed_vlan,
508
+ 'Error: switchport private trunk allow vlan not configured')
509
+ end
510
+
511
+ def test_interface_switchport_pvlan_trunk_native_vlan_bad_arg
512
+ if validate_property_excluded?('interface',
513
+ 'switchport_mode_private_vlan_host')
514
+
515
+ assert_raises(Cisco::UnsupportedError) do
516
+ interface.switchport_mode_private_vlan_host = :host
517
+ end
518
+ return
519
+ end
520
+ input = 'ten'
521
+ assert_raises(CliError) do
522
+ interface.switchport_private_vlan_trunk_native_vlan = input
523
+ end
524
+
525
+ input = 5000
526
+ assert_raises(CliError) do
527
+ interface.switchport_private_vlan_trunk_native_vlan = input
528
+ end
529
+ end
530
+
531
+ def test_interface_switchport_pvlan_trunk_native_default
532
+ if validate_property_excluded?('interface',
533
+ 'switchport_mode_private_vlan_host')
534
+
535
+ assert_raises(Cisco::UnsupportedError) do
536
+ interface.switchport_mode_private_vlan_host = :host
537
+ end
538
+ return
539
+ end
540
+ val = interface.default_switchport_private_vlan_trunk_native_vlan
541
+ assert_equal(val, interface.switchport_private_vlan_trunk_native_vlan,
542
+ 'Err: trunk native vlan failed')
543
+ end
544
+
545
+ def test_interface_switchport_pvlan_trunk_native_vlan
546
+ if validate_property_excluded?('interface',
547
+ 'switchport_mode_private_vlan_host')
548
+
549
+ assert_raises(Cisco::UnsupportedError) do
550
+ interface.switchport_mode_private_vlan_host = :host
551
+ end
552
+ return
553
+ end
554
+
555
+ input = 10
556
+ interface.switchport_private_vlan_trunk_native_vlan = input
557
+
558
+ assert_equal(input, interface.switchport_private_vlan_trunk_native_vlan,
559
+ 'Error: switchport private trunk native vlan not configured')
560
+ input = 1
561
+ interface.switchport_private_vlan_trunk_native_vlan = input
562
+ assert_equal(input, interface.switchport_private_vlan_trunk_native_vlan,
563
+ 'Error: switchport private trunk native vlan not configured')
564
+ input = 40
565
+ interface.switchport_private_vlan_trunk_native_vlan = input
566
+ assert_equal(input, interface.switchport_private_vlan_trunk_native_vlan,
567
+ 'Error: switchport private trunk native vlan not configured')
568
+
569
+ input = 50
570
+ interface.switchport_private_vlan_trunk_native_vlan = input
571
+ assert_equal(input,
572
+ interface.switchport_private_vlan_trunk_native_vlan,
573
+ 'Error: switchport private trunk native vlan not configured')
574
+ end
575
+
576
+ def test_interface_switchport_pvlan_association_trunk
577
+ if validate_property_excluded?('interface',
578
+ 'switchport_private_vlan_association_trunk')
579
+ assert_nil(interface.switchport_private_vlan_association_trunk)
580
+ return
581
+ end
582
+ input = %w(10 12)
583
+ result = ['10 12']
584
+ interface.switchport_private_vlan_association_trunk = input
585
+ input = interface.switchport_private_vlan_association_trunk
586
+ refute((result & input).empty?,
587
+ 'Err: wrong config for switchport private trunk association')
588
+ input = %w(20 30)
589
+ result = ['20 30']
590
+ interface.switchport_private_vlan_association_trunk = input
591
+ input = interface.switchport_private_vlan_association_trunk
592
+ refute((result & input).empty?,
593
+ 'Err: wrong config for switchport private trunk association')
594
+
595
+ input = %w(10 13)
596
+ result = ['10 13']
597
+ interface.switchport_private_vlan_association_trunk = input
598
+ input = interface.switchport_private_vlan_association_trunk
599
+ refute((result & input).empty?,
600
+ 'Err: wrong config for switchport private trunk association')
601
+
602
+ input = []
603
+ interface.switchport_private_vlan_association_trunk = input
604
+ assert_equal(input, interface.switchport_private_vlan_association_trunk,
605
+ 'Err: wrong config for switchport private trunk association')
606
+ end
607
+
608
+ def test_interface_switchport_pvlan_trunk_assoc_vlan_bad_arg
609
+ if validate_property_excluded?('interface',
610
+ 'switchport_private_vlan_association_trunk')
611
+ assert_nil(interface.switchport_private_vlan_association_trunk)
612
+ return
613
+ end
614
+ input = %w(10 10)
615
+ assert_raises(CliError) do
616
+ interface.switchport_private_vlan_association_trunk = input
617
+ end
618
+
619
+ input = %w(10 5000)
620
+ assert_raises(CliError) do
621
+ interface.switchport_private_vlan_association_trunk = input
622
+ end
623
+
624
+ input = %w(10)
625
+ assert_raises(CliError) do
626
+ interface.switchport_private_vlan_association_trunk = input
627
+ end
628
+
629
+ input = '10'
630
+ assert_raises(TypeError,
631
+ 'private vlan trunk association raise typeError') do
632
+ interface.switchport_private_vlan_association_trunk = input
633
+ end
634
+ end
635
+
636
+ def test_interface_switchport_pvlan_trunk_assocciation_default
637
+ if validate_property_excluded?('interface',
638
+ 'switchport_private_vlan_association_trunk')
639
+ assert_nil(interface.switchport_private_vlan_association_trunk)
640
+ return
641
+ end
642
+ val = interface.default_switchport_private_vlan_association_trunk
643
+ assert_equal(val, interface.switchport_private_vlan_association_trunk,
644
+ 'Err: association trunk failed')
645
+ end
646
+
647
+ def test_interface_switchport_pvlan_mapping_trunk_default
648
+ if validate_property_excluded?('interface',
649
+ 'switchport_private_vlan_mapping_trunk')
650
+
651
+ assert_nil(interface.switchport_private_vlan_mapping_trunk)
652
+ return
653
+ end
654
+ val = interface.default_switchport_private_vlan_mapping_trunk
655
+ assert_equal(val, interface.switchport_private_vlan_mapping_trunk,
656
+ 'Err: mapping trunk failed')
657
+ end
658
+
659
+ def test_interface_switchport_pvlan_mapping_trunk
660
+ if validate_property_excluded?('interface',
661
+ 'switchport_private_vlan_mapping_trunk')
662
+ assert_nil(interface.switchport_private_vlan_mapping_trunk)
663
+ return
664
+ end
665
+ input = %w(10 11)
666
+ result = '10 11'
667
+ interface.switchport_private_vlan_mapping_trunk = input
668
+ input = interface.switchport_private_vlan_mapping_trunk
669
+ assert_includes(input, result,
670
+ 'Err: wrong config for switchport private mapping trunk ')
671
+
672
+ input = %w(10 12)
673
+ result = '10 12'
674
+ interface.switchport_private_vlan_mapping_trunk = input
675
+ input = interface.switchport_private_vlan_mapping_trunk
676
+ assert_includes(input, result,
677
+ 'Err: wrong config for switchport private mapping trunk ')
678
+
679
+ input = %w(20 21)
680
+ result = '20 21'
681
+ interface.switchport_private_vlan_mapping_trunk = input
682
+ input = interface.switchport_private_vlan_mapping_trunk
683
+ assert_includes(input, result,
684
+ 'Err: wrong config for switchport private mapping trunk ')
685
+
686
+ input = []
687
+ interface.switchport_private_vlan_mapping_trunk = input
688
+ assert_equal(input, interface.switchport_private_vlan_mapping_trunk)
689
+ end
690
+
691
+ def test_interface_switchport_pvlan_mapping_trunk_bad_arg
692
+ if validate_property_excluded?('interface',
693
+ 'switchport_private_vlan_mapping_trunk')
694
+ assert_nil(interface.switchport_private_vlan_mapping_trunk)
695
+ return
696
+ end
697
+ input = %w(10 10)
698
+ assert_raises(CliError) do
699
+ interface.switchport_private_vlan_mapping_trunk = input
700
+ end
701
+
702
+ input = %w(10 5000)
703
+ assert_raises(CliError) do
704
+ interface.switchport_private_vlan_mapping_trunk = input
705
+ end
706
+
707
+ input = %w(10)
708
+ assert_raises(CliError) do
709
+ interface.switchport_private_vlan_mapping_trunk = input
710
+ end
711
+
712
+ input = '10'
713
+ assert_raises(TypeError,
714
+ 'private vlan mapping trunk raise typeError') do
715
+ interface.switchport_private_vlan_mapping_trunk = input
716
+ end
717
+
718
+ input = %w(10 20-148)
719
+ assert_raises(RuntimeError,
720
+ 'mapping trunk did not raise RuntimeError') do
721
+ interface.switchport_private_vlan_mapping_trunk = input
722
+ end
723
+ end
724
+ end