Ejemplo n.º 1
0
 def test_job(self):
     with open(self.filename) as yaml_data:
         alpha_data = yaml.load(yaml_data)
     self.assertIn('protocols', alpha_data)
     self.assertIn(VlandProtocol.name, alpha_data['protocols'])
     with open(self.filename) as sample_job_data:
         parser = JobParser()
         job = parser.parse(sample_job_data,
                            self.device,
                            4212,
                            None,
                            "",
                            output_dir='/tmp/')
     job.logger = DummyLogger()
     description_ref = pipeline_reference('bbb-group-vland-alpha.yaml')
     self.assertEqual(description_ref, job.pipeline.describe(False))
     job.validate()
     self.assertNotEqual([], [
         protocol.name for protocol in job.protocols
         if protocol.name == MultinodeProtocol.name
     ])
     ret = {
         "message": {
             "kvm01": {
                 "vlan_name": "name",
                 "vlan_tag": 6
             }
         },
         "response": "ack"
     }
     self.assertEqual(('name', 6), (
         ret['message']['kvm01']['vlan_name'],
         ret['message']['kvm01']['vlan_tag'],
     ))
     self.assertIn('protocols', job.parameters)
     self.assertIn(VlandProtocol.name, job.parameters['protocols'])
     self.assertIn(MultinodeProtocol.name, job.parameters['protocols'])
     vprotocol = [
         vprotocol for vprotocol in job.protocols
         if vprotocol.name == VlandProtocol.name
     ][0]
     self.assertTrue(vprotocol.valid)
     self.assertEqual(vprotocol.names, {'vlan_one': '4212vlanone'})
     self.assertFalse(vprotocol.check_timeout(120, {'request': 'no call'}))
     self.assertRaises(JobError, vprotocol.check_timeout, 60,
                       'deploy_vlans')
     self.assertRaises(JobError, vprotocol.check_timeout, 60,
                       {'request': 'deploy_vlans'})
     self.assertTrue(
         vprotocol.check_timeout(120, {'request': 'deploy_vlans'}))
     for vlan_name in job.parameters['protocols'][VlandProtocol.name]:
         if vlan_name == 'yaml_line':
             continue
         self.assertIn(vlan_name, vprotocol.params)
         self.assertIn('switch', vprotocol.params[vlan_name])
         self.assertIn('port', vprotocol.params[vlan_name])
         self.assertIn('iface', vprotocol.params[vlan_name])
     params = job.parameters['protocols'][vprotocol.name]
     names = []
     for key, _ in params.items():
         if key == 'yaml_line':
             continue
         names.append(",".join([key, vprotocol.params[key]['iface']]))
     # this device only has one interface with interface tags
     self.assertEqual(names, ['vlan_one,eth1'])
Ejemplo n.º 2
0
 def test_deployment(self):
     job_parser = JobParser()
     cubie = NewDevice(
         os.path.join(os.path.dirname(__file__), '../devices/cubie1.yaml'))
     sample_job_file = os.path.join(
         os.path.dirname(__file__), 'sample_jobs/cubietruck-removable.yaml')
     with open(sample_job_file) as sample_job_data:
         job = job_parser.parse(sample_job_data,
                                cubie,
                                4212,
                                None,
                                "",
                                output_dir='/tmp/')
     job.logger = DummyLogger()
     job.validate()
     self.assertIn('usb', cubie['parameters']['media'].keys())
     deploy_params = [
         methods for methods in job.parameters['actions']
         if 'deploy' in methods.keys()
     ][1]['deploy']
     self.assertIn('device', deploy_params)
     self.assertIn(deploy_params['device'],
                   cubie['parameters']['media']['usb'])
     self.assertIn(
         'uuid',
         cubie['parameters']['media']['usb'][deploy_params['device']])
     self.assertIn(
         'device_id',
         cubie['parameters']['media']['usb'][deploy_params['device']])
     self.assertNotIn(
         'boot_part',
         cubie['parameters']['media']['usb'][deploy_params['device']])
     deploy_action = [
         action for action in job.pipeline.actions
         if action.name == 'storage-deploy'
     ][0]
     tftp_deploy_action = [
         action for action in job.pipeline.actions
         if action.name == 'tftp-deploy'
     ][0]
     self.assertIsNotNone(deploy_action)
     test_dir = deploy_action.get_namespace_data(
         action='test',
         label='results',
         key='lava_test_results_dir',
         parameters=tftp_deploy_action.parameters)
     self.assertIsNotNone(test_dir)
     self.assertIn('/lava-', test_dir)
     self.assertIsInstance(deploy_action, MassStorage)
     self.assertIn('image', deploy_action.parameters.keys())
     dd_action = [
         action for action in deploy_action.internal_pipeline.actions
         if action.name == 'dd-image'
     ][0]
     self.assertEqual(
         dd_action.boot_params[dd_action.parameters['device']]['uuid'],
         'usb-SanDisk_Ultra_20060775320F43006019-0:0')
     self.assertIsNotNone(
         dd_action.get_namespace_data(action=dd_action.name,
                                      label='u-boot',
                                      key='boot_part'))
     self.assertIsNotNone(
         dd_action.get_namespace_data(action='uboot-from-media',
                                      label='uuid',
                                      key='boot_part'))
     self.assertEqual(
         '0', '%s' % dd_action.get_namespace_data(
             action=dd_action.name, label='u-boot', key='boot_part'))
     self.assertIsInstance(
         dd_action.get_namespace_data(action='uboot-from-media',
                                      label='uuid',
                                      key='boot_part'), str)
     self.assertEqual(
         '0:1',
         dd_action.get_namespace_data(action='uboot-from-media',
                                      label='uuid',
                                      key='boot_part'))
Ejemplo n.º 3
0
    def test_substitutions(self):
        """
        Test substitution of secondary media values into u-boot commands

        Unlike most u-boot calls, removable knows in advance all the values it needs to substitute
        into the boot commands for the secondary deployment as these are fixed by the device config
        and the image details from the job submission.
        """
        job_parser = JobParser()
        cubie = NewDevice(os.path.join(os.path.dirname(__file__), '../devices/cubie1.yaml'))
        sample_job_file = os.path.join(os.path.dirname(__file__), 'sample_jobs/cubietruck-removable.yaml')
        with open(sample_job_file) as sample_job_data:
            job = job_parser.parse(sample_job_data, cubie, 4212, None, "", output_dir='/tmp/')
        job.logger = DummyLogger()
        job.validate()
        boot_params = [
            methods for methods in job.parameters['actions'] if 'boot' in methods.keys()][1]['boot']
        self.assertIn('ramdisk', boot_params)
        self.assertIn('kernel', boot_params)
        self.assertIn('dtb', boot_params)
        self.assertIn('root_uuid', boot_params)
        self.assertIn('boot_part', boot_params)
        self.assertNotIn('type', boot_params)
        self.assertGreater(len(job.pipeline.actions), 1)
        self.assertIsNotNone(job.pipeline.actions[1].internal_pipeline)
        u_boot_action = [action for action in job.pipeline.actions if action.name == 'uboot-action'][1]
        overlay = [action for action in u_boot_action.internal_pipeline.actions if action.name == 'bootloader-overlay'][0]
        self.assertIsNotNone(overlay.get_namespace_data(action='storage-deploy', label='u-boot', key='device'))

        methods = cubie['actions']['boot']['methods']
        self.assertIn('u-boot', methods)
        self.assertIn('usb', methods['u-boot'])
        self.assertIn('commands', methods['u-boot']['usb'])
        commands_list = methods['u-boot']['usb']['commands']
        device_id = u_boot_action.get_namespace_data(action='storage-deploy', label='u-boot', key='device')
        self.assertIsNotNone(device_id)
        kernel_type = u_boot_action.parameters['kernel_type']
        bootcommand = map_kernel_uboot(kernel_type, device_params=cubie.get('parameters', None))
        substitutions = {
            '{BOOTX}': "%s %s %s %s" % (
                bootcommand,
                cubie['parameters'][bootcommand]['kernel'],
                cubie['parameters'][bootcommand]['ramdisk'],
                cubie['parameters'][bootcommand]['dtb'],),
            '{RAMDISK}': boot_params['ramdisk'],
            '{KERNEL}': boot_params['kernel'],
            '{DTB}': boot_params['dtb'],
            '{ROOT}': boot_params['root_uuid'],
            '{ROOT_PART}': "%s:%s" % (
                cubie['parameters']['media']['usb'][device_id]['device_id'],
                u_boot_action.parameters['boot_part']
            )
        }
        self.assertEqual('bootz 0x42000000 0x43300000 0x43000000', substitutions['{BOOTX}'])
        self.assertEqual('/boot/initrd.img-3.16.0-4-armmp-lpae.u-boot', substitutions['{RAMDISK}'])
        commands = substitute(commands_list, substitutions)
        self.assertEqual(
            commands,
            [
                'usb start',
                'usb info',
                'setenv autoload no',
                "setenv initrd_high '0xffffffff'",
                "setenv fdt_high '0xffffffff'",
                'setenv initrd_addr_r ${ramdisk_addr_r}',
                "setenv loadkernel 'load usb 0:1 ${kernel_addr_r} /boot/vmlinuz-3.16.0-4-armmp-lpae'",
                "setenv loadinitrd 'load usb 0:1 ${initrd_addr_r} /boot/initrd.img-3.16.0-4-armmp-lpae.u-boot; setenv initrd_size ${filesize}'",
                "setenv loadfdt 'load usb 0:1 ${fdt_addr_r} /boot/dtb-3.16.0-4-armmp-lpae'",
                "setenv bootargs 'console=ttyS0,115200n8 root=UUID=159d17cc-697c-4125-95a0-a3775e1deabe ip=dhcp'",
                "setenv bootcmd 'run loadkernel; run loadinitrd; run loadfdt; bootz 0x42000000 0x43300000 0x43000000'", 'boot'
            ]
        )