Skip to content

Commit 781b71c

Browse files
committed
T7432: smoketests for RPKI VRF support
1 parent 1fa28ab commit 781b71c

File tree

1 file changed

+105
-82
lines changed

1 file changed

+105
-82
lines changed

smoketest/scripts/cli/test_protocols_rpki.py

Lines changed: 105 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525
from vyos.utils.process import process_named_running
2626

2727
base_path = ['protocols', 'rpki']
28+
base_frr_config_args = {'string': 'rpki', 'endsection': '^exit'}
29+
vrf = 'blue'
30+
vrf_path = ['vrf', 'name', vrf]
31+
vrf_frr_config_args = {'string': f'vrf {vrf}', 'endsection':'^exit-vrf',
32+
'substring': ' rpki', 'endsubsection': '^ exit'}
2833
rpki_key_name = 'rpki-smoketest'
2934
rpki_key_type = 'ssh-rsa'
3035

@@ -112,14 +117,19 @@ def setUpClass(cls):
112117
# ensure we can also run this test on a live system - so lets clean
113118
# out the current configuration :)
114119
cls.cli_delete(cls, base_path)
120+
cls.cli_delete(cls, vrf_path)
115121
# Enable CSTORE guard time required by FRR related tests
116122
cls._commit_guard_time = CSTORE_GUARD_TIME
117123

118124
def tearDown(self):
119125
self.cli_delete(base_path)
126+
self.cli_delete(vrf_path)
120127
self.cli_commit()
121128

122-
frrconfig = self.getFRRconfig('rpki', endsection='^exit')
129+
frrconfig = self.getFRRconfig(**base_frr_config_args)
130+
self.assertNotIn(f'rpki', frrconfig)
131+
132+
frrconfig = self.getFRRconfig(**vrf_frr_config_args)
123133
self.assertNotIn(f'rpki', frrconfig)
124134

125135
# check process health and continuity
@@ -144,27 +154,30 @@ def test_rpki(self):
144154
},
145155
}
146156

147-
self.cli_set(base_path + ['expire-interval', expire_interval])
148-
self.cli_set(base_path + ['polling-period', polling_period])
149-
self.cli_set(base_path + ['retry-interval', retry_interval])
157+
for test_set in [ {'path': base_path, 'frrargs': base_frr_config_args},
158+
{'path': vrf_path + base_path, 'frrargs': vrf_frr_config_args} ]:
150159

151-
for peer, peer_config in cache.items():
152-
self.cli_set(base_path + ['cache', peer, 'port', peer_config['port']])
153-
self.cli_set(base_path + ['cache', peer, 'preference', peer_config['preference']])
160+
self.cli_set(test_set['path'] + ['expire-interval', expire_interval])
161+
self.cli_set(test_set['path'] + ['polling-period', polling_period])
162+
self.cli_set(test_set['path'] + ['retry-interval', retry_interval])
154163

155-
# commit changes
156-
self.cli_commit()
164+
for peer, peer_config in cache.items():
165+
self.cli_set(test_set['path'] + ['cache', peer, 'port', peer_config['port']])
166+
self.cli_set(test_set['path'] + ['cache', peer, 'preference', peer_config['preference']])
167+
168+
# commit changes
169+
self.cli_commit()
157170

158-
# Verify FRR configuration
159-
frrconfig = self.getFRRconfig('rpki', endsection='^exit')
160-
self.assertIn(f'rpki expire_interval {expire_interval}', frrconfig)
161-
self.assertIn(f'rpki polling_period {polling_period}', frrconfig)
162-
self.assertIn(f'rpki retry_interval {retry_interval}', frrconfig)
171+
# Verify FRR configuration
172+
frrconfig = self.getFRRconfig(**test_set['frrargs'])
173+
self.assertIn(f'rpki expire_interval {expire_interval}', frrconfig)
174+
self.assertIn(f'rpki polling_period {polling_period}', frrconfig)
175+
self.assertIn(f'rpki retry_interval {retry_interval}', frrconfig)
163176

164-
for peer, peer_config in cache.items():
165-
port = peer_config['port']
166-
preference = peer_config['preference']
167-
self.assertIn(f'rpki cache tcp {peer} {port} preference {preference}', frrconfig)
177+
for peer, peer_config in cache.items():
178+
port = peer_config['port']
179+
preference = peer_config['preference']
180+
self.assertIn(f'rpki cache tcp {peer} {port} preference {preference}', frrconfig)
168181

169182
def test_rpki_ssh(self):
170183
polling = '7200'
@@ -185,48 +198,51 @@ def test_rpki_ssh(self):
185198
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'key', rpki_ssh_pub.replace('\n','')])
186199
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'type', rpki_key_type])
187200

188-
for cache_name, cache_config in cache.items():
189-
self.cli_set(base_path + ['cache', cache_name, 'port', cache_config['port']])
190-
self.cli_set(base_path + ['cache', cache_name, 'preference', cache_config['preference']])
191-
self.cli_set(base_path + ['cache', cache_name, 'ssh', 'username', cache_config['username']])
192-
self.cli_set(base_path + ['cache', cache_name, 'ssh', 'key', rpki_key_name])
201+
for test_set in [ {'path': base_path, 'frrargs': base_frr_config_args},
202+
{'path': vrf_path + base_path, 'frrargs': vrf_frr_config_args} ]:
193203

194-
# commit changes
195-
self.cli_commit()
204+
for cache_name, cache_config in cache.items():
205+
self.cli_set(test_set['path'] + ['cache', cache_name, 'port', cache_config['port']])
206+
self.cli_set(test_set['path'] + ['cache', cache_name, 'preference', cache_config['preference']])
207+
self.cli_set(test_set['path'] + ['cache', cache_name, 'ssh', 'username', cache_config['username']])
208+
self.cli_set(test_set['path'] + ['cache', cache_name, 'ssh', 'key', rpki_key_name])
196209

197-
# Verify FRR configuration
198-
frrconfig = self.getFRRconfig('rpki', endsection='^exit')
199-
for cache_name, cache_config in cache.items():
200-
port = cache_config['port']
201-
preference = cache_config['preference']
202-
username = cache_config['username']
203-
self.assertIn(f'rpki cache ssh {cache_name} {port} {username} /run/frr/id_rpki_{cache_name} /run/frr/id_rpki_{cache_name}.pub preference {preference}', frrconfig)
204-
205-
# Verify content of SSH keys
206-
tmp = read_file(f'/run/frr/id_rpki_{cache_name}')
207-
self.assertIn(rpki_ssh_key.replace('\n',''), tmp)
208-
tmp = read_file(f'/run/frr/id_rpki_{cache_name}.pub')
209-
self.assertIn(rpki_ssh_pub.replace('\n',''), tmp)
210-
211-
# Change OpenSSH key and verify it was properly written to filesystem
212-
self.cli_set(['pki', 'openssh', rpki_key_name, 'private', 'key', rpki_ssh_key_replacement.replace('\n','')])
213-
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'key', rpki_ssh_pub_replacement.replace('\n','')])
214-
# commit changes
215-
self.cli_commit()
210+
# commit changes
211+
self.cli_commit()
212+
213+
# Verify FRR configuration
214+
frrconfig = self.getFRRconfig(**test_set['frrargs'])
215+
for cache_name, cache_config in cache.items():
216+
port = cache_config['port']
217+
preference = cache_config['preference']
218+
username = cache_config['username']
219+
self.assertIn(f'rpki cache ssh {cache_name} {port} {username} /run/frr/id_rpki_{cache_name} /run/frr/id_rpki_{cache_name}.pub preference {preference}', frrconfig)
220+
221+
# Verify content of SSH keys
222+
tmp = read_file(f'/run/frr/id_rpki_{cache_name}')
223+
self.assertIn(rpki_ssh_key.replace('\n',''), tmp)
224+
tmp = read_file(f'/run/frr/id_rpki_{cache_name}.pub')
225+
self.assertIn(rpki_ssh_pub.replace('\n',''), tmp)
226+
227+
# Change OpenSSH key and verify it was properly written to filesystem
228+
self.cli_set(['pki', 'openssh', rpki_key_name, 'private', 'key', rpki_ssh_key_replacement.replace('\n','')])
229+
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'key', rpki_ssh_pub_replacement.replace('\n','')])
230+
# commit changes
231+
self.cli_commit()
216232

217-
for cache_name, cache_config in cache.items():
218-
port = cache_config['port']
219-
preference = cache_config['preference']
220-
username = cache_config['username']
221-
self.assertIn(f'rpki cache ssh {cache_name} {port} {username} /run/frr/id_rpki_{cache_name} /run/frr/id_rpki_{cache_name}.pub preference {preference}', frrconfig)
233+
for cache_name, cache_config in cache.items():
234+
port = cache_config['port']
235+
preference = cache_config['preference']
236+
username = cache_config['username']
237+
self.assertIn(f'rpki cache ssh {cache_name} {port} {username} /run/frr/id_rpki_{cache_name} /run/frr/id_rpki_{cache_name}.pub preference {preference}', frrconfig)
222238

223-
# Verify content of SSH keys
224-
tmp = read_file(f'/run/frr/id_rpki_{cache_name}')
225-
self.assertIn(rpki_ssh_key_replacement.replace('\n',''), tmp)
226-
tmp = read_file(f'/run/frr/id_rpki_{cache_name}.pub')
227-
self.assertIn(rpki_ssh_pub_replacement.replace('\n',''), tmp)
239+
# Verify content of SSH keys
240+
tmp = read_file(f'/run/frr/id_rpki_{cache_name}')
241+
self.assertIn(rpki_ssh_key_replacement.replace('\n',''), tmp)
242+
tmp = read_file(f'/run/frr/id_rpki_{cache_name}.pub')
243+
self.assertIn(rpki_ssh_pub_replacement.replace('\n',''), tmp)
228244

229-
self.cli_delete(['pki', 'openssh'])
245+
self.cli_delete(['pki', 'openssh'])
230246

231247
def test_rpki_verify_preference(self):
232248
cache = {
@@ -240,13 +256,16 @@ def test_rpki_verify_preference(self):
240256
},
241257
}
242258

243-
for peer, peer_config in cache.items():
244-
self.cli_set(base_path + ['cache', peer, 'port', peer_config['port']])
245-
self.cli_set(base_path + ['cache', peer, 'preference', peer_config['preference']])
259+
for test_set in [ {'path': base_path, 'frrargs': base_frr_config_args},
260+
{'path': vrf_path + base_path, 'frrargs': vrf_frr_config_args} ]:
246261

247-
# check validate() - preferences must be unique
248-
with self.assertRaises(ConfigSessionError):
249-
self.cli_commit()
262+
for peer, peer_config in cache.items():
263+
self.cli_set(test_set['path'] + ['cache', peer, 'port', peer_config['port']])
264+
self.cli_set(test_set['path'] + ['cache', peer, 'preference', peer_config['preference']])
265+
266+
# check validate() - preferences must be unique
267+
with self.assertRaises(ConfigSessionError):
268+
self.cli_commit()
250269

251270
def test_rpki_source_address(self):
252271
peer = '192.0.2.1'
@@ -257,31 +276,35 @@ def test_rpki_source_address(self):
257276

258277
self.cli_set(['interfaces', 'ethernet', 'eth0', 'address', f'{source_address}/24'])
259278

260-
# Configure a TCP cache server
261-
self.cli_set(base_path + ['cache', peer, 'port', port])
262-
self.cli_set(base_path + ['cache', peer, 'preference', preference])
263-
self.cli_set(base_path + ['cache', peer, 'source-address', source_address])
264-
self.cli_commit()
265279

266-
# Verify FRR configuration
267-
frrconfig = self.getFRRconfig('rpki')
268-
self.assertIn(f'rpki cache tcp {peer} {port} source {source_address} preference {preference}', frrconfig)
280+
for test_set in [ {'path': base_path, 'frrargs': base_frr_config_args},
281+
{'path': vrf_path + base_path, 'frrargs': vrf_frr_config_args} ]:
269282

270-
self.cli_set(['pki', 'openssh', rpki_key_name, 'private', 'key', rpki_ssh_key.replace('\n', '')])
271-
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'key', rpki_ssh_pub.replace('\n', '')])
272-
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'type', rpki_key_type])
283+
# Configure a TCP cache server
284+
self.cli_set(test_set['path'] + ['cache', peer, 'port', port])
285+
self.cli_set(test_set['path'] + ['cache', peer, 'preference', preference])
286+
self.cli_set(test_set['path'] + ['cache', peer, 'source-address', source_address])
287+
self.cli_commit()
273288

274-
# Configure a SSH cache server
275-
self.cli_set(base_path + ['cache', peer, 'ssh', 'username', username])
276-
self.cli_set(base_path + ['cache', peer, 'ssh', 'key', rpki_key_name])
277-
self.cli_commit()
289+
# Verify FRR configuration
290+
frrconfig = self.getFRRconfig(**test_set['frrargs'])
291+
self.assertIn(f'rpki cache tcp {peer} {port} source {source_address} preference {preference}', frrconfig)
292+
293+
self.cli_set(['pki', 'openssh', rpki_key_name, 'private', 'key', rpki_ssh_key.replace('\n', '')])
294+
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'key', rpki_ssh_pub.replace('\n', '')])
295+
self.cli_set(['pki', 'openssh', rpki_key_name, 'public', 'type', rpki_key_type])
296+
297+
# Configure a SSH cache server
298+
self.cli_set(test_set['path'] + ['cache', peer, 'ssh', 'username', username])
299+
self.cli_set(test_set['path'] + ['cache', peer, 'ssh', 'key', rpki_key_name])
300+
self.cli_commit()
278301

279-
# Verify FRR configuration
280-
frrconfig = self.getFRRconfig('rpki')
281-
self.assertIn(
282-
f'rpki cache ssh {peer} {port} {username} /run/frr/id_rpki_{peer} /run/frr/id_rpki_{peer}.pub source {source_address} preference {preference}',
283-
frrconfig,
284-
)
302+
# Verify FRR configuration
303+
frrconfig = self.getFRRconfig(**test_set['frrargs'])
304+
self.assertIn(
305+
f'rpki cache ssh {peer} {port} {username} /run/frr/id_rpki_{peer} /run/frr/id_rpki_{peer}.pub source {source_address} preference {preference}',
306+
frrconfig,
307+
)
285308

286309

287310
if __name__ == '__main__':

0 commit comments

Comments
 (0)