Пример #1
0
 def _return_reserved(self):
     self.lab_mock.reserve_experiment(
         ExperimentInstanceId('inst', 'ud-dummy', 'Dummy experiments'),
         "{}", mocker.ANY)
     self.mocker.result((SessionId.SessionId('my_lab_session_id'), 'ok', {
         'address': 'servexp:inst@mach'
     }))
     self.lab_mock.resolve_experiment_address('my_lab_session_id')
     self.mocker.result(CoordAddress("exp", "inst", "mach"))
     self.mocker.count(1, 2)
Пример #2
0
 def _fake_simple_lab_response(self):
     self.lab_mock.reserve_experiment(
         ExperimentInstanceId('inst', 'ud-dummy', 'Dummy experiments'),
         "{}", mocker.ANY)
     self.mocker.result((SessionId.SessionId('my_lab_session_id'), 'ok', {
         'address': 'servexp:inst@mach'
     }))
     self.lab_mock.resolve_experiment_address('my_lab_session_id')
     self.mocker.result(CoordAddress("exp", "inst", "mach"))
     self.lab_mock.should_experiment_finish(
         SessionId.SessionId('my_lab_session_id'))
     self.mocker.result(0)
     self.mocker.replay()
Пример #3
0
    def test_update_command(self):
        student1 = self.gateway._get_user(self.session, 'student1')

        RESERVATION_ID1 = 'my_reservation_id1'

        usage1 = ExperimentUsage()
        usage1.start_date = time.time()
        usage1.end_date = time.time()
        usage1.from_ip = "130.206.138.16"
        usage1.experiment_id = ExperimentId("ud-dummy", "Dummy experiments")
        usage1.coord_address = CoordAddress("machine1", "instance1", "server1")
        usage1.reservation_id = RESERVATION_ID1
        usage1.request_info = {
            'facebook': False,
            'permission_scope': 'user',
            'permission_id': student1.id
        }

        self.gateway.store_experiment_usage(student1.login, usage1)

        usages = self.gateway.list_usages_per_user(student1.login)
        self.assertEquals(1, len(usages))

        full_usage = self.gateway.retrieve_usage(usages[0].experiment_use_id)

        self.assertEquals(0, len(full_usage.commands))

        command1 = CommandSent(Command.Command("your command"), time.time())
        command_id = self.gateway.append_command(RESERVATION_ID1, command1)

        full_usage = self.gateway.retrieve_usage(usages[0].experiment_use_id)

        self.assertEquals("your command",
                          full_usage.commands[0].command.commandstring)
        self.assertEquals(Command.NullCommand(),
                          full_usage.commands[0].response)

        self.gateway.update_command(command_id,
                                    Command.Command("the response"),
                                    time.time())

        full_usage = self.gateway.retrieve_usage(usages[0].experiment_use_id)
        self.assertEquals("your command",
                          full_usage.commands[0].command.commandstring)
        self.assertEquals("the response",
                          full_usage.commands[0].response.commandstring)
Пример #4
0
def create_usage(gateway, reservation_id='my_reservation_id'):
    session = gateway.Session()
    try:
        student1 = gateway._get_user(session, 'student1')

        initial_usage = ExperimentUsage()
        initial_usage.start_date = time.time()
        initial_usage.end_date = time.time()
        initial_usage.from_ip = "130.206.138.16"
        initial_usage.experiment_id = ExperimentId("ud-dummy",
                                                   "Dummy experiments")
        initial_usage.coord_address = CoordAddress("machine1", "instance1",
                                                   "server1")
        initial_usage.reservation_id = reservation_id

        file1 = FileSent('path/to/file1', '{sha}12345', time.time())

        file2 = FileSent('path/to/file2',
                         '{sha}123456',
                         time.time(),
                         Command.Command('response'),
                         time.time(),
                         file_info='program')

        command1 = CommandSent(Command.Command("your command1"), time.time())

        command2 = CommandSent(Command.Command("your command2"), time.time(),
                               Command.Command("your response2"), time.time())

        initial_usage.append_command(command1)
        initial_usage.append_command(command2)
        initial_usage.append_file(file1)
        initial_usage.append_file(file2)
        initial_usage.request_info = {
            'facebook': False,
            'permission_scope': 'user',
            'permission_id': student1.id
        }
        gateway.store_experiment_usage(student1.login, initial_usage)
        return student1, initial_usage, command1, command2, file1, file2
    finally:
        session.close()
Пример #5
0
    def test_update_file(self):
        student1 = self.gateway._get_user(self.session, 'student1')

        RESERVATION_ID1 = 'my_reservation_id1'
        RESERVATION_ID2 = 'my_reservation_id2'

        usage1 = ExperimentUsage()
        usage1.start_date = time.time()
        usage1.end_date = time.time()
        usage1.from_ip = "130.206.138.16"
        usage1.experiment_id = ExperimentId("ud-dummy", "Dummy experiments")
        usage1.coord_address = CoordAddress("machine1", "instance1", "server1")
        usage1.reservation_id = RESERVATION_ID1
        usage1.request_info = {
            'facebook': False,
            'permission_scope': 'user',
            'permission_id': student1.id
        }

        usage2 = ExperimentUsage()
        usage2.start_date = time.time()
        usage2.end_date = time.time()
        usage2.from_ip = "130.206.138.17"
        usage2.experiment_id = ExperimentId("ud-dummy", "Dummy experiments")
        usage2.coord_address = CoordAddress("machine1", "instance1", "server1")
        usage2.reservation_id = RESERVATION_ID2
        usage2.request_info = {
            'facebook': False,
            'permission_scope': 'user',
            'permission_id': student1.id
        }

        self.gateway.store_experiment_usage(student1.login, usage1)
        self.gateway.store_experiment_usage(student1.login, usage2)

        file_sent1 = FileSent('path/to/file2',
                              '{sha}123456',
                              time.time(),
                              file_info='program')

        usages = self.gateway.list_usages_per_user(student1.login)
        self.assertEquals(2, len(usages))

        full_usage1 = self.gateway.retrieve_usage(usages[0].experiment_use_id)
        full_usage2 = self.gateway.retrieve_usage(usages[1].experiment_use_id)

        self.assertEquals(0, len(full_usage1.commands))
        self.assertEquals(0, len(full_usage2.commands))
        self.assertEquals(0, len(full_usage1.sent_files))
        self.assertEquals(0, len(full_usage2.sent_files))

        file_sent_id = self.gateway.append_file(RESERVATION_ID1, file_sent1)

        full_usage1 = self.gateway.retrieve_usage(usages[0].experiment_use_id)
        full_usage2 = self.gateway.retrieve_usage(usages[1].experiment_use_id)

        self.assertEquals(0, len(full_usage1.commands))
        self.assertEquals(0, len(full_usage2.commands))
        self.assertEquals(1, len(full_usage1.sent_files))
        self.assertEquals(0, len(full_usage2.sent_files))

        self.assertEquals(None,
                          full_usage1.sent_files[0].response.commandstring)

        self.gateway.update_file(file_sent_id, Command.Command("response"),
                                 time.time())

        full_usage1 = self.gateway.retrieve_usage(usages[0].experiment_use_id)
        full_usage2 = self.gateway.retrieve_usage(usages[1].experiment_use_id)

        self.assertEquals(0, len(full_usage1.commands))
        self.assertEquals(0, len(full_usage2.commands))
        self.assertEquals(1, len(full_usage1.sent_files))
        self.assertEquals(0, len(full_usage2.sent_files))

        self.assertEquals("response",
                          full_usage1.sent_files[0].response.commandstring)
Пример #6
0
    def test_finish_experiment_usage(self):
        student1 = self.gateway._get_user(self.session, 'student1')

        RESERVATION_ID1 = 'my_reservation_id1'
        RESERVATION_ID2 = 'my_reservation_id2'

        usage1 = ExperimentUsage()
        usage1.start_date = time.time()
        usage1.from_ip = "130.206.138.16"
        usage1.experiment_id = ExperimentId("ud-dummy", "Dummy experiments")
        usage1.coord_address = CoordAddress("machine1", "instance1", "server1")
        usage1.reservation_id = RESERVATION_ID1

        command1 = CommandSent(Command.Command("your command1"), time.time(),
                               Command.Command("your response1"), time.time())

        usage1.append_command(command1)
        usage1.request_info = {
            'facebook': False,
            'permission_scope': 'user',
            'permission_id': student1.id
        }

        usage2 = ExperimentUsage()
        usage2.start_date = time.time()
        usage2.from_ip = "130.206.138.17"
        usage2.experiment_id = ExperimentId("ud-dummy", "Dummy experiments")
        usage2.coord_address = CoordAddress("machine1", "instance1", "server1")
        usage2.reservation_id = RESERVATION_ID2

        command2 = CommandSent(Command.Command("your command2"), time.time(),
                               Command.Command("your response2"), time.time())

        usage2.append_command(command2)
        usage2.request_info = {
            'facebook': False,
            'permission_scope': 'user',
            'permission_id': student1.id
        }

        self.gateway.store_experiment_usage(student1.login, usage1)
        self.gateway.store_experiment_usage(student1.login, usage2)

        finishing_command = CommandSent(Command.Command("@@@finish@@@"),
                                        time.time(), Command.Command("finish"),
                                        time.time())

        usages = self.gateway.list_usages_per_user(student1.login)
        self.assertEquals(2, len(usages))

        full_usage1 = self.gateway.retrieve_usage(usages[0].experiment_use_id)
        full_usage2 = self.gateway.retrieve_usage(usages[1].experiment_use_id)

        self.assertEquals(None, full_usage1.end_date)
        self.assertEquals(None, full_usage2.end_date)

        self.assertEquals(1, len(full_usage1.commands))
        self.assertEquals(1, len(full_usage2.commands))

        result = self.gateway.finish_experiment_usage(RESERVATION_ID1,
                                                      time.time(),
                                                      finishing_command)

        self.assertTrue(result)

        full_usage1 = self.gateway.retrieve_usage(usages[0].experiment_use_id)
        full_usage2 = self.gateway.retrieve_usage(usages[1].experiment_use_id)

        self.assertNotEqual(None, full_usage1.end_date)
        self.assertEquals(None, full_usage2.end_date)

        self.assertEquals(2, len(full_usage1.commands))
        self.assertEquals(1, len(full_usage2.commands))

        self.assertEquals("@@@finish@@@",
                          full_usage1.commands[1].command.commandstring)
        self.assertEquals("finish",
                          full_usage1.commands[1].response.commandstring)
Пример #7
0
 def test_simplify_response_coordaddr(self):
     addr = CoordAddress('mach','inst','serv')
     self._check(addr, {'process': 'inst', 'component': 'serv', 'host': 'mach'})
Пример #8
0
    def _parse_experiment_result(self, experiment_result):
        if experiment_result['status'] == ReservationResult.ALIVE:
            if experiment_result['running']:
                return RunningReservationResult()
            else:
                return WaitingReservationResult()
        elif experiment_result['status'] == ReservationResult.CANCELLED:
            return CancelledReservationResult()
        elif experiment_result['status'] == ReservationResult.FORBIDDEN:
            return ForbiddenReservationResult()

        experiment_use = experiment_result['experiment_use']

        experiment_id = ExperimentId(
            experiment_use['experiment_id']['exp_name'],
            experiment_use['experiment_id']['cat_name'])

        addr = experiment_use['coord_address']
        if 'machine_id' in addr:
            coord_address = CoordAddress(addr['machine_id'],
                                         addr['instance_id'],
                                         addr['server_id'])
        else:
            coord_address = CoordAddress(addr['host'], addr['process'],
                                         addr['component'])

        use = ExperimentUsage(experiment_use['experiment_use_id'],
                              experiment_use['start_date'],
                              experiment_use['end_date'],
                              experiment_use['from_ip'], experiment_id,
                              experiment_use['reservation_id'], coord_address,
                              experiment_use['request_info'])
        for sent_file in experiment_use['sent_files']:
            response = Command(
                sent_file['response']['commandstring']
            ) if 'commandstring' in sent_file['response'] and sent_file[
                'response'] is not None else NullCommand
            if sent_file['file_info'] == {}:
                file_info = None
            else:
                file_info = sent_file['file_info']
            unserialized_sent_file = LoadedFileSent(
                sent_file['file_content'], sent_file['timestamp_before'],
                response, sent_file['timestamp_after'], file_info)
            use.append_file(unserialized_sent_file)

        for command in experiment_use['commands']:
            request = Command(
                command['command']['commandstring']
            ) if 'commandstring' in command['command'] and command[
                'command'] is not None else NullCommand
            response_command = command['response'][
                'commandstring'] if 'commandstring' in command[
                    'response'] and command['response'] is not None else None
            if response_command is None or response_command == {}:
                response = NullCommand()
            else:
                response = Command(response_command)

            if command['timestamp_after'] is None or command[
                    'timestamp_after'] == {}:
                timestamp_after = None
            else:
                timestamp_after = command['timestamp_after']
            unserialized_command = CommandSent(request,
                                               command['timestamp_before'],
                                               response, timestamp_after)
            use.append_command(unserialized_command)
        return FinishedReservationResult(use)
Пример #9
0
    def _store_two_reservations(self):
        #
        # Two users: student2, that started before "any" but finished after "any", and "any" then. Both use
        # the same experiment.
        #
        db_gw = self.ups._db_manager
        session = db_gw.Session()
        try:
            student1 = db_gw._get_user(session, 'student1')
            student2 = db_gw._get_user(session, 'student2')
        finally:
            session.close()

        reservation_id1 = SessionId.SessionId(u'5')

        initial_usage1 = ExperimentUsage()
        initial_usage1.start_date = time.time()
        initial_usage1.end_date = time.time()
        initial_usage1.from_ip = u"130.206.138.16"
        initial_usage1.experiment_id = ExperimentId(u"ud-dummy",
                                                    u"Dummy experiments")
        initial_usage1.coord_address = CoordAddress(u"machine1", u"instance1",
                                                    u"server1")
        initial_usage1.reservation_id = reservation_id1.id
        initial_usage1.request_info = {
            'permission_scope': 'user',
            'permission_id': student1.id
        }

        valid_file_path = os.path.relpath(os.sep.join(('test', '__init__.py')))
        file1 = FileSent(valid_file_path, u'{sha}12345', time.time())

        file2 = FileSent(valid_file_path,
                         u'{sha}123456',
                         time.time(),
                         Command(u'response'),
                         time.time(),
                         file_info=u'program')

        command1 = CommandSent(Command(u"your command1"), time.time())
        command2 = CommandSent(Command(u"your command2"), time.time(),
                               Command(u"your response2"), time.time())

        initial_usage1.append_command(command1)
        initial_usage1.append_command(command2)
        initial_usage1.append_file(file1)
        initial_usage1.append_file(file2)

        reservation_id2 = SessionId.SessionId(u'6')

        initial_usage2 = ExperimentUsage()
        initial_usage2.start_date = time.time()
        initial_usage2.end_date = time.time()
        initial_usage2.from_ip = u"130.206.138.16"
        initial_usage2.experiment_id = ExperimentId(u"ud-dummy",
                                                    u"Dummy experiments")
        initial_usage2.coord_address = CoordAddress(u"machine1", u"instance1",
                                                    u"server1")
        initial_usage2.reservation_id = reservation_id2.id
        initial_usage2.request_info = {
            'permission_scope': 'user',
            'permission_id': student2.id
        }

        file1 = FileSent(valid_file_path, u'{sha}12345', time.time())

        file2 = FileSent(valid_file_path,
                         u'{sha}123456',
                         time.time(),
                         Command(u'response'),
                         time.time(),
                         file_info=u'program')

        command1 = CommandSent(Command(u"your command1"), time.time())

        command2 = CommandSent(Command(u"your command2"), time.time(),
                               Command(u"your response2"), time.time())

        initial_usage2.append_command(command1)
        initial_usage2.append_command(command2)
        initial_usage2.append_file(file1)
        initial_usage2.append_file(file2)

        self.ups._db_manager.store_experiment_usage('student1', initial_usage1)

        self.ups._db_manager.store_experiment_usage('student2', initial_usage2)

        return (reservation_id1, reservation_id2), (initial_usage1,
                                                    initial_usage2)