Merge ~ilasc/launchpad:add-get-snapbuild-by-revision into launchpad:master
- Git
- lp:~ilasc/launchpad
- add-get-snapbuild-by-revision
- Merge into master
Proposed by
Ioana Lasc
Status: | Merged |
---|---|
Approved by: | Ioana Lasc |
Approved revision: | 54adb9f372ec8e62c9ef5cd34452cf5351c0d0e0 |
Merge reported by: | Otto Co-Pilot |
Merged at revision: | not available |
Proposed branch: | ~ilasc/launchpad:add-get-snapbuild-by-revision |
Merge into: | launchpad:master |
Prerequisite: | ~ilasc/launchpad:populate-store-upload-revision |
Diff against target: |
333 lines (+123/-36) 6 files modified
lib/lp/scripts/tests/test_garbo.py (+18/-36) lib/lp/snappy/interfaces/snap.py (+15/-0) lib/lp/snappy/model/snap.py (+14/-0) lib/lp/snappy/model/snapbuildjob.py (+1/-0) lib/lp/snappy/tests/test_snap.py (+49/-0) lib/lp/snappy/tests/test_snapbuildjob.py (+26/-0) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Colin Watson (community) | Approve | ||
Review via email: mp+407781@code.launchpad.net |
Commit message
Add getBuildByStore
Description of the change
This needs the new column "_store_
To post a comment you must log in.
- 5d86f07... by Ioana Lasc
-
Merge branch 'populate-
store-upload- revision' into add-get- snapbuild- by-revision - df6797e... by Ioana Lasc
-
Address code review comments
Revision history for this message
Colin Watson (cjwatson) : | # |
review:
Approve
- 54adb9f... by Ioana Lasc
-
Remove MP number from comment
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/lib/lp/scripts/tests/test_garbo.py b/lib/lp/scripts/tests/test_garbo.py | |||
2 | index 3a43045..5fb7f77 100644 | |||
3 | --- a/lib/lp/scripts/tests/test_garbo.py | |||
4 | +++ b/lib/lp/scripts/tests/test_garbo.py | |||
5 | @@ -2013,52 +2013,34 @@ class TestGarbo(FakeAdapterMixin, TestCaseWithFactory): | |||
6 | 2013 | with dbuser(config.ISnapStoreUploadJobSource.dbuser): | 2013 | with dbuser(config.ISnapStoreUploadJobSource.dbuser): |
7 | 2014 | run_isolated_jobs([job]) | 2014 | run_isolated_jobs([job]) |
8 | 2015 | 2015 | ||
14 | 2016 | # this mimics what we have in the DB right now: | 2016 | # The _store_upload_revision now gets populated when |
15 | 2017 | # uploaded snaps that do not have the new DB column | 2017 | # uploading the build as part of the |
16 | 2018 | # _store_upload_revision populated yet | 2018 | # `SnapStoreUploadJob.store_revision` property setter. |
17 | 2019 | populator = PopulateSnapBuildStoreRevision(None) | 2019 | # Assert that upload job above populated _store_upload_revision |
18 | 2020 | filter = populator.findSnapBuilds() | 2020 | # for build1: |
19 | 2021 | build1 = removeSecurityProxy(build1) | 2021 | build1 = removeSecurityProxy(build1) |
20 | 2022 | self.assertEqual(1, filter.count()) | ||
21 | 2023 | self.assertEqual(build1, filter.one()) | ||
22 | 2024 | self.assertEqual(build1._store_upload_revision, None) | ||
23 | 2025 | |||
24 | 2026 | # run the garbo job and verify _store_upload_revision | ||
25 | 2027 | # is not populated with the value assigned to the build during upload | ||
26 | 2028 | self.runDaily() | ||
27 | 2029 | switch_dbuser('testadmin') | ||
28 | 2030 | self.assertEqual(build1._store_upload_revision, 1) | 2022 | self.assertEqual(build1._store_upload_revision, 1) |
29 | 2031 | 2023 | ||
48 | 2032 | # Tests that of all builds for the same snap only those that have | 2024 | # and that the populator job doesn't pick up build1 anymore. |
49 | 2033 | # been uploaded to the store will get | 2025 | populator = PopulateSnapBuildStoreRevision(None) |
50 | 2034 | # their new _store_upload_revision DB column updated | 2026 | filter = populator.findSnapBuilds() |
51 | 2035 | build2 = self.factory.makeSnapBuild( | 2027 | self.assertEqual(0, filter.count()) |
52 | 2036 | snap=snap1, | 2028 | |
53 | 2037 | status=BuildStatus.FULLYBUILT) | 2029 | # We manually simulate here the situation |
54 | 2038 | build3 = self.factory.makeSnapBuild( | 2030 | # where a job to upload snap to the store has run in the past |
55 | 2039 | snap=snap1, | 2031 | # without populating the new column (prior to MP 407781). |
56 | 2040 | status=BuildStatus.FULLYBUILT) | 2032 | build1._store_upload_revision = None |
39 | 2041 | job = getUtility(ISnapStoreUploadJobSource).create(build2) | ||
40 | 2042 | client = FakeSnapStoreClient() | ||
41 | 2043 | client.upload.result = ( | ||
42 | 2044 | "http://sca.example/dev/api/snaps/1/builds/2/status") | ||
43 | 2045 | client.checkStatus.result = ( | ||
44 | 2046 | "http://sca.example/dev/click-apps/1/rev/2/", 1) | ||
45 | 2047 | self.useFixture(ZopeUtilityFixture(client, ISnapStoreClient)) | ||
46 | 2048 | with dbuser(config.ISnapStoreUploadJobSource.dbuser): | ||
47 | 2049 | run_isolated_jobs([job]) | ||
57 | 2050 | 2033 | ||
58 | 2034 | # in this case the populator garbo job should pick up build1 | ||
59 | 2035 | # to update the _store_upload_revision for it: | ||
60 | 2051 | populator = PopulateSnapBuildStoreRevision(None) | 2036 | populator = PopulateSnapBuildStoreRevision(None) |
61 | 2052 | filter = populator.findSnapBuilds() | 2037 | filter = populator.findSnapBuilds() |
62 | 2053 | self.assertEqual(1, filter.count()) | 2038 | self.assertEqual(1, filter.count()) |
64 | 2054 | self.assertEqual(build2, filter.one()) | 2039 | self.assertEqual(build1, filter.one()) |
65 | 2055 | 2040 | ||
66 | 2056 | self.runDaily() | 2041 | self.runDaily() |
67 | 2057 | switch_dbuser('testadmin') | 2042 | switch_dbuser('testadmin') |
72 | 2058 | build2 = removeSecurityProxy(build2) | 2043 | self.assertEqual(build1._store_upload_revision, 1) |
69 | 2059 | self.assertEqual(build2._store_upload_revision, 1) | ||
70 | 2060 | build3 = removeSecurityProxy(build3) | ||
71 | 2061 | self.assertIsNone(build3._store_upload_revision) | ||
73 | 2062 | 2044 | ||
74 | 2063 | 2045 | ||
75 | 2064 | class TestGarboTasks(TestCaseWithFactory): | 2046 | class TestGarboTasks(TestCaseWithFactory): |
76 | diff --git a/lib/lp/snappy/interfaces/snap.py b/lib/lp/snappy/interfaces/snap.py | |||
77 | index 2445553..088af8c 100644 | |||
78 | --- a/lib/lp/snappy/interfaces/snap.py | |||
79 | +++ b/lib/lp/snappy/interfaces/snap.py | |||
80 | @@ -529,6 +529,21 @@ class ISnapView(Interface): | |||
81 | 529 | 529 | ||
82 | 530 | @call_with(user=REQUEST_USER) | 530 | @call_with(user=REQUEST_USER) |
83 | 531 | @operation_parameters( | 531 | @operation_parameters( |
84 | 532 | store_upload_revision=Int(title="Store revision", | ||
85 | 533 | required=True)) | ||
86 | 534 | @export_read_operation() | ||
87 | 535 | @operation_for_version("devel") | ||
88 | 536 | def getBuildByStoreRevision(store_upload_revision, user=None): | ||
89 | 537 | """Returns the build (if any) of that snap recipe | ||
90 | 538 | that has the given store_upload_revision. | ||
91 | 539 | |||
92 | 540 | :param store_upload_revision: The revision assigned by the store. | ||
93 | 541 | :param user: The `IPerson` requesting this information. | ||
94 | 542 | :return: An 'ISnapBuild' or None. | ||
95 | 543 | """ | ||
96 | 544 | |||
97 | 545 | @call_with(user=REQUEST_USER) | ||
98 | 546 | @operation_parameters( | ||
99 | 532 | request_ids=List( | 547 | request_ids=List( |
100 | 533 | title=_("A list of snap build request IDs."), value_type=Int(), | 548 | title=_("A list of snap build request IDs."), value_type=Int(), |
101 | 534 | required=False), | 549 | required=False), |
102 | diff --git a/lib/lp/snappy/model/snap.py b/lib/lp/snappy/model/snap.py | |||
103 | index 24aa2be..e68182e 100644 | |||
104 | --- a/lib/lp/snappy/model/snap.py | |||
105 | +++ b/lib/lp/snappy/model/snap.py | |||
106 | @@ -1111,6 +1111,20 @@ class Snap(Storm, WebhookTargetMixin): | |||
107 | 1111 | 1111 | ||
108 | 1112 | return result | 1112 | return result |
109 | 1113 | 1113 | ||
110 | 1114 | def getBuildByStoreRevision(self, store_upload_revision, user=None): | ||
111 | 1115 | build = Store.of(self).find( | ||
112 | 1116 | SnapBuild, | ||
113 | 1117 | SnapBuild.snap == self, | ||
114 | 1118 | SnapBuild._store_upload_revision == store_upload_revision, | ||
115 | 1119 | SnapBuild.archive == Archive.id, | ||
116 | 1120 | Archive._enabled, | ||
117 | 1121 | get_enabled_archive_filter( | ||
118 | 1122 | user, | ||
119 | 1123 | include_public=True, | ||
120 | 1124 | include_subscribed=True) | ||
121 | 1125 | ).one() | ||
122 | 1126 | return build | ||
123 | 1127 | |||
124 | 1114 | @property | 1128 | @property |
125 | 1115 | def builds(self): | 1129 | def builds(self): |
126 | 1116 | """See `ISnap`.""" | 1130 | """See `ISnap`.""" |
127 | diff --git a/lib/lp/snappy/model/snapbuildjob.py b/lib/lp/snappy/model/snapbuildjob.py | |||
128 | index 9634f62..a8fc49f 100644 | |||
129 | --- a/lib/lp/snappy/model/snapbuildjob.py | |||
130 | +++ b/lib/lp/snappy/model/snapbuildjob.py | |||
131 | @@ -263,6 +263,7 @@ class SnapStoreUploadJob(SnapBuildJobDerived): | |||
132 | 263 | if self.snapbuild.store_upload_metadata is None: | 263 | if self.snapbuild.store_upload_metadata is None: |
133 | 264 | self.snapbuild.store_upload_metadata = {} | 264 | self.snapbuild.store_upload_metadata = {} |
134 | 265 | self.snapbuild.store_upload_metadata["store_revision"] = revision | 265 | self.snapbuild.store_upload_metadata["store_revision"] = revision |
135 | 266 | self.snapbuild._store_upload_revision = revision | ||
136 | 266 | 267 | ||
137 | 267 | @property | 268 | @property |
138 | 268 | def status_url(self): | 269 | def status_url(self): |
139 | diff --git a/lib/lp/snappy/tests/test_snap.py b/lib/lp/snappy/tests/test_snap.py | |||
140 | index 4d9c92f..adb8cfa 100644 | |||
141 | --- a/lib/lp/snappy/tests/test_snap.py | |||
142 | +++ b/lib/lp/snappy/tests/test_snap.py | |||
143 | @@ -125,6 +125,7 @@ from lp.snappy.interfaces.snapbase import ( | |||
144 | 125 | from lp.snappy.interfaces.snapbuild import ( | 125 | from lp.snappy.interfaces.snapbuild import ( |
145 | 126 | ISnapBuild, | 126 | ISnapBuild, |
146 | 127 | ISnapBuildSet, | 127 | ISnapBuildSet, |
147 | 128 | SnapBuildStoreUploadStatus, | ||
148 | 128 | ) | 129 | ) |
149 | 129 | from lp.snappy.interfaces.snapbuildjob import ISnapStoreUploadJobSource | 130 | from lp.snappy.interfaces.snapbuildjob import ISnapStoreUploadJobSource |
150 | 130 | from lp.snappy.interfaces.snapjob import ISnapRequestBuildsJobSource | 131 | from lp.snappy.interfaces.snapjob import ISnapRequestBuildsJobSource |
151 | @@ -137,6 +138,10 @@ from lp.snappy.model.snap import ( | |||
152 | 137 | from lp.snappy.model.snapbuild import SnapFile | 138 | from lp.snappy.model.snapbuild import SnapFile |
153 | 138 | from lp.snappy.model.snapbuildjob import SnapBuildJob | 139 | from lp.snappy.model.snapbuildjob import SnapBuildJob |
154 | 139 | from lp.snappy.model.snapjob import SnapJob | 140 | from lp.snappy.model.snapjob import SnapJob |
155 | 141 | from lp.snappy.tests.test_snapbuildjob import ( | ||
156 | 142 | FakeSnapStoreClient, | ||
157 | 143 | run_isolated_jobs, | ||
158 | 144 | ) | ||
159 | 140 | from lp.testing import ( | 145 | from lp.testing import ( |
160 | 141 | admin_logged_in, | 146 | admin_logged_in, |
161 | 142 | ANONYMOUS, | 147 | ANONYMOUS, |
162 | @@ -1079,6 +1084,50 @@ class TestSnap(TestCaseWithFactory): | |||
163 | 1079 | snap.destroySelf() | 1084 | snap.destroySelf() |
164 | 1080 | self.assertFalse(getUtility(ISnapSet).exists(owner, "condemned")) | 1085 | self.assertFalse(getUtility(ISnapSet).exists(owner, "condemned")) |
165 | 1081 | 1086 | ||
166 | 1087 | def test_getBuildByStoreRevision(self): | ||
167 | 1088 | snap1 = self.factory.makeSnap() | ||
168 | 1089 | build = self.factory.makeSnapBuild( | ||
169 | 1090 | snap=snap1, | ||
170 | 1091 | status=BuildStatus.FULLYBUILT) | ||
171 | 1092 | |||
172 | 1093 | # There is no build with revision 5 for snap1 | ||
173 | 1094 | self.assertIsNone(snap1.getBuildByStoreRevision(5)) | ||
174 | 1095 | |||
175 | 1096 | # Upload build1 and check we return it by version 1 | ||
176 | 1097 | job = getUtility(ISnapStoreUploadJobSource).create(build) | ||
177 | 1098 | client = FakeSnapStoreClient() | ||
178 | 1099 | client.upload.result = ( | ||
179 | 1100 | "http://sca.example/dev/api/snaps/1/builds/1/status") | ||
180 | 1101 | client.checkStatus.result = ( | ||
181 | 1102 | "http://sca.example/dev/click-apps/1/rev/1/", 1) | ||
182 | 1103 | self.useFixture(ZopeUtilityFixture(client, ISnapStoreClient)) | ||
183 | 1104 | with dbuser(config.ISnapStoreUploadJobSource.dbuser): | ||
184 | 1105 | run_isolated_jobs([job]) | ||
185 | 1106 | self.assertEqual( | ||
186 | 1107 | SnapBuildStoreUploadStatus.UPLOADED, build.store_upload_status) | ||
187 | 1108 | self.assertEqual(build.store_upload_revision, 1) | ||
188 | 1109 | self.assertEqual(snap1.getBuildByStoreRevision(1), build) | ||
189 | 1110 | |||
190 | 1111 | # build & upload again, check revision | ||
191 | 1112 | # and that we return the second build for revision 2 | ||
192 | 1113 | build2 = self.factory.makeSnapBuild( | ||
193 | 1114 | snap=snap1, | ||
194 | 1115 | status=BuildStatus.FULLYBUILT) | ||
195 | 1116 | job = getUtility(ISnapStoreUploadJobSource).create(build2) | ||
196 | 1117 | client = FakeSnapStoreClient() | ||
197 | 1118 | client.upload.result = ( | ||
198 | 1119 | "http://sca.example/dev/api/snaps/1/builds/2/status") | ||
199 | 1120 | client.checkStatus.result = ( | ||
200 | 1121 | "http://sca.example/dev/click-apps/1/rev/2/", 2) | ||
201 | 1122 | self.useFixture(ZopeUtilityFixture(client, ISnapStoreClient)) | ||
202 | 1123 | with dbuser(config.ISnapStoreUploadJobSource.dbuser): | ||
203 | 1124 | run_isolated_jobs([job]) | ||
204 | 1125 | self.assertEqual( | ||
205 | 1126 | SnapBuildStoreUploadStatus.UPLOADED, build2.store_upload_status) | ||
206 | 1127 | self.assertEqual(build2.store_upload_revision, 2) | ||
207 | 1128 | self.assertEqual(snap1.getBuildByStoreRevision(2), build2) | ||
208 | 1129 | self.assertEqual(snap1.getBuildByStoreRevision(1), build) | ||
209 | 1130 | |||
210 | 1082 | def test_getBuildSummariesForSnapBuildIds(self): | 1131 | def test_getBuildSummariesForSnapBuildIds(self): |
211 | 1083 | snap1 = self.factory.makeSnap() | 1132 | snap1 = self.factory.makeSnap() |
212 | 1084 | snap2 = self.factory.makeSnap() | 1133 | snap2 = self.factory.makeSnap() |
213 | diff --git a/lib/lp/snappy/tests/test_snapbuildjob.py b/lib/lp/snappy/tests/test_snapbuildjob.py | |||
214 | index 3acefa2..5b56264 100644 | |||
215 | --- a/lib/lp/snappy/tests/test_snapbuildjob.py | |||
216 | +++ b/lib/lp/snappy/tests/test_snapbuildjob.py | |||
217 | @@ -178,6 +178,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
218 | 178 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 178 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
219 | 179 | self.assertEqual(self.store_url, job.store_url) | 179 | self.assertEqual(self.store_url, job.store_url) |
220 | 180 | self.assertEqual(1, job.store_revision) | 180 | self.assertEqual(1, job.store_revision) |
221 | 181 | self.assertEqual(1, | ||
222 | 182 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
223 | 181 | self.assertIsNone(job.error_message) | 183 | self.assertIsNone(job.error_message) |
224 | 182 | self.assertEqual([], pop_notifications()) | 184 | self.assertEqual([], pop_notifications()) |
225 | 183 | self.assertWebhookDeliveries( | 185 | self.assertWebhookDeliveries( |
226 | @@ -199,6 +201,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
227 | 199 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 201 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
228 | 200 | self.assertIsNone(job.store_url) | 202 | self.assertIsNone(job.store_url) |
229 | 201 | self.assertIsNone(job.store_revision) | 203 | self.assertIsNone(job.store_revision) |
230 | 204 | self.assertIsNone( | ||
231 | 205 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
232 | 202 | self.assertEqual("An upload failure", job.error_message) | 206 | self.assertEqual("An upload failure", job.error_message) |
233 | 203 | self.assertEqual([], pop_notifications()) | 207 | self.assertEqual([], pop_notifications()) |
234 | 204 | self.assertWebhookDeliveries( | 208 | self.assertWebhookDeliveries( |
235 | @@ -225,6 +229,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
236 | 225 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 229 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
237 | 226 | self.assertIsNone(job.store_url) | 230 | self.assertIsNone(job.store_url) |
238 | 227 | self.assertIsNone(job.store_revision) | 231 | self.assertIsNone(job.store_revision) |
239 | 232 | self.assertIsNone( | ||
240 | 233 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
241 | 228 | self.assertEqual("Authorization failed.", job.error_message) | 234 | self.assertEqual("Authorization failed.", job.error_message) |
242 | 229 | [notification] = pop_notifications() | 235 | [notification] = pop_notifications() |
243 | 230 | self.assertEqual( | 236 | self.assertEqual( |
244 | @@ -272,6 +278,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
245 | 272 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 278 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
246 | 273 | self.assertIsNone(job.store_url) | 279 | self.assertIsNone(job.store_url) |
247 | 274 | self.assertIsNone(job.store_revision) | 280 | self.assertIsNone(job.store_revision) |
248 | 281 | self.assertIsNone( | ||
249 | 282 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
250 | 275 | self.assertIsNone(job.error_message) | 283 | self.assertIsNone(job.error_message) |
251 | 276 | self.assertEqual([], pop_notifications()) | 284 | self.assertEqual([], pop_notifications()) |
252 | 277 | self.assertEqual(JobStatus.WAITING, job.job.status) | 285 | self.assertEqual(JobStatus.WAITING, job.job.status) |
253 | @@ -290,6 +298,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
254 | 290 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 298 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
255 | 291 | self.assertEqual(self.store_url, job.store_url) | 299 | self.assertEqual(self.store_url, job.store_url) |
256 | 292 | self.assertEqual(1, job.store_revision) | 300 | self.assertEqual(1, job.store_revision) |
257 | 301 | self.assertEqual(1, | ||
258 | 302 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
259 | 293 | self.assertIsNone(job.error_message) | 303 | self.assertIsNone(job.error_message) |
260 | 294 | self.assertEqual([], pop_notifications()) | 304 | self.assertEqual([], pop_notifications()) |
261 | 295 | self.assertEqual(JobStatus.COMPLETED, job.job.status) | 305 | self.assertEqual(JobStatus.COMPLETED, job.job.status) |
262 | @@ -317,6 +327,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
263 | 317 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 327 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
264 | 318 | self.assertIsNone(job.store_url) | 328 | self.assertIsNone(job.store_url) |
265 | 319 | self.assertIsNone(job.store_revision) | 329 | self.assertIsNone(job.store_revision) |
266 | 330 | self.assertIsNone( | ||
267 | 331 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
268 | 320 | self.assertEqual("SSO melted.", job.error_message) | 332 | self.assertEqual("SSO melted.", job.error_message) |
269 | 321 | [notification] = pop_notifications() | 333 | [notification] = pop_notifications() |
270 | 322 | self.assertEqual( | 334 | self.assertEqual( |
271 | @@ -369,6 +381,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
272 | 369 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 381 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
273 | 370 | self.assertIsNone(job.store_url) | 382 | self.assertIsNone(job.store_url) |
274 | 371 | self.assertIsNone(job.store_revision) | 383 | self.assertIsNone(job.store_revision) |
275 | 384 | self.assertIsNone( | ||
276 | 385 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
277 | 372 | self.assertEqual("Failed to upload", job.error_message) | 386 | self.assertEqual("Failed to upload", job.error_message) |
278 | 373 | [notification] = pop_notifications() | 387 | [notification] = pop_notifications() |
279 | 374 | self.assertEqual( | 388 | self.assertEqual( |
280 | @@ -419,6 +433,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
281 | 419 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 433 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
282 | 420 | self.assertIsNone(job.store_url) | 434 | self.assertIsNone(job.store_url) |
283 | 421 | self.assertIsNone(job.store_revision) | 435 | self.assertIsNone(job.store_revision) |
284 | 436 | self.assertIsNone( | ||
285 | 437 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
286 | 422 | self.assertIsNone(job.error_message) | 438 | self.assertIsNone(job.error_message) |
287 | 423 | self.assertEqual([], pop_notifications()) | 439 | self.assertEqual([], pop_notifications()) |
288 | 424 | self.assertEqual(JobStatus.WAITING, job.job.status) | 440 | self.assertEqual(JobStatus.WAITING, job.job.status) |
289 | @@ -437,6 +453,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
290 | 437 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 453 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
291 | 438 | self.assertEqual(self.store_url, job.store_url) | 454 | self.assertEqual(self.store_url, job.store_url) |
292 | 439 | self.assertEqual(1, job.store_revision) | 455 | self.assertEqual(1, job.store_revision) |
293 | 456 | self.assertEqual(1, | ||
294 | 457 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
295 | 440 | self.assertIsNone(job.error_message) | 458 | self.assertIsNone(job.error_message) |
296 | 441 | self.assertEqual([], pop_notifications()) | 459 | self.assertEqual([], pop_notifications()) |
297 | 442 | self.assertEqual(JobStatus.COMPLETED, job.job.status) | 460 | self.assertEqual(JobStatus.COMPLETED, job.job.status) |
298 | @@ -468,6 +486,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
299 | 468 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 486 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
300 | 469 | self.assertIsNone(job.store_url) | 487 | self.assertIsNone(job.store_url) |
301 | 470 | self.assertIsNone(job.store_revision) | 488 | self.assertIsNone(job.store_revision) |
302 | 489 | self.assertIsNone( | ||
303 | 490 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
304 | 471 | self.assertEqual( | 491 | self.assertEqual( |
305 | 472 | "Scan failed.\nConfinement not allowed.", job.error_message) | 492 | "Scan failed.\nConfinement not allowed.", job.error_message) |
306 | 473 | self.assertEqual([ | 493 | self.assertEqual([ |
307 | @@ -519,6 +539,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
308 | 519 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 539 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
309 | 520 | self.assertIsNone(job.store_url) | 540 | self.assertIsNone(job.store_url) |
310 | 521 | self.assertIsNone(job.store_revision) | 541 | self.assertIsNone(job.store_revision) |
311 | 542 | self.assertIsNone( | ||
312 | 543 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
313 | 522 | self.assertIsNone(job.error_message) | 544 | self.assertIsNone(job.error_message) |
314 | 523 | self.assertEqual([], pop_notifications()) | 545 | self.assertEqual([], pop_notifications()) |
315 | 524 | self.assertWebhookDeliveries( | 546 | self.assertWebhookDeliveries( |
316 | @@ -542,6 +564,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
317 | 542 | self.assertContentEqual([job], snapbuild.store_upload_jobs) | 564 | self.assertContentEqual([job], snapbuild.store_upload_jobs) |
318 | 543 | self.assertEqual(self.store_url, job.store_url) | 565 | self.assertEqual(self.store_url, job.store_url) |
319 | 544 | self.assertEqual(1, job.store_revision) | 566 | self.assertEqual(1, job.store_revision) |
320 | 567 | self.assertEqual(1, | ||
321 | 568 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
322 | 545 | self.assertIsNone(job.error_message) | 569 | self.assertIsNone(job.error_message) |
323 | 546 | self.assertEqual([], pop_notifications()) | 570 | self.assertEqual([], pop_notifications()) |
324 | 547 | self.assertWebhookDeliveries( | 571 | self.assertWebhookDeliveries( |
325 | @@ -603,6 +627,8 @@ class TestSnapStoreUploadJob(TestCaseWithFactory): | |||
326 | 603 | # Check we uploaded as expected | 627 | # Check we uploaded as expected |
327 | 604 | self.assertEqual(self.store_url, job.store_url) | 628 | self.assertEqual(self.store_url, job.store_url) |
328 | 605 | self.assertEqual(1, job.store_revision) | 629 | self.assertEqual(1, job.store_revision) |
329 | 630 | self.assertEqual(1, | ||
330 | 631 | removeSecurityProxy(snapbuild)._store_upload_revision) | ||
331 | 606 | self.assertEqual(timedelta(seconds=60), job.retry_delay) | 632 | self.assertEqual(timedelta(seconds=60), job.retry_delay) |
332 | 607 | self.assertEqual(1, len(client.upload.calls)) | 633 | self.assertEqual(1, len(client.upload.calls)) |
333 | 608 | self.assertIsNone(job.error_message) | 634 | self.assertIsNone(job.error_message) |
As I noted in comments on the prerequisite MP, it seems likely that you'll need to adjust garbo tests here.