Esempio n. 1
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        # Always ensure the device is in fastboot mode before trying to boot.
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(ResetDevice())
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        # Based on the boot sequence defined in the device configuration, add
        # the required pipeline actions.
        sequences = self.job.device['actions']['boot']['methods'].get(
            'fastboot', [])
        for sequence in sequences:
            mapped = _fastboot_sequence_map(sequence)
            if mapped[1]:
                self.internal_pipeline.add_action(
                    mapped[0](device_actions=mapped[1]))
            elif mapped[0]:
                self.internal_pipeline.add_action(mapped[0]())
        if self.has_prompts(parameters):
            self.internal_pipeline.add_action(AutoLoginAction())
            if self.test_has_shell(parameters):
                self.internal_pipeline.add_action(ExpectShellSession())
                if 'transfer_overlay' in parameters:
                    self.internal_pipeline.add_action(OverlayUnpack())
                self.internal_pipeline.add_action(ExportDeviceEnvironment())
Esempio n. 2
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        # This is required in order to power on the device so that when the
        # test job writer wants to perform some operation using a
        # lava-test-shell action that follows, this becomes mandatory. Think of
        # issuing any fastboot commands on the powered on device.
        #
        # NOTE: Add more power on strategies, if required for specific devices.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(ResetDevice())
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        self.download_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        for image in image_keys:
            if image != 'yaml_line':
                self.internal_pipeline.add_action(
                    DownloaderAction(image, self.download_dir))
        if self.test_needs_overlay(parameters):
            self.internal_pipeline.add_action(OverlayAction())
        self.internal_pipeline.add_action(CopyToLxcAction())
Esempio n. 3
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     method_params = self.job.device["actions"]["boot"]["methods"]["pyocd"][
         "parameters"
     ]
     if self.job.device.hard_reset_command:
         self.pipeline.add_action(ResetDevice())
         self.pipeline.add_action(WaitDeviceBoardID(self.job.device.get("board_id")))
     if method_params.get("connect_before_flash", False):
         self.pipeline.add_action(ConnectDevice())
     self.pipeline.add_action(FlashPyOCDAction())
     if not method_params.get("connect_before_flash", False):
         self.pipeline.add_action(ConnectDevice())
Esempio n. 4
0
    def populate(self, parameters):
        self.parameters = parameters
        self.pipeline = Pipeline(parent=self,
                                 job=self.job,
                                 parameters=parameters)

        if parameters.get("commands"):
            self.pipeline.add_action(BootFastbootCommands())

        board_id = self.job.device["fastboot_serial_number"]

        # Always ensure the device is in fastboot mode before trying to boot.
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get("fastboot_via_uboot", False):
            self.pipeline.add_action(ConnectDevice())
            self.pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.pipeline.add_action(ConnectDevice())
            self.pipeline.add_action(ResetDevice())
        else:
            self.pipeline.add_action(WaitDeviceBoardID(board_id))
            self.pipeline.add_action(EnterFastbootAction())

        # Based on the boot sequence defined in the device configuration, add
        # the required pipeline actions.
        sequences = self.job.device["actions"]["boot"]["methods"].get(
            "fastboot", [])
        for sequence in sequences:
            mapped = _fastboot_sequence_map(sequence)
            self.pipeline.add_action(WaitDeviceBoardID(board_id))
            if mapped[1]:
                self.pipeline.add_action(mapped[0](device_actions=mapped[1]))
            elif mapped[0]:
                self.pipeline.add_action(mapped[0]())
        if self.job.device.hard_reset_command:
            if not self.is_container():
                self.pipeline.add_action(PreOs())
            if self.has_prompts(parameters):
                self.pipeline.add_action(AutoLoginAction())
                if self.test_has_shell(parameters):
                    self.pipeline.add_action(ExpectShellSession())
                    if "transfer_overlay" in parameters:
                        self.pipeline.add_action(OverlayUnpack())
                    self.pipeline.add_action(ExportDeviceEnvironment())
        else:
            if not self.is_container():
                self.pipeline.add_action(ConnectAdb())
                self.pipeline.add_action(AdbOverlayUnpack())
Esempio n. 5
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     # customize the device configuration for this job
     self.pipeline.add_action(UBootSecondaryMedia())
     self.pipeline.add_action(BootloaderCommandOverlay())
     self.pipeline.add_action(ConnectDevice())
     self.pipeline.add_action(UBootRetry())
Esempio n. 6
0
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     if self.job.device.hard_reset_command:
         self.internal_pipeline.add_action(ResetDevice())
         self.internal_pipeline.add_action(WaitDeviceBoardID(self.job.device.get('board_id', None)))
     self.internal_pipeline.add_action(FlashPyOCDAction())
     self.internal_pipeline.add_action(ConnectDevice())
Esempio n. 7
0
 def populate(self, parameters):
     self.expect_shell = parameters.get('expect_shell', True)
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     self.internal_pipeline.add_action(BootloaderSecondaryMedia())
     self.internal_pipeline.add_action(BootloaderCommandOverlay())
     self.internal_pipeline.add_action(ConnectDevice())
     # FIXME: reset_device is a hikey hack due to fastboot/OTG issues
     # remove as part of LAVA-940 - convert to use fastboot-sequence
     reset_device = self.job.device['actions']['boot']['methods'].get(
         'grub-efi', {}).get('reset_device', True)
     if parameters['method'] == 'grub-efi' and reset_device:
         # added unless the device specifies not to reset the device in grub.
         self.internal_pipeline.add_action(ResetDevice())
     elif parameters['method'] == 'grub':
         self.internal_pipeline.add_action(ResetDevice())
     if parameters['method'] == 'grub-efi':
         self.internal_pipeline.add_action(UEFIMenuInterrupt())
         self.internal_pipeline.add_action(GrubMenuSelector())
     self.internal_pipeline.add_action(BootloaderInterruptAction())
     self.internal_pipeline.add_action(BootloaderCommandsAction())
     if self.has_prompts(parameters):
         self.internal_pipeline.add_action(AutoLoginAction())
         if self.test_has_shell(parameters):
             self.internal_pipeline.add_action(ExpectShellSession())
             if 'transfer_overlay' in parameters:
                 self.internal_pipeline.add_action(OverlayUnpack())
             self.internal_pipeline.add_action(ExportDeviceEnvironment())
     else:
         if self.has_boot_finished(parameters):
             self.logger.debug("Doing a boot without a shell (installer)")
             self.internal_pipeline.add_action(InstallerWait())
             self.internal_pipeline.add_action(PowerOff())
Esempio n. 8
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     if self.job.device.hard_reset_command:
         self.pipeline.add_action(ResetDevice())
         self.pipeline.add_action(WaitDeviceBoardID(self.job.device.get("board_id")))
     self.pipeline.add_action(FlashOpenOCDAction())
     self.pipeline.add_action(ConnectDevice())
Esempio n. 9
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     self.pipeline.add_action(DepthchargeCommandOverlay())
     self.pipeline.add_action(ConnectDevice())
     self.pipeline.add_action(DepthchargeRetry())
Esempio n. 10
0
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     self.internal_pipeline.add_action(ConnectDevice())
     self.internal_pipeline.add_action(ResetDevice())
     self.internal_pipeline.add_action(WaitDFUDeviceAction())
     self.internal_pipeline.add_action(FlashDFUAction())
Esempio n. 11
0
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     self.internal_pipeline.add_action(ConnectDevice())
     self.internal_pipeline.add_action(
         BootloaderCommandOverlay(method=parameters["bootloader"]))
     self.internal_pipeline.add_action(BootBootloaderRetry())
Esempio n. 12
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     if self.job.device.hard_reset_command:
         self.pipeline.add_action(ResetDevice())
     self.pipeline.add_action(WaitUSBSerialDeviceAction())
     self.pipeline.add_action(ConnectDevice())
Esempio n. 13
0
File: uuu.py Progetto: iwamatsu/lava
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     self.pipeline.add_action(ResetDevice())
     self.pipeline.add_action(CheckSerialDownloadMode())
     self.pipeline.add_action(BootBootloaderCorruptBootMediaAction())
     self.pipeline.add_action(ResetDevice())
     self.pipeline.add_action(UUUBootAction(), parameters=parameters)
     self.pipeline.add_action(ConnectDevice())
Esempio n. 14
0
    def populate(self, parameters):
        self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
        if self.test_needs_overlay(parameters):
            self.pipeline.add_action(OverlayAction())
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get("fastboot_via_uboot", False):
            self.pipeline.add_action(ConnectDevice())
            self.pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.pipeline.add_action(ConnectDevice())
            if not is_lxc_requested(self.job):
                self.pipeline.add_action(PrePower())
            self.pipeline.add_action(ResetDevice())
        else:
            self.pipeline.add_action(EnterFastbootAction())

        fastboot_dir = self.mkdtemp()
        for image in sorted(parameters["images"].keys()):
            self.pipeline.add_action(
                DownloaderAction(
                    image, fastboot_dir, params=parameters["images"][image]
                )
            )
            if parameters["images"][image].get("apply-overlay", False):
                if self.test_needs_overlay(parameters):
                    if parameters["images"][image].get("sparse", True):
                        self.pipeline.add_action(ApplyOverlaySparseImage(image))
                    else:
                        use_root_part = parameters["images"][image].get(
                            "root_partition", False
                        )
                        self.pipeline.add_action(
                            ApplyOverlayImage(image, use_root_partition=use_root_part)
                        )

            if self.test_needs_overlay(parameters) and self.test_needs_deployment(
                parameters
            ):
                self.pipeline.add_action(DeployDeviceEnvironment())
        self.pipeline.add_action(FastbootFlashOrderAction())
Esempio n. 15
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     self.pipeline.add_action(ConnectDevice())
     self.pipeline.add_action(ResetDevice())
     self.pipeline.add_action(
         BootloaderInterruptAction(method=parameters["bootloader"]))
     self.pipeline.add_action(
         BootloaderCommandsAction(expect_final=False,
                                  method=parameters["bootloader"]))
Esempio n. 16
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
        self.internal_pipeline.add_action(ConnectDevice())
#        self.internal_pipeline.add_action(ResetDevice())
        if self.has_prompts(parameters):
#            self.internal_pipeline.add_action(AutoLoginAction())
            if self.test_has_shell(parameters):
                self.internal_pipeline.add_action(ExpectShellSession())
                if 'transfer_overlay' in parameters:
                    self.internal_pipeline.add_action(OverlayUnpack())
                self.internal_pipeline.add_action(ExportDeviceEnvironment())
Esempio n. 17
0
 def populate(self, parameters):
     self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     method_params = self.job.device['actions']['boot']['methods']['cmsis-dap']['parameters']
     usb_mass_device = method_params.get('usb_mass_device')
     resets_after_flash = method_params.get('resets_after_flash', True)
     if self.job.device.hard_reset_command:
         self.internal_pipeline.add_action(ResetDevice())
         self.internal_pipeline.add_action(WaitDevicePathAction(usb_mass_device))
     self.internal_pipeline.add_action(FlashCMSISAction())
     if resets_after_flash:
         self.internal_pipeline.add_action(WaitUSBSerialDeviceAction())
     self.internal_pipeline.add_action(ConnectDevice())
Esempio n. 18
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        if self.test_needs_overlay(parameters):
            self.internal_pipeline.add_action(OverlayAction())
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(ResetDevice())
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        fastboot_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        for image in image_keys:
            if image != 'yaml_line':
                self.internal_pipeline.add_action(
                    DownloaderAction(image, fastboot_dir))
                if parameters['images'][image].get('apply-overlay', False):
                    if self.test_needs_overlay(parameters):
                        if parameters['images'][image].get('sparse', True):
                            self.internal_pipeline.add_action(
                                ApplyOverlaySparseImage(image))
                        else:
                            self.internal_pipeline.add_action(
                                ApplyOverlayImage(image,
                                                  use_root_partition=False))
                if self.test_needs_overlay(parameters) and \
                   self.test_needs_deployment(parameters):
                    self.internal_pipeline.add_action(
                        DeployDeviceEnvironment())
        self.internal_pipeline.add_action(FastbootFlashOrderAction())
Esempio n. 19
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     method_params = self.job.device["actions"]["boot"]["methods"]["cmsis-dap"][
         "parameters"
     ]
     usb_mass_device = method_params.get("usb_mass_device")
     resets_after_flash = method_params.get("resets_after_flash", True)
     if self.job.device.hard_reset_command:
         self.pipeline.add_action(ResetDevice())
         self.pipeline.add_action(WaitDevicePathAction(usb_mass_device))
     self.pipeline.add_action(FlashCMSISAction())
     if resets_after_flash:
         self.pipeline.add_action(WaitUSBSerialDeviceAction())
     self.pipeline.add_action(ConnectDevice())
Esempio n. 20
0
    def populate(self, parameters):
        dfu = self.job.device["actions"]["boot"]["methods"]["dfu"]
        parameters = dfu["parameters"]

        self.pipeline = Pipeline(parent=self,
                                 job=self.job,
                                 parameters=parameters)
        self.pipeline.add_action(ConnectDevice())
        self.pipeline.add_action(ResetDevice())
        if dfu.get("implementation") == "u-boot":
            self.pipeline.add_action(
                BootloaderInterruptAction(method="u-boot"))
            self.pipeline.add_action(EnterDFU())
        self.pipeline.add_action(WaitDFUDeviceAction())
        self.pipeline.add_action(FlashDFUAction())
Esempio n. 21
0
 def populate(self, parameters):
     download_dir = self.mkdtemp()
     self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters)
     if 'recovery_image' in parameters:
         self.internal_pipeline.add_action(DownloaderAction('recovery_image', path=download_dir))
     self.internal_pipeline.add_action(LxcCreateUdevRuleAction())
     self.force_prompt = True
     self.internal_pipeline.add_action(ConnectDevice())
     self.internal_pipeline.add_action(ResetDevice())
     self.internal_pipeline.add_action(ExtractVExpressRecoveryImage())
     self.internal_pipeline.add_action(EnterVExpressMCC())
     self.internal_pipeline.add_action(EnableVExpressMassStorage())
     self.internal_pipeline.add_action(WaitUSBMassStorageDeviceAction())
     self.internal_pipeline.add_action(MountVExpressMassStorageDevice())
     self.internal_pipeline.add_action(DeployVExpressRecoveryImage())
     self.internal_pipeline.add_action(UnmountVExpressMassStorageDevice())
     self.internal_pipeline.add_action(VExpressFlashErase())
Esempio n. 22
0
 def populate(self, parameters):
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     self.pipeline.add_action(ConnectDevice())
     if parameters.get("pre_power_command", False):
         self.pipeline.add_action(PrePower())
     if parameters.get("pre_os_command", False):
         self.pipeline.add_action(PreOs())
     if parameters.get("reset", True):
         self.pipeline.add_action(ResetDevice())
     if self.has_prompts(parameters):
         self.pipeline.add_action(AutoLoginAction())
         if self.test_has_shell(parameters):
             self.pipeline.add_action(ExpectShellSession())
             if "transfer_overlay" in parameters:
                 self.pipeline.add_action(OverlayUnpack())
             self.pipeline.add_action(ExportDeviceEnvironment())
Esempio n. 23
0
 def populate(self, parameters):
     download_dir = self.mkdtemp()
     self.internal_pipeline = Pipeline(parent=self,
                                       job=self.job,
                                       parameters=parameters)
     self.internal_pipeline.add_action(ConnectDevice())
     self.internal_pipeline.add_action(ResetDevice())
     self.internal_pipeline.add_action(WaitUSBMassStorageDeviceAction())
     for image in parameters['images'].keys():
         if image != 'yaml_line':
             self.internal_pipeline.add_action(
                 DownloaderAction(image, path=download_dir))
     self.internal_pipeline.add_action(MountVExpressMassStorageDevice())
     if 'recovery_image' in parameters['images'].keys():
         self.internal_pipeline.add_action(ExtractVExpressRecoveryImage())
         self.internal_pipeline.add_action(DeployVExpressRecoveryImage())
     if 'test_binary' in parameters['images'].keys():
         self.internal_pipeline.add_action(DeployMPSTestBinary())
     self.internal_pipeline.add_action(UnmountVExpressMassStorageDevice())
Esempio n. 24
0
    def populate(self, parameters):
        super().populate(parameters)
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        recovery = self.job.device["actions"]["deploy"]["methods"]["recovery"]
        recovery_dir = self.mkdtemp()
        image_keys = sorted(parameters["images"].keys())
        for image in image_keys:
            self.internal_pipeline.add_action(
                DownloaderAction(image, recovery_dir))
        self.internal_pipeline.add_action(CopyToLxcAction())

        tags = []
        if "tags" in recovery:
            tags = recovery["tags"]
        if "serial" in tags:
            # might not be a usable shell here, just power on.
            # FIXME: if used, FastbootAction must not try to reconnect
            self.internal_pipeline.add_action(ConnectDevice())
Esempio n. 25
0
    def populate(self, parameters):
        SD_ERASE_CMDS = self.job.device["actions"]["boot"]["methods"]["uuu"][
            "options"]["corrupt_boot_media_command"]
        if isinstance(SD_ERASE_CMDS, str):
            SD_ERASE_CMDS = [SD_ERASE_CMDS]

        u_boot_params = {
            "method": "bootloader",
            "bootloader": "u-boot",
            "commands": SD_ERASE_CMDS,
            "prompts": ["=>"],
        }
        self.pipeline = Pipeline(parent=self,
                                 job=self.job,
                                 parameters=u_boot_params)
        self.pipeline.add_action(ConnectDevice())
        self.pipeline.add_action(
            BootloaderCommandOverlay(method=u_boot_params["bootloader"],
                                     commands=u_boot_params["commands"]))
        self.pipeline.add_action(BootBootloaderRetry())
        self.pipeline.add_action(DisconnectDevice())
Esempio n. 26
0
    def populate(self, parameters):
        super().populate(parameters)
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        recovery = self.job.device['actions']['deploy']['methods']['recovery']
        recovery_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        for image in image_keys:
            if image != 'yaml_line':
                self.internal_pipeline.add_action(
                    DownloaderAction(image, recovery_dir))
        self.internal_pipeline.add_action(CopyToLxcAction())

        tags = []
        if 'tags' in recovery:
            tags = recovery['tags']
        if 'serial' in tags:
            # might not be a usable shell here, just power on.
            # FIXME: if used, FastbootAction must not try to reconnect
            self.internal_pipeline.add_action(ConnectDevice())
Esempio n. 27
0
 def populate(self, parameters):
     download_dir = self.mkdtemp()
     self.pipeline = Pipeline(parent=self,
                              job=self.job,
                              parameters=parameters)
     self.pipeline.add_action(
         DownloaderAction("recovery_image",
                          path=download_dir,
                          params=parameters["recovery_image"]))
     self.pipeline.add_action(LxcCreateUdevRuleAction())
     self.force_prompt = True
     self.pipeline.add_action(ConnectDevice())
     self.pipeline.add_action(ResetDevice())
     self.pipeline.add_action(ExtractVExpressRecoveryImage())
     self.pipeline.add_action(EnterVExpressMCC())
     self.pipeline.add_action(EnableVExpressMassStorage())
     self.pipeline.add_action(WaitUSBMassStorageDeviceAction())
     self.pipeline.add_action(MountVExpressMassStorageDevice())
     self.pipeline.add_action(DeployVExpressRecoveryImage())
     self.pipeline.add_action(UnmountVExpressMassStorageDevice())
     if self.job.device["actions"]["deploy"]["methods"]["vemsd"][
             "parameters"].get("flash_prompt", False):
         self.pipeline.add_action(VExpressFlashErase())
Esempio n. 28
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)
        image_keys = list(parameters['images'].keys())
        if self.test_needs_overlay(parameters):
            self.logger.debug("[SEOJI] add OverlayAction")
            self.internal_pipeline.add_action(OverlayAction())
        # Check if the device has a power command such as HiKey, Dragonboard,
        # etc. against device that doesn't like Nexus, etc.
        if self.job.device.get('fastboot_via_uboot', False):
            self.internal_pipeline.add_action(ConnectDevice())
            self.internal_pipeline.add_action(UBootEnterFastbootAction())
        elif self.job.device.hard_reset_command:
            self.force_prompt = True
            self.internal_pipeline.add_action(ConnectDevice())
            if not is_lxc_requested(self.job):
                self.internal_pipeline.add_action(PrePower())
            self.internal_pipeline.add_action(ResetDevice())
        elif 'nexell_ext' in image_keys:
            # Nexell extension
            #self.internal_pipeline.add_action(OverlayAction())

            # download build result
            if 'url' in parameters['images']['nexell_ext']:
                self.logger.debug(
                    "[SEOJI] url:" +
                    str(parameters['images']['nexell_ext']['url']))
                self.path = '/opt/share'
                self.internal_pipeline.add_action(
                    DownloaderAction('nexell_ext', self.path))
                #if 'compression' in parameters['images']['nexell_ext]:
                #self.logger.debug("[SEOJI] yes compression param exist")

            self.logger.debug("SUKER: parameters in deploy/fastboot.py : " +
                              str(parameters))
            self.internal_pipeline.add_action(
                EnterNexellFastbootAction(parameters, 'deploy_script',
                                          'deploy_command1', 'dir_name'))
            self.internal_pipeline.add_action(
                ApplyNexellDeployAction(parameters, 'deploy_script',
                                        'deploy_command2', 'dir_name'))
        else:
            self.internal_pipeline.add_action(EnterFastbootAction())

        fastboot_dir = self.mkdtemp()
        image_keys = sorted(parameters['images'].keys())
        # Nexell extension
        if 'nexell_ext' in image_keys:
            self.logger.debug("[SEOJI] pass adding DownloaderAction")
            #self.internal_pipeline.add_action(DeployDeviceEnvironment())
        else:
            for image in image_keys:
                if image != 'yaml_line':
                    self.internal_pipeline.add_action(
                        DownloaderAction(image, fastboot_dir))
                    if parameters['images'][image].get('apply-overlay', False):
                        if self.test_needs_overlay(parameters):
                            if parameters['images'][image].get('sparse', True):
                                self.internal_pipeline.add_action(
                                    ApplyOverlaySparseImage(image))
                            else:
                                self.internal_pipeline.add_action(
                                    ApplyOverlayImage(
                                        image, use_root_partition=False))
                    if self.test_needs_overlay(parameters) and \
                       self.test_needs_deployment(parameters):
                        self.internal_pipeline.add_action(
                            DeployDeviceEnvironment())
            self.internal_pipeline.add_action(FastbootFlashOrderAction())
        '''
Esempio n. 29
0
    def populate(self, parameters):
        self.internal_pipeline = Pipeline(parent=self,
                                          job=self.job,
                                          parameters=parameters)

        # Nexell Extension
        if 'nexell_ext' in parameters:
            self.logger.debug("[SEOJI] ****** parameters: %s", parameters)
            self.internal_pipeline.add_action(
                NexellFastbootBootAction(parameters))
            self.internal_pipeline.add_action(ConnectDevice())
            if self.has_prompts(parameters):
                if 'auto_login' in parameters:
                    self.internal_pipeline.add_action(AutoLoginAction())
            self.internal_pipeline.add_action(
                WaitForAdbDeviceForNexell(parameters))
            self.internal_pipeline.add_action(ApplyNexellOverlay())
            self.internal_pipeline.add_action(ExpectShellSession())
        else:
            if parameters.get("commands"):
                self.logger.debug("[SEOJI] boot - add BootFastbootCommands()")
                self.internal_pipeline.add_action(BootFastbootCommands())

            # Always ensure the device is in fastboot mode before trying to boot.
            # Check if the device has a power command such as HiKey, Dragonboard,
            # etc. against device that doesn't like Nexus, etc.
            if self.job.device.get('fastboot_via_uboot', False):
                self.internal_pipeline.add_action(ConnectDevice())
                self.internal_pipeline.add_action(UBootEnterFastbootAction())
            elif self.job.device.hard_reset_command:
                self.force_prompt = True
                self.internal_pipeline.add_action(ConnectDevice())
                self.internal_pipeline.add_action(ResetDevice())
            else:
                self.logger.debug("[SEOJI] boot - add EnterFastbootAction")
                self.internal_pipeline.add_action(EnterFastbootAction())

            # Based on the boot sequence defined in the device configuration, add
            # the required pipeline actions.
            self.logger.debug("[SEOJI] get sequences")
            sequences = self.job.device['actions']['boot']['methods'].get(
                'fastboot', [])
            self.logger.debug("[SEOJI] sequences" + str(sequences))
            for sequence in sequences:
                mapped = _fastboot_sequence_map(sequence)
                if mapped[1]:
                    self.internal_pipeline.add_action(
                        mapped[0](device_actions=mapped[1]))
                elif mapped[0]:
                    self.internal_pipeline.add_action(mapped[0]())
            if self.job.device.hard_reset_command:
                if not is_lxc_requested(self.job):
                    self.internal_pipeline.add_action(PreOs())
                if self.has_prompts(parameters):
                    self.internal_pipeline.add_action(AutoLoginAction())
                    if self.test_has_shell(parameters):
                        self.internal_pipeline.add_action(ExpectShellSession())
                        if 'transfer_overlay' in parameters:
                            self.internal_pipeline.add_action(OverlayUnpack())
                        self.internal_pipeline.add_action(
                            ExportDeviceEnvironment())
            else:
                if not is_lxc_requested(self.job):
                    self.internal_pipeline.add_action(ConnectAdb())
                    self.internal_pipeline.add_action(AdbOverlayUnpack())