예제 #1
0
    def iterate_initial(self):
        initial_information = self.initial_store.get(timeout=self.timeout)
        if initial_information is not None:

            initial_timestamp = (
                time.mktime(initial_information.initial_time.timetuple())
                + initial_information.initial_time.microsecond / 10e6
            )
            end_timestamp = (
                time.mktime(initial_information.end_time.timetuple()) + initial_information.end_time.microsecond / 10e6
            )

            request_info = initial_information.request_info
            from_ip = request_info.pop("from_ip", "<address not found>")

            try:
                username = request_info.pop("username")
                role = request_info.pop("role")
            except:
                log.log(
                    TemporalInformationRetriever,
                    log.level.Critical,
                    "Provided information did not contain some required fields (such as username or role). This usually means that the reservation has previously been expired. Provided request_info: %r; provided data: %r"
                    % (request_info, initial_information),
                    max_size=10000,
                )
                log.log_exc(TemporalInformationRetriever, log.level.Critical)
                return

            usage = ExperimentUsage()
            usage.start_date = initial_timestamp
            usage.from_ip = from_ip
            usage.experiment_id = initial_information.experiment_id
            usage.reservation_id = initial_information.reservation_id
            usage.coord_address = initial_information.exp_coordaddr
            usage.request_info = initial_information.request_info

            command_request = CommandSent(
                Command.Command("@@@initial::request@@@"),
                initial_timestamp,
                Command.Command(str(initial_information.client_initial_data)),
                end_timestamp,
            )

            command_response = CommandSent(
                Command.Command("@@@initial::response@@@"),
                initial_timestamp,
                Command.Command(str(initial_information.initial_configuration)),
                end_timestamp,
            )

            usage.append_command(command_request)
            usage.append_command(command_response)

            self.db_manager.store_experiment_usage(DbSession.ValidDatabaseSessionId(username, role), usage)
예제 #2
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()
예제 #3
0
    def iterate_initial(self):
        initial_information = self.initial_store.get(timeout=self.timeout)
        if initial_information is not None:

            initial_timestamp = time.mktime(
                initial_information.initial_time.timetuple(
                )) + initial_information.initial_time.microsecond / 1e6
            end_timestamp = time.mktime(initial_information.end_time.timetuple(
            )) + initial_information.end_time.microsecond / 1e6

            request_info = initial_information.request_info
            from_ip = request_info.pop('from_ip', '<address not found>')

            try:
                username = request_info.pop('username')
            except:
                log.log(
                    TemporalInformationRetriever,
                    log.level.Critical,
                    "Provided information did not contain some required fields (such as username or role). This usually means that the reservation has previously been expired. Provided request_info: %r; provided data: %r"
                    % (request_info, initial_information),
                    max_size=10000)
                log.log_exc(TemporalInformationRetriever, log.level.Critical)
                return

            usage = ExperimentUsage()
            usage.start_date = initial_timestamp
            usage.from_ip = from_ip
            usage.experiment_id = initial_information.experiment_id
            usage.reservation_id = initial_information.reservation_id
            usage.coord_address = initial_information.exp_coordaddr
            usage.request_info = initial_information.request_info

            command_request = CommandSent(
                Command.Command("@@@initial::request@@@"), initial_timestamp,
                Command.Command(str(initial_information.client_initial_data)),
                end_timestamp)

            command_response = CommandSent(
                Command.Command("@@@initial::response@@@"), initial_timestamp,
                Command.Command(str(
                    initial_information.initial_configuration)), end_timestamp)

            usage.append_command(command_request)
            usage.append_command(command_response)

            self.db_manager.store_experiment_usage(username, usage)
예제 #4
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)
예제 #5
0
def create_usage(gateway, reservation_id = 'my_reservation_id'):
        session = gateway.Session()
        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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        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}
        gateway.store_experiment_usage(student1.login, initial_usage)
        return student1, initial_usage, command1, command2, file1, file2
예제 #6
0
 def to_business_light(self):
     usage = ExperimentUsage()
     usage.experiment_use_id = self.id
     usage.start_date        = _splitted_utc_datetime_to_timestamp(self.start_date, self.start_date_micro)
     usage.end_date          = _splitted_utc_datetime_to_timestamp(self.end_date, self.end_date_micro)
     usage.from_ip           = self.origin
     usage.reservation_id    = self.reservation_id
     usage.experiment_id     = ExperimentId(self.experiment.name, self.experiment.category.name)
     usage.coord_address     = CoordAddress.translate(self.coord_address)
     
     request_info = {}
     for prop in self.properties:
         name  = prop.property_name.name
         value = prop.value
         request_info[name] = value
     
     usage.request_info = request_info
     return usage
예제 #7
0
    def test_update_command(self):
        session = self.gateway.Session()
        student1 = self.gateway._get_user(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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        usage1.reservation_id = RESERVATION_ID1
        usage1.request_info = {'facebook' : False}

        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)
예제 #8
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)
예제 #9
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)
예제 #10
0
    def test_update_file(self):
        session = self.gateway.Session()
        student1 = self.gateway._get_user(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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        usage1.reservation_id = RESERVATION_ID1
        usage1.request_info  = {'facebook' : False}

        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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        usage2.reservation_id = RESERVATION_ID2
        usage2.request_info  = {'facebook' : False}

        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)
예제 #11
0
    def test_add_file(self):
        session = self.gateway.Session()
        student1 = self.gateway._get_user(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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        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}

        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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        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}

        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(),
                    Command.Command('response'),
                    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(1, len(full_usage1.commands))
        self.assertEquals(1, len(full_usage2.commands))
        self.assertEquals(0, len(full_usage1.sent_files))
        self.assertEquals(0, len(full_usage2.sent_files))

        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(1, len(full_usage1.commands))
        self.assertEquals(1, 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)
예제 #12
0
    def test_finish_experiment_usage(self):
        session = self.gateway.Session()
        student1 = self.gateway._get_user(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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        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}

        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.CoordAddress("machine1","instance1","server1") #.translate_address("server1:instance1@machine1")
        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}

        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)
예제 #13
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)
예제 #14
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)
예제 #15
0
    def test_add_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

        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.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

        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)

        file_sent1 = FileSent(
                    'path/to/file2',
                    '{sha}123456',
                    time.time(),
                    Command.Command('response'),
                    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(1, len(full_usage1.commands))
        self.assertEquals(1, len(full_usage2.commands))
        self.assertEquals(0, len(full_usage1.sent_files))
        self.assertEquals(0, len(full_usage2.sent_files))

        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(1, len(full_usage1.commands))
        self.assertEquals(1, 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)