cisco_node_utils 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/CHANGELOG.md +126 -1
- data/README.md +19 -12
- data/Rakefile +1 -0
- data/bin/git/hooks/commit-msg/enforce_style +8 -0
- data/cisco_node_utils.gemspec +4 -3
- data/docs/README-develop-best-practices.md +127 -109
- data/docs/README-develop-node-utils-APIs.md +47 -39
- data/docs/template-router.rb +3 -7
- data/lib/.rubocop.yml +4 -4
- data/lib/cisco_node_utils.rb +1 -1
- data/lib/cisco_node_utils/aaa_authentication_login.rb +96 -0
- data/lib/cisco_node_utils/aaa_authentication_login_service.rb +133 -0
- data/lib/cisco_node_utils/aaa_authorization_service.rb +150 -0
- data/lib/cisco_node_utils/ace.rb +196 -0
- data/lib/cisco_node_utils/acl.rb +100 -0
- data/lib/cisco_node_utils/bgp.rb +301 -163
- data/lib/cisco_node_utils/bgp_af.rb +187 -19
- data/lib/cisco_node_utils/bgp_neighbor.rb +18 -33
- data/lib/cisco_node_utils/bgp_neighbor_af.rb +25 -48
- data/lib/cisco_node_utils/cisco_cmn_utils.rb +23 -4
- data/lib/cisco_node_utils/cmd_ref/README_YAML.md +593 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_auth_login_service.yaml +22 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authentication_login.yaml +31 -0
- data/lib/cisco_node_utils/cmd_ref/aaa_authorization_service.yaml +22 -0
- data/lib/cisco_node_utils/cmd_ref/acl.yaml +43 -0
- data/lib/cisco_node_utils/cmd_ref/bgp.yaml +242 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_af.yaml +164 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor.yaml +131 -0
- data/lib/cisco_node_utils/cmd_ref/bgp_neighbor_af.yaml +179 -0
- data/lib/cisco_node_utils/cmd_ref/dnsclient.yaml +34 -0
- data/lib/cisco_node_utils/cmd_ref/evpn_vni.yaml +42 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath.yaml +172 -0
- data/lib/cisco_node_utils/cmd_ref/fabricpath_topology.yaml +35 -0
- data/lib/cisco_node_utils/cmd_ref/feature.yaml +42 -0
- data/lib/cisco_node_utils/cmd_ref/fex.yaml +9 -0
- data/lib/cisco_node_utils/cmd_ref/images.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/interface.yaml +339 -0
- data/lib/cisco_node_utils/cmd_ref/interface_channel_group.yaml +28 -0
- data/lib/cisco_node_utils/cmd_ref/interface_ospf.yaml +61 -0
- data/lib/cisco_node_utils/cmd_ref/interface_portchannel.yaml +54 -0
- data/lib/cisco_node_utils/cmd_ref/interface_service_vni.yaml +32 -0
- data/lib/cisco_node_utils/cmd_ref/inventory.yaml +45 -0
- data/lib/cisco_node_utils/cmd_ref/memory.yaml +13 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_config.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/ntp_server.yaml +14 -0
- data/lib/cisco_node_utils/cmd_ref/ospf.yaml +74 -0
- data/lib/cisco_node_utils/cmd_ref/overlay_global.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/pim.yaml +40 -0
- data/lib/cisco_node_utils/cmd_ref/portchannel_global.yaml +69 -0
- data/lib/cisco_node_utils/cmd_ref/radius_global.yaml +25 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server.yaml +64 -0
- data/lib/cisco_node_utils/cmd_ref/radius_server_group.yaml +14 -0
- data/lib/cisco_node_utils/cmd_ref/show_system.yaml +5 -0
- data/lib/cisco_node_utils/cmd_ref/show_version.yaml +72 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_community.yaml +23 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_group.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_notification_receiver.yaml +50 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_server.yaml +51 -0
- data/lib/cisco_node_utils/cmd_ref/snmp_user.yaml +55 -0
- data/lib/cisco_node_utils/cmd_ref/snmpnotification.yaml +11 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_server.yaml +18 -0
- data/lib/cisco_node_utils/cmd_ref/syslog_settings.yaml +7 -0
- data/lib/cisco_node_utils/cmd_ref/system.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server.yaml +49 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_group.yaml +33 -0
- data/lib/cisco_node_utils/cmd_ref/tacacs_server_host.yaml +35 -0
- data/lib/cisco_node_utils/cmd_ref/vdc.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/virtual_service.yaml +6 -0
- data/lib/cisco_node_utils/cmd_ref/vlan.yaml +56 -0
- data/lib/cisco_node_utils/cmd_ref/vni.yaml +76 -0
- data/lib/cisco_node_utils/cmd_ref/vpc.yaml +197 -0
- data/lib/cisco_node_utils/cmd_ref/vrf.yaml +88 -0
- data/lib/cisco_node_utils/cmd_ref/vtp.yaml +38 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep.yaml +60 -0
- data/lib/cisco_node_utils/cmd_ref/vxlan_vtep_vni.yaml +39 -0
- data/lib/cisco_node_utils/cmd_ref/yum.yaml +13 -0
- data/lib/cisco_node_utils/command_reference.rb +359 -187
- data/lib/cisco_node_utils/configparser_lib.rb +1 -1
- data/lib/cisco_node_utils/dns_domain.rb +19 -5
- data/lib/cisco_node_utils/domain_name.rb +4 -8
- data/lib/cisco_node_utils/evpn_vni.rb +157 -0
- data/lib/cisco_node_utils/fabricpath_global.rb +388 -0
- data/lib/cisco_node_utils/fabricpath_topology.rb +150 -0
- data/lib/cisco_node_utils/feature.rb +111 -0
- data/lib/cisco_node_utils/interface.rb +390 -97
- data/lib/cisco_node_utils/interface_channel_group.rb +124 -0
- data/lib/cisco_node_utils/interface_ospf.rb +11 -34
- data/lib/cisco_node_utils/interface_portchannel.rb +157 -0
- data/lib/cisco_node_utils/interface_service_vni.rb +132 -0
- data/lib/cisco_node_utils/name_server.rb +1 -1
- data/lib/cisco_node_utils/node.rb +55 -249
- data/lib/cisco_node_utils/node_util.rb +5 -1
- data/lib/cisco_node_utils/ntp_config.rb +2 -2
- data/lib/cisco_node_utils/ntp_server.rb +14 -5
- data/lib/cisco_node_utils/overlay_global.rb +153 -0
- data/lib/cisco_node_utils/pim.rb +124 -0
- data/lib/cisco_node_utils/pim_group_list.rb +108 -0
- data/lib/cisco_node_utils/pim_rp_address.rb +102 -0
- data/lib/cisco_node_utils/platform.rb +8 -9
- data/lib/cisco_node_utils/portchannel_global.rb +277 -0
- data/lib/cisco_node_utils/radius_global.rb +9 -19
- data/lib/cisco_node_utils/radius_server.rb +31 -41
- data/lib/cisco_node_utils/radius_server_group.rb +117 -0
- data/lib/cisco_node_utils/router_ospf.rb +1 -1
- data/lib/cisco_node_utils/router_ospf_vrf.rb +14 -19
- data/lib/cisco_node_utils/snmp_notification_receiver.rb +158 -0
- data/lib/cisco_node_utils/snmpcommunity.rb +3 -5
- data/lib/cisco_node_utils/snmpgroup.rb +1 -1
- data/lib/cisco_node_utils/snmpnotification.rb +57 -0
- data/lib/cisco_node_utils/snmpserver.rb +8 -17
- data/lib/cisco_node_utils/snmpuser.rb +67 -28
- data/lib/cisco_node_utils/syslog_server.rb +3 -9
- data/lib/cisco_node_utils/syslog_settings.rb +2 -10
- data/lib/cisco_node_utils/tacacs_server.rb +9 -14
- data/lib/cisco_node_utils/tacacs_server_group.rb +145 -0
- data/lib/cisco_node_utils/tacacs_server_host.rb +5 -9
- data/lib/cisco_node_utils/vdc.rb +88 -0
- data/lib/cisco_node_utils/version.rb +5 -2
- data/lib/cisco_node_utils/vlan.rb +71 -8
- data/lib/cisco_node_utils/vni.rb +227 -0
- data/lib/cisco_node_utils/vpc.rb +377 -0
- data/lib/cisco_node_utils/vrf.rb +60 -9
- data/lib/cisco_node_utils/vrf_af.rb +191 -0
- data/lib/cisco_node_utils/vtp.rb +8 -6
- data/lib/cisco_node_utils/vxlan_vtep.rb +151 -0
- data/lib/cisco_node_utils/vxlan_vtep_vni.rb +234 -0
- data/lib/cisco_node_utils/yum.rb +1 -1
- data/tests/.rubocop.yml +1 -1
- data/tests/basetest.rb +16 -7
- data/tests/ciscotest.rb +55 -13
- data/tests/cmd_config.yaml +2 -2
- data/tests/platform_info.rb +3 -2
- data/tests/test_aaa_authentication_login.rb +219 -0
- data/tests/test_aaa_authentication_login_service.rb +759 -0
- data/tests/test_aaa_authorization_service.rb +1041 -0
- data/tests/test_ace.rb +160 -0
- data/tests/test_acl.rb +176 -0
- data/tests/test_bgp_af.rb +269 -13
- data/tests/test_bgp_neighbor.rb +38 -40
- data/tests/test_bgp_neighbor_af.rb +92 -32
- data/tests/test_command_config.rb +5 -5
- data/tests/test_command_reference.rb +284 -101
- data/tests/test_dns_domain.rb +1 -1
- data/tests/test_domain_name.rb +1 -1
- data/tests/test_evpn_vni.rb +106 -0
- data/tests/test_fabricpath_global.rb +243 -0
- data/tests/test_fabricpath_topology.rb +98 -0
- data/tests/test_interface.rb +292 -74
- data/tests/test_interface_channel_group.rb +74 -0
- data/tests/test_interface_ospf.rb +9 -4
- data/tests/test_interface_portchannel.rb +105 -0
- data/tests/test_interface_service_vni.rb +232 -0
- data/tests/test_interface_svi.rb +77 -62
- data/tests/test_interface_switchport.rb +17 -5
- data/tests/test_name_server.rb +1 -1
- data/tests/test_node.rb +1 -1
- data/tests/test_node_ext.rb +10 -20
- data/tests/test_ntp_config.rb +1 -1
- data/tests/test_ntp_server.rb +18 -6
- data/tests/test_overlay_global.rb +102 -0
- data/tests/test_pim.rb +177 -0
- data/tests/test_pim_group_list.rb +181 -0
- data/tests/test_pim_rp_address.rb +153 -0
- data/tests/test_platform.rb +3 -3
- data/tests/test_portchannel_global.rb +202 -0
- data/tests/test_radius_global.rb +1 -1
- data/tests/test_radius_server.rb +92 -57
- data/tests/test_radius_server_group.rb +149 -0
- data/tests/test_router_bgp.rb +283 -112
- data/tests/test_router_ospf.rb +2 -2
- data/tests/test_router_ospf_vrf.rb +4 -4
- data/tests/test_snmp_notification_receiver.rb +167 -0
- data/tests/test_snmpcommunity.rb +1 -1
- data/tests/test_snmpgroup.rb +1 -1
- data/tests/test_snmpnotification.rb +72 -0
- data/tests/test_snmpserver.rb +29 -105
- data/tests/test_snmpuser.rb +32 -30
- data/tests/test_syslog_server.rb +36 -10
- data/tests/test_syslog_settings.rb +1 -1
- data/tests/test_tacacs_server.rb +1 -1
- data/tests/test_tacacs_server_group.rb +405 -0
- data/tests/test_tacacs_server_host.rb +1 -1
- data/tests/test_vdc.rb +78 -0
- data/tests/test_vlan.rb +74 -19
- data/tests/test_vlan_mt_full.rb +95 -0
- data/tests/test_vni.rb +106 -0
- data/tests/test_vpc.rb +361 -0
- data/tests/test_vrf.rb +172 -29
- data/tests/test_vtp.rb +1 -1
- data/tests/test_vxlan_vtep.rb +214 -0
- data/tests/test_vxlan_vtep_vni.rb +201 -0
- data/tests/test_yum.rb +1 -1
- metadata +120 -11
- data/lib/cisco_node_utils/README_YAML.md +0 -325
- data/lib/cisco_node_utils/command_reference_common.yaml +0 -1051
- data/lib/cisco_node_utils/command_reference_common_bgp.yaml +0 -535
- data/lib/cisco_node_utils/command_reference_n3064.yaml +0 -13
- data/lib/cisco_node_utils/command_reference_n7k.yaml +0 -52
- data/lib/cisco_node_utils/command_reference_n9k.yaml +0 -26
- data/tests/platform_info.yaml +0 -10
data/tests/test_bgp_neighbor.rb
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Jie Yang, August 2015
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2015 Cisco and/or its affiliates.
|
|
6
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
7
7
|
#
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
9
|
# you may not use this file except in compliance with the License.
|
|
@@ -21,22 +21,25 @@ require_relative 'ciscotest'
|
|
|
21
21
|
require_relative '../lib/cisco_node_utils/bgp'
|
|
22
22
|
require_relative '../lib/cisco_node_utils/bgp_neighbor'
|
|
23
23
|
|
|
24
|
-
#
|
|
25
|
-
class
|
|
24
|
+
# TestBgpNeighbor - Minitest for RouterBgpNeighbor node utility class
|
|
25
|
+
class TestBgpNeighbor < CiscoTestCase
|
|
26
26
|
# rubocop:disable Style/ClassVars
|
|
27
27
|
@@asn = 55
|
|
28
28
|
@@addr = '1.1.1.1'
|
|
29
|
+
@@pre_clean_needed = true
|
|
29
30
|
# rubocop:enable Style/ClassVars
|
|
30
31
|
|
|
31
32
|
def setup
|
|
32
|
-
# Disable feature bgp before each test to ensure we
|
|
33
|
-
# are starting with a clean slate for each test.
|
|
34
33
|
super
|
|
35
|
-
|
|
34
|
+
remove_all_bgps if @@pre_clean_needed
|
|
35
|
+
@@pre_clean_needed = false # rubocop:disable Style/ClassVars
|
|
36
|
+
# BGP Neighbor requires the presence of a basic bgp global config
|
|
37
|
+
RouterBgp.new(@@asn)
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def teardown
|
|
39
|
-
|
|
41
|
+
super
|
|
42
|
+
remove_all_bgps
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
def get_bgpneighbor_match_line(addr, vrf='default')
|
|
@@ -52,13 +55,13 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
52
55
|
line
|
|
53
56
|
end
|
|
54
57
|
|
|
55
|
-
def
|
|
58
|
+
def test_collection_empty
|
|
56
59
|
config('no feature bgp')
|
|
57
60
|
neighbors = RouterBgpNeighbor.neighbors
|
|
58
61
|
assert_empty(neighbors, 'BGP neighbor collection is not empty')
|
|
59
62
|
end
|
|
60
63
|
|
|
61
|
-
def
|
|
64
|
+
def test_collection_not_empty
|
|
62
65
|
config('router bgp 55',
|
|
63
66
|
'neighbor 1.1.1.1',
|
|
64
67
|
'vrf red',
|
|
@@ -84,7 +87,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
84
87
|
end
|
|
85
88
|
end
|
|
86
89
|
|
|
87
|
-
def
|
|
90
|
+
def test_create_destroy
|
|
88
91
|
address = { '1.1.1.1' => '1.1.1.1',
|
|
89
92
|
'2.2.2.2/24' => '2.2.2.0/24',
|
|
90
93
|
'2000::2' => '2000::2',
|
|
@@ -103,7 +106,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
103
106
|
end
|
|
104
107
|
end
|
|
105
108
|
|
|
106
|
-
def
|
|
109
|
+
def test_description
|
|
107
110
|
%w(default test_vrf).each do |vrf|
|
|
108
111
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
109
112
|
description = "tested by mini test for vrf #{vrf}"
|
|
@@ -117,7 +120,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
117
120
|
end
|
|
118
121
|
end
|
|
119
122
|
|
|
120
|
-
def
|
|
123
|
+
def test_multiple_descriptions
|
|
121
124
|
# First create multiple routers with multiple desriptions.
|
|
122
125
|
address = ['1.1.1.1', '2.2.2.0/24', '2000::2', '2000:123:38::/64']
|
|
123
126
|
vrfs = %w(default red)
|
|
@@ -142,7 +145,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
142
145
|
end
|
|
143
146
|
end
|
|
144
147
|
|
|
145
|
-
def
|
|
148
|
+
def test_connected_check
|
|
146
149
|
%w(default test_vrf).each do |vrf|
|
|
147
150
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
148
151
|
check = [true, false, neighbor.default_connected_check]
|
|
@@ -154,7 +157,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
154
157
|
end
|
|
155
158
|
end
|
|
156
159
|
|
|
157
|
-
def
|
|
160
|
+
def test_capability_negotiation
|
|
158
161
|
%w(default test_vrf).each do |vrf|
|
|
159
162
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
160
163
|
check = [true, false, neighbor.default_capability_negotiation]
|
|
@@ -166,7 +169,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
166
169
|
end
|
|
167
170
|
end
|
|
168
171
|
|
|
169
|
-
def
|
|
172
|
+
def test_dynamic_capability
|
|
170
173
|
%w(default test_vrf).each do |vrf|
|
|
171
174
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
172
175
|
check = [true, false, neighbor.default_dynamic_capability]
|
|
@@ -178,7 +181,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
178
181
|
end
|
|
179
182
|
end
|
|
180
183
|
|
|
181
|
-
def
|
|
184
|
+
def test_ebgp_multihop
|
|
182
185
|
%w(default test_vrf).each do |vrf|
|
|
183
186
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
184
187
|
ttls = [24, neighbor.default_ebgp_multihop]
|
|
@@ -190,27 +193,23 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
190
193
|
end
|
|
191
194
|
end
|
|
192
195
|
|
|
193
|
-
def
|
|
196
|
+
def test_local_as
|
|
194
197
|
%w(default test_vrf).each do |vrf|
|
|
195
198
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
196
|
-
|
|
197
|
-
local_asnum.each do |asnum|
|
|
199
|
+
[42, '52', '1.1', neighbor.default_local_as].each do |asnum|
|
|
198
200
|
neighbor.local_as = asnum
|
|
199
|
-
|
|
200
|
-
assert_equal(asnum.to_i, neighbor.local_as)
|
|
201
|
-
else
|
|
202
|
-
assert_equal(asnum, neighbor.local_as)
|
|
203
|
-
end
|
|
201
|
+
assert_equal(asnum.to_s, neighbor.local_as)
|
|
204
202
|
end
|
|
203
|
+
|
|
205
204
|
# test a negative value
|
|
206
|
-
assert_raises(
|
|
205
|
+
assert_raises(CliError) do
|
|
207
206
|
neighbor.local_as = '52 15'
|
|
208
207
|
end
|
|
209
208
|
neighbor.destroy
|
|
210
209
|
end
|
|
211
210
|
end
|
|
212
211
|
|
|
213
|
-
def
|
|
212
|
+
def test_log_neighbor_changes
|
|
214
213
|
%w(default test_vrf).each do |vrf|
|
|
215
214
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
216
215
|
check = [:enable, :disable, :inherit, 'enable', 'disable', 'inherit',
|
|
@@ -223,7 +222,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
223
222
|
end
|
|
224
223
|
end
|
|
225
224
|
|
|
226
|
-
def
|
|
225
|
+
def test_low_memory_exempt
|
|
227
226
|
%w(default test_vrf).each do |vrf|
|
|
228
227
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
229
228
|
check = [true, false, neighbor.default_low_memory_exempt]
|
|
@@ -235,7 +234,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
235
234
|
end
|
|
236
235
|
end
|
|
237
236
|
|
|
238
|
-
def
|
|
237
|
+
def test_maximum_peers
|
|
239
238
|
# only "address/prefix" type of neighbor address will accept
|
|
240
239
|
# maximum_peers command
|
|
241
240
|
addr = '1.1.1.0/24'
|
|
@@ -250,7 +249,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
250
249
|
end
|
|
251
250
|
end
|
|
252
251
|
|
|
253
|
-
def
|
|
252
|
+
def test_password
|
|
254
253
|
%w(default test_vrf).each do |vrf|
|
|
255
254
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
256
255
|
passwords = {}
|
|
@@ -278,7 +277,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
278
277
|
end
|
|
279
278
|
end
|
|
280
279
|
|
|
281
|
-
def
|
|
280
|
+
def test_set_default_password_type
|
|
282
281
|
%w(default test_vrf).each do |vrf|
|
|
283
282
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
284
283
|
password = 'test'
|
|
@@ -304,19 +303,18 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
304
303
|
end
|
|
305
304
|
end
|
|
306
305
|
|
|
307
|
-
def
|
|
306
|
+
def test_remote_as
|
|
308
307
|
%w(default test_vrf).each do |vrf|
|
|
309
308
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
310
|
-
|
|
311
|
-
remote_asnum.each do |asnum|
|
|
309
|
+
[42, '1.1', neighbor.default_remote_as].each do |asnum|
|
|
312
310
|
neighbor.remote_as = asnum
|
|
313
|
-
assert_equal(asnum, neighbor.remote_as)
|
|
311
|
+
assert_equal(asnum.to_s, neighbor.remote_as)
|
|
314
312
|
end
|
|
315
313
|
neighbor.destroy
|
|
316
314
|
end
|
|
317
315
|
end
|
|
318
316
|
|
|
319
|
-
def
|
|
317
|
+
def test_remove_private_as_options
|
|
320
318
|
%w(default test_vrf).each do |vrf|
|
|
321
319
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
322
320
|
options = [:enable, :disable, :all, :"replace-as", 'enable', 'disable',
|
|
@@ -333,7 +331,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
333
331
|
end
|
|
334
332
|
end
|
|
335
333
|
|
|
336
|
-
def
|
|
334
|
+
def test_shutdown
|
|
337
335
|
%w(default test_vrf).each do |vrf|
|
|
338
336
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
339
337
|
check = [true, false, neighbor.default_shutdown]
|
|
@@ -345,7 +343,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
345
343
|
end
|
|
346
344
|
end
|
|
347
345
|
|
|
348
|
-
def
|
|
346
|
+
def test_suppress_4_byte_as
|
|
349
347
|
%w(default test_vrf).each do |vrf|
|
|
350
348
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
351
349
|
check = [true, false, neighbor.default_suppress_4_byte_as]
|
|
@@ -357,7 +355,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
357
355
|
end
|
|
358
356
|
end
|
|
359
357
|
|
|
360
|
-
def
|
|
358
|
+
def test_timers
|
|
361
359
|
%w(default test_vrf).each do |vrf|
|
|
362
360
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
363
361
|
timers = [{ keep: 40, hold: 90 },
|
|
@@ -376,7 +374,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
376
374
|
end
|
|
377
375
|
end
|
|
378
376
|
|
|
379
|
-
def
|
|
377
|
+
def test_transport_passive_only
|
|
380
378
|
%w(default test_vrf).each do |vrf|
|
|
381
379
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
382
380
|
check = [true, false, neighbor.default_transport_passive_only]
|
|
@@ -388,7 +386,7 @@ class TestRouterBgpNeighbor < CiscoTestCase
|
|
|
388
386
|
end
|
|
389
387
|
end
|
|
390
388
|
|
|
391
|
-
def
|
|
389
|
+
def test_update_source
|
|
392
390
|
%w(default test_vrf).each do |vrf|
|
|
393
391
|
neighbor = RouterBgpNeighbor.new(@@asn, vrf, @@addr)
|
|
394
392
|
interfaces = ['loopback1', 'Ethernet1/1', 'ethernet1/1',
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# August 2015 Chris Van Heuveln
|
|
5
5
|
#
|
|
6
|
-
# Copyright (c) 2015 Cisco and/or its affiliates.
|
|
6
|
+
# Copyright (c) 2015-2016 Cisco and/or its affiliates.
|
|
7
7
|
#
|
|
8
8
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
9
|
# you may not use this file except in compliance with the License.
|
|
@@ -22,20 +22,38 @@ require_relative '../lib/cisco_node_utils/cisco_cmn_utils'
|
|
|
22
22
|
require_relative '../lib/cisco_node_utils/bgp'
|
|
23
23
|
require_relative '../lib/cisco_node_utils/bgp_neighbor'
|
|
24
24
|
require_relative '../lib/cisco_node_utils/bgp_neighbor_af'
|
|
25
|
+
require_relative '../lib/cisco_node_utils/feature'
|
|
25
26
|
|
|
26
|
-
#
|
|
27
|
-
class
|
|
28
|
-
|
|
27
|
+
# TestBgpNeighborAF - Minitest for RouterBgpNeighborAF class
|
|
28
|
+
class TestBgpNeighborAF < CiscoTestCase
|
|
29
|
+
# rubocop:disable Style/ClassVars
|
|
30
|
+
@@pre_clean_needed = true
|
|
31
|
+
@@evpn_unsupported = false
|
|
32
|
+
# rubocop:enable Style/ClassVars
|
|
29
33
|
|
|
30
34
|
def setup
|
|
31
35
|
super
|
|
32
|
-
if @@
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
remove_all_bgps if @@pre_clean_needed
|
|
37
|
+
@@pre_clean_needed = false # rubocop:disable Style/ClassVars
|
|
38
|
+
setup_nv_overlay_evpn
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def teardown
|
|
42
|
+
super
|
|
43
|
+
remove_all_bgps
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def setup_nv_overlay_evpn
|
|
47
|
+
Feature.bgp_enable
|
|
48
|
+
|
|
49
|
+
# l2vpn evpn tests require 'nv overlay evpn' but it is not supported on
|
|
50
|
+
# all platforms
|
|
51
|
+
Feature.nv_overlay_evpn_enable unless @@evpn_unsupported
|
|
52
|
+
rescue Cisco::UnsupportedError => e
|
|
53
|
+
@@evpn_unsupported = true if # rubocop:disable Style/ClassVars
|
|
54
|
+
e.message[/unsupported on this node/]
|
|
55
|
+
# Remove the evpn AF from the test matrix
|
|
56
|
+
@@matrix.delete(:evpn)
|
|
39
57
|
end
|
|
40
58
|
|
|
41
59
|
def clean_af(af_args, ebgp=true)
|
|
@@ -61,22 +79,23 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
61
79
|
|
|
62
80
|
# AF test matrix
|
|
63
81
|
@@matrix = { # rubocop:disable Style/ClassVars
|
|
64
|
-
# 1
|
|
65
|
-
# 2
|
|
66
|
-
# 3
|
|
67
|
-
# 4
|
|
68
|
-
# 5
|
|
69
|
-
6
|
|
70
|
-
# 7
|
|
71
|
-
8
|
|
72
|
-
# 9
|
|
73
|
-
# 10
|
|
74
|
-
# 11
|
|
75
|
-
# 12
|
|
76
|
-
# 13
|
|
77
|
-
# 14
|
|
78
|
-
# 15
|
|
79
|
-
# 16
|
|
82
|
+
# 1 => [1, 'default', '10:1::1', %w(ipv4 multicast)], # UNSUPPORTED
|
|
83
|
+
# 2 => [1, 'default', '10:1::1', %w(ipv4 unicast)],
|
|
84
|
+
# 3 => [1, 'default', '10:1::1', %w(ipv6 multicast)],
|
|
85
|
+
# 4 => [1, 'default', '10:1::1', %w(ipv6 unicast)],
|
|
86
|
+
# 5 => [1, 'default', '1.1.1.1', %w(ipv4 multicast)],
|
|
87
|
+
6 => [1, 'default', '1.1.1.1', %w(ipv4 unicast)],
|
|
88
|
+
# 7 => [1, 'default', '1.1.1.1', %w(ipv6 multicast)],
|
|
89
|
+
8 => [1, 'default', '1.1.1.1', %w(ipv6 unicast)],
|
|
90
|
+
# 9 => [1, 'aa', '2.2.2.2', %w(ipv4 multicast)],
|
|
91
|
+
# 10 => [1, 'aa', '2.2.2.2', %w(ipv4 unicast)],
|
|
92
|
+
# 11 => [1, 'bb', '2.2.2.2', %w(ipv6 multicast)],
|
|
93
|
+
# 12 => [1, 'bb', '2.2.2.2', %w(ipv6 unicast)],
|
|
94
|
+
# 13 => [1, 'cc', '10:1::2', %w(ipv4 multicast)], # UNSUPPORTED
|
|
95
|
+
# 14 => [1, 'cc', '10:1::2', %w(ipv4 unicast)],
|
|
96
|
+
# 15 => [1, 'cc', '10:1::2', %w(ipv6 multicast)],
|
|
97
|
+
# 16 => [1, 'cc', '10:1::2', %w(ipv6 unicast)],
|
|
98
|
+
:evpn => [1, 'default', '1.1.1.1', %w(l2vpn evpn)],
|
|
80
99
|
}
|
|
81
100
|
|
|
82
101
|
# ---------------------------------
|
|
@@ -133,7 +152,7 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
133
152
|
refute(afs[asn][vrf][nbr_munged].key?(af),
|
|
134
153
|
"#{dbg} Failed to destroy AF")
|
|
135
154
|
end
|
|
136
|
-
@@
|
|
155
|
+
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
137
156
|
end
|
|
138
157
|
|
|
139
158
|
# ---------------------------------
|
|
@@ -155,6 +174,8 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
155
174
|
:suppress_inactive,
|
|
156
175
|
]
|
|
157
176
|
|
|
177
|
+
props = [:disable_peer_as_check] if dbg.include?('l2vpn/evpn')
|
|
178
|
+
|
|
158
179
|
# Call setter to false, then validate with getter
|
|
159
180
|
props.each { |k| af.send("#{k}=", false) }
|
|
160
181
|
props.each do |k|
|
|
@@ -198,6 +219,8 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
198
219
|
unsuppress_map: 'unsupp-map-name',
|
|
199
220
|
}
|
|
200
221
|
|
|
222
|
+
props.delete(:unsuppress_map) if dbg.include?('l2vpn/evpn')
|
|
223
|
+
|
|
201
224
|
props.each do |k, v|
|
|
202
225
|
# Call setter.
|
|
203
226
|
af.send("#{k}=", v)
|
|
@@ -222,10 +245,17 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
222
245
|
# additional_paths_receive
|
|
223
246
|
# additional_paths_send
|
|
224
247
|
# soft_reconfiguration_in
|
|
248
|
+
|
|
249
|
+
def supports_soft_reconfig_always?
|
|
250
|
+
return true if node.product_id[/N(3|9)K/]
|
|
251
|
+
false
|
|
252
|
+
end
|
|
253
|
+
|
|
225
254
|
def test_tri_states
|
|
226
255
|
@@matrix.values.each do |af_args|
|
|
227
256
|
af, dbg = clean_af(af_args)
|
|
228
257
|
|
|
258
|
+
next if dbg.include?('l2vpn/evpn')
|
|
229
259
|
%w(additional_paths_receive additional_paths_send).each do |k|
|
|
230
260
|
[:enable, :disable, :inherit, 'enable', 'disable', 'inherit',
|
|
231
261
|
af.send("default_#{k}")
|
|
@@ -235,10 +265,17 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
235
265
|
end
|
|
236
266
|
end
|
|
237
267
|
|
|
268
|
+
# The 'always' keyword is not supported on N6K / N7K
|
|
238
269
|
%w(soft_reconfiguration_in).each do |k|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
270
|
+
if supports_soft_reconfig_always?
|
|
271
|
+
array = [:enable, :always, :inherit, 'enable', 'always', 'inherit',
|
|
272
|
+
af.send("default_#{k}")]
|
|
273
|
+
else
|
|
274
|
+
array = [:enable, :inherit, 'enable', 'inherit',
|
|
275
|
+
af.send("default_#{k}")]
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
array.each do |val|
|
|
242
279
|
af.send("#{k}=", val)
|
|
243
280
|
assert_equal(val.to_sym, af.send(k), "#{dbg} Error: #{k}")
|
|
244
281
|
end
|
|
@@ -250,6 +287,7 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
250
287
|
def test_advertise_map
|
|
251
288
|
@@matrix.values.each do |af_args|
|
|
252
289
|
af, dbg = clean_af(af_args)
|
|
290
|
+
next if dbg.include?('l2vpn/evpn')
|
|
253
291
|
advertise_map(af, dbg)
|
|
254
292
|
end
|
|
255
293
|
end
|
|
@@ -319,6 +357,7 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
319
357
|
def test_default_originate
|
|
320
358
|
@@matrix.values.each do |af_args|
|
|
321
359
|
af, dbg = clean_af(af_args)
|
|
360
|
+
next if dbg.include?('l2vpn/evpn')
|
|
322
361
|
default_originate(af, dbg)
|
|
323
362
|
end
|
|
324
363
|
end
|
|
@@ -489,7 +528,7 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
489
528
|
af, dbg = clean_af(af_args)
|
|
490
529
|
send_community(af, dbg)
|
|
491
530
|
end
|
|
492
|
-
@@
|
|
531
|
+
@@pre_clean_needed = true # rubocop:disable Style/ClassVars
|
|
493
532
|
end
|
|
494
533
|
|
|
495
534
|
def send_community(af, dbg)
|
|
@@ -586,4 +625,25 @@ class TestRouterBgpNeighborAF < CiscoTestCase
|
|
|
586
625
|
assert_empty(af.soo,
|
|
587
626
|
"Test 4. #{dbg} Failed to set default '#{val}'")
|
|
588
627
|
end
|
|
628
|
+
|
|
629
|
+
# --------------------------------
|
|
630
|
+
def test_weight
|
|
631
|
+
@@matrix.values.each do |af_args|
|
|
632
|
+
af, dbg = clean_af(af_args)
|
|
633
|
+
weight(af, dbg) unless dbg.include?('l2vpn/evpn')
|
|
634
|
+
end
|
|
635
|
+
end
|
|
636
|
+
|
|
637
|
+
def weight(af, dbg)
|
|
638
|
+
# check the default value before set
|
|
639
|
+
assert_equal(af.default_weight, af.weight,
|
|
640
|
+
"Test 1. #{dbg} Error: should be default value")
|
|
641
|
+
|
|
642
|
+
af.weight = 22
|
|
643
|
+
assert_equal(22, af.weight, "Test 2. #{dbg} Failed to set weight")
|
|
644
|
+
|
|
645
|
+
af.weight = af.default_weight
|
|
646
|
+
assert_equal(af.default_weight, af.weight,
|
|
647
|
+
"Test 3. #{dbg} Failed to remove weight")
|
|
648
|
+
end
|
|
589
649
|
end
|