qvm-template: fix installing already cached templates

And also enhance tests to verify download() function return value.
This commit is contained in:
Marek Marczykowski-Górecki 2021-04-02 03:31:04 +02:00
parent 7978e17aeb
commit 6c376d68c4
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724
2 changed files with 41 additions and 9 deletions

View File

@ -3535,7 +3535,7 @@ test-vm : Qubes template for fedora-31
nogpgcheck=False, nogpgcheck=False,
retries=1 retries=1
) )
qubesadmin.tools.qvm_template.download(args, self.app, dir, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, dir, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576), ('1', '2', '3'), 'qubes-templates-itl', 1048576),
'fedora-32': qubesadmin.tools.qvm_template.DlEntry( 'fedora-32': qubesadmin.tools.qvm_template.DlEntry(
@ -3543,6 +3543,8 @@ test-vm : Qubes template for fedora-31
'qubes-templates-itl-testing', 'qubes-templates-itl-testing',
2048576) 2048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertIn('fedora-32', pkgs)
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3', mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3',
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
@ -3575,10 +3577,11 @@ test-vm : Qubes template for fedora-31
downloaddir=dir downloaddir=dir
) )
with mock.patch('sys.stderr', new=io.StringIO()) as mock_err: with mock.patch('sys.stderr', new=io.StringIO()) as mock_err:
qubesadmin.tools.qvm_template.download(args, self.app, None, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, None, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576) ('1', '2', '3'), 'qubes-templates-itl', 1048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3', mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3',
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
@ -3608,9 +3611,10 @@ test-vm : Qubes template for fedora-31
releasever='4.1', releasever='4.1',
nogpgcheck=False, nogpgcheck=False,
) )
qubesadmin.tools.qvm_template.download(args, self.app, pkgs = qubesadmin.tools.qvm_template.download(args, self.app,
dir, None, dir, None,
qubesadmin.tools.qvm_template.VersionSelector.LATEST_LOWER) qubesadmin.tools.qvm_template.VersionSelector.LATEST_LOWER)
self.assertIn('fedora-31', pkgs)
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3', mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3',
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
@ -3642,10 +3646,11 @@ test-vm : Qubes template for fedora-31
nogpgcheck=False, nogpgcheck=False,
downloaddir=dir downloaddir=dir
) )
qubesadmin.tools.qvm_template.download(args, self.app, None, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, None, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576) ('1', '2', '3'), 'qubes-templates-itl', 1048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3', mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3',
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
@ -3673,7 +3678,7 @@ test-vm : Qubes template for fedora-31
downloaddir=dir downloaddir=dir
) )
with mock.patch('sys.stderr', new=io.StringIO()) as mock_err: with mock.patch('sys.stderr', new=io.StringIO()) as mock_err:
qubesadmin.tools.qvm_template.download(args, self.app, None, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, None, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576), ('1', '2', '3'), 'qubes-templates-itl', 1048576),
'fedora-32': qubesadmin.tools.qvm_template.DlEntry( 'fedora-32': qubesadmin.tools.qvm_template.DlEntry(
@ -3681,8 +3686,22 @@ test-vm : Qubes template for fedora-31
'qubes-templates-itl-testing', 'qubes-templates-itl-testing',
2048576) 2048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertIn('fedora-32', pkgs)
self.assertTrue('already exists, skipping' self.assertTrue('already exists, skipping'
in mock_err.getvalue()) in mock_err.getvalue())
self.assertEqual(mock_verify_rpm.mock_calls, [
mock.call(
dir + '/qubes-template-fedora-31-1:2-3.rpm',
'/tmp/keyring.gpg',
template_name='fedora-31',
),
mock.call(
re_str(dir + '/.*/qubes-template-fedora-32-0:1-2.rpm.UNTRUSTED'),
'/tmp/keyring.gpg',
template_name='fedora-32',
),
])
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-32-0:1-2', mock.call(args, self.app, 'qubes-template-fedora-32-0:1-2',
re_str(dir + '/.*/qubes-template-fedora-32-0:1-2.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-32-0:1-2.rpm.UNTRUSTED'),
@ -3710,10 +3729,11 @@ test-vm : Qubes template for fedora-31
downloaddir=dir downloaddir=dir
) )
with mock.patch('sys.stderr', new=io.StringIO()) as mock_err: with mock.patch('sys.stderr', new=io.StringIO()) as mock_err:
qubesadmin.tools.qvm_template.download(args, self.app, None, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, None, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576) ('1', '2', '3'), 'qubes-templates-itl', 1048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertTrue('already exists, skipping' self.assertTrue('already exists, skipping'
in mock_err.getvalue()) in mock_err.getvalue())
self.assertEqual(mock_qrexec.mock_calls, []) self.assertEqual(mock_qrexec.mock_calls, [])
@ -3741,10 +3761,11 @@ test-vm : Qubes template for fedora-31
downloaddir=dir downloaddir=dir
) )
with mock.patch('sys.stderr', new=io.StringIO()) as mock_err: with mock.patch('sys.stderr', new=io.StringIO()) as mock_err:
qubesadmin.tools.qvm_template.download(args, self.app, None, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, None, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576) ('1', '2', '3'), 'qubes-templates-itl', 1048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertTrue('already exists, skipping' self.assertTrue('already exists, skipping'
in mock_err.getvalue()) in mock_err.getvalue())
self.assertEqual(mock_qrexec.mock_calls, []) self.assertEqual(mock_qrexec.mock_calls, [])
@ -3776,14 +3797,22 @@ test-vm : Qubes template for fedora-31
) )
with mock.patch('sys.stderr', new=io.StringIO()) as mock_err, \ with mock.patch('sys.stderr', new=io.StringIO()) as mock_err, \
mock.patch('os.remove') as mock_rm: mock.patch('os.remove') as mock_rm:
qubesadmin.tools.qvm_template.download(args, self.app, None, { pkgs = qubesadmin.tools.qvm_template.download(args, self.app, None, {
'fedora-31': qubesadmin.tools.qvm_template.DlEntry( 'fedora-31': qubesadmin.tools.qvm_template.DlEntry(
('1', '2', '3'), 'qubes-templates-itl', 1048576) ('1', '2', '3'), 'qubes-templates-itl', 1048576)
}) })
self.assertIn('fedora-31', pkgs)
self.assertTrue('retrying...' in mock_err.getvalue()) self.assertTrue('retrying...' in mock_err.getvalue())
self.assertEqual(mock_rm.mock_calls, [ self.assertEqual(mock_rm.mock_calls, [
mock.call(re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED')) mock.call(re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'))
]) ])
self.assertEqual(mock_verify_rpm.mock_calls, [
mock.call(
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
'/tmp/keyring.gpg',
template_name='fedora-31',
),
])
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3', mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3',
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
@ -3832,6 +3861,7 @@ test-vm : Qubes template for fedora-31
mock.call(re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED')), mock.call(re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED')),
mock.call(re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED')) mock.call(re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'))
]) ])
self.assertEqual(mock_verify_rpm.mock_calls, [])
self.assertEqual(mock_qrexec.mock_calls, [ self.assertEqual(mock_qrexec.mock_calls, [
mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3', mock.call(args, self.app, 'qubes-template-fedora-31-1:2-3',
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm.UNTRUSTED'),
@ -3875,6 +3905,7 @@ test-vm : Qubes template for fedora-31
re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm'), re_str(dir + '/.*/qubes-template-fedora-31-1:2-3.rpm'),
1048576) 1048576)
]) ])
self.assertEqual(mock_verify_rpm.mock_calls, [])
self.assertEqual(mock_dllist.mock_calls, []) self.assertEqual(mock_dllist.mock_calls, [])
@mock.patch('qubesadmin.tools.qvm_template.verify_rpm') @mock.patch('qubesadmin.tools.qvm_template.verify_rpm')

View File

@ -807,7 +807,8 @@ def download(
print('\'%s\' already exists, skipping...' % target, print('\'%s\' already exists, skipping...' % target,
file=sys.stderr) file=sys.stderr)
# but still verify the package # but still verify the package
verify_rpm(target, repo_key, template_name=name) package_hdrs[name] = verify_rpm(
target, repo_key, template_name=name)
continue continue
print('Downloading \'%s\'...' % spec, file=sys.stderr) print('Downloading \'%s\'...' % spec, file=sys.stderr)
done = False done = False