cisco_node_utils 1.3.0 → 1.4.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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +66 -0
  4. data/Gemfile +1 -0
  5. data/README.md +44 -43
  6. data/bin/.rubocop.yml +18 -0
  7. data/bin/show_running_yang.rb +233 -0
  8. data/cisco_node_utils.gemspec +1 -1
  9. data/docs/README-maintainers.md +1 -0
  10. data/docs/README-utilities.md +14 -0
  11. data/lib/.rubocop.yml +1 -1
  12. data/lib/cisco_node_utils/aaa_authentication_login_service.rb +8 -3
  13. data/lib/cisco_node_utils/aaa_authorization_service.rb +6 -0
  14. data/lib/cisco_node_utils/bfd_global.rb +300 -0
  15. data/lib/cisco_node_utils/bgp.rb +6 -4
  16. data/lib/cisco_node_utils/bgp_af.rb +2 -0
  17. data/lib/cisco_node_utils/bgp_neighbor.rb +14 -0
  18. data/lib/cisco_node_utils/bgp_neighbor_af.rb +4 -1
  19. data/lib/cisco_node_utils/cisco_cmn_utils.rb +126 -0
  20. data/lib/cisco_node_utils/client/client.rb +6 -2
  21. data/lib/cisco_node_utils/client/grpc/client.rb +120 -36
  22. data/lib/cisco_node_utils/client/nxapi/client.rb +6 -2
  23. data/lib/cisco_node_utils/cmd_ref/DEPRECATED.yaml +118 -0
  24. data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +14 -0
  25. data/lib/cisco_node_utils/cmd_ref/bfd_global.yaml +117 -0
  26. data/lib/cisco_node_utils/cmd_ref/bgp.yaml +7 -7
  27. data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +7 -0
  28. data/lib/cisco_node_utils/cmd_ref/dhcp_relay_global.yaml +125 -0
  29. data/lib/cisco_node_utils/cmd_ref/feature.yaml +10 -0
  30. data/lib/cisco_node_utils/cmd_ref/interface.yaml +141 -49
  31. data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +44 -0
  32. data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +6 -0
  33. data/lib/cisco_node_utils/cmd_ref/ospf.yaml +6 -0
  34. data/lib/cisco_node_utils/cmd_ref/ospf_area.yaml +91 -0
  35. data/lib/cisco_node_utils/cmd_ref/ospf_area_vlink.yaml +88 -0
  36. data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +0 -3
  37. data/lib/cisco_node_utils/cmd_ref/show_version.yaml +3 -3
  38. data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +39 -15
  39. data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +43 -21
  40. data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +48 -19
  41. data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +0 -0
  42. data/lib/cisco_node_utils/cmd_ref/tacacs_global.yaml +30 -0
  43. data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +18 -6
  44. data/lib/cisco_node_utils/cmd_ref/vdc.yaml +4 -0
  45. data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +1 -0
  46. data/lib/cisco_node_utils/cmd_ref/vlan.yaml +23 -10
  47. data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +8 -2
  48. data/lib/cisco_node_utils/cmd_ref/yang.yaml +7 -0
  49. data/lib/cisco_node_utils/cmd_ref/yum.yaml +10 -1
  50. data/lib/cisco_node_utils/constants.rb +8 -1
  51. data/lib/cisco_node_utils/dhcp_relay_global.rb +302 -0
  52. data/lib/cisco_node_utils/exceptions.rb +29 -0
  53. data/lib/cisco_node_utils/feature.rb +28 -0
  54. data/lib/cisco_node_utils/interface.rb +493 -402
  55. data/lib/cisco_node_utils/interface_DEPRECATED.rb +513 -0
  56. data/lib/cisco_node_utils/interface_ospf.rb +126 -0
  57. data/lib/cisco_node_utils/interface_portchannel.rb +16 -0
  58. data/lib/cisco_node_utils/logger.rb +3 -0
  59. data/lib/cisco_node_utils/node.rb +29 -1
  60. data/lib/cisco_node_utils/overlay_global.rb +1 -12
  61. data/lib/cisco_node_utils/pim.rb +1 -0
  62. data/lib/cisco_node_utils/pim_group_list.rb +1 -0
  63. data/lib/cisco_node_utils/pim_rp_address.rb +1 -0
  64. data/lib/cisco_node_utils/platform.rb +9 -2
  65. data/lib/cisco_node_utils/router_ospf.rb +1 -1
  66. data/lib/cisco_node_utils/router_ospf_area.rb +416 -0
  67. data/lib/cisco_node_utils/router_ospf_area_vlink.rb +313 -0
  68. data/lib/cisco_node_utils/router_ospf_vrf.rb +17 -0
  69. data/lib/cisco_node_utils/snmp_notification_receiver.rb +27 -9
  70. data/lib/cisco_node_utils/snmpcommunity.rb +34 -8
  71. data/lib/cisco_node_utils/snmpserver.rb +4 -4
  72. data/lib/cisco_node_utils/snmpuser.rb +0 -0
  73. data/lib/cisco_node_utils/tacacs_global.rb +102 -0
  74. data/lib/cisco_node_utils/tacacs_server.rb +8 -7
  75. data/lib/cisco_node_utils/vdc.rb +25 -7
  76. data/lib/cisco_node_utils/version.rb +1 -1
  77. data/lib/cisco_node_utils/vlan.rb +30 -56
  78. data/lib/cisco_node_utils/vlan_DEPRECATED.rb +108 -0
  79. data/lib/cisco_node_utils/yang.rb +160 -0
  80. data/lib/cisco_node_utils/yum.rb +25 -32
  81. data/tests/.rubocop.yml +3 -0
  82. data/tests/ciscotest.rb +136 -19
  83. data/tests/cmd_config_invalid.yaml +1 -1
  84. data/tests/noop.rb +7 -0
  85. data/tests/tacacs_server.yaml.example +6 -0
  86. data/tests/test_aaa_authentication_login.rb +24 -1
  87. data/tests/test_aaa_authentication_login_service.rb +9 -16
  88. data/tests/test_aaa_authorization_service.rb +111 -84
  89. data/tests/test_bfd_global.rb +278 -0
  90. data/tests/test_bgp_neighbor.rb +20 -0
  91. data/tests/test_bridge_domain_vni.rb +2 -9
  92. data/tests/test_cmn_utils.rb +76 -0
  93. data/tests/test_dhcp_relay_global.rb +284 -0
  94. data/tests/test_dns_domain.rb +4 -4
  95. data/tests/test_domain_name.rb +2 -2
  96. data/tests/test_encapsulation.rb +2 -4
  97. data/tests/test_evpn_vni.rb +14 -7
  98. data/tests/test_fabricpath_global.rb +12 -13
  99. data/tests/test_feature.rb +35 -17
  100. data/tests/test_interface.rb +352 -127
  101. data/tests/test_interface_bdi.rb +2 -2
  102. data/tests/test_interface_channel_group.rb +1 -1
  103. data/tests/test_interface_ospf.rb +153 -23
  104. data/tests/test_interface_portchannel.rb +15 -6
  105. data/tests/test_interface_private_vlan.rb +200 -576
  106. data/tests/test_interface_svi.rb +5 -52
  107. data/tests/test_interface_switchport.rb +80 -240
  108. data/tests/test_itd_device_group.rb +2 -2
  109. data/tests/test_itd_device_group_node.rb +2 -2
  110. data/tests/test_itd_service.rb +1 -1
  111. data/tests/test_name_server.rb +3 -3
  112. data/tests/test_node_ext.rb +15 -17
  113. data/tests/test_ntp_config.rb +1 -1
  114. data/tests/test_ntp_server.rb +3 -3
  115. data/tests/test_nxapi.rb +1 -0
  116. data/tests/test_overlay_global.rb +15 -19
  117. data/tests/test_pim.rb +5 -5
  118. data/tests/test_pim_group_list.rb +1 -37
  119. data/tests/test_pim_rp_address.rb +1 -1
  120. data/tests/test_platform.rb +9 -11
  121. data/tests/test_portchannel_global.rb +43 -3
  122. data/tests/test_radius_server.rb +1 -1
  123. data/tests/test_radius_server_group.rb +1 -1
  124. data/tests/test_router_bgp.rb +17 -30
  125. data/tests/test_router_ospf_area.rb +433 -0
  126. data/tests/test_router_ospf_area_vlink.rb +298 -0
  127. data/tests/test_router_ospf_vrf.rb +17 -0
  128. data/tests/test_snmp_notification_receiver.rb +11 -11
  129. data/tests/test_snmpcommunity.rb +177 -69
  130. data/tests/test_snmpgroup.rb +7 -7
  131. data/tests/test_snmpserver.rb +164 -253
  132. data/tests/test_snmpuser.rb +73 -69
  133. data/tests/test_stp_global.rb +15 -15
  134. data/tests/test_syslog_settings.rb +1 -1
  135. data/tests/test_tacacs_global.rb +80 -0
  136. data/tests/test_tacacs_server.rb +129 -51
  137. data/tests/test_tacacs_server_group.rb +3 -29
  138. data/tests/test_tacacs_server_host.rb +24 -27
  139. data/tests/test_vlan.rb +57 -59
  140. data/tests/test_vlan_private.rb +271 -284
  141. data/tests/test_vpc.rb +10 -4
  142. data/tests/test_vrf.rb +2 -0
  143. data/tests/test_vrf_af.rb +2 -5
  144. data/tests/test_vtp.rb +5 -2
  145. data/tests/test_vxlan_vtep.rb +20 -44
  146. data/tests/test_vxlan_vtep_vni.rb +23 -16
  147. data/tests/test_yang.rb +369 -0
  148. data/tests/test_yum.rb +34 -42
  149. data/tests/yum_package.yaml +35 -0
  150. metadata +31 -4
  151. data/tests/test_vlan_mt_full.rb +0 -85
@@ -19,7 +19,7 @@ require_relative 'ciscotest'
19
19
  require_relative '../lib/cisco_node_utils/radius_server'
20
20
 
21
21
  # TestRadiusServer - Minitest for RadiusServer node utility.
22
- class TestRadiusServer < CiscoTestCase
22
+ class TestRadiusSvr < CiscoTestCase
23
23
  @skip_unless_supported = 'radius_server'
24
24
 
25
25
  def setup
@@ -20,7 +20,7 @@ require File.expand_path('../../lib/cisco_node_utils/radius_server_group', \
20
20
  __FILE__)
21
21
 
22
22
  # TestRadiusServerGroup - Minitest for RadiusServerGroup node utility.
23
- class TestRadiusServerGroup < CiscoTestCase
23
+ class TestRadiusSvrGrp < CiscoTestCase
24
24
  @skip_unless_supported = 'radius_server_group'
25
25
 
26
26
  def setup
@@ -610,6 +610,7 @@ class TestRouterBgp < CiscoTestCase
610
610
  bgp.send("event_history_#{opt}=", 'false')
611
611
  result = bgp.send("event_history_#{opt}")
612
612
  expected = (opt == :detail) ? bgp.default_event_history_detail : 'false'
613
+ expected = 'size_disable' if opt == :events
613
614
  assert_equal(expected, result,
614
615
  "event_history_#{opt}: Failed to set state to False")
615
616
 
@@ -1074,6 +1075,7 @@ class TestRouterBgp < CiscoTestCase
1074
1075
  def test_route_distinguisher
1075
1076
  skip_nexus_i2_image?
1076
1077
  remove_all_vrfs
1078
+ vdc_limit_f3_no_intf_needed(:set)
1077
1079
 
1078
1080
  bgp = setup_vrf
1079
1081
  assert_empty(bgp.route_distinguisher,
@@ -1092,6 +1094,9 @@ class TestRouterBgp < CiscoTestCase
1092
1094
  assert_empty(bgp.route_distinguisher,
1093
1095
  'bgp route_distinguisher should *NOT* be configured')
1094
1096
  bgp.destroy
1097
+ remove_all_vrfs
1098
+ vdc_limit_f3_no_intf_needed(:clear)
1099
+ config_no_warn('no nv overlay evpn ; no feature nv overlay')
1095
1100
  end
1096
1101
 
1097
1102
  def test_router_id
@@ -1155,39 +1160,21 @@ class TestRouterBgp < CiscoTestCase
1155
1160
  end
1156
1161
 
1157
1162
  def test_suppress_fib_pending
1158
- %w(test_default test_vrf).each do |t|
1159
- if t == 'test_default'
1160
- bgp = setup_default
1161
- else
1162
- bgp = setup_vrf
1163
- end
1164
- if platform == :ios_xr
1165
- assert_raises(Cisco::UnsupportedError) do
1166
- bgp.suppress_fib_pending = true
1167
- end
1168
- else
1163
+ bgp = setup_default
1164
+ if validate_property_excluded?('bgp', 'suppress_fib_pending')
1165
+ assert_raises(Cisco::UnsupportedError) do
1169
1166
  bgp.suppress_fib_pending = true
1170
- assert(bgp.suppress_fib_pending,
1171
- "vrf #{@vrf}: bgp suppress_fib_pending should be enabled")
1172
- bgp.suppress_fib_pending = false
1173
- refute(bgp.suppress_fib_pending,
1174
- "vrf #{@vrf}: bgp suppress_fib_pending should be disabled")
1175
1167
  end
1176
- bgp.destroy
1168
+ else
1169
+ bgp.suppress_fib_pending = true
1170
+ assert(bgp.suppress_fib_pending,
1171
+ 'bgp suppress_fib_pending should be enabled')
1172
+ bgp.suppress_fib_pending = false
1173
+ refute(bgp.suppress_fib_pending,
1174
+ 'bgp suppress_fib_pending should be disabled')
1175
+ bgp.suppress_fib_pending = bgp.default_suppress_fib_pending
1176
+ assert_equal(bgp.default_suppress_fib_pending, bgp.suppress_fib_pending)
1177
1177
  end
1178
- end
1179
-
1180
- def test_suppress_fib_pending_not_configured
1181
- bgp = setup_default
1182
- refute(bgp.suppress_fib_pending,
1183
- 'bgp suppress_fib_pending should be disabled')
1184
- bgp.destroy
1185
- end
1186
-
1187
- def test_default_suppress_fib_pending
1188
- bgp = setup_default
1189
- refute(bgp.default_suppress_fib_pending,
1190
- 'bgp suppress_fib_pending default value should be false')
1191
1178
  bgp.destroy
1192
1179
  end
1193
1180
 
@@ -0,0 +1,433 @@
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/router_ospf'
17
+ require_relative '../lib/cisco_node_utils/router_ospf_vrf'
18
+ require_relative '../lib/cisco_node_utils/router_ospf_area'
19
+
20
+ # TestRouterOspfArea - Minitest for RouterOspfArea node utility class
21
+ class TestRouterOspfArea < CiscoTestCase
22
+ @skip_unless_supported = 'ospf_area'
23
+ @@pre_clean_needed = true # rubocop:disable Style/ClassVars
24
+
25
+ def setup
26
+ super
27
+ remove_all_ospfs if @@pre_clean_needed
28
+ @@pre_clean_needed = false # rubocop:disable Style/ClassVars
29
+ end
30
+
31
+ def teardown
32
+ remove_all_ospfs
33
+ config 'no feature ospf'
34
+ super
35
+ end
36
+
37
+ def create_routerospfarea_default(router='Wolfpack', name='default',
38
+ area_id='1.1.1.1')
39
+ RouterOspfArea.new(router, name, area_id)
40
+ end
41
+
42
+ def create_routerospfarea_vrf(router='Wolfpack', name='blue',
43
+ area_id='1450')
44
+ RouterOspfArea.new(router, name, area_id)
45
+ end
46
+
47
+ def test_collection_size
48
+ ad = create_routerospfarea_default
49
+ ad.stub = true
50
+ assert_equal(1, RouterOspfArea.areas['Wolfpack'].size)
51
+ av = create_routerospfarea_vrf
52
+ av.stub = true
53
+ assert_equal(2, RouterOspfArea.areas['Wolfpack'].size)
54
+ av.destroy
55
+ # on n8k (only), we cannot remove "area <area> default-cost 1",
56
+ # unless the entire ospf router is removed. The default value of
57
+ # default_cost is 1 and so this is just a cosmetic issue but
58
+ # need to skip the below test as the size will be wrong.
59
+ # platform as the size will be wrong. bug ID: CSCva04066
60
+ assert_equal(1, RouterOspfArea.areas['Wolfpack'].size) unless
61
+ /N8/ =~ node.product_id
62
+ ad.destroy
63
+ assert_empty(RouterOspfArea.areas) unless
64
+ /N8/ =~ node.product_id
65
+ end
66
+
67
+ def test_authentication
68
+ ad = create_routerospfarea_default
69
+ assert_equal(ad.default_authentication, ad.authentication)
70
+ ad.authentication = 'md5'
71
+ assert_equal('md5', ad.authentication)
72
+ ad.authentication = 'cleartext'
73
+ assert_equal('cleartext', ad.authentication)
74
+ ad.authentication = ad.default_authentication
75
+ assert_equal(ad.default_authentication, ad.authentication)
76
+ av = create_routerospfarea_vrf
77
+ assert_equal(av.default_authentication, av.authentication)
78
+ av.authentication = 'md5'
79
+ assert_equal('md5', av.authentication)
80
+ av.authentication = 'cleartext'
81
+ assert_equal('cleartext', av.authentication)
82
+ av.authentication = av.default_authentication
83
+ assert_equal(av.default_authentication, av.authentication)
84
+ end
85
+
86
+ def test_default_cost
87
+ ad = create_routerospfarea_default
88
+ assert_equal(ad.default_default_cost, ad.default_cost)
89
+ ad.default_cost = 2000
90
+ assert_equal(2000, ad.default_cost)
91
+ ad.default_cost = ad.default_default_cost
92
+ assert_equal(ad.default_default_cost, ad.default_cost)
93
+ av = create_routerospfarea_vrf
94
+ assert_equal(av.default_default_cost, av.default_cost)
95
+ av.default_cost = 10_000
96
+ assert_equal(10_000, av.default_cost)
97
+ av.default_cost = av.default_default_cost
98
+ assert_equal(av.default_default_cost, av.default_cost)
99
+ end
100
+
101
+ def test_filter_list
102
+ ad = create_routerospfarea_default
103
+ assert_equal(ad.default_filter_list_in, ad.filter_list_in)
104
+ assert_equal(ad.default_filter_list_out, ad.filter_list_out)
105
+ ad.filter_list_in = 'abc'
106
+ assert_equal('abc', ad.filter_list_in)
107
+ ad.filter_list_out = 'efg'
108
+ assert_equal('efg', ad.filter_list_out)
109
+ ad.filter_list_in = ad.default_filter_list_in
110
+ assert_equal(ad.default_filter_list_in, ad.filter_list_in)
111
+ ad.filter_list_out = ad.default_filter_list_out
112
+ assert_equal(ad.default_filter_list_out, ad.filter_list_out)
113
+ av = create_routerospfarea_vrf
114
+ assert_equal(av.default_filter_list_in, av.filter_list_in)
115
+ assert_equal(av.default_filter_list_out, av.filter_list_out)
116
+ av.filter_list_in = 'uvw'
117
+ assert_equal('uvw', av.filter_list_in)
118
+ av.filter_list_out = 'xyz'
119
+ assert_equal('xyz', av.filter_list_out)
120
+ av.filter_list_in = av.default_filter_list_in
121
+ assert_equal(av.default_filter_list_in, av.filter_list_in)
122
+ av.filter_list_out = av.default_filter_list_out
123
+ assert_equal(av.default_filter_list_out, av.filter_list_out)
124
+ end
125
+
126
+ def test_stub
127
+ ad = create_routerospfarea_default
128
+ assert_equal(ad.default_stub, ad.stub)
129
+ assert_equal(ad.default_stub_no_summary, ad.stub_no_summary)
130
+ ad.stub = true
131
+ assert_equal(true, ad.stub)
132
+ assert_equal(ad.default_stub_no_summary, ad.stub_no_summary)
133
+ ad.stub_no_summary = true
134
+ assert_equal(true, ad.stub_no_summary)
135
+ assert_equal(true, ad.stub)
136
+ ad.stub_no_summary = ad.default_stub_no_summary
137
+ assert_equal(ad.default_stub_no_summary, ad.stub_no_summary)
138
+ assert_equal(true, ad.stub)
139
+ ad.stub = ad.default_stub
140
+ assert_equal(ad.default_stub, ad.stub)
141
+ assert_equal(ad.default_stub_no_summary, ad.stub_no_summary)
142
+ av = create_routerospfarea_vrf
143
+ assert_equal(av.default_stub, av.stub)
144
+ assert_equal(av.default_stub_no_summary, av.stub_no_summary)
145
+ av.stub = true
146
+ assert_equal(true, av.stub)
147
+ assert_equal(av.default_stub_no_summary, av.stub_no_summary)
148
+ av.stub_no_summary = true
149
+ assert_equal(true, av.stub_no_summary)
150
+ assert_equal(true, av.stub)
151
+ av.stub_no_summary = av.default_stub_no_summary
152
+ assert_equal(av.default_stub_no_summary, av.stub_no_summary)
153
+ assert_equal(true, av.stub)
154
+ av.stub = av.default_stub
155
+ assert_equal(av.default_stub, av.stub)
156
+ assert_equal(av.default_stub_no_summary, av.stub_no_summary)
157
+ end
158
+
159
+ def test_range
160
+ ad = create_routerospfarea_default
161
+ assert_equal(ad.default_range, ad.range)
162
+ ranges = [['10.3.0.0/16', 'not_advertise', '23'],
163
+ ['10.3.0.0/32', 'not_advertise'],
164
+ ['10.3.0.1/32'],
165
+ ['10.3.3.0/24', '450']]
166
+ ad.range = ranges
167
+ assert_equal(ranges, ad.range)
168
+ ranges = [['10.3.0.0/16', 'not_advertise', '23'],
169
+ ['10.3.3.0/24', '450']]
170
+ ad.range = ranges
171
+ assert_equal(ranges, ad.range)
172
+ ad.range = ad.default_range
173
+ assert_equal(ad.default_range, ad.range)
174
+ av = create_routerospfarea_vrf
175
+ assert_equal(av.default_range, av.range)
176
+ ranges = [['10.3.0.0/16', '8000'],
177
+ ['10.3.0.0/32', 'not_advertise'],
178
+ ['10.3.0.1/32'],
179
+ ['10.3.3.0/24', 'not_advertise', '10212']]
180
+ av.range = ranges
181
+ assert_equal(ranges, av.range)
182
+ ranges = [['10.3.0.0/16', '4989'],
183
+ ['10.3.1.1/32'],
184
+ ['10.3.3.0/24', 'not_advertise', '76376']]
185
+ av.range = ranges
186
+ assert_equal(ranges, av.range)
187
+ av.range = av.default_range
188
+ assert_equal(av.default_range, av.range)
189
+ end
190
+
191
+ def test_nssa
192
+ hash = {}
193
+ ad = create_routerospfarea_default
194
+ assert_equal(ad.default_nssa, ad.nssa)
195
+ hash[:nssa] = true
196
+ ad.nssa_set(hash)
197
+ assert_equal(true, ad.nssa)
198
+ assert_equal(ad.default_nssa_default_originate, ad.nssa_default_originate)
199
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
200
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
201
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
202
+
203
+ hash = {}
204
+ ad.nssa_set(hash)
205
+ assert_equal(ad.default_nssa, ad.nssa)
206
+ assert_equal(ad.default_nssa_default_originate, ad.nssa_default_originate)
207
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
208
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
209
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
210
+
211
+ av = create_routerospfarea_vrf
212
+ assert_equal(av.default_nssa, av.nssa)
213
+ hash[:nssa] = true
214
+ av.nssa_set(hash)
215
+ assert_equal(true, av.nssa)
216
+ assert_equal(av.default_nssa_default_originate, av.nssa_default_originate)
217
+ assert_equal(av.default_nssa_no_redistribution, av.nssa_no_redistribution)
218
+ assert_equal(av.default_nssa_no_summary, av.nssa_no_summary)
219
+ assert_equal(av.default_nssa_route_map, av.nssa_route_map)
220
+
221
+ hash = {}
222
+ av.nssa_set(hash)
223
+ assert_equal(av.default_nssa, av.nssa)
224
+ assert_equal(av.default_nssa_default_originate, av.nssa_default_originate)
225
+ assert_equal(av.default_nssa_no_redistribution, av.nssa_no_redistribution)
226
+ assert_equal(av.default_nssa_no_summary, av.nssa_no_summary)
227
+ assert_equal(av.default_nssa_route_map, av.nssa_route_map)
228
+ end
229
+
230
+ def nssa_helper(ad)
231
+ hash = {}
232
+ hash[:nssa] = true
233
+ hash[:nssa_default_originate] = true
234
+ ad.nssa_set(hash)
235
+ assert_equal(true, ad.nssa)
236
+ assert(ad.nssa_default_originate)
237
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
238
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
239
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
240
+ # on n8k (only), we cannot configure
241
+ # "area <area> nssa default-information-originate",
242
+ # properly if we reset it first. It is only configuring nssa
243
+ # but not the other parameters. bug ID: CSCva11482
244
+ hash[:nssa_route_map] = 'aaa'
245
+ ad.nssa_set(hash)
246
+ assert_equal(true, ad.nssa)
247
+ if node.product_id[/N8/]
248
+ refute(ad.nssa_default_originate)
249
+ else
250
+ assert(ad.nssa_default_originate)
251
+ end
252
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
253
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
254
+ if node.product_id[/N8/]
255
+ refute_equal('aaa', ad.nssa_route_map)
256
+ else
257
+ assert_equal('aaa', ad.nssa_route_map)
258
+ end
259
+ hash[:nssa_no_summary] = true
260
+ hash.delete(:nssa_route_map)
261
+ ad.nssa_set(hash)
262
+ assert_equal(true, ad.nssa)
263
+ assert_equal(true, ad.nssa_default_originate)
264
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
265
+ assert_equal(true, ad.nssa_no_summary)
266
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
267
+ hash[:nssa_route_map] = 'aaa'
268
+ ad.nssa_set(hash)
269
+ assert_equal(true, ad.nssa)
270
+ assert_equal(true, ad.nssa_default_originate)
271
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
272
+ assert_equal(true, ad.nssa_no_summary)
273
+ assert_equal('aaa', ad.nssa_route_map)
274
+
275
+ hash = {}
276
+ hash[:nssa] = true
277
+ hash[:nssa_default_originate] = true
278
+ hash[:nssa_no_redistribution] = true
279
+ ad.nssa_set(hash)
280
+ assert_equal(true, ad.nssa)
281
+ assert_equal(true, ad.nssa_default_originate)
282
+ assert_equal(true, ad.nssa_no_redistribution)
283
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
284
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
285
+ hash = {}
286
+ hash[:nssa] = true
287
+ hash[:nssa_default_originate] = true
288
+ hash[:nssa_no_redistribution] = true
289
+ hash[:nssa_route_map] = 'aaa'
290
+ ad.nssa_set(hash)
291
+ assert_equal(true, ad.nssa)
292
+ assert_equal(true, ad.nssa_default_originate)
293
+ assert_equal(true, ad.nssa_no_redistribution)
294
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
295
+ assert_equal('aaa', ad.nssa_route_map)
296
+ hash = {}
297
+ hash[:nssa] = true
298
+ hash[:nssa_default_originate] = true
299
+ hash[:nssa_no_redistribution] = true
300
+ hash[:nssa_route_map] = 'aaa'
301
+ hash[:nssa_no_summary] = true
302
+ ad.nssa_set(hash)
303
+ assert_equal(true, ad.nssa)
304
+ assert_equal(true, ad.nssa_default_originate)
305
+ assert_equal(true, ad.nssa_no_redistribution)
306
+ assert_equal(true, ad.nssa_no_summary)
307
+ assert_equal('aaa', ad.nssa_route_map)
308
+ hash = {}
309
+ hash[:nssa] = true
310
+ hash[:nssa_no_redistribution] = true
311
+ hash[:nssa_no_summary] = true
312
+ ad.nssa_set(hash)
313
+ assert_equal(true, ad.nssa)
314
+ assert_equal(ad.default_nssa_default_originate, ad.nssa_default_originate)
315
+ assert_equal(true, ad.nssa_no_redistribution)
316
+ assert_equal(true, ad.nssa_no_summary)
317
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
318
+ hash = {}
319
+ hash[:nssa] = true
320
+ hash[:nssa_no_redistribution] = true
321
+ ad.nssa_set(hash)
322
+ assert_equal(true, ad.nssa)
323
+ assert_equal(ad.default_nssa_default_originate, ad.nssa_default_originate)
324
+ assert_equal(true, ad.nssa_no_redistribution)
325
+ assert_equal(ad.default_nssa_no_summary, ad.nssa_no_summary)
326
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
327
+ hash = {}
328
+ hash[:nssa] = true
329
+ hash[:nssa_no_summary] = true
330
+ ad.nssa_set(hash)
331
+ assert_equal(true, ad.nssa)
332
+ assert_equal(ad.default_nssa_default_originate, ad.nssa_default_originate)
333
+ assert_equal(ad.default_nssa_no_redistribution, ad.nssa_no_redistribution)
334
+ assert_equal(true, ad.nssa_no_summary)
335
+ assert_equal(ad.default_nssa_route_map, ad.nssa_route_map)
336
+ end
337
+
338
+ def test_nssa_non_default_vrf_others
339
+ nssa_helper(create_routerospfarea_vrf)
340
+ end
341
+
342
+ def test_nssa_default_vrf_others
343
+ nssa_helper(create_routerospfarea_default)
344
+ end
345
+
346
+ def test_nssa_translate_type7
347
+ ad = create_routerospfarea_default
348
+ assert_equal(ad.default_nssa_translate_type7, ad.nssa_translate_type7)
349
+ ad.nssa_translate_type7 = 'never'
350
+ assert_equal('never', ad.nssa_translate_type7)
351
+ ad.nssa_translate_type7 = 'supress_fa'
352
+ assert_equal('supress_fa', ad.nssa_translate_type7)
353
+ ad.nssa_translate_type7 = 'always_supress_fa'
354
+ assert_equal('always_supress_fa', ad.nssa_translate_type7)
355
+ ad.nssa_translate_type7 = 'always'
356
+ assert_equal('always', ad.nssa_translate_type7)
357
+ ad.nssa_translate_type7 = ad.default_nssa_translate_type7
358
+ assert_equal(ad.default_nssa_translate_type7, ad.nssa_translate_type7)
359
+ av = create_routerospfarea_vrf
360
+ assert_equal(av.default_nssa_translate_type7, av.nssa_translate_type7)
361
+ av.nssa_translate_type7 = 'never'
362
+ assert_equal('never', av.nssa_translate_type7)
363
+ av.nssa_translate_type7 = 'supress_fa'
364
+ assert_equal('supress_fa', av.nssa_translate_type7)
365
+ av.nssa_translate_type7 = 'always_supress_fa'
366
+ assert_equal('always_supress_fa', av.nssa_translate_type7)
367
+ av.nssa_translate_type7 = 'always'
368
+ assert_equal('always', av.nssa_translate_type7)
369
+ av.nssa_translate_type7 = av.default_nssa_translate_type7
370
+ assert_equal(av.default_nssa_translate_type7, av.nssa_translate_type7)
371
+ end
372
+
373
+ def test_destroy
374
+ ad = create_routerospfarea_default
375
+ # destroy without changing any properties
376
+ ad.destroy
377
+ [:authentication,
378
+ :default_cost,
379
+ :filter_list_in,
380
+ :filter_list_out,
381
+ :range,
382
+ :nssa,
383
+ :nssa_default_originate,
384
+ :nssa_no_redistribution,
385
+ :nssa_no_summary,
386
+ :nssa_route_map,
387
+ :nssa_translate_type7,
388
+ :stub,
389
+ :stub_no_summary,
390
+ ].each do |prop|
391
+ assert_equal(ad.send("default_#{prop}"), ad.send("#{prop}"))
392
+ end
393
+ ad.authentication = 'md5'
394
+ ad.default_cost = 2000
395
+ ad.filter_list_in = 'abc'
396
+ ad.filter_list_out = 'efg'
397
+ ranges = [['10.3.0.0/16', 'not_advertise', '23'],
398
+ ['10.3.0.0/32', 'not_advertise'],
399
+ ['10.3.0.1/32'],
400
+ ['10.3.3.0/24', '450']]
401
+ hash = {}
402
+ hash[:nssa] = true
403
+ hash[:default_information_originate] = 'default-information-originate'
404
+ hash[:no_summary] = 'no-summary'
405
+ hash[:no_redistribution] = 'no-redistribution'
406
+ hash[:route_map] = 'route-map'
407
+ hash[:rm] = 'aaa'
408
+ ad.nssa_set(hash)
409
+
410
+ ad.nssa_translate_type7 = 'never'
411
+ ad.range = ranges
412
+ ad.stub = true
413
+ ad.stub_no_summary = true
414
+ # destroy after changing properties
415
+ ad.destroy
416
+ [:authentication,
417
+ :default_cost,
418
+ :filter_list_in,
419
+ :filter_list_out,
420
+ :range,
421
+ :nssa,
422
+ :nssa_default_originate,
423
+ :nssa_no_redistribution,
424
+ :nssa_no_summary,
425
+ :nssa_route_map,
426
+ :nssa_translate_type7,
427
+ :stub,
428
+ :stub_no_summary,
429
+ ].each do |prop|
430
+ assert_equal(ad.send("default_#{prop}"), ad.send("#{prop}"))
431
+ end
432
+ end
433
+ end