Merge ~ubuntu-release/britney/+git/britney2-ubuntu:sil2100/source-and-binaries into ~ubuntu-release/britney/+git/britney2-ubuntu:sil2100/security-britney

Proposed by Łukasz Zemczak
Status: Needs review
Proposed branch: ~ubuntu-release/britney/+git/britney2-ubuntu:sil2100/source-and-binaries
Merge into: ~ubuntu-release/britney/+git/britney2-ubuntu:sil2100/security-britney
Diff against target: 110 lines (+27/-6)
2 files modified
britney2/policies/cloud.py (+9/-3)
tests/test_cloud.py (+18/-3)
Reviewer Review Type Date Requested Status
John Chittum (community) Approve
Ubuntu Release Team Pending
Review via email: mp+438325@code.launchpad.net

Commit message

Britney operates on source packages, but cloud-test-framework on binary packages. Support listing which binaries we want to test per-source.

Description of the change

Britney operates on source packages, but cloud-test-framework on binary packages. Support listing which binaries we want to test per-source.

This is still WIP, but submitting this for discussion. The cloud_package_set file would need to be updated.

But question is: does cloud-test-framework support calls with multiple --install-ppa-package lines?

To post a comment you must log in.
Revision history for this message
John Chittum (jchittum) :
review: Approve
Revision history for this message
Aleksa Svitlica (aleksa-svitlica) wrote :

Will take a look at the rest of the MP soon but yes cloud-test-framework does support multiple --install-ppa-package lines

Unmerged commits

4a4227a... by Łukasz Zemczak

Britney operates on source packages, but cloud-test-framework on binary packages. Support listing which binaries we want to test per-source.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/britney2/policies/cloud.py b/britney2/policies/cloud.py
2index 56fa755..36ed4ba 100644
3--- a/britney2/policies/cloud.py
4+++ b/britney2/policies/cloud.py
5@@ -87,6 +87,7 @@ class CloudPolicy(BasePolicy):
6 self.failures = {}
7 self.errors = {}
8 self.email_needed = False
9+ self.package_set = {}
10
11 def initialise(self, britney):
12 super().initialise(britney)
13@@ -96,7 +97,7 @@ class CloudPolicy(BasePolicy):
14
15 def apply_src_policy_impl(self, policy_info, item, source_data_tdist, source_data_srcdist, excuse):
16 self.logger.info("Cloud Policy: Looking at {}".format(item.package))
17- if item.package not in self.package_set:
18+ if item.package not in self.package_set or not self.package_set[item.package]:
19 return PolicyVerdict.PASS
20
21 if self.dry_run:
22@@ -215,7 +216,9 @@ class CloudPolicy(BasePolicy):
23
24 with open(self.PACKAGE_SET_FILE) as file:
25 for line in file:
26- package_set.add(line.strip())
27+ source, binaries = line.strip().lsplit(': ')
28+ binaries = binaries.split(' ')
29+ package_set[source] = binaries
30
31 return package_set
32
33@@ -275,7 +278,10 @@ class CloudPolicy(BasePolicy):
34 "/snap/bin/cloud-test-framework",
35 "--instance-prefix", "britney-{}-{}".format(package, series)
36 ]
37- params.extend(self._format_install_flags(package, sources, source_type))
38+ # Britney operates on source packages, but we actually want to test all the relevant binaries
39+ self.logger.info("Cloud Policy: The following binary packages will be tested: {}".format(self.package_set[package]))
40+ for binary in self.package_set[package]:
41+ params.extend(self._format_install_flags(binary, sources, source_type))
42 params.extend(
43 [
44 "azure_gen2",
45diff --git a/tests/test_cloud.py b/tests/test_cloud.py
46index 8129cef..679f6d0 100644
47--- a/tests/test_cloud.py
48+++ b/tests/test_cloud.py
49@@ -44,6 +44,19 @@ class T(unittest.TestCase):
50 def tearDown(self):
51 self.policy._cleanup_work_directory()
52
53+ @patch("britney2.policies.cloud.CloudPolicy._format_install_flags")
54+ @patch("britney2.policies.cloud.CloudPolicy._store_extra_test_result_info")
55+ @patch("britney2.policies.cloud.CloudPolicy._parse_xunit_test_results")
56+ @patch("subprocess.run")
57+ def test_run_cloud_test_multiple_binaries(self, mock_run, mock_xunit, mock_extra, mock_flags):
58+ """Cloud tests should run for multiple binaries in a package."""
59+ self.policy.failures = {}
60+ self.policy.errors = {}
61+ self.policy.state = {}
62+ self.policy.package_set = {"hello": ["hello", "world"]}
63+ self.policy._run_cloud_tests("hello", "2.10", "zazzy", ["proposed"], "archive")
64+ self.assertEqual(mock_flags.call_count, 2)
65+
66 @patch("britney2.policies.cloud.CloudPolicy._store_extra_test_result_info")
67 @patch("britney2.policies.cloud.CloudPolicy._parse_xunit_test_results")
68 @patch("subprocess.run")
69@@ -70,6 +83,7 @@ class T(unittest.TestCase):
70 # Package already tested, no tests should run
71 self.policy.failures = {}
72 self.policy.errors = {}
73+ self.policy.package_set = {"hello": ["hello"], "chromium-browser": ["chromium-browser"]}
74 self.policy._run_cloud_tests("chromium-browser", "55.0", "zazzy", ["proposed"], "archive")
75 self.assertDictEqual(expected_state, self.policy.state)
76 mock_run.assert_not_called()
77@@ -130,6 +144,7 @@ class T(unittest.TestCase):
78 with open(self.policy.options.cloud_state_file, "w") as file:
79 json.dump(start_state, file)
80 self.policy._load_state()
81+ self.policy.package_set = {"hello": ["hello"], "chromium-browser": ["chromium-browser"]}
82
83 # Package already tested, but only had errors - rerun
84 self.policy._run_cloud_tests("chromium-browser", "55.0", "zazzy", ["proposed"], "archive")
85@@ -139,7 +154,7 @@ class T(unittest.TestCase):
86 def test_run_cloud_tests_called_for_package_in_manifest(self, mock_run):
87 """Cloud tests should run for a package in the cloud package set.
88 """
89- self.policy.package_set = set(["chromium-browser"])
90+ self.policy.package_set = {"chromium-browser": ["chromium-browser"]}
91 self.policy.options.series = "jammy"
92
93 self.policy.apply_src_policy_impl(
94@@ -154,7 +169,7 @@ class T(unittest.TestCase):
95 def test_run_cloud_tests_not_called_for_package_not_in_manifest(self, mock_run):
96 """Cloud tests should not run for packages not in the cloud package set"""
97
98- self.policy.package_set = set(["vim"])
99+ self.policy.package_set = {"vim": ["vim"]}
100 self.policy.options.series = "jammy"
101
102 self.policy.apply_src_policy_impl(
103@@ -167,7 +182,7 @@ class T(unittest.TestCase):
104 @patch("britney2.policies.cloud.CloudPolicy._run_cloud_tests")
105 def test_no_tests_run_during_dry_run(self, mock_run, smtp):
106 self.policy = CloudPolicy(self.fake_options, {}, dry_run=True)
107- self.policy.package_set = set(["chromium-browser"])
108+ self.policy.package_set = {"chromium-browser": ["chromium-browser"]}
109 self.policy.options.series = "jammy"
110 self.policy.source = "jammy-proposed"
111

Subscribers

People subscribed via source and target branches