Merge lp:~mterry/unity-scope-click/gmock into lp:unity-scope-click
- gmock
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | dobey |
Approved revision: | 505 |
Merged at revision: | 504 |
Proposed branch: | lp:~mterry/unity-scope-click/gmock |
Merge into: | lp:unity-scope-click |
Diff against target: |
410 lines (+50/-56) 9 files modified
CMakeLists.txt (+1/-7) libclickscope/tests/test_configuration.cpp (+1/-1) libclickscope/tests/test_departments-db.cpp (+10/-10) libclickscope/tests/test_departments.cpp (+4/-4) libclickscope/tests/test_index.cpp (+3/-3) libclickscope/tests/test_interface.cpp (+8/-8) libclickscope/tests/test_package.cpp (+6/-6) libclickscope/tests/test_preview.cpp (+4/-4) libclickscope/tests/test_reviews.cpp (+13/-13) |
To merge this branch: | bzr merge lp:~mterry/unity-scope-click/gmock |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
dobey (community) | Approve | ||
unity-api-1-bot | continuous-integration | Approve | |
Review via email: mp+312382@code.launchpad.net |
Commit message
Fix build with new gmock
Description of the change
I'm working on a separate branch and ran into this gmock issue first.
unity-api-1-bot (unity-api-1-bot) wrote : | # |
dobey (dobey) wrote : | # |
16:20:12 [ FAILED ] PackageTest.
Not sure why your changes would cause this, but seems this test is now failing everywhere.
unity-api-1-bot (unity-api-1-bot) wrote : | # |
FAILED: Continuous integration, rev:504
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
Michael Terry (mterry) wrote : | # |
I don't know this code very well, I'm not the best person to root-cause a failing test; but feel free to take this MP as a base in order to fix the ftbfs.
(The failure seems unrelated to this branch at first blush: a comparison of 1 v 3, not just a sign error.)
dobey (dobey) : | # |
- 505. By Michael Terry
-
Fix test
unity-api-1-bot (unity-api-1-bot) wrote : | # |
PASSED: Continuous integration, rev:505
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Michael Terry (mterry) wrote : | # |
Nice, I uploaded your fix and now CI is cool with it.
dobey (dobey) : | # |
Preview Diff
1 | === modified file 'CMakeLists.txt' |
2 | --- CMakeLists.txt 2016-10-24 21:26:23 +0000 |
3 | +++ CMakeLists.txt 2016-12-08 19:58:50 +0000 |
4 | @@ -20,6 +20,7 @@ |
5 | find_program(INTLTOOL_MERGE intltool-merge) |
6 | |
7 | include(UseGSettings) |
8 | +find_package (GMock) |
9 | find_package (PkgConfig REQUIRED) |
10 | |
11 | pkg_check_modules(UAL REQUIRED ubuntu-app-launch-2>=0.9 gobject-2.0) |
12 | @@ -47,13 +48,6 @@ |
13 | SET (APPS_LIB_UNVERSIONED scope) |
14 | SET (APPS_LIB_NAME ${APPS_LIB_UNVERSIONED}-${SCOPE_LIB_API_VERSION}) |
15 | |
16 | -# Build with system gmock and embedded gtest |
17 | -set (GMOCK_INCLUDE_DIR "/usr/include/gmock/include" CACHE PATH "gmock source include directory") |
18 | -set (GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory") |
19 | -set (GTEST_INCLUDE_DIR "${GMOCK_SOURCE_DIR}/gtest/include" CACHE PATH "gtest source include directory") |
20 | - |
21 | -add_subdirectory(${GMOCK_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/gmock") |
22 | - |
23 | # Add our own subdirectories. |
24 | add_subdirectory(tests) |
25 | add_subdirectory(bin) |
26 | |
27 | === modified file 'libclickscope/tests/test_configuration.cpp' |
28 | --- libclickscope/tests/test_configuration.cpp 2016-06-30 20:42:56 +0000 |
29 | +++ libclickscope/tests/test_configuration.cpp 2016-12-08 19:58:50 +0000 |
30 | @@ -141,7 +141,7 @@ |
31 | .Times(1) |
32 | .WillOnce(Return(response)); |
33 | auto frameworks = locator.get_available_frameworks(); |
34 | - EXPECT_EQ(0, frameworks.size()); |
35 | + EXPECT_EQ(0u, frameworks.size()); |
36 | } |
37 | |
38 | TEST(Configuration, getLanguageCorrect) |
39 | |
40 | === modified file 'libclickscope/tests/test_departments-db.cpp' |
41 | --- libclickscope/tests/test_departments-db.cpp 2014-11-19 14:28:30 +0000 |
42 | +++ libclickscope/tests/test_departments-db.cpp 2016-12-08 19:58:50 +0000 |
43 | @@ -147,12 +147,12 @@ |
44 | TEST_F(DepartmentsDbTest, testDepartmentNameUpdates) |
45 | { |
46 | { |
47 | - EXPECT_EQ(7u, db->department_name_count()); |
48 | + EXPECT_EQ(7, db->department_name_count()); |
49 | db->store_department_name("tools", "", "Tools!"); |
50 | EXPECT_EQ("Tools!", db->get_department_name("tools", {"en_EN", ""})); |
51 | db->store_department_name("games", "pl_PL", "Gry!!!"); |
52 | EXPECT_EQ("Gry!!!", db->get_department_name("games", {"pl_PL"})); |
53 | - EXPECT_EQ(7u, db->department_name_count()); |
54 | + EXPECT_EQ(7, db->department_name_count()); |
55 | } |
56 | } |
57 | |
58 | @@ -173,7 +173,7 @@ |
59 | TEST_F(DepartmentsDbTest, testDepartmentChildrenLookup) |
60 | { |
61 | { |
62 | - EXPECT_EQ(0, db->get_children_departments("xyz").size()); |
63 | + EXPECT_EQ(0u, db->get_children_departments("xyz").size()); |
64 | } |
65 | { |
66 | auto depts = db->get_children_departments(""); |
67 | @@ -213,7 +213,7 @@ |
68 | } |
69 | { |
70 | auto pkgs = db->get_packages_for_department("card", false); |
71 | - EXPECT_EQ(0, pkgs.size()); |
72 | + EXPECT_EQ(0u, pkgs.size()); |
73 | } |
74 | } |
75 | |
76 | @@ -234,24 +234,24 @@ |
77 | } |
78 | { |
79 | auto pkgs = db->get_packages_for_department("card", true); |
80 | - EXPECT_EQ(0, pkgs.size()); |
81 | + EXPECT_EQ(0u, pkgs.size()); |
82 | } |
83 | } |
84 | |
85 | TEST_F(DepartmentsDbTest, testPackageUpdates) |
86 | { |
87 | auto pkgs = db->get_packages_for_department("fps"); |
88 | - EXPECT_EQ(1, pkgs.size()); |
89 | + EXPECT_EQ(1u, pkgs.size()); |
90 | EXPECT_TRUE(pkgs.find("game2") != pkgs.end()); |
91 | |
92 | // game2 gets moved to card and removed from fps |
93 | db->store_package_mapping("game2", "card"); |
94 | |
95 | pkgs = db->get_packages_for_department("fps", false); |
96 | - EXPECT_EQ(0, pkgs.size()); |
97 | + EXPECT_EQ(0u, pkgs.size()); |
98 | EXPECT_TRUE(pkgs.find("game2") == pkgs.end()); |
99 | pkgs = db->get_packages_for_department("card", false); |
100 | - EXPECT_EQ(1, pkgs.size()); |
101 | + EXPECT_EQ(1u, pkgs.size()); |
102 | EXPECT_TRUE(pkgs.find("game2") != pkgs.end()); |
103 | } |
104 | |
105 | @@ -279,8 +279,8 @@ |
106 | db->store_department_mapping("office", "tools"); |
107 | db->store_department_mapping("office", "tools"); |
108 | |
109 | - EXPECT_EQ(7u, db->department_name_count()); |
110 | - EXPECT_EQ(4u, db->package_count()); |
111 | + EXPECT_EQ(7, db->department_name_count()); |
112 | + EXPECT_EQ(4, db->package_count()); |
113 | } |
114 | |
115 | TEST_F(DepartmentsDbTest, testSqlQueriesFinished) |
116 | |
117 | === modified file 'libclickscope/tests/test_departments.cpp' |
118 | --- libclickscope/tests/test_departments.cpp 2016-06-30 20:42:56 +0000 |
119 | +++ libclickscope/tests/test_departments.cpp 2016-12-08 19:58:50 +0000 |
120 | @@ -89,13 +89,13 @@ |
121 | { |
122 | const std::string jsonstr("{{{"); |
123 | auto depts = click::Department::from_json(jsonstr); |
124 | - EXPECT_EQ(0, depts.size()); |
125 | + EXPECT_EQ(0u, depts.size()); |
126 | } |
127 | // one of the departments is invalid |
128 | { |
129 | const std::string jsonstr(FAKE_JSON_BROKEN_DEPARTMENTS); |
130 | auto depts = click::Department::from_json(jsonstr); |
131 | - EXPECT_EQ(1, depts.size()); |
132 | + EXPECT_EQ(1u, depts.size()); |
133 | } |
134 | } |
135 | |
136 | @@ -112,7 +112,7 @@ |
137 | lut.rebuild(root); |
138 | |
139 | { |
140 | - EXPECT_EQ(2u, lut.size()); |
141 | + EXPECT_EQ(2, lut.size()); |
142 | EXPECT_EQ("games", lut.get_parent("strategy")->id()); |
143 | EXPECT_EQ("games", lut.get_parent("rpg")->id()); |
144 | EXPECT_EQ(nullptr, lut.get_parent("games")); |
145 | @@ -137,7 +137,7 @@ |
146 | } |
147 | { |
148 | lut.rebuild(root); |
149 | - EXPECT_EQ(2u, lut.size()); |
150 | + EXPECT_EQ(2, lut.size()); |
151 | } |
152 | } |
153 | |
154 | |
155 | === modified file 'libclickscope/tests/test_index.cpp' |
156 | --- libclickscope/tests/test_index.cpp 2016-05-10 13:42:12 +0000 |
157 | +++ libclickscope/tests/test_index.cpp 2016-12-08 19:58:50 +0000 |
158 | @@ -603,14 +603,14 @@ |
159 | TEST_F(IndexTest, testPackageListsFromJsonNodeNoRecommends) |
160 | { |
161 | auto lists = indexPtr->package_lists_from_json(FAKE_JSON_SEARCH_RESULT_ONE); |
162 | - EXPECT_EQ(1, lists.first.size()); |
163 | - EXPECT_EQ(0, lists.second.size()); |
164 | + EXPECT_EQ(1u, lists.first.size()); |
165 | + EXPECT_EQ(0u, lists.second.size()); |
166 | } |
167 | |
168 | TEST_F(IndexTest, testPackageListsFromJsonNodeHasRecommends) |
169 | { |
170 | auto lists = indexPtr->package_lists_from_json(FAKE_JSON_SEARCH_RESULT_RECOMMENDS); |
171 | - EXPECT_EQ(1, lists.second.size()); |
172 | + EXPECT_EQ(1u, lists.second.size()); |
173 | } |
174 | |
175 | TEST_F(MockPackageManager, testUninstallCommandCorrect) |
176 | |
177 | === modified file 'libclickscope/tests/test_interface.cpp' |
178 | --- libclickscope/tests/test_interface.cpp 2016-10-04 17:35:15 +0000 |
179 | +++ libclickscope/tests/test_interface.cpp 2016-12-08 19:58:50 +0000 |
180 | @@ -162,7 +162,7 @@ |
181 | EXPECT_CALL(iface, installed_apps()).Times(1). |
182 | WillOnce(Return(applist)); |
183 | auto results = iface.search("", ignoredApps); |
184 | - ASSERT_EQ(1, results.size()); |
185 | + ASSERT_EQ(1u, results.size()); |
186 | } |
187 | |
188 | TEST_F(ClickInterfaceTest, testFindAppsOneException) |
189 | @@ -176,7 +176,7 @@ |
190 | std::shared_ptr<MockUALApplication::MockInfo>{new MockUALApplication::MockInfo("Clock", "The clock", "/opt/click.ubuntu.com/foo/bar/clock.png")}), |
191 | })); |
192 | auto results = iface.search(""); |
193 | - ASSERT_EQ(1, results.size()); |
194 | + ASSERT_EQ(1u, results.size()); |
195 | } |
196 | |
197 | TEST_F(ClickInterfaceTest, testFindClockUsesShortAppid) |
198 | @@ -217,7 +217,7 @@ |
199 | std::shared_ptr<MockUALApplication::MockInfo>{new MockUALApplication::MockInfo("Skipped", "An app that's skipped", "skipped-app")}) |
200 | })); |
201 | auto results = iface.search(""); |
202 | - ASSERT_EQ(0, results.size()); |
203 | + ASSERT_EQ(0u, results.size()); |
204 | } |
205 | |
206 | TEST_F(ClickInterfaceTest, testFindLegacyAppNotSkipped) |
207 | @@ -281,7 +281,7 @@ |
208 | depts_db->store_department_mapping("accessories", ""); |
209 | |
210 | auto results = iface.search("", ignoredApps, "utilies", depts_db); |
211 | - ASSERT_EQ(0, results.size()); |
212 | + ASSERT_EQ(0u, results.size()); |
213 | |
214 | // address book applicaton moved to utilities |
215 | depts_db->store_package_mapping("address-book-app.desktop", "utilities"); |
216 | @@ -418,7 +418,7 @@ |
217 | |
218 | auto results = iface.search("rss"); |
219 | |
220 | - EXPECT_EQ(1, results.size()); |
221 | + EXPECT_EQ(1u, results.size()); |
222 | } |
223 | |
224 | TEST_F(ClickInterfaceTest, testFindAppByKeywordCaseInsensitive) |
225 | @@ -437,7 +437,7 @@ |
226 | |
227 | auto results = iface.search("RsS"); |
228 | |
229 | - EXPECT_EQ(1, results.size()); |
230 | + EXPECT_EQ(1u, results.size()); |
231 | } |
232 | |
233 | TEST_F(ClickInterfaceTest, testFindAppAccented) |
234 | @@ -452,7 +452,7 @@ |
235 | |
236 | auto results = iface.search("Cámara"); |
237 | |
238 | - EXPECT_EQ(1, results.size()); |
239 | + EXPECT_EQ(1u, results.size()); |
240 | } |
241 | |
242 | TEST_F(ClickInterfaceTest, testFindAppAccented2) |
243 | @@ -467,7 +467,7 @@ |
244 | |
245 | auto results = iface.search("Camara"); |
246 | |
247 | - EXPECT_EQ(1, results.size()); |
248 | + EXPECT_EQ(1u, results.size()); |
249 | } |
250 | |
251 | |
252 | |
253 | === modified file 'libclickscope/tests/test_package.cpp' |
254 | --- libclickscope/tests/test_package.cpp 2015-01-20 17:04:54 +0000 |
255 | +++ libclickscope/tests/test_package.cpp 2016-12-08 19:58:50 +0000 |
256 | @@ -47,7 +47,7 @@ |
257 | auto const ci_package = embedded[Package::JsonKeys::ci_package]; |
258 | |
259 | Packages pl = package_list_from_json_node(ci_package); |
260 | - ASSERT_EQ(1, pl.size()); |
261 | + ASSERT_EQ(1u, pl.size()); |
262 | } |
263 | |
264 | TEST_F(PackageTest, testPackageListFromJsonNodeSingleScope) |
265 | @@ -58,7 +58,7 @@ |
266 | auto const ci_package = embedded[Package::JsonKeys::ci_package]; |
267 | |
268 | Packages pl = package_list_from_json_node(ci_package); |
269 | - ASSERT_EQ(1, pl.size()); |
270 | + ASSERT_EQ(1u, pl.size()); |
271 | EXPECT_EQ("scope", pl[0].content); |
272 | } |
273 | |
274 | @@ -70,7 +70,7 @@ |
275 | auto const ci_package = embedded[Package::JsonKeys::ci_package]; |
276 | |
277 | Packages pl = package_list_from_json_node(ci_package); |
278 | - ASSERT_GT(pl.size(), 1); |
279 | + ASSERT_LT(1u, pl.size()); |
280 | } |
281 | |
282 | TEST_F(PackageTest, testPackageListFromJsonNodeMissingData) |
283 | @@ -81,7 +81,7 @@ |
284 | auto const ci_package = embedded[Package::JsonKeys::ci_package]; |
285 | |
286 | Packages pl = package_list_from_json_node(ci_package); |
287 | - ASSERT_EQ(1, pl.size()); |
288 | + ASSERT_EQ(1u, pl.size()); |
289 | } |
290 | |
291 | TEST_F(PackageTest, testPackageParsesMultiplePrices) |
292 | @@ -92,7 +92,7 @@ |
293 | auto const ci_package = embedded[Package::JsonKeys::ci_package]; |
294 | |
295 | Packages pl = package_list_from_json_node(ci_package); |
296 | - ASSERT_EQ(3, pl[0].prices.size()); |
297 | + ASSERT_EQ(3u, pl[0].prices.size()); |
298 | } |
299 | |
300 | TEST_F(PackageTest, testPackageParsesVersion) |
301 | @@ -109,5 +109,5 @@ |
302 | TEST_F(PackageTest, testPackageDetailsParsesMultiplePrices) |
303 | { |
304 | auto details = PackageDetails::from_json(FAKE_JSON_PACKAGE_DETAILS); |
305 | - ASSERT_EQ(3, details.package.prices.size()); |
306 | + ASSERT_EQ(3u, details.package.prices.size()); |
307 | } |
308 | |
309 | === modified file 'libclickscope/tests/test_preview.cpp' |
310 | --- libclickscope/tests/test_preview.cpp 2016-10-24 21:26:23 +0000 |
311 | +++ libclickscope/tests/test_preview.cpp 2016-12-08 19:58:50 +0000 |
312 | @@ -139,7 +139,7 @@ |
313 | details.more_screenshots_urls = {"sshot2", "sshot3"}; |
314 | |
315 | auto widgets = preview.screenshotsWidgets(details); |
316 | - ASSERT_EQ(widgets.size(), 1); |
317 | + ASSERT_EQ(1u, widgets.size()); |
318 | auto first_widget = widgets.front(); |
319 | auto attributes = first_widget.attribute_values(); |
320 | auto sources = attributes["sources"].get_array(); |
321 | @@ -247,7 +247,7 @@ |
322 | PreviewStrategyDescriptionTest() |
323 | { |
324 | } |
325 | - void assertWidgetAttribute(int n, std::string attribute_name, std::string expected_value) |
326 | + void assertWidgetAttribute(unsigned int n, std::string attribute_name, std::string expected_value) |
327 | { |
328 | ASSERT_GT(widgets.size(), n); |
329 | auto widget = std::next(widgets.begin(), n); |
330 | @@ -297,7 +297,7 @@ |
331 | details = click::PackageDetails::from_json(FAKE_JSON_PACKAGE_DETAILS_DEB); |
332 | widgets = preview.descriptionWidgets(details); |
333 | |
334 | - ASSERT_EQ(1, widgets.size()); |
335 | + ASSERT_EQ(1u, widgets.size()); |
336 | |
337 | assertWidgetAttribute(0, "title", "Info"); |
338 | assertWidgetAttribute(0, "text", details.description); |
339 | @@ -306,7 +306,7 @@ |
340 | TEST_F(PreviewStrategyDescriptionTest, testDescriptionWidgetsNone) |
341 | { |
342 | widgets = preview.descriptionWidgets(details); |
343 | - ASSERT_EQ(0, widgets.size()); |
344 | + ASSERT_EQ(0u, widgets.size()); |
345 | } |
346 | |
347 | class FakePreviewStrategy : public click::PreviewStrategy |
348 | |
349 | === modified file 'libclickscope/tests/test_reviews.cpp' |
350 | --- libclickscope/tests/test_reviews.cpp 2016-05-10 13:42:12 +0000 |
351 | +++ libclickscope/tests/test_reviews.cpp 2016-12-08 19:58:50 +0000 |
352 | @@ -80,13 +80,13 @@ |
353 | click::ReviewList reviews {r1, r2, r3}; |
354 | |
355 | auto newReviews = bring_to_front(reviews, "user2"); |
356 | - EXPECT_EQ(newReviews.size(), 3); |
357 | + EXPECT_EQ(3u, newReviews.size()); |
358 | auto it = newReviews.begin(); |
359 | - EXPECT_EQ(2, (*it).id); |
360 | - ++it; |
361 | - EXPECT_EQ(1, (*it).id); |
362 | - ++it; |
363 | - EXPECT_EQ(3, (*it).id); |
364 | + EXPECT_EQ(2u, (*it).id); |
365 | + ++it; |
366 | + EXPECT_EQ(1u, (*it).id); |
367 | + ++it; |
368 | + EXPECT_EQ(3u, (*it).id); |
369 | } |
370 | |
371 | TEST_F(ReviewsTest, bringToFrontUserMatchesFirstElement) |
372 | @@ -102,11 +102,11 @@ |
373 | click::ReviewList reviews {r1, r2}; |
374 | |
375 | auto newReviews = bring_to_front(reviews, "user1"); |
376 | - EXPECT_EQ(newReviews.size(), 2); |
377 | + EXPECT_EQ(2u, newReviews.size()); |
378 | auto it = newReviews.begin(); |
379 | - EXPECT_EQ(1, (*it).id); |
380 | + EXPECT_EQ(1u, (*it).id); |
381 | ++it; |
382 | - EXPECT_EQ(2, (*it).id); |
383 | + EXPECT_EQ(2u, (*it).id); |
384 | } |
385 | |
386 | TEST_F(ReviewsTest, bringToFrontEmptyList) |
387 | @@ -114,7 +114,7 @@ |
388 | click::ReviewList reviews; |
389 | |
390 | auto newReviews = bring_to_front(reviews, "user1"); |
391 | - EXPECT_EQ(newReviews.size(), 0); |
392 | + EXPECT_EQ(0u, newReviews.size()); |
393 | } |
394 | |
395 | TEST_F(ReviewsTest, bringToFrontUserDoesntMatch) |
396 | @@ -130,11 +130,11 @@ |
397 | click::ReviewList reviews {r1, r2}; |
398 | |
399 | auto newReviews = bring_to_front(reviews, "user0"); |
400 | - EXPECT_EQ(newReviews.size(), 2); |
401 | + EXPECT_EQ(2u, newReviews.size()); |
402 | auto it = newReviews.begin(); |
403 | - EXPECT_EQ(1, (*it).id); |
404 | + EXPECT_EQ(1u, (*it).id); |
405 | ++it; |
406 | - EXPECT_EQ(2, (*it).id); |
407 | + EXPECT_EQ(2u, (*it).id); |
408 | } |
409 | |
410 | TEST_F(ReviewsTest, testFetchReviewsCallsWebservice) |
FAILED: Continuous integration, rev:504 /jenkins. canonical. com/unity- api-1/job/ lp-unity- scope-click- ci/128/ /jenkins. canonical. com/unity- api-1/job/ build/1227/ console /jenkins. canonical. com/unity- api-1/job/ build-0- fetch/1234 /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=amd64, release= xenial+ overlay/ 1017/console /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=amd64, release= zesty/1017/ console /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=armhf, release= xenial+ overlay/ 1017/console /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=armhf, release= zesty/1017/ console /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=i386, release= xenial+ overlay/ 1017/console /jenkins. canonical. com/unity- api-1/job/ build-2- binpkg/ arch=i386, release= zesty/1017/ console
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild: /jenkins. canonical. com/unity- api-1/job/ lp-unity- scope-click- ci/128/ rebuild
https:/