示例#1
0
def submit_experiment(testbed_name, board, firmware, duration):
    """
    Reserve nodes in the given site.
    The function uses the json experiment file corresponding to the site.
    :param str firmware: the name of the firmware as it is in the code/firmware/ folder
    :param str board: the type of board (ex: m3)
    :param str testbed_name: The name of the testbed (ex: grenoble)
    :param int duration: The duration of the experiment in minutes
    :return: The id of the experiment
    """

    # use the file created by auth-cli command
    usr, pwd = iotlab.get_user_credentials()

    # authenticate through the REST interface
    api = iotlab.rest.Api(usr, pwd)

    # load the experiment
    tb_file = open("{0}states.json".format(METAS_PATH))
    tb_json = json.load(tb_file)
    nodes = [x for x in tb_json[testbed_name] if board in x]
    firmware = FIRMWARE_PATH + firmware
    profile = "mercator"
    resources = [experiment.exp_resources(nodes, firmware, profile)]

    # submit experiment
    logconsole.info("Submitting experiment.")
    expid = experiment.submit_experiment(api, "mercatorExp", duration,
                                         resources)["id"]

    logconsole.info("Experiment submited with id: %u", expid)
    logconsole.info("Waiting for experiment to be running.")
    experiment.wait_experiment(api, expid)

    return expid
示例#2
0
def launch_experiment(deployment_site, number_of_nodes, experiment_time,
                      corridor):
    settings = settings_reader.SettingsReader(deployment_site)

    ids_text = extract_nodes_ids(str(settings.get_parameter(corridor)))
    nodes_ids = []
    for item in ids_text:
        id_begin, id_end = (int(x) for x in item.split("-"))
        nodes_ids.extend(np.arange(id_begin, id_end + 1, 1).tolist())

    json_data = json.loads(
        experiment.info_experiment(request, site=deployment_site))
    nodes_to_reserve = select_candidates(json_data, nodes_ids, number_of_nodes,
                                         deployment_site)

    resources = experiment.exp_resources(nodes_to_reserve)
    experiment_id = json.loads(
        experiment.submit_experiment(
            request, '', experiment_time + int(
                settings_reader.SettingsReader('experiment').get_parameter(
                    "extra_time")), resources))["id"]

    print_log("Starting new Experiment ({})".format(experiment_id))
    print_log("Selected nodes: {}".format(" ".join(nodes_to_reserve)),
              header=False)

    experiment.wait_experiment(request, experiment_id)
    return experiment_id
def test_submit_experiment_a8_physical(api):
    resources = exp_resources_from_str("grenoble,a8,1-2")
    name = "test_exp_A8"
    duration = 2
    exp = experiment.submit_experiment(api, name, duration, [resources])
    exp_id = exp['id']
    experiment.wait_experiment(api, exp_id)
    state = experiment.get_experiment(api, exp_id, 'state')
    assert state['state'] == "Running"
def _wait_exp(api, exp_id):
    """ Wait experiment started """
    time.sleep(10)  # wait 10s so that 'start date' is set
    timestamp = experiment.get_experiment(
            api, exp_id, 'start')['start_time']
    start_date = time.ctime(timestamp) if timestamp else 'Unknown'
    print "Start-date: %s" % start_date
    experiment.wait_experiment(api, exp_id)
    print "Exp-started: %s" % time.ctime(int(time.time()))
def test_submit_experiment_a8_logical(api, exp):
    name = "test_exp_A8"
    duration = 2
    resources = exp_resources_from_str("2,archi=a8:at86rf231+site=grenoble")
    ret = experiment.submit_experiment(api, name, duration, [resources])
    exp.id = ret['id']
    exp_id = exp.id
    experiment.wait_experiment(api, exp_id)
    state = experiment.get_experiment(api, exp_id, 'state')
    assert state['state'] == "Running"
    def wait_exp(self):
        """ Wait experiment started """
        fabric.utils.puts("wait_exp: %i" % self.exp_id)
        time.sleep(10)  # wait 10s so that 'start date' is set
        timestamp = experiment.get_experiment(
            self.api, self.exp_id, 'start')['start_time']
        start_date = time.ctime(timestamp) if timestamp else 'Unknown'

        fabric.utils.puts("Start-date: %s" % start_date)
        experiment.wait_experiment(self.api, self.exp_id)

        if self.archi == 'a8:at86rf231':
            self.wait_a8_started()

        fabric.utils.puts("Exp-started: %s" % start_date)
示例#7
0
    def wait_exp(self):
        """ Wait experiment started """
        fabric.utils.puts("wait_exp: %i" % self.exp_id)
        time.sleep(10)  # wait 10s so that 'start date' is set
        timestamp = experiment.get_experiment(self.api, self.exp_id,
                                              'start')['start_time']
        start_date = time.ctime(timestamp) if timestamp else 'Unknown'

        fabric.utils.puts("Start-date: %s" % start_date)
        experiment.wait_experiment(self.api, self.exp_id)

        if self.archi == 'a8:at86rf231':
            self.wait_a8_started()

        fabric.utils.puts("Exp-started: %s" % start_date)
示例#8
0
    def test_wait_experiment(self, get_exp):
        """ Test the wait_experiment function """
        self.wait_ret = [
            'Waiting', 'Waiting', 'toLaunch', 'Launching', 'Running'
        ]
        get_exp.side_effect = self._get_exp

        # simple
        ret = experiment.wait_experiment(self.api, 123, step=0)
        self.assertEqual('Running', ret)

        # Error before Running
        self.wait_ret = ['Waiting', 'toLaunch', 'Launching', 'Error']
        self.assertRaises(RuntimeError,
                          experiment.wait_experiment,
                          self.api,
                          123,
                          step=0)

        # Timeout
        self.wait_ret = []
        self.assertRaises(RuntimeError,
                          experiment.wait_experiment,
                          self.api,
                          123,
                          step=0.1,
                          timeout=0.5)
def submit_experiment(args):
    """
    Reserve nodes in the given site.
    The function uses the json experiment file corresponding to the site.
    :param str firmware: the name of the firmware as it is in the code/firmware/ folder
    :param str board: the type of board (ex: m3)
    :param str testbed: The name of the testbed (ex: grenoble)
    :param int duration: The duration of the experiment in minutes
    :param int nbnodes: The number of nodes to use
    :return: The id of the experiment
    """

    # use the file created by auth-cli command
    usr, pwd    = iotlab.get_user_credentials()

    # authenticate through the REST interface
    api         = iotlab.rest.Api(usr, pwd)

    # load the experiment
    firmware    = FIRMWARE_PATH + args.firmware
    profile     = "mercator"
    if args.nbnodes != 0:
        if args.board == "m3":
            args.board = "m3:at86rf231"
        nodes = experiment.AliasNodes(args.nbnodes, args.testbed, args.board)
    else:
        tb_file = open("{0}states.json".format(METAS_PATH))
        tb_json = json.load(tb_file)
        nodes = [x for x in tb_json[args.testbed] if args.board in x]
    resources = [experiment.exp_resources(nodes, firmware, profile)]

    # submit experiment
    logconsole.info("Submitting experiment.")
    expid       = experiment.submit_experiment(
                    api, "mercatorExp", args.duration,
                    resources)["id"]

    logconsole.info("Experiment submited with id: %u", expid)
    logconsole.info("Waiting for experiment to be running.")
    experiment.wait_experiment(api, expid)

    return expid
示例#10
0
def wait_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'wait' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    exp_id = helpers.get_current_experiment(api, opts.experiment_id, running_only=False)

    sys.stderr.write("Waiting that experiment {0} gets in state {1}\n".format(exp_id, opts.state))

    return experiment.wait_experiment(api, exp_id, opts.state, opts.step, opts.timeout)
示例#11
0
def wait_experiment_parser(opts):
    """ Parse namespace 'opts' object and execute requested 'wait' command """

    user, passwd = auth.get_user_credentials(opts.username, opts.password)
    api = rest.Api(user, passwd)

    exp_id = helpers.get_current_experiment(api,
                                            opts.experiment_id,
                                            running_only=False)

    sys.stderr.write("Waiting that experiment {} gets in state {}\n".format(
        exp_id, opts.state))

    return experiment.wait_experiment(api, exp_id, opts.state, opts.step,
                                      opts.timeout)
示例#12
0
    def test_wait_experiment(self, get_exp):
        """ Test the wait_experiment function """
        self.wait_ret = ['Waiting', 'Waiting', 'toLaunch', 'Launching',
                         'Running']
        get_exp.side_effect = self._get_exp

        # simple
        ret = experiment.wait_experiment(self.api, 123, step=0)
        self.assertEqual('Running', ret)

        # Error before Running
        self.wait_ret = ['Waiting', 'toLaunch', 'Launching', 'Error']
        self.assertRaises(RuntimeError, experiment.wait_experiment,
                          self.api, 123, step=0)

        # Timeout
        self.wait_ret = []
        self.assertRaises(RuntimeError, experiment.wait_experiment,
                          self.api, 123, step=0.1, timeout=0.5)
示例#13
0
 def wait_stop(self):
     """ Wait the experimentation is Terminated """
     experiment.wait_experiment(self.api, self.idexpe, states='Terminated')
示例#14
0
 def wait_run(self):
     """ Wait the experimentation is Running """
     experiment.wait_experiment(self.api, self.idexpe, states='Running')
示例#15
0
 def wait_stop(self):
     """ Wait the experimentation is Terminated """
     experiment.wait_experiment(self.api, self.idexpe, states='Terminated')
示例#16
0
 def wait_run(self):
     """ Wait the experimentation is Running """
     experiment.wait_experiment(self.api, self.idexpe, states='Running')
示例#17
0
def wait_for_running(api, exp_id):
    experiment.wait_experiment(api, exp_id)
    state = experiment.get_experiment(api, exp_id, 'state')
    assert state['state'] == "Running"
示例#18
0
def test_stop_experiment(api, exp):
    api.stop_experiment(exp.id)

    # stopped experiments eventually report as Error
    experiment.wait_experiment(api, exp.id, states="Error")
示例#19
0
 def _wait(self):
     """Wait for the experiment to finish launching"""
     ret = wait_experiment(Api(*self.user_credentials()), self.exp_id)
     return ret