Ejemplo n.º 1
0
    def test_experiment_script_run(self):
        """Test running experiment script run."""

        experiment.script_experiment(
            self.api, 123, 'run',
            experiment.site_association(
                'grenoble', script=tests.resource_file('script.sh'),
                scriptconfig=tests.resource_file('scriptconfig')),
            experiment.site_association(
                'strasbourg', script=tests.resource_file('script_2.sh')),
        )

        scripts_json = helpers.json_dumps({
            'script': [
                {'scriptname': 'script.sh', 'sites': ['grenoble']},
                {'scriptname': 'script_2.sh', 'sites': ['strasbourg']},
            ],
            'scriptconfig': [
                {'scriptconfigname': 'scriptconfig', 'sites': ['grenoble']},
            ],
        })
        expected_files = {
            'script.json': scripts_json,
            'script.sh': SCRIPTS['script.sh'],
            'script_2.sh': SCRIPTS['script_2.sh'],
            'scriptconfig': SCRIPTCONFIG['scriptconfig'],
        }
        self.api.script_command.assert_called_with(123, 'run',
                                                   files=expected_files)
Ejemplo n.º 2
0
    def test_experiment_script_run(self):
        """Test running experiment script run."""

        experiment.script_experiment(
            self.api, 123, 'run',
            experiment.site_association(
                'grenoble', script=tests.resource_file('script.sh'),
                scriptconfig=tests.resource_file('scriptconfig')),
            experiment.site_association(
                'strasbourg', script=tests.resource_file('script_2.sh')),
        )

        scripts_json = helpers.json_dumps({
            'script': [
                {'scriptname': 'script.sh', 'sites': ['grenoble']},
                {'scriptname': 'script_2.sh', 'sites': ['strasbourg']},
            ],
            'scriptconfig': [
                {'scriptconfigname': 'scriptconfig', 'sites': ['grenoble']},
            ],
        })
        expected_files = {
            'script.json': scripts_json,
            'script.sh': SCRIPTS['script.sh'],
            'script_2.sh': SCRIPTS['script_2.sh'],
            'scriptconfig': SCRIPTCONFIG['scriptconfig'],
        }
        self.api.script_command.assert_called_with(123, 'run',
                                                   files=expected_files)
Ejemplo n.º 3
0
    def test_experiment_submit_duplicated_basenames(self):
        """ Run experiment_submit physical """

        # Physical tests
        resources = [
            experiment.exp_resources(['m3-1.grenoble.iot-lab.info'],
                                     tests.resource_file('firmware.elf')),
            experiment.exp_resources(
                ['m3-2.grenoble.iot-lab.info'],
                tests.resource_file('other/firmware.elf')),
        ]
        experiment.submit_experiment(self.api,
                                     'exp_name',
                                     20,
                                     resources,
                                     start_time=314159)

        call_dict = self.api.submit_experiment.call_args[0][0]
        expected = {
            'name':
            'exp_name',
            'duration':
            20,
            'type':
            'physical',
            'nodes': [
                'm3-1.grenoble.iot-lab.info',
                'm3-2.grenoble.iot-lab.info',
            ],
            'reservation':
            314159,
            'profileassociations':
            None,
            'firmwareassociations': [
                {
                    'firmwarename':
                    'e77d9b8dcb84d1fcd21187b03eac74f1_firmware.elf',
                    'nodes': ['m3-2.grenoble.iot-lab.info']
                },
                {
                    'firmwarename': 'firmware.elf',
                    'nodes': ['m3-1.grenoble.iot-lab.info']
                },
            ],
            'associations':
            None,
            'siteassociations':
            None,
            'profiles':
            None,
            'mobilities':
            None,
        }

        self.assertEqual(expected, json.loads(call_dict['new_exp.json']))
    def test_main_submit_parser_site_assocs(self, submit_exp):
        """Run experiment_parser.main.submit site associations."""
        script_sh = resource_file('script.sh')
        script_2_sh = resource_file('script_2.sh')
        scriptconfig = resource_file('scriptconfig')

        submit_exp.return_value = {}

        # Groupped assocs
        experiment_parser.main([
            'submit', '--name', 'exp_name', '--duration', '20',
            '--list', 'grenoble,m3,1',
            '--list', 'strasbourg,m3,1',
            '--site-association', 'grenoble,strasbourg,script=%s' % script_sh,
        ])

        sites_assocs = [
            experiment.site_association('grenoble.iot-lab.info',
                                        'strasbourg.iot-lab.info',
                                        script=script_sh),
        ]

        resources = [
            experiment.exp_resources(['m3-1.grenoble.iot-lab.info']),
            experiment.exp_resources(['m3-1.strasbourg.iot-lab.info']),
        ]
        submit_exp.assert_called_with(self.api, 'exp_name', 20, resources,
                                      None, False, sites_assocs)

        # Different assocs
        experiment_parser.main([
            'submit', '--name', 'exp_name', '--duration', '20',
            '--list', 'grenoble,m3,1',
            '--list', 'strasbourg,m3,1',
            '--site-association', 'grenoble,script=%s,ipv6=2001::' % script_sh,
            '--site-association', 'strasbourg,script=%s,scriptconfig=%s' % (
                script_2_sh, scriptconfig),
        ])

        sites_assocs = [
            experiment.site_association('grenoble.iot-lab.info',
                                        script=script_sh, ipv6='2001::'),
            experiment.site_association('strasbourg.iot-lab.info',
                                        script=script_2_sh,
                                        scriptconfig=scriptconfig),
        ]

        resources = [
            experiment.exp_resources(['m3-1.grenoble.iot-lab.info']),
            experiment.exp_resources(['m3-1.strasbourg.iot-lab.info']),
        ]
        submit_exp.assert_called_with(self.api, 'exp_name', 20, resources,
                                      None, False, sites_assocs)
Ejemplo n.º 5
0
    def test_experiment_submit_alias(self):
        """ Run experiment_submit alias """
        # Alias tests
        resources = [
            experiment.exp_resources(
                experiment.AliasNodes(1, 'grenoble', 'm3:at86rf231', False),
                tests.resource_file('firmware.elf'), 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(2, 'grenoble', 'm3:at86rf231', False),
                tests.resource_file('firmware.elf'), 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(4, 'grenoble', 'm3:at86rf231', False),
                tests.resource_file('firmware_2.elf'), 'profile2'),
        ]

        experiment.submit_experiment(self.api, None, 20, resources)
        files_dict = self.api.submit_experiment.call_args[0][0]
        exp_desc = json.loads(files_dict['new_exp.json'])
        expected = {
            'name': None,
            'duration': 20,
            'type': 'alias',
            'nodes': [
                {"alias": '1', "nbnodes": 1, "properties": {
                    "archi": "m3:at86rf231", "site": "grenoble",
                    "mobile": False
                }},
                {"alias": '2', "nbnodes": 2, "properties": {
                    "archi": "m3:at86rf231", "site": "grenoble",
                    "mobile": False
                }},
                {"alias": '3', "nbnodes": 4, "properties": {
                    "archi": "m3:at86rf231", "site": "grenoble",
                    "mobile": False
                }},
            ],
            'reservation': None,
            'profileassociations': [
                {'profilename': 'profile1', 'nodes': ['1', '2']},
                {'profilename': 'profile2', 'nodes': ['3']},
            ],
            'firmwareassociations': [
                {'firmwarename': 'firmware.elf', 'nodes': ['1', '2']},
                {'firmwarename': 'firmware_2.elf', 'nodes': ['3']}
            ],
            'associations': None,
            'siteassociations': None,
            'profiles': None,
            'mobilities': None,
        }
        self.assertEqual(expected, exp_desc)
        self.assertTrue('firmware.elf' in files_dict)
Ejemplo n.º 6
0
    def test_experiment_submit_alias(self):
        """ Run experiment_submit alias """
        # Alias tests
        resources = [
            experiment.exp_resources(
                experiment.AliasNodes(1, 'grenoble', 'm3:at86rf231', False),
                tests.resource_file('firmware.elf'), 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(2, 'grenoble', 'm3:at86rf231', False),
                tests.resource_file('firmware.elf'), 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(4, 'grenoble', 'm3:at86rf231', False),
                tests.resource_file('firmware_2.elf'), 'profile2'),
        ]

        experiment.submit_experiment(self.api, None, 20, resources)
        files_dict = self.api.submit_experiment.call_args[0][0]
        exp_desc = json.loads(files_dict['new_exp.json'])
        expected = {
            'name': None,
            'duration': 20,
            'type': 'alias',
            'nodes': [
                {"alias": '1', "nbnodes": 1, "properties": {
                    "archi": "m3:at86rf231", "site": "grenoble",
                    "mobile": False
                }},
                {"alias": '2', "nbnodes": 2, "properties": {
                    "archi": "m3:at86rf231", "site": "grenoble",
                    "mobile": False
                }},
                {"alias": '3', "nbnodes": 4, "properties": {
                    "archi": "m3:at86rf231", "site": "grenoble",
                    "mobile": False
                }},
            ],
            'reservation': None,
            'profileassociations': [
                {'profilename': 'profile1', 'nodes': ['1', '2']},
                {'profilename': 'profile2', 'nodes': ['3']},
            ],
            'firmwareassociations': [
                {'firmwarename': 'firmware.elf', 'nodes': ['1', '2']},
                {'firmwarename': 'firmware_2.elf', 'nodes': ['3']}
            ],
            'associations': None,
            'siteassociations': None,
            'profiles': None,
            'mobilities': None,
        }
        self.assertEqual(expected, exp_desc)
        self.assertTrue('firmware.elf' in files_dict)
Ejemplo n.º 7
0
    def test_script_run_error(self):
        """Test running experiment run with argument errors."""

        # No sites/scripts
        self.assertRaises(ValueError, experiment.script_experiment, self.api,
                          123, 'run')

        # site multiple times
        self.assertRaises(
            ValueError, experiment.script_experiment, self.api, 123, 'run',
            experiment.site_association(
                'grenoble', script=tests.resource_file('script.sh')),
            experiment.site_association(
                'grenoble', script=tests.resource_file('script_2.sh')))
Ejemplo n.º 8
0
    def test_exp_submit_associations(self):
        """Test experiment submission with associations."""
        nodes = ['m3-1.grenoble.iot-lab.info']
        assocs = {'mobility': 'controlled', 'kernel': 'linux'}
        resources = [
            experiment.exp_resources(nodes,
                                     tests.resource_file('firmware.elf'),
                                     None, **assocs),
        ]

        experiment.submit_experiment(self.api, None, 20, resources)
        call_dict = self.api.submit_experiment.call_args[0][0]
        expected = {
            'name': None,
            'duration': 20,
            'type': 'physical',
            'nodes': nodes,
            'reservation': None,
            'profileassociations': None,
            'firmwareassociations': [
                {'firmwarename': 'firmware.elf', 'nodes': nodes}],
            'associations': {
                'mobility': [
                    {'mobilityname': 'controlled', 'nodes': nodes}],
                'kernel': [
                    {'kernelname': 'linux', 'nodes': nodes}],
            },
            'siteassociations': None,
            'profiles': None,
            'mobilities': None,
        }
        self.assertEqual(expected, json.loads(call_dict['new_exp.json']))
Ejemplo n.º 9
0
    def test_exp_submit_associations(self):
        """Test experiment submission with associations."""
        nodes = ['m3-1.grenoble.iot-lab.info']
        assocs = {'mobility': 'controlled', 'kernel': 'linux'}
        resources = [
            experiment.exp_resources(nodes,
                                     tests.resource_file('firmware.elf'),
                                     None, **assocs),
        ]

        experiment.submit_experiment(self.api, None, 20, resources)
        call_dict = self.api.submit_experiment.call_args[0][0]
        expected = {
            'name': None,
            'duration': 20,
            'type': 'physical',
            'nodes': nodes,
            'reservation': None,
            'profileassociations': None,
            'firmwareassociations': [
                {'firmwarename': 'firmware.elf', 'nodes': nodes}],
            'associations': {
                'mobility': [
                    {'mobilityname': 'controlled', 'nodes': nodes}],
                'kernel': [
                    {'kernelname': 'linux', 'nodes': nodes}],
            },
            'siteassociations': None,
            'profiles': None,
            'mobilities': None,
        }
        self.assertEqual(expected, json.loads(call_dict['new_exp.json']))
Ejemplo n.º 10
0
    def test_script_run_error(self):
        """Test running experiment run with argument errors."""

        # No sites/scripts
        self.assertRaises(ValueError,
                          experiment.script_experiment,
                          self.api, 123, 'run')

        # site multiple times
        self.assertRaises(
            ValueError,
            experiment.script_experiment, self.api, 123, 'run',
            experiment.site_association(
                'grenoble', script=tests.resource_file('script.sh')),
            experiment.site_association(
                'grenoble', script=tests.resource_file('script_2.sh'))
        )
Ejemplo n.º 11
0
    def test_exp_submit_types_detect(self):
        """ Try experiment submit types detection"""
        # Physical tests and Alias Nodes
        resources = []
        resources.append(experiment.exp_resources(
            ['m3-%u.grenoble.iot-lab.info' % i for i in range(1, 6)]))
        resources.append(experiment.exp_resources(
            experiment.AliasNodes(1, 'grenoble', 'm3:at86rf231', False),
            tests.resource_file('firmware.elf'), 'profile1'))

        self.assertRaises(ValueError, experiment.submit_experiment,
                          self.api, 'exp_name', 20, resources)
Ejemplo n.º 12
0
    def test_exp_submit_types_detect(self):
        """ Try experiment submit types detection"""
        # Physical tests and Alias Nodes
        resources = []
        resources.append(experiment.exp_resources(
            ['m3-%u.grenoble.iot-lab.info' % i for i in range(1, 6)]))
        resources.append(experiment.exp_resources(
            experiment.AliasNodes(1, 'grenoble', 'm3:at86rf231', False),
            tests.resource_file('firmware.elf'), 'profile1'))

        self.assertRaises(ValueError, experiment.submit_experiment,
                          self.api, 'exp_name', 20, resources)
Ejemplo n.º 13
0
    def test_exp_submit_site_association(self):
        """Test experiment submission with site associations."""
        nodes = ['m3-1.grenoble.iot-lab.info', 'a8-1.strasbourg.iot-lab.info']
        resources = [experiment.exp_resources(nodes)]

        site_assocs = [
            experiment.site_association(
                'grenoble',
                script=tests.resource_file('script.sh'),
                ipv6='aaaa::/64',
            ),
            experiment.site_association(
                'strasbourg',
                script=tests.resource_file('script_2.sh'),
                scriptconfig=tests.resource_file('scriptconfig'),
            ),
        ]

        experiment.submit_experiment(self.api, None, 20, resources,
                                     sites_assocs=site_assocs)
        files_dict = self.api.submit_experiment.call_args[0][0]
        expected = {
            'name': None,
            'duration': 20,
            'type': 'physical',
            'nodes': nodes,
            'reservation': None,
            'profileassociations': None,
            'firmwareassociations': None,
            'associations': None,
            'siteassociations': {
                'script': [
                    {
                        'scriptname': 'script.sh',
                        'sites': ['grenoble']
                    },
                    {
                        'scriptname': 'script_2.sh',
                        'sites': ['strasbourg']
                    },
                ],
                'scriptconfig': [
                    {
                        'scriptconfigname': 'scriptconfig',
                        'sites': ['strasbourg']
                    },
                ],
                'ipv6': [
                    {
                        'ipv6name': 'aaaa::/64',
                        'sites': ['grenoble']
                    },
                ],
            },
            'profiles': None,
            'mobilities': None,
        }
        self.assertEqual(expected, json.loads(files_dict['new_exp.json']))
        self.assertEqual(files_dict['script.sh'], SCRIPTS['script.sh'])
        self.assertEqual(files_dict['script_2.sh'], SCRIPTS['script_2.sh'])
        self.assertEqual(files_dict['scriptconfig'],
                         SCRIPTCONFIG['scriptconfig'])
Ejemplo n.º 14
0
    def test_exp_submit_site_association(self):
        """Test experiment submission with site associations."""
        nodes = ['m3-1.grenoble.iot-lab.info', 'a8-1.strasbourg.iot-lab.info']
        resources = [experiment.exp_resources(nodes)]

        site_assocs = [
            experiment.site_association(
                'grenoble',
                script=tests.resource_file('script.sh'),
                ipv6='aaaa::/64',
            ),
            experiment.site_association(
                'strasbourg',
                script=tests.resource_file('script_2.sh'),
                scriptconfig=tests.resource_file('scriptconfig'),
            ),
        ]

        experiment.submit_experiment(self.api, None, 20, resources,
                                     sites_assocs=site_assocs)
        files_dict = self.api.submit_experiment.call_args[0][0]
        expected = {
            'name': None,
            'duration': 20,
            'type': 'physical',
            'nodes': nodes,
            'reservation': None,
            'profileassociations': None,
            'firmwareassociations': None,
            'associations': None,
            'siteassociations': {
                'script': [
                    {
                        'scriptname': 'script.sh',
                        'sites': ['grenoble']
                    },
                    {
                        'scriptname': 'script_2.sh',
                        'sites': ['strasbourg']
                    },
                ],
                'scriptconfig': [
                    {
                        'scriptconfigname': 'scriptconfig',
                        'sites': ['strasbourg']
                    },
                ],
                'ipv6': [
                    {
                        'ipv6name': 'aaaa::/64',
                        'sites': ['grenoble']
                    },
                ],
            },
            'profiles': None,
            'mobilities': None,
        }
        self.assertEqual(expected, json.loads(files_dict['new_exp.json']))
        self.assertEqual(files_dict['script.sh'], SCRIPTS['script.sh'])
        self.assertEqual(files_dict['script_2.sh'], SCRIPTS['script_2.sh'])
        self.assertEqual(files_dict['scriptconfig'],
                         SCRIPTCONFIG['scriptconfig'])
    def test_main_script_parser(self, script):
        """ Run experiment_parser.main.run """
        # Run script
        script_sh = resource_file('script.sh')
        scriptconfig = resource_file('scriptconfig')

        script.return_value = {}
        experiment_parser.main(['script', '--run',
                                'grenoble,script=%s' % script_sh])
        script.assert_called_with(
            self.api, 123, 'run',
            experiment.site_association('grenoble.iot-lab.info',
                                        script=script_sh)
        )

        # Multiple sites
        experiment_parser.main(['script', '--run',
                                'grenoble,strasbourg,script=%s' % script_sh])
        script.assert_called_with(
            self.api, 123, 'run',
            experiment.site_association('grenoble.iot-lab.info',
                                        'strasbourg.iot-lab.info',
                                        script=script_sh)
        )

        # Multiple sites associations
        script.return_value = {}
        experiment_parser.main(['script', '--run',
                                'grenoble,script=%s,scriptconfig=%s' % (
                                    script_sh, scriptconfig),
                                'strasbourg,script=%s' % script_sh])
        script.assert_called_with(
            self.api, 123, 'run',
            experiment.site_association('grenoble.iot-lab.info',
                                        script=script_sh,
                                        scriptconfig=scriptconfig),
            experiment.site_association('strasbourg.iot-lab.info',
                                        script=script_sh)
        )

        # Error no arguments
        self.assertRaises(SystemExit, experiment_parser.main,
                          ['script', '--run'])
        # Unknown assoc
        self.assertRaises(SystemExit, experiment_parser.main,
                          ['script', '--run',
                           'grenoble,script=%s,assoc=new' % script_sh])
        # Error no script
        self.assertRaises(SystemExit, experiment_parser.main,
                          ['script', '--run', 'grenoble,assoc=test'])
        self.assertRaises(SystemExit, experiment_parser.main,
                          ['script', '--run', 'assoc=test'])

        # kill script
        experiment_parser.main(['script', '--kill'])
        script.assert_called_with(self.api, 123, 'kill')

        experiment_parser.main(['script', '--kill', 'grenoble'])
        script.assert_called_with(self.api, 123, 'kill',
                                  'grenoble.iot-lab.info')

        experiment_parser.main(['script', '--kill', 'grenoble', 'strasbourg'])
        script.assert_called_with(self.api, 123, 'kill',
                                  'grenoble.iot-lab.info',
                                  'strasbourg.iot-lab.info')

        # Status script
        experiment_parser.main(['script', '--status'])
        script.assert_called_with(self.api, 123, 'status')

        experiment_parser.main(['script', '--status', 'grenoble'])
        script.assert_called_with(self.api, 123, 'status',
                                  'grenoble.iot-lab.info')

        experiment_parser.main(['script', '--status',
                                'grenoble', 'strasbourg'])
        script.assert_called_with(self.api, 123, 'status',
                                  'grenoble.iot-lab.info',
                                  'strasbourg.iot-lab.info')