def common_update_proceduce(install_image, regnerate_image_id=True, device_type="vexpress-qemu", checksum="abc123", broken_image=False): if broken_image: artifact_id = "broken_image_" + str(random.randint(0, 999999)) elif regnerate_image_id: artifact_id = Helpers.artifact_id_randomize(install_image) logger.debug("Randomized image id: " + artifact_id) else: artifact_id = Helpers.yocto_id_from_ext4(install_image) # create atrifact artifact_file = "artifact.mender" created = image.make_artifact(install_image, device_type, artifact_id, artifact_file) if created: deploy.upload_image("artifact.mender") devices_accepted_id = [ device["id"] for device in adm.get_devices_status("accepted") ] deployment_id = deploy.trigger_deployment(name="New valid update", artifact_name=artifact_id, devices=devices_accepted_id) # remove the artifact file os.remove(artifact_file) return deployment_id, artifact_id logger.error("error creating artifact")
def test_update_image_id_already_installed( self, install_image=conftest.get_valid_image()): """Uploading an image with an incorrect name set results in failure and rollback.""" if not env.host_string: execute(self.test_update_image_id_already_installed, hosts=get_mender_clients(), install_image=install_image) return previous_inactive_part = Helpers.get_passive_partition() deployment_id, expected_image_id = common_update_proceduce( install_image, True) Helpers.verify_reboot_performed() devices_accepted_id = [ device["id"] for device in adm.get_devices_status("accepted") ] deployment_id = deploy.trigger_deployment( name="New valid update", artifact_name=expected_image_id, devices=devices_accepted_id) deploy.check_expected_status(deployment_id, "already-installed", len(get_mender_clients()))
def common_update_procedure(install_image, regenerate_image_id=True, device_type=conftest.machine_name, broken_image=False, verify_status=True, signed=False, devices=None, scripts=[], pre_upload_callback=lambda: None, pre_deployment_callback=lambda: None, deployment_triggered_callback=lambda: None, compression_type="gzip"): with artifact_lock: if broken_image: artifact_id = "broken_image_" + str(random.randint(0, 999999)) elif regenerate_image_id: artifact_id = Helpers.artifact_id_randomize(install_image) logger.debug("randomized image id: " + artifact_id) else: artifact_id = Helpers.yocto_id_from_ext4(install_image) compression_arg = "--compression " + compression_type # create atrifact with tempfile.NamedTemporaryFile() as artifact_file: created_artifact = image.make_artifact( install_image, device_type, artifact_id, artifact_file, signed=signed, scripts=scripts, global_flags=compression_arg) if created_artifact: pre_upload_callback() deploy.upload_image(created_artifact) if devices is None: devices = list( set([ device["device_id"] for device in adm.get_devices_status("accepted") ])) pre_deployment_callback() deployment_id = deploy.trigger_deployment( name="New valid update", artifact_name=artifact_id, devices=devices) else: logger.warn("failed to create artifact") pytest.fail("error creating artifact") deployment_triggered_callback() # wait until deployment is in correct state if verify_status: deploy.check_expected_status("inprogress", deployment_id) return deployment_id, artifact_id
def test_artifacts_persisted(self): devices_to_update = list( set([ device["device_id"] for device in adm.get_devices_status("accepted", expected_devices=10) ])) deployment_id = deploy.trigger_deployment( name="artifact survived backed upgrade", artifact_name=self.provisioned_artifact_id, devices=devices_to_update) deploy.check_expected_status("finished", deployment_id)
def common_update_procedure(install_image, regenerate_image_id=True, device_type="vexpress-qemu", broken_image=False, verify_status=True, devices=None): with artifact_lock: if broken_image: artifact_id = "broken_image_" + str(random.randint(0, 999999)) elif regenerate_image_id: artifact_id = Helpers.artifact_id_randomize(install_image) logger.debug("Randomized image id: " + artifact_id) else: artifact_id = Helpers.yocto_id_from_ext4(install_image) # create atrifact with tempfile.NamedTemporaryFile() as artifact_file: created_artifact = image.make_artifact(install_image, device_type, artifact_id, artifact_file) if created_artifact: deploy.upload_image(created_artifact) if devices is None: devices = list( set([ device["device_id"] for device in adm.get_devices_status("accepted") ])) deployment_id = deploy.trigger_deployment( name="New valid update", artifact_name=artifact_id, devices=devices) else: pytest.fail("error creating artifact") # wait until deployment is in correct state if verify_status: deploy.check_expected_status("inprogress", deployment_id) return deployment_id, artifact_id