Toshiba / Mbed OS mbed-os-example-pelion
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers device_update.py Source File

device_update.py

00001 """
00002 Copyright 2019 ARM Limited
00003 Licensed under the Apache License, Version 2.0 (the "License");
00004 you may not use this file except in compliance with the License.
00005 You may obtain a copy of the License at
00006 
00007     http://www.apache.org/licenses/LICENSE-2.0
00008 
00009 Unless required by applicable law or agreed to in writing, software
00010 distributed under the License is distributed on an "AS IS" BASIS,
00011 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00012 See the License for the specific language governing permissions and
00013 limitations under the License.
00014 """
00015 
00016 # pylint: disable=missing-docstring
00017 # pylint: disable=line-too-long,method-hidden,relative-import
00018 
00019 import time
00020 from icetea_lib.bench import TestStepFail
00021 from pelion_helper import PelionBase
00022 
00023 
00024 class Testcase(PelionBase):
00025     def __init__(self):
00026         PelionBase.__init__(self,
00027                             name="device_update",
00028                             title="Example application can perform firmware update",
00029                             status="released",
00030                             type="acceptance",
00031                             component=["mbed_cloud_client_example"])
00032     def setup(self):
00033         super(Testcase, self).setup()
00034         super(Testcase, self).setup_update()
00035 
00036     def case(self):
00037         # Create filter for update campaign generation, with automatic startup
00038         update_filter = self.prepare_campaign_filter(state="scheduled")
00039         # Start the update campaign
00040         campaign_id = self.post_campaign(update_filter)
00041         # Wait for the campaign to reach autostopped state
00042         timeout = 600
00043         _endtime = time.time() + timeout
00044 
00045         while True:
00046             self.delay(10)
00047             result = self.check_campaign_state(campaign_id)
00048             # Update campaign has stopped
00049             if result[0] == "autostopped":
00050                 break
00051 
00052             if time.time() > _endtime:
00053                 self.logger.error("Campaign in state: %s, Device in state: %s", result[0], result[1])
00054                 raise TestStepFail("Campaign did not finish in %d" % timeout)
00055 
00056         # Check for final state of the device
00057         final_result = self.check_campaign_state(campaign_id)
00058         if final_result[1] != "deployed":
00059             raise TestStepFail("Device in %s state, expected deployed" % result[1])
00060 
00061         self.logger.info("Firmware update finished successfully")
00062 
00063     def teardown(self):
00064         self.connect_api.stop_notifications()