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)
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()
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)
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()
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)
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)
def test_simplify_response_coordaddr(self): addr = CoordAddress('mach','inst','serv') self._check(addr, {'process': 'inst', 'component': 'serv', 'host': 'mach'})
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)
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)