blob: b625c2ecf00f877d92a8826b57dbde2925d60c55 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright (C) 2021 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
"""
Script for to flash Fuchsia devices and reports the DUT's version of Fuchsia in
the Sponge test result properties. Uses the built in flashing tool for
fuchsia_devices.
"""
from acts import asserts
from acts import signals
from acts.base_test import BaseTestClass
from acts.utils import get_device
MAX_FLASH_ATTEMPTS = 3
class FlashTest(BaseTestClass):
def setup_class(self):
super().setup_class()
self.failed_to_get_version = False
def teardown_class(self):
# Verify that FlashTest successfully reported the DUT version. This is
# working around a flaw in ACTS where signals.TestAbortAll does not
# report any errors.
#
# TODO(http://b/253515812): This has been fixed in Mobly already. Remove
# teardown_class and change "TestError" to "abort_all" in
# test_flash_devices once we move to Mobly.
if self.failed_to_get_version:
asserts.abort_all('Failed to get DUT version')
return super().teardown_class()
def test_flash_devices(self):
for device in self.fuchsia_devices:
flash_counter = 0
while True:
try:
device.reboot(reboot_type='flash',
use_ssh=True,
unreachable_timeout=120,
ping_timeout=120)
self.log.info(f'{device.orig_ip} has been flashed.')
break
except Exception as err:
self.log.error(
f'Failed to flash {device.orig_ip} with error:\n{err}')
if not device.device_pdu_config:
asserts.abort_all(
f'Failed to flash {device.orig_ip} and no PDU available for hard reboot'
)
flash_counter = flash_counter + 1
if flash_counter == MAX_FLASH_ATTEMPTS:
asserts.abort_all(
f'Failed to flash {device.orig_ip} after {MAX_FLASH_ATTEMPTS} attempts'
)
self.log.info(
f'Hard rebooting {device.orig_ip} and retrying flash.')
device.reboot(reboot_type='hard',
testbed_pdus=self.pdu_devices)
# Report the new Fuchsia version
try:
dut = get_device(self.fuchsia_devices, 'DUT')
version = dut.version()
self.record_data({'sponge_properties': {
'DUT_VERSION': version,
}})
self.log.info("DUT version found: {}".format(version))
except Exception as e:
self.failed_to_get_version = True
raise signals.TestError(f'Failed to get DUT version: {e}') from e