qvm-template: Add partial tests for qrexec_repoquery
This commit is contained in:
		
							parent
							
								
									5e1e0daa5c
								
							
						
					
					
						commit
						3fac2097eb
					
				| @ -1059,3 +1059,205 @@ gpgkey = file:///usr/share/qubes/repo-templates/keys/RPM-GPG-KEY-qubes-$releasev | |||||||
|                 self.assertTrue("argument should not be '---'" |                 self.assertTrue("argument should not be '---'" | ||||||
|                     in mock_err.getvalue()) |                     in mock_err.getvalue()) | ||||||
|         self.assertAllCalled() |         self.assertAllCalled() | ||||||
|  | 
 | ||||||
|  |     @mock.patch('qubesadmin.tools.qvm_template.qrexec_payload') | ||||||
|  |     def test_120_qrexec_repoquery_success(self, mock_payload): | ||||||
|  |         args = argparse.Namespace(updatevm='test-vm') | ||||||
|  |         mock_payload.return_value = 'str1\nstr2' | ||||||
|  |         self.app.expected_calls[('dom0', 'admin.vm.List', None, None)] = \ | ||||||
|  |             b'0\x00test-vm class=AppVM state=Halted\n' | ||||||
|  |         self.app.expected_service_calls[ | ||||||
|  |                 ('test-vm', 'qubes.TemplateSearch')] = \ | ||||||
|  | b'''qubes-template-fedora-32|0|4.1|20200101|qubes-templates-itl|1048576|2020-01-23 04:56|GPL|https://qubes-os.org|Qubes template for fedora-32|Qubes template\n for fedora-32\n| | ||||||
|  | qubes-template-fedora-32|1|4.2|20200201|qubes-templates-itl-testing|2048576|2020-02-23 04:56|GPLv2|https://qubes-os.org/?|Qubes template for fedora-32 v2|Qubes template\n for fedora-32 v2\n| | ||||||
|  | ''' | ||||||
|  |         res = qubesadmin.tools.qvm_template.qrexec_repoquery(args, self.app, | ||||||
|  |             'qubes-template-fedora-32') | ||||||
|  |         self.assertEqual(res, [ | ||||||
|  |             qubesadmin.tools.qvm_template.Template( | ||||||
|  |                 'fedora-32', | ||||||
|  |                 '0', | ||||||
|  |                 '4.1', | ||||||
|  |                 '20200101', | ||||||
|  |                 'qubes-templates-itl', | ||||||
|  |                 1048576, | ||||||
|  |                 datetime.datetime(2020, 1, 23, 4, 56), | ||||||
|  |                 'GPL', | ||||||
|  |                 'https://qubes-os.org', | ||||||
|  |                 'Qubes template for fedora-32', | ||||||
|  |                 'Qubes template\n for fedora-32\n' | ||||||
|  |             ), | ||||||
|  |             qubesadmin.tools.qvm_template.Template( | ||||||
|  |                 'fedora-32', | ||||||
|  |                 '1', | ||||||
|  |                 '4.2', | ||||||
|  |                 '20200201', | ||||||
|  |                 'qubes-templates-itl-testing', | ||||||
|  |                 2048576, | ||||||
|  |                 datetime.datetime(2020, 2, 23, 4, 56), | ||||||
|  |                 'GPLv2', | ||||||
|  |                 'https://qubes-os.org/?', | ||||||
|  |                 'Qubes template for fedora-32 v2', | ||||||
|  |                 'Qubes template\n for fedora-32 v2\n' | ||||||
|  |             ) | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(self.app.service_calls, [ | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', | ||||||
|  |                 {'filter_esc': True, 'stdout': subprocess.PIPE}), | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', b'str1\nstr2') | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(mock_payload.mock_calls, [ | ||||||
|  |             mock.call(args, self.app, 'qubes-template-fedora-32', False) | ||||||
|  |         ]) | ||||||
|  |         self.assertAllCalled() | ||||||
|  | 
 | ||||||
|  |     @mock.patch('qubesadmin.tools.qvm_template.qrexec_payload') | ||||||
|  |     def test_121_qrexec_repoquery_refresh_success(self, mock_payload): | ||||||
|  |         args = argparse.Namespace(updatevm='test-vm') | ||||||
|  |         mock_payload.return_value = 'str1\nstr2' | ||||||
|  |         self.app.expected_calls[('dom0', 'admin.vm.List', None, None)] = \ | ||||||
|  |             b'0\x00test-vm class=AppVM state=Halted\n' | ||||||
|  |         self.app.expected_service_calls[ | ||||||
|  |                 ('test-vm', 'qubes.TemplateSearch')] = \ | ||||||
|  | b'''qubes-template-fedora-32|0|4.1|20200101|qubes-templates-itl|1048576|2020-01-23 04:56|GPL|https://qubes-os.org|Qubes template for fedora-32|Qubes template\n for fedora-32\n| | ||||||
|  | qubes-template-fedora-32|1|4.2|20200201|qubes-templates-itl-testing|2048576|2020-02-23 04:56|GPLv2|https://qubes-os.org/?|Qubes template for fedora-32 v2|Qubes template\n for fedora-32 v2\n| | ||||||
|  | ''' | ||||||
|  |         res = qubesadmin.tools.qvm_template.qrexec_repoquery(args, self.app, | ||||||
|  |             'qubes-template-fedora-32', True) | ||||||
|  |         self.assertEqual(res, [ | ||||||
|  |             qubesadmin.tools.qvm_template.Template( | ||||||
|  |                 'fedora-32', | ||||||
|  |                 '0', | ||||||
|  |                 '4.1', | ||||||
|  |                 '20200101', | ||||||
|  |                 'qubes-templates-itl', | ||||||
|  |                 1048576, | ||||||
|  |                 datetime.datetime(2020, 1, 23, 4, 56), | ||||||
|  |                 'GPL', | ||||||
|  |                 'https://qubes-os.org', | ||||||
|  |                 'Qubes template for fedora-32', | ||||||
|  |                 'Qubes template\n for fedora-32\n' | ||||||
|  |             ), | ||||||
|  |             qubesadmin.tools.qvm_template.Template( | ||||||
|  |                 'fedora-32', | ||||||
|  |                 '1', | ||||||
|  |                 '4.2', | ||||||
|  |                 '20200201', | ||||||
|  |                 'qubes-templates-itl-testing', | ||||||
|  |                 2048576, | ||||||
|  |                 datetime.datetime(2020, 2, 23, 4, 56), | ||||||
|  |                 'GPLv2', | ||||||
|  |                 'https://qubes-os.org/?', | ||||||
|  |                 'Qubes template for fedora-32 v2', | ||||||
|  |                 'Qubes template\n for fedora-32 v2\n' | ||||||
|  |             ) | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(self.app.service_calls, [ | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', | ||||||
|  |                 {'filter_esc': True, 'stdout': subprocess.PIPE}), | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', b'str1\nstr2') | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(mock_payload.mock_calls, [ | ||||||
|  |             mock.call(args, self.app, 'qubes-template-fedora-32', True) | ||||||
|  |         ]) | ||||||
|  |         self.assertAllCalled() | ||||||
|  | 
 | ||||||
|  |     @mock.patch('qubesadmin.tools.qvm_template.qrexec_payload') | ||||||
|  |     def test_122_qrexec_repoquery_ignorenonspec_success(self, mock_payload): | ||||||
|  |         args = argparse.Namespace(updatevm='test-vm') | ||||||
|  |         mock_payload.return_value = 'str1\nstr2' | ||||||
|  |         self.app.expected_calls[('dom0', 'admin.vm.List', None, None)] = \ | ||||||
|  |             b'0\x00test-vm class=AppVM state=Halted\n' | ||||||
|  |         self.app.expected_service_calls[ | ||||||
|  |                 ('test-vm', 'qubes.TemplateSearch')] = \ | ||||||
|  | b'''qubes-template-debian-10|1|4.2|20200201|qubes-templates-itl-testing|2048576|2020-02-23 04:56|GPLv2|https://qubes-os.org/?|Qubes template for debian-10|Qubes template for debian-10\n| | ||||||
|  | qubes-template-fedora-32|0|4.1|20200101|qubes-templates-itl|1048576|2020-01-23 04:56|GPL|https://qubes-os.org|Qubes template for fedora-32|Qubes template for fedora-32\n| | ||||||
|  | ''' | ||||||
|  |         res = qubesadmin.tools.qvm_template.qrexec_repoquery(args, self.app, | ||||||
|  |             'qubes-template-fedora-32') | ||||||
|  |         self.assertEqual(res, [ | ||||||
|  |             qubesadmin.tools.qvm_template.Template( | ||||||
|  |                 'fedora-32', | ||||||
|  |                 '0', | ||||||
|  |                 '4.1', | ||||||
|  |                 '20200101', | ||||||
|  |                 'qubes-templates-itl', | ||||||
|  |                 1048576, | ||||||
|  |                 datetime.datetime(2020, 1, 23, 4, 56), | ||||||
|  |                 'GPL', | ||||||
|  |                 'https://qubes-os.org', | ||||||
|  |                 'Qubes template for fedora-32', | ||||||
|  |                 'Qubes template for fedora-32\n' | ||||||
|  |             ) | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(self.app.service_calls, [ | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', | ||||||
|  |                 {'filter_esc': True, 'stdout': subprocess.PIPE}), | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', b'str1\nstr2') | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(mock_payload.mock_calls, [ | ||||||
|  |             mock.call(args, self.app, 'qubes-template-fedora-32', False) | ||||||
|  |         ]) | ||||||
|  |         self.assertAllCalled() | ||||||
|  | 
 | ||||||
|  |     @mock.patch('qubesadmin.tools.qvm_template.qrexec_payload') | ||||||
|  |     def test_123_qrexec_repoquery_ignorebadname_success(self, mock_payload): | ||||||
|  |         args = argparse.Namespace(updatevm='test-vm') | ||||||
|  |         mock_payload.return_value = 'str1\nstr2' | ||||||
|  |         self.app.expected_calls[('dom0', 'admin.vm.List', None, None)] = \ | ||||||
|  |             b'0\x00test-vm class=AppVM state=Halted\n' | ||||||
|  |         self.app.expected_service_calls[ | ||||||
|  |                 ('test-vm', 'qubes.TemplateSearch')] = \ | ||||||
|  | b'''template-fedora-32|1|4.2|20200201|qubes-templates-itl-testing|2048576|2020-02-23 04:56|GPLv2|https://qubes-os.org/?|Qubes template for fedora-32 v2|Qubes template\n for fedora-32 v2\n| | ||||||
|  | qubes-template-fedora-32|0|4.1|20200101|qubes-templates-itl|1048576|2020-01-23 04:56|GPL|https://qubes-os.org|Qubes template for fedora-32|Qubes template for fedora-32\n| | ||||||
|  | ''' | ||||||
|  |         res = qubesadmin.tools.qvm_template.qrexec_repoquery(args, self.app, | ||||||
|  |             'qubes-template-fedora-32') | ||||||
|  |         self.assertEqual(res, [ | ||||||
|  |             qubesadmin.tools.qvm_template.Template( | ||||||
|  |                 'fedora-32', | ||||||
|  |                 '0', | ||||||
|  |                 '4.1', | ||||||
|  |                 '20200101', | ||||||
|  |                 'qubes-templates-itl', | ||||||
|  |                 1048576, | ||||||
|  |                 datetime.datetime(2020, 1, 23, 4, 56), | ||||||
|  |                 'GPL', | ||||||
|  |                 'https://qubes-os.org', | ||||||
|  |                 'Qubes template for fedora-32', | ||||||
|  |                 'Qubes template for fedora-32\n' | ||||||
|  |             ) | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(self.app.service_calls, [ | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', | ||||||
|  |                 {'filter_esc': True, 'stdout': subprocess.PIPE}), | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', b'str1\nstr2') | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(mock_payload.mock_calls, [ | ||||||
|  |             mock.call(args, self.app, 'qubes-template-fedora-32', False) | ||||||
|  |         ]) | ||||||
|  |         self.assertAllCalled() | ||||||
|  | 
 | ||||||
|  |     @mock.patch('qubesadmin.tools.qvm_template.qrexec_payload') | ||||||
|  |     def test_124_qrexec_repoquery_searchfail_fail(self, mock_payload): | ||||||
|  |         args = argparse.Namespace(updatevm='test-vm') | ||||||
|  |         mock_payload.return_value = 'str1\nstr2' | ||||||
|  |         self.app.expected_calls[('dom0', 'admin.vm.List', None, None)] = \ | ||||||
|  |             b'0\x00test-vm class=AppVM state=Halted\n' | ||||||
|  |         with mock.patch('qubesadmin.tests.TestProcess.wait') \ | ||||||
|  |                 as mock_wait: | ||||||
|  |             mock_wait.return_value = 1 | ||||||
|  |             with self.assertRaises(ConnectionError): | ||||||
|  |                 qubesadmin.tools.qvm_template.qrexec_repoquery(args, self.app, | ||||||
|  |                     'qubes-template-fedora-32') | ||||||
|  |         self.assertEqual(self.app.service_calls, [ | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', | ||||||
|  |                 {'filter_esc': True, 'stdout': subprocess.PIPE}), | ||||||
|  |             ('test-vm', 'qubes.TemplateSearch', b'str1\nstr2') | ||||||
|  |         ]) | ||||||
|  |         self.assertEqual(mock_payload.mock_calls, [ | ||||||
|  |             mock.call(args, self.app, 'qubes-template-fedora-32', False) | ||||||
|  |         ]) | ||||||
|  |         self.assertAllCalled() | ||||||
|  | 
 | ||||||
|  |     # TODO: Also test feeding broken data to qrexec_repoquery | ||||||
|  | |||||||
| @ -483,7 +483,8 @@ def qrexec_repoquery( | |||||||
|             if not re.fullmatch(licence_re, licence): |             if not re.fullmatch(licence_re, licence): | ||||||
|                 raise ValueError |                 raise ValueError | ||||||
|             # Check name actually matches spec |             # Check name actually matches spec | ||||||
|             if not is_match_spec(name, epoch, version, release, spec): |             if not is_match_spec(PACKAGE_NAME_PREFIX + name, | ||||||
|  |                     epoch, version, release, spec)[0]: | ||||||
|                 continue |                 continue | ||||||
| 
 | 
 | ||||||
|             result.append(Template(name, epoch, version, release, reponame, |             result.append(Template(name, epoch, version, release, reponame, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 WillyPillow
						WillyPillow