conman: Upload logs when joining a provisioning network.
More specifically, after joining a new open network, try to upload
logs once after detecting ACS access.
BUG=30198397
Change-Id: Ifd6b6620819cac8fd8c4d8beb0050ce3313e99fb
diff --git a/conman/connection_manager.py b/conman/connection_manager.py
index 2ab4763..13ceb1e 100755
--- a/conman/connection_manager.py
+++ b/conman/connection_manager.py
@@ -194,6 +194,7 @@
IP_LINK = ['ip', 'link']
IFPLUGD_ACTION = ['/etc/ifplugd/ifplugd.action']
BINWIFI = ['wifi']
+ UPLOAD_LOGS_AND_WAIT = ['timeout', '60', 'upload-logs-and-wait']
def __init__(self,
bridge_interface='br0',
@@ -216,6 +217,7 @@
self._wlan_retry_s = wlan_retry_s
self._acs_update_wait_s = acs_update_wait_s
self._wlan_configuration = {}
+ self._try_to_upload_logs = False
# Make sure all necessary directories exist.
for directory in (self._tmp_dir, self._config_dir, self._moca_tmp_dir,
@@ -465,6 +467,10 @@
self._status.connected_to_wlan = False
if self.acs():
logging.debug('Connected to ACS on %s', wifi.name)
+ if self._try_to_upload_logs:
+ self._try_upload_logs()
+ self._try_to_upload_logs = False
+
wifi.last_successful_bss_info = getattr(wifi,
'last_attempted_bss_info',
None)
@@ -694,6 +700,7 @@
wifi.waiting_for_acs_since = now
wifi.complain_about_acs_at = now + 5
logging.info('Attempting to provision via SSID %s', bss_info.ssid)
+ self._try_to_upload_logs = True
# If we can no longer connect to this, it's no longer successful.
elif bss_info == last_successful_bss_info:
wifi.last_successful_bss_info = None
@@ -789,6 +796,11 @@
subprocess.check_output(self.BINWIFI + list(command),
stderr=subprocess.STDOUT)
+ def _try_upload_logs(self):
+ logging.debug('Attempting to upload logs')
+ if subprocess.call(self.UPLOAD_LOGS_AND_WAIT) != 0:
+ logging.error('Failed to upload logs')
+
def _wifi_show():
try:
diff --git a/conman/connection_manager_test.py b/conman/connection_manager_test.py
index 0297ca1..f343d7f 100755
--- a/conman/connection_manager_test.py
+++ b/conman/connection_manager_test.py
@@ -262,6 +262,7 @@
IFUP = ['echo', 'ifup']
IFPLUGD_ACTION = ['echo', 'ifplugd.action']
BINWIFI = ['echo', 'wifi']
+ UPLOAD_LOGS_AND_WAIT = ['echo', 'upload-logs-and-wait']
def __init__(self, *args, **kwargs):
self._binwifi_commands = []
@@ -294,6 +295,7 @@
self.can_connect_to_s3 = True
# Will s2 fail rather than providing ACS access?
self.s2_fail = False
+ self.log_upload_count = 0
def create_wifi_interfaces(self):
super(ConnectionManager, self).create_wifi_interfaces()
@@ -400,6 +402,10 @@
return self._wlan_configuration[band].client_up
+ def _try_upload_logs(self):
+ self.log_upload_count += 1
+ return super(ConnectionManager, self)._try_upload_logs()
+
# Test methods
def delete_wlan_config(self, band):
@@ -651,6 +657,7 @@
c.interface_with_scan_results = c.wifi_for_band(band).name
# Wait for a scan, plus 3 cycles, so that s2 will have been tried.
c.run_until_scan(band)
+ wvtest.WVPASSEQ(c.log_upload_count, 0)
for _ in range(3):
c.run_once()
wvtest.WVPASS(c.has_status_files([status.P.CONNECTED_TO_OPEN]))
@@ -665,6 +672,7 @@
wvtest.WVPASS(c.internet())
wvtest.WVFAIL(c.client_up(band))
wvtest.WVPASS(c.wifi_for_band(band).current_route())
+ wvtest.WVPASSEQ(c.log_upload_count, 1)
# Disable scan results again.
c.interface_with_scan_results = None
@@ -704,6 +712,7 @@
wvtest.WVPASS(c.has_status_files([status.P.CONNECTED_TO_OPEN]))
wvtest.WVPASSEQ(c.last_provisioning_attempt.ssid, 's3')
wvtest.WVPASSEQ(c.last_provisioning_attempt.bssid, 'ff:ee:dd:cc:bb:aa')
+ wvtest.WVPASSEQ(c.log_upload_count, 2)
# Now, recreate the same WLAN configuration, which should be connected to.
# Also, test that atomic writes/renames work.
@@ -771,6 +780,7 @@
wvtest.WVPASS(c.acs())
# Make sure we didn't scan on `band`.
wvtest.WVPASSEQ(scan_count_for_band, c.wifi_for_band(band).wifi_scan_counter)
+ wvtest.WVPASSEQ(c.log_upload_count, 3)
# Now re-create the WLAN config, connect to the WLAN, and make sure that s3 is
# unset as last_successful_bss_info, since it is no longer available.
@@ -810,6 +820,7 @@
c.run_once()
s2_bss = iw.BssInfo('01:23:45:67:89:ab', 's2')
wvtest.WVPASSEQ(c.wifi_for_band(band).last_successful_bss_info, s2_bss)
+ wvtest.WVPASSEQ(c.log_upload_count, 4)
c.s2_fail = True
c.write_wlan_config(band, ssid, psk)
@@ -962,6 +973,7 @@
wvtest.WVFAIL(c.bridge.current_route())
wvtest.WVPASS(c.wifi_for_band('2.4').current_route())
wvtest.WVFAIL(c.wifi_for_band('5').current_route())
+ wvtest.WVPASSEQ(c.log_upload_count, 1)
@wvtest.wvtest
@@ -1054,6 +1066,7 @@
wvtest.WVFAIL(c.bridge.current_route())
wvtest.WVPASS(c.wifi_for_band('2.4').current_route())
wvtest.WVPASS(c.wifi_for_band('5').current_route())
+ wvtest.WVPASSEQ(c.log_upload_count, 1)
@wvtest.wvtest