예제 #1
0
 def test_main_load_parser(self, load_exp):
     """ Run experiment_parser.main.load """
     load_exp.return_value = {}
     experiment_parser.main(['load', '-f', '../test_exp.json',
                             '-l', '~/firmware.elf,./firmware_2.elf'])
     load_exp.assert_called_with(self.api, '../test_exp.json',
                                 ['~/firmware.elf', './firmware_2.elf'])
예제 #2
0
 def test_main_load_parser(self, load_exp):
     """ Run experiment_parser.main.load """
     load_exp.return_value = {}
     experiment_parser.main(['load', '-f', '../test_exp.json',
                             '-l', '~/firmware.elf,./firmware_2.elf'])
     load_exp.assert_called_with(self.api, '../test_exp.json',
                                 ['~/firmware.elf', './firmware_2.elf'])
예제 #3
0
 def test_main_stop_parser(self, stop_exp):
     """ Run experiment_parser.main.stop """
     stop_exp.return_value = {}
     experiment_parser.main(['stop'])
     stop_exp.assert_called_with(self.api, 123)
     experiment_parser.main(['stop', '-i', '345'])
     stop_exp.assert_called_with(self.api, 345)
예제 #4
0
 def test_main_stop_parser(self, stop_exp):
     """ Run experiment_parser.main.stop """
     stop_exp.return_value = {}
     experiment_parser.main(['stop'])
     stop_exp.assert_called_with(self.api, 123)
     experiment_parser.main(['stop', '-i', '345'])
     stop_exp.assert_called_with(self.api, 345)
예제 #5
0
    def test_main_info_parser(self, info_exp):
        """ Run experiment_parser.main.info """
        info_exp.return_value = {}

        experiment_parser.main(['info', '--list'])
        info_exp.assert_called_with(self.api, False, None)
        experiment_parser.main(['info', '--list-id', '--site', 'grenoble'])
        info_exp.assert_called_with(self.api, True, 'grenoble')
예제 #6
0
    def test_main_info_parser(self, info_exp):
        """ Run experiment_parser.main.info """
        info_exp.return_value = {}

        experiment_parser.main(['info', '--list'])
        info_exp.assert_called_with(self.api, False, None)
        experiment_parser.main(['info', '--list-id', '--site', 'grenoble'])
        info_exp.assert_called_with(self.api, True, 'grenoble')
예제 #7
0
    def test_main_wait_parser(self, wait_exp):
        """ Run experiment_parser.main.info """
        wait_exp.return_value = {}

        experiment_parser.main(['wait'])
        wait_exp.assert_called_with(self.api, 234, 'Running', 5, float('+inf'))
        experiment_parser.main(['wait', '--id', '42',
                                '--state', 'Launching,Running', '--step', '1',
                                '--timeout', '60'])
        wait_exp.assert_called_with(self.api, 42, 'Launching,Running', 1, 60)
    def test_main_wait_parser(self, wait_exp):
        """ Run experiment_parser.main.info """
        wait_exp.return_value = {}

        experiment_parser.main(['wait'])
        wait_exp.assert_called_with(self.api, 234, 'Running', 5, float('+inf'))
        experiment_parser.main(['wait', '--id', '42',
                                '--state', 'Launching,Running', '--step', '1',
                                '--timeout', '60'])
        wait_exp.assert_called_with(self.api, 42, 'Launching,Running', 1, 60)
    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)
    def test_main_reload_parser(self, reload_exp):
        """ Run experiment_parser.main.info """
        reload_exp.return_value = {}

        experiment_parser.main(['reload', '-i', '123'])
        reload_exp.assert_called_with(self.api, 123, None, None)
        experiment_parser.main(['reload',
                                '--id', '123',
                                '--duration', '120',
                                '--reservation', '314159'])
        reload_exp.assert_called_with(self.api, 123, 120, 314159)

        # Exp id is required
        self.assertRaises(SystemExit, experiment_parser.main, ['reload'])
    def test_get_experiments(self, get_active_experiments):
        """Run experiment_parser.main.get 'experiments'"""
        get_active_experiments.return_value = {
            "Running": [11667], "Waiting": [11668],
        }

        experiment_parser.main(['get', '-e'])
        self.assertEqual(1, get_active_experiments.call_count)
        get_active_experiments.assert_called_with(self.api, running_only=True)
        get_active_experiments.reset_mock()

        experiment_parser.main(['get', '--experiments', '--active'])
        self.assertEqual(1, get_active_experiments.call_count)
        get_active_experiments.assert_called_with(self.api, running_only=False)
        get_active_experiments.reset_mock()
    def test_main_load_parser(self, load_exp):
        """ Run experiment_parser.main.load """
        load_exp.return_value = {}

        experiment_parser.main(['load', '-f', '../test_exp.json',
                                '-l', '~/firmware.elf',
                                '-l', './firmware_2.elf'])
        load_exp.assert_called_with(self.api, '../test_exp.json',
                                    ['~/firmware.elf', './firmware_2.elf'])

        # Deprecated, not documented anymore but keep it working
        experiment_parser.main(['load', '-f', '../test_exp.json',
                                '-l', '~/firmware.elf,./firmware_2.elf'])
        load_exp.assert_called_with(self.api, '../test_exp.json',
                                    ['~/firmware.elf', './firmware_2.elf'])
    def test_main_submit_parser_assocs(self, submit_exp):
        """Run experiment_parser.main.submit mobility."""
        submit_exp.return_value = {}

        # Physical tests
        experiment_parser.main(
            ['submit', '--name', 'exp_name', '--duration', '20',
             '--list',
             ('grenoble,m3,1,'
              'mobility=controlled,kernel=linux,firmware=m3.elf')])

        assocs = {'mobility': 'controlled', 'kernel': 'linux'}
        resources = [
            experiment.exp_resources(['m3-1.grenoble.iot-lab.info'],
                                     'm3.elf', None, **assocs)
        ]
        submit_exp.assert_called_with(self.api, 'exp_name', 20, resources,
                                      None, False, None)
    def test_main_info_parser(self, info_exp):
        """ Run experiment_parser.main.info """
        info_exp.return_value = {}

        experiment_parser.main(['info', '--list'])
        info_exp.assert_called_with(self.api, False)
        experiment_parser.main(['info', '--list-id', '--site', 'grenoble'])
        info_exp.assert_called_with(self.api, True, site='grenoble')

        # Use other selections
        experiment_parser.main(['info', '--list', '--archi', 'm3',
                                '--state', 'Alive'])
        info_exp.assert_called_with(self.api, False, archi='m3', state='Alive')

        experiment_parser.main(['info', '--list-id', '--site', 'lille',
                                '--archi', 'm3'])
        info_exp.assert_called_with(self.api, True, site='lille', archi='m3')
예제 #15
0
    def test_main_submit_parser(self, submit_exp):
        """ Run experiment_parser.main.submit """
        submit_exp.return_value = {}

        # Physical tests
        experiment_parser.main([
            'submit', '--name', 'exp_name', '--duration', '20',
            '--reservation', '314159', '--list', 'grenoble,m3,1-5'
        ])
        resources = [
            experiment.exp_resources(
                [f'm3-{i}.grenoble.iot-lab.info' for i in range(1, 6)], None,
                None)
        ]
        submit_exp.assert_called_with(self.api, 'exp_name', 20, resources,
                                      314159, False, None)

        # print with simple options
        nodes = [experiment.exp_resources(['m3-1.grenoble.iot-lab.info'])]
        experiment_parser.main(
            ['submit', '-p', '-d', '20', '-l', 'grenoble,m3,1'])
        submit_exp.assert_called_with(self.api, None, 20, nodes, None, True,
                                      None)

        # Alias tests
        experiment_parser.main([
            'submit',
            '-d',
            '20',
            '-l',
            '1,archi=m3:at86rf231+site=grenoble,firmware.elf,profile1',
            '-l',
            '2,archi=m3:at86rf231+site=grenoble,firmware.elf,profile1',
            '-l',
            '3,archi=m3:at86rf231+site=grenoble,firmware_2.elf,profile2',
        ])
        experiment.AliasNodes._alias = 0  # pylint:disable=protected-access
        resources = [
            experiment.exp_resources(
                experiment.AliasNodes(1, 'grenoble', 'm3:at86rf231', False),
                'firmware.elf', 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(2, 'grenoble', 'm3:at86rf231', False),
                'firmware.elf', 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(3, 'grenoble', 'm3:at86rf231', False),
                'firmware_2.elf', 'profile2'),
        ]

        submit_exp.assert_called_with(self.api, None, 20, resources, None,
                                      False, None)
예제 #16
0
    def test_main_submit_parser(self, submit_exp):
        """ Run experiment_parser.main.submit """
        submit_exp.return_value = {}

        # Physical tests
        experiment_parser.main(['submit', '--name', 'exp_name',
                                '--duration', '20', '--reservation', '314159',
                                '--list', 'grenoble,m3,1-5'])
        nodes_list = [
            experiment.exp_resources(
                ['m3-%u.grenoble.iot-lab.info' % i for i in range(1, 6)],
                None, None)
        ]
        submit_exp.assert_called_with(self.api, 'exp_name', 20, nodes_list,
                                      314159, False)

        # print with simple options
        nodes = [experiment.exp_resources(['m3-1.grenoble.iot-lab.info'])]
        experiment_parser.main(
            ['submit', '-p', '-d', '20', '-l', 'grenoble,m3,1'])
        submit_exp.assert_called_with(self.api, None, 20, nodes,
                                      None, True)

        # Alias tests
        experiment_parser.main([
            'submit', '-d', '20',
            '-l', '1,archi=m3:at86rf231+site=grenoble,firmware.elf,profile1',
            '-l', '2,archi=m3:at86rf231+site=grenoble,firmware.elf,profile1',
            '-l', '3,archi=m3:at86rf231+site=grenoble,firmware_2.elf,profile2',
        ])
        experiment.AliasNodes._alias = 0  # pylint:disable=protected-access
        nodes_list = [
            experiment.exp_resources(
                experiment.AliasNodes(1, 'grenoble', 'm3:at86rf231', False),
                'firmware.elf', 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(2, 'grenoble', 'm3:at86rf231', False),
                'firmware.elf', 'profile1'),
            experiment.exp_resources(
                experiment.AliasNodes(3, 'grenoble', 'm3:at86rf231', False),
                'firmware_2.elf', 'profile2'),
        ]

        submit_exp.assert_called_with(self.api, None, 20, nodes_list,
                                      None, False)
예제 #17
0
    def test_main_wait_parser(self, wait_exp):
        """ Run experiment_parser.main.info """
        wait_exp.return_value = {}

        experiment_parser.main(['wait'])
        wait_exp.assert_called_with(self.api, 234, 'Running', 5,
                                    experiment.WAIT_TIMEOUT_DEFAULT, False)
        experiment_parser.main([
            'wait', '--id', '42', '--state', 'Launching,Running', '--step',
            '1', '--timeout', '60'
        ])
        wait_exp.assert_called_with(self.api, 42, 'Launching,Running', 1, 60,
                                    False)
        experiment_parser.main([
            'wait', '--id', '42', '--state', 'Launching,Running', '--step',
            '1', '--timeout', '60', '--cancel-on-timeout'
        ])
        wait_exp.assert_called_with(self.api, 42, 'Launching,Running', 1, 60,
                                    True)
예제 #18
0
    def test_main_get_parser(self, get_exp, get_exp_list):
        """ Run experiment_parser.main.get """
        get_exp.return_value = {}
        get_exp_list.return_value = {}

        get_exp.return_value = {'start_time': 1423131729}
        experiment_parser.main(['get', '--start-time'])
        get_exp.assert_called_with(self.api, 234, 'start')

        # No value is treated inside
        get_exp.return_value = {}

        experiment_parser.main(['get', '--id', '18', '--print'])
        get_exp.assert_called_with(self.api, 18, '')

        experiment_parser.main(['get', '--resources'])
        get_exp.assert_called_with(self.api, 123, 'resources')

        experiment_parser.main(['get', '--resources-id'])
        get_exp.assert_called_with(self.api, 123, 'id')

        experiment_parser.main(['get', '--exp-state'])
        get_exp.assert_called_with(self.api, 123, 'state')

        experiment_parser.main(['get', '--archive'])
        get_exp.assert_called_with(self.api, 123, 'data')

        experiment_parser.main(
            ['get', '--list', '--state=Running', '--limit=10', '--offset=50'])
        get_exp_list.assert_called_with(self.api, 'Running', 10, 50)

        experiment_parser.main(['get', '--list'])
        get_exp_list.assert_called_with(self.api, None, 0, 0)
예제 #19
0
    def test_main_get_parser(self, get_exp, get_exp_list):
        """ Run experiment_parser.main.get """
        get_exp.return_value = {}
        get_exp_list.return_value = {}

        get_exp.return_value = {'start_date': "2018-01-19T14:54:15Z"}
        experiment_parser.main(['get', '--start-time'])
        get_exp.assert_called_with(self.api, 234, '')

        get_exp.return_value = {'state': "Running"}
        experiment_parser.main(['get', '--exp-state'])
        get_exp.assert_called_with(self.api, 234, '')

        # No value is treated inside
        get_exp.return_value = {}

        experiment_parser.main(['get', '--id', '18', '--print'])
        get_exp.assert_called_with(self.api, 18, '')

        experiment_parser.main(['get', '--nodes'])
        get_exp.assert_called_with(self.api, 123, 'nodes')

        experiment_parser.main(['get', '--nodes-id'])
        get_exp.assert_called_with(self.api, 123, 'nodes_ids')

        # add deprecated option
        experiment_parser.main(['get', '--resources'])
        get_exp.assert_called_with(self.api, 123, 'nodes')

        experiment_parser.main(['get', '--resources-id'])
        get_exp.assert_called_with(self.api, 123, 'nodes_ids')

        experiment_parser.main(['get', '--archive'])
        get_exp.assert_called_with(self.api, 123, 'data')

        experiment_parser.main(
            ['get', '--list', '--state=Running', '--limit=10', '--offset=50'])
        get_exp_list.assert_called_with(self.api, 'Running', 10, 50)

        experiment_parser.main(['get', '--list'])
        get_exp_list.assert_called_with(self.api, None, 0, 0)
예제 #20
0
    def test_main_get_parser(self, get_exp, get_exp_list):
        """ Run experiment_parser.main.get """
        get_exp.return_value = {}
        get_exp_list.return_value = {}

        experiment_parser.main(['get', '--id', '18', '--print'])
        get_exp.assert_called_with(self.api, 18, '')

        experiment_parser.main(['get', '--resources'])
        get_exp.assert_called_with(self.api, 123, 'resources')

        experiment_parser.main(['get', '--resources-id'])
        get_exp.assert_called_with(self.api, 123, 'id')

        experiment_parser.main(['get', '--exp-state'])
        get_exp.assert_called_with(self.api, 123, 'state')

        experiment_parser.main(['get', '--archive'])
        get_exp.assert_called_with(self.api, 123, 'data')

        experiment_parser.main(
            ['get', '--list', '--state=Running', '--limit=10', '--offset=50'])
        get_exp_list.assert_called_with(self.api, 'Running', 10, 50)

        experiment_parser.main(['get', '--list'])
        get_exp_list.assert_called_with(self.api, None, 0, 0)
    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')