Merge lp:~phablet-team/messaging-framework/detect-network-switch into lp:messaging-framework
- detect-network-switch
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Gustavo Pichorim Boiko |
Approved revision: | 56 |
Merged at revision: | 47 |
Proposed branch: | lp:~phablet-team/messaging-framework/detect-network-switch |
Merge into: | lp:messaging-framework |
Prerequisite: | lp:~phablet-team/messaging-framework/avoid-removing-tp-connection-after-disconnect |
Diff against target: |
312 lines (+223/-1) 6 files modified
include/messaging/qt/network_monitor.h (+71/-0) include/messaging/qt/tp/connection.h (+4/-0) src/CMakeLists.txt (+3/-1) src/messaging/connection.cpp (+2/-0) src/messaging/qt/network_monitor.cpp (+139/-0) src/messaging/qt/tp/connection.cpp (+4/-0) |
To merge this branch: | bzr merge lp:~phablet-team/messaging-framework/detect-network-switch |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
system-apps-ci-bot | continuous-integration | Approve | |
Gustavo Pichorim Boiko (community) | Approve | ||
PS Jenkins bot | continuous-integration | Pending | |
Review via email: mp+300164@code.launchpad.net |
This proposal supersedes a proposal from 2016-07-15.
Commit message
Reconnects on network switching
NOTE: the time it takes login in the new network depends on the attached plugin. In some cases you have to be patient ;)
Description of the change
Reconnects on network switching
system-apps-ci-bot (system-apps-ci-bot) wrote : Posted in a previous version of this proposal | # |
- 53. By Roberto Mier Escandon
-
using ssid to detect network switch
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:52
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
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:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:53
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
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:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Gustavo Pichorim Boiko (boiko) wrote : | # |
Some things to look at.
- 54. By Roberto Mier Escandon
-
updated copyright for network-monitor class!
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:54
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
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:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
- 55. By Roberto Mier Escandon
-
merged trunk
- 56. By Roberto Mier Escandon
-
avoid using threads when evaluating network state
system-apps-ci-bot (system-apps-ci-bot) wrote : | # |
PASSED: Continuous integration, rev:56
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
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:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild:
https:/
Gustavo Pichorim Boiko (boiko) wrote : | # |
Looks good now.
system-apps-ci-bot (system-apps-ci-bot) : | # |
Preview Diff
1 | === added file 'include/messaging/qt/network_monitor.h' | |||
2 | --- include/messaging/qt/network_monitor.h 1970-01-01 00:00:00 +0000 | |||
3 | +++ include/messaging/qt/network_monitor.h 2016-07-18 11:43:17 +0000 | |||
4 | @@ -0,0 +1,71 @@ | |||
5 | 1 | /* | ||
6 | 2 | * Copyright 2014-2016 Canonical Ltd. | ||
7 | 3 | * | ||
8 | 4 | * This file and its implementation is adaptation of sync-monitor. | ||
9 | 5 | * | ||
10 | 6 | * This software is free software; you can redistribute it and/or modify | ||
11 | 7 | * it under the terms of the GNU General Public License as published by | ||
12 | 8 | * the Free Software Foundation; version 3. | ||
13 | 9 | * | ||
14 | 10 | * This software is distributed in the hope that it will be useful, | ||
15 | 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | 13 | * GNU General Public License for more details. | ||
18 | 14 | * | ||
19 | 15 | * You should have received a copy of the GNU General Public License | ||
20 | 16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
21 | 17 | */ | ||
22 | 18 | |||
23 | 19 | #ifndef MESSAGING_QT_NETWORK_MONITOR | ||
24 | 20 | #define MESSAGING_QT_NETWORK_MONITOR | ||
25 | 21 | |||
26 | 22 | #include <QtNetwork/QNetworkConfigurationManager> | ||
27 | 23 | #include <QTimer> | ||
28 | 24 | |||
29 | 25 | #include <memory> | ||
30 | 26 | |||
31 | 27 | namespace messaging | ||
32 | 28 | { | ||
33 | 29 | |||
34 | 30 | //Handy fw declaration | ||
35 | 31 | class Connection; | ||
36 | 32 | |||
37 | 33 | namespace qt | ||
38 | 34 | { | ||
39 | 35 | |||
40 | 36 | class NetworkMonitor : public QObject | ||
41 | 37 | { | ||
42 | 38 | Q_OBJECT | ||
43 | 39 | public: | ||
44 | 40 | enum NetworkState { | ||
45 | 41 | NetworkOffline = 0, | ||
46 | 42 | NetworkPartialOnline, | ||
47 | 43 | NetworkOnline | ||
48 | 44 | }; | ||
49 | 45 | NetworkMonitor(const std::weak_ptr<Connection> &connection, QObject *parent=0); | ||
50 | 46 | virtual ~NetworkMonitor(); | ||
51 | 47 | |||
52 | 48 | void stop_monitoring(); | ||
53 | 49 | void set_connection_ready(bool ready); | ||
54 | 50 | |||
55 | 51 | private Q_SLOTS: | ||
56 | 52 | void refresh(); | ||
57 | 53 | void idle_refresh(); | ||
58 | 54 | |||
59 | 55 | private: | ||
60 | 56 | QNetworkConfigurationManager network_config_manager_; | ||
61 | 57 | QTimer refresh_timer_; | ||
62 | 58 | std::weak_ptr<Connection> connection_; | ||
63 | 59 | std::string current_ssid_; | ||
64 | 60 | bool is_connection_ready_; | ||
65 | 61 | |||
66 | 62 | |||
67 | 63 | void start_monitoring(); | ||
68 | 64 | void dump(const QNetworkConfiguration &config); | ||
69 | 65 | }; | ||
70 | 66 | |||
71 | 67 | } | ||
72 | 68 | } | ||
73 | 69 | |||
74 | 70 | #endif // MESSAGING_QT_NETWORK_MONITOR | ||
75 | 71 | |||
76 | 0 | 72 | ||
77 | === modified file 'include/messaging/qt/tp/connection.h' | |||
78 | --- include/messaging/qt/tp/connection.h 2016-06-07 18:15:24 +0000 | |||
79 | +++ include/messaging/qt/tp/connection.h 2016-07-18 11:43:17 +0000 | |||
80 | @@ -23,6 +23,7 @@ | |||
81 | 23 | #include <messaging/group_starter.h> | 23 | #include <messaging/group_starter.h> |
82 | 24 | 24 | ||
83 | 25 | #include <messaging/qt/variant_map_facade.h> | 25 | #include <messaging/qt/variant_map_facade.h> |
84 | 26 | #include <messaging/qt/network_monitor.h> | ||
85 | 26 | 27 | ||
86 | 27 | #include <TelepathyQt/BaseChannel> | 28 | #include <TelepathyQt/BaseChannel> |
87 | 28 | #include <TelepathyQt/BaseConnection> | 29 | #include <TelepathyQt/BaseConnection> |
88 | @@ -40,6 +41,7 @@ | |||
89 | 40 | { | 41 | { |
90 | 41 | // A handy fwd declaration | 42 | // A handy fwd declaration |
91 | 42 | class Runtime; | 43 | class Runtime; |
92 | 44 | class NetworkMonitor; | ||
93 | 43 | 45 | ||
94 | 44 | namespace tp | 46 | namespace tp |
95 | 45 | { | 47 | { |
96 | @@ -178,6 +180,8 @@ | |||
97 | 178 | Tp::BaseConnectionContactsInterfacePtr contacts; | 180 | Tp::BaseConnectionContactsInterfacePtr contacts; |
98 | 179 | Tp::BaseConnectionSimplePresenceInterfacePtr simplePresenceIface; | 181 | Tp::BaseConnectionSimplePresenceInterfacePtr simplePresenceIface; |
99 | 180 | QString connection_id; | 182 | QString connection_id; |
100 | 183 | |||
101 | 184 | NetworkMonitor network_monitor_; | ||
102 | 181 | }; | 185 | }; |
103 | 182 | } | 186 | } |
104 | 183 | } | 187 | } |
105 | 184 | 188 | ||
106 | === modified file 'src/CMakeLists.txt' | |||
107 | --- src/CMakeLists.txt 2016-07-04 15:53:42 +0000 | |||
108 | +++ src/CMakeLists.txt 2016-07-18 11:43:17 +0000 | |||
109 | @@ -1,7 +1,8 @@ | |||
110 | 1 | # Expose internal headers under sensible paths to the impl. | 1 | # Expose internal headers under sensible paths to the impl. |
111 | 2 | include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/messaging ${PROCESS_CPP_INCLUDE_DIRS} ${LibPhoneNumber_INCLUDE_DIRS}) | 2 | include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/messaging ${PROCESS_CPP_INCLUDE_DIRS} ${LibPhoneNumber_INCLUDE_DIRS}) |
112 | 3 | 3 | ||
114 | 4 | qt5_wrap_cpp(MESSAGING_FW_MOCS ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/protocol.h | 4 | qt5_wrap_cpp(MESSAGING_FW_MOCS ${CMAKE_SOURCE_DIR}/include/messaging/qt/network_monitor.h |
115 | 5 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/protocol.h | ||
116 | 5 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/connection.h | 6 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/connection.h |
117 | 6 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable.h | 7 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable.h |
118 | 7 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable_internal.h) | 8 | ${CMAKE_SOURCE_DIR}/include/messaging/qt/tp/interfaces/base_channel_destroyable_internal.h) |
119 | @@ -33,6 +34,7 @@ | |||
120 | 33 | messaging/user.cpp | 34 | messaging/user.cpp |
121 | 34 | messaging/utils.cpp | 35 | messaging/utils.cpp |
122 | 35 | 36 | ||
123 | 37 | messaging/qt/network_monitor.cpp | ||
124 | 36 | messaging/qt/runtime.cpp | 38 | messaging/qt/runtime.cpp |
125 | 37 | messaging/qt/variant.cpp | 39 | messaging/qt/variant.cpp |
126 | 38 | messaging/qt/variant_map_facade.cpp | 40 | messaging/qt/variant_map_facade.cpp |
127 | 39 | 41 | ||
128 | === modified file 'src/messaging/connection.cpp' | |||
129 | --- src/messaging/connection.cpp 2016-03-30 19:19:19 +0000 | |||
130 | +++ src/messaging/connection.cpp 2016-07-18 11:43:17 +0000 | |||
131 | @@ -16,6 +16,8 @@ | |||
132 | 16 | 16 | ||
133 | 17 | #include <messaging/connection.h> | 17 | #include <messaging/connection.h> |
134 | 18 | 18 | ||
135 | 19 | #include <messaging/qt/network_monitor.h> | ||
136 | 20 | |||
137 | 19 | struct messaging::Connection::Private | 21 | struct messaging::Connection::Private |
138 | 20 | { | 22 | { |
139 | 21 | std::shared_ptr<messaging::Connection::Observer> observer; | 23 | std::shared_ptr<messaging::Connection::Observer> observer; |
140 | 22 | 24 | ||
141 | === added file 'src/messaging/qt/network_monitor.cpp' | |||
142 | --- src/messaging/qt/network_monitor.cpp 1970-01-01 00:00:00 +0000 | |||
143 | +++ src/messaging/qt/network_monitor.cpp 2016-07-18 11:43:17 +0000 | |||
144 | @@ -0,0 +1,139 @@ | |||
145 | 1 | #include <messaging/qt/network_monitor.h> | ||
146 | 2 | |||
147 | 3 | #include <messaging/connection.h> | ||
148 | 4 | |||
149 | 5 | #include <QtNetwork/QNetworkConfigurationManager> | ||
150 | 6 | |||
151 | 7 | #include <glog/logging.h> | ||
152 | 8 | |||
153 | 9 | namespace mq = messaging::qt; | ||
154 | 10 | |||
155 | 11 | mq::NetworkMonitor::NetworkMonitor(const std::weak_ptr<Connection> &connection, QObject *parent) | ||
156 | 12 | : QObject(parent) | ||
157 | 13 | , network_config_manager_{this} | ||
158 | 14 | , connection_{connection} | ||
159 | 15 | , current_ssid_{} | ||
160 | 16 | , is_connection_ready_{false} | ||
161 | 17 | { | ||
162 | 18 | start_monitoring(); | ||
163 | 19 | } | ||
164 | 20 | |||
165 | 21 | mq::NetworkMonitor::~NetworkMonitor() | ||
166 | 22 | { | ||
167 | 23 | } | ||
168 | 24 | |||
169 | 25 | /*! | ||
170 | 26 | * \brief starts monitoring current connection. The monitoring will restart in case a new | ||
171 | 27 | * connection is created but this one won't be monitored anymore | ||
172 | 28 | */ | ||
173 | 29 | void mq::NetworkMonitor::start_monitoring() | ||
174 | 30 | { | ||
175 | 31 | connect(&network_config_manager_, | ||
176 | 32 | SIGNAL(onlineStateChanged(bool)), | ||
177 | 33 | SLOT(refresh()), Qt::QueuedConnection); | ||
178 | 34 | connect(&network_config_manager_, | ||
179 | 35 | SIGNAL(configurationAdded(QNetworkConfiguration)), | ||
180 | 36 | SLOT(refresh()), Qt::QueuedConnection); | ||
181 | 37 | connect(&network_config_manager_, | ||
182 | 38 | SIGNAL(configurationChanged(QNetworkConfiguration)), | ||
183 | 39 | SLOT(refresh()), Qt::QueuedConnection); | ||
184 | 40 | connect(&network_config_manager_, | ||
185 | 41 | SIGNAL(configurationRemoved(QNetworkConfiguration)), | ||
186 | 42 | SLOT(refresh()), Qt::QueuedConnection); | ||
187 | 43 | connect(&network_config_manager_, | ||
188 | 44 | SIGNAL(updateCompleted()), | ||
189 | 45 | SLOT(refresh()), Qt::QueuedConnection); | ||
190 | 46 | |||
191 | 47 | refresh_timer_.setSingleShot(true); | ||
192 | 48 | connect(&refresh_timer_, | ||
193 | 49 | SIGNAL(timeout()), | ||
194 | 50 | SLOT(idle_refresh())); | ||
195 | 51 | } | ||
196 | 52 | |||
197 | 53 | /*! | ||
198 | 54 | * \brief stops monitoring network switch in this connection | ||
199 | 55 | */ | ||
200 | 56 | void mq::NetworkMonitor::stop_monitoring() | ||
201 | 57 | { | ||
202 | 58 | disconnect(&network_config_manager_, | ||
203 | 59 | SIGNAL(onlineStateChanged(bool)), | ||
204 | 60 | this, | ||
205 | 61 | SLOT(refresh())); | ||
206 | 62 | disconnect(&network_config_manager_, | ||
207 | 63 | SIGNAL(configurationAdded(QNetworkConfiguration)), | ||
208 | 64 | this, | ||
209 | 65 | SLOT(refresh())); | ||
210 | 66 | disconnect(&network_config_manager_, | ||
211 | 67 | SIGNAL(configurationChanged(QNetworkConfiguration)), | ||
212 | 68 | this, | ||
213 | 69 | SLOT(refresh())); | ||
214 | 70 | disconnect(&network_config_manager_, | ||
215 | 71 | SIGNAL(configurationRemoved(QNetworkConfiguration)), | ||
216 | 72 | this, | ||
217 | 73 | SLOT(refresh())); | ||
218 | 74 | disconnect(&network_config_manager_, | ||
219 | 75 | SIGNAL(updateCompleted()), | ||
220 | 76 | this, | ||
221 | 77 | SLOT(refresh())); | ||
222 | 78 | } | ||
223 | 79 | |||
224 | 80 | /*! | ||
225 | 81 | * \brief flag needed to know when the connection object has become effectively online. | ||
226 | 82 | * This is needed to determinate if a received ssid different from the previous one should be taken | ||
227 | 83 | * as the trigger | ||
228 | 84 | */ | ||
229 | 85 | void mq::NetworkMonitor::set_connection_ready(bool ready) | ||
230 | 86 | { | ||
231 | 87 | is_connection_ready_ = ready; | ||
232 | 88 | } | ||
233 | 89 | |||
234 | 90 | void mq::NetworkMonitor::refresh() | ||
235 | 91 | { | ||
236 | 92 | refresh_timer_.start(3000); | ||
237 | 93 | } | ||
238 | 94 | |||
239 | 95 | void mq::NetworkMonitor::idle_refresh() | ||
240 | 96 | { | ||
241 | 97 | // Check if is online | ||
242 | 98 | QList<QNetworkConfiguration> active_configs = network_config_manager_.allConfigurations(QNetworkConfiguration::Active); | ||
243 | 99 | bool is_online = active_configs.size() > 0; | ||
244 | 100 | if (is_online) { | ||
245 | 101 | // Check if the connection is wifi or ethernet | ||
246 | 102 | QNetworkConfiguration default_config = network_config_manager_.defaultConfiguration(); | ||
247 | 103 | |||
248 | 104 | // while connecting, we admit updating over an empty current_ssid. In the case | ||
249 | 105 | // of being effectively connected, that means a network switch | ||
250 | 106 | if (not is_connection_ready_) | ||
251 | 107 | { | ||
252 | 108 | if (current_ssid_.empty()) | ||
253 | 109 | { | ||
254 | 110 | dump(default_config); | ||
255 | 111 | current_ssid_ = default_config.name().toStdString(); | ||
256 | 112 | } | ||
257 | 113 | } | ||
258 | 114 | |||
259 | 115 | if (current_ssid_ != default_config.name().toStdString()) | ||
260 | 116 | { | ||
261 | 117 | // network is switched at this point, so desconnect the registered connection in case is valid. | ||
262 | 118 | LOG(INFO) << "detected network switch"; | ||
263 | 119 | auto sp = connection_.lock(); | ||
264 | 120 | if (sp) | ||
265 | 121 | { | ||
266 | 122 | sp->disconnect(); | ||
267 | 123 | stop_monitoring(); | ||
268 | 124 | } | ||
269 | 125 | } | ||
270 | 126 | |||
271 | 127 | } else { | ||
272 | 128 | LOG(INFO) << "Network is offline"; | ||
273 | 129 | } | ||
274 | 130 | } | ||
275 | 131 | |||
276 | 132 | void mq::NetworkMonitor::dump(const QNetworkConfiguration &config) | ||
277 | 133 | { | ||
278 | 134 | LOG(INFO) << "New network connection:\nType: " << config.bearerTypeName().toStdString() | ||
279 | 135 | << "\nId: " << config.identifier().toStdString() | ||
280 | 136 | << "\nName: " << config.name().toStdString() | ||
281 | 137 | << "\nIsValid: " << config.isValid() | ||
282 | 138 | << "\nRoamingAvailable: " << config.isRoamingAvailable(); | ||
283 | 139 | } | ||
284 | 0 | 140 | ||
285 | === modified file 'src/messaging/qt/tp/connection.cpp' | |||
286 | --- src/messaging/qt/tp/connection.cpp 2016-07-14 10:34:45 +0000 | |||
287 | +++ src/messaging/qt/tp/connection.cpp 2016-07-18 11:43:17 +0000 | |||
288 | @@ -145,6 +145,7 @@ | |||
289 | 145 | , connector{connector} | 145 | , connector{connector} |
290 | 146 | , observer{std::make_shared<mqt::tp::Connection::Observer>(runtime, Tp::SharedPtr<mqt::tp::Connection>{this})} | 146 | , observer{std::make_shared<mqt::tp::Connection::Observer>(runtime, Tp::SharedPtr<mqt::tp::Connection>{this})} |
291 | 147 | , connection{connector->request_connection(observer, observer, observer, mqt::VariantMapFacade{parameters})} | 147 | , connection{connector->request_connection(observer, observer, observer, mqt::VariantMapFacade{parameters})} |
292 | 148 | , network_monitor_{connection} | ||
293 | 148 | { | 149 | { |
294 | 149 | qRegisterMetaType<messaging::Recipient::shared_ptr>(); | 150 | qRegisterMetaType<messaging::Recipient::shared_ptr>(); |
295 | 150 | 151 | ||
296 | @@ -243,6 +244,7 @@ | |||
297 | 243 | try | 244 | try |
298 | 244 | { | 245 | { |
299 | 245 | connection->disconnect(); | 246 | connection->disconnect(); |
300 | 247 | network_monitor_.stop_monitoring(); | ||
301 | 246 | } | 248 | } |
302 | 247 | catch (...) | 249 | catch (...) |
303 | 248 | { | 250 | { |
304 | @@ -303,6 +305,8 @@ | |||
305 | 303 | 305 | ||
306 | 304 | presence.status = QLatin1String("available"); | 306 | presence.status = QLatin1String("available"); |
307 | 305 | presence.type = Tp::ConnectionPresenceTypeAvailable; | 307 | presence.type = Tp::ConnectionPresenceTypeAvailable; |
308 | 308 | |||
309 | 309 | network_monitor_.set_connection_ready(true); | ||
310 | 306 | } | 310 | } |
311 | 307 | else | 311 | else |
312 | 308 | { | 312 | { |
PASSED: Continuous integration, rev:52 /jenkins. canonical. com/system- apps/job/ lp-messaging- framework- ci/19/ /jenkins. canonical. com/system- apps/job/ build/980 /jenkins. canonical. com/system- apps/job/ test-0- autopkgtest/ label=phone- armhf,release= vivid+overlay, testname= default/ 181 /jenkins. canonical. com/system- apps/job/ build-0- fetch/980 /jenkins. canonical. com/system- apps/job/ build-1- sourcepkg/ release= vivid+overlay/ 882 /jenkins. canonical. com/system- apps/job/ build-1- sourcepkg/ release= xenial+ overlay/ 882 /jenkins. canonical. com/system- apps/job/ build-1- sourcepkg/ release= yakkety/ 882 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= vivid+overlay/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= vivid+overlay/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= xenial+ overlay/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= xenial+ overlay/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= yakkety/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=amd64, release= yakkety/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= vivid+overlay/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= vivid+overlay/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= xenial+ overlay/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= xenial+ overlay/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= yakkety/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=armhf, release= yakkety/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= vivid+overlay/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= vivid+overlay/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= xenial+ overlay/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= xenial+ overlay/ 879/artifact/ output/ *zip*/output. zip /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= yakkety/ 879 /jenkins. canonical. com/system- apps/job/ build-2- binpkg/ arch=i386, release= yakkety/ 879/artifact/ output/ *zip*/output. zip
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
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:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
SUCCESS: https:/
deb: https:/
Click here to trigger a rebuild: /jenkins. canonical. com/system- apps/job/ lp-messaging- framework- ci/19/rebuild
https:/