示例#1
0
    def setUp(self):
        self.cfg_manager = ConfigurationManager.ConfigurationManager()
        self.cfg_manager.append_module(configuration_module)

        self.fake_client = FakeClient()
        self.fake_locator = FakeLocator(self.fake_client)
        self.locator = self.fake_locator

        self.experiment_instance_id = ExperimentInstanceId(
            "exp_inst", "exp_name", "exp_cat")
        self.experiment_instance_id_old = ExperimentInstanceId(
            "exp_inst", "exp_name", "exp_cat2")
        self.experiment_coord_address = CoordAddress.translate(
            'myserver:myinstance@mymachine')

        self.cfg_manager._set_value(
            'laboratory_assigned_experiments', {
                'exp_inst:exp_name@exp_cat': {
                    'coord_address':
                    'myserver:myinstance@mymachine',
                    'checkers': (
                        ('WebcamIsUpAndRunningHandler', ("https://...", )),
                        ('HostIsUpAndRunningHandler', ("hostname", 80), {}),
                    )
                },
                'exp_inst:exp_name@exp_cat2': {
                    'coord_address':
                    'myserver:myinstance@mymachine',
                    'checkers': (
                        ('WebcamIsUpAndRunningHandler', ("https://...", )),
                        ('HostIsUpAndRunningHandler', ("hostname", 80), {}),
                    ),
                },
            })
        self._create_lab()
示例#2
0
    def test_list_experiment_instance_ids_by_resource(self):
        session = self.session_maker()
        try:
            exp_id1 = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
            resource_instance1 = Resource("type1", "instance1")
            self.resources_manager.add_experiment_instance_id(
                "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id1,
                resource_instance1)

            exp_id2 = ExperimentInstanceId("exp2", "ud-pld", "PLD Experiments")
            self.resources_manager.add_experiment_instance_id(
                "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id2,
                resource_instance1)

            exp_id3 = ExperimentInstanceId("exp3", "ud-pld", "PLD Experiments")
            resource_instance2 = Resource("type1", "instance2")
            self.resources_manager.add_experiment_instance_id(
                "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id3,
                resource_instance2)

            session.commit()
        finally:
            session.close()

        experiment_instance_ids = self.resources_manager.list_experiment_instance_ids_by_resource(
            resource_instance1)
        self.assertEquals(2, len(experiment_instance_ids))
        self.assertTrue(
            ExperimentInstanceId('exp1', 'ud-pld', 'PLD Experiments') in
            experiment_instance_ids)
        self.assertTrue(
            ExperimentInstanceId('exp2', 'ud-pld', 'PLD Experiments') in
            experiment_instance_ids)
示例#3
0
    def test_list_laboratories_addresses(self):
        session = self.session_maker()
        try:
            exp_id1 = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
            resource_instance1 = Resource("type1", "instance1")
            self.resources_manager.add_experiment_instance_id(
                "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id1,
                resource_instance1)

            # Repeating laboratory1, but a set is returned so no problem
            exp_id2 = ExperimentInstanceId("exp2", "ud-pld", "PLD Experiments")
            resource_instance2 = Resource("type2", "instance1")
            self.resources_manager.add_experiment_instance_id(
                "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id2,
                resource_instance2)

            exp_id3 = ExperimentInstanceId("exp3", "ud-pld", "PLD Experiments")
            resource_instance3 = Resource("type2", "instance2")
            self.resources_manager.add_experiment_instance_id(
                "laboratory2:WL_SERVER1@WL_MACHINE1", exp_id3,
                resource_instance3)

            session.commit()
        finally:
            session.close()

        addresses = self.resources_manager.list_laboratories_addresses()
        self.assertEquals(2, len(addresses))
        self.assertTrue("laboratory1:WL_SERVER1@WL_MACHINE1" in addresses)
        self.assertEquals(2,
                          len(addresses["laboratory1:WL_SERVER1@WL_MACHINE1"]))
        self.assertTrue(
            exp_id1 in addresses["laboratory1:WL_SERVER1@WL_MACHINE1"])
        self.assertTrue(
            exp_id2 in addresses["laboratory1:WL_SERVER1@WL_MACHINE1"])
        self.assertTrue("laboratory2:WL_SERVER1@WL_MACHINE1" in addresses)
        self.assertEquals(1,
                          len(addresses["laboratory2:WL_SERVER1@WL_MACHINE1"]))
        self.assertTrue(
            exp_id3 in addresses["laboratory2:WL_SERVER1@WL_MACHINE1"])

        self.assertEquals(
            resource_instance1,
            addresses["laboratory1:WL_SERVER1@WL_MACHINE1"][exp_id1])
        self.assertEquals(
            resource_instance2,
            addresses["laboratory1:WL_SERVER1@WL_MACHINE1"][exp_id2])
        self.assertEquals(
            resource_instance3,
            addresses["laboratory2:WL_SERVER1@WL_MACHINE1"][exp_id3])
    def setUp(self):

        locator_mock = None

        self.cfg_manager = ConfigurationManager.ConfigurationManager()
        self.cfg_manager.append_module(configuration_module)

        self.coordinator = WrappedCoordinator(locator_mock, self.cfg_manager, ConfirmerClass = ConfirmerMock)
        self.coordinator._clean()

        self.coordinator.add_experiment_instance_id("lab1:inst@machine", ExperimentInstanceId('inst1', 'exp1','cat1'), Resource("res_type", "res_inst1"))
        self.coordinator.add_experiment_instance_id("lab2:inst@machine", ExperimentInstanceId('inst2', 'exp2','cat1'), Resource("res_type", "res_inst2"))

        self.reservations_manager = self.coordinator.reservations_manager
示例#5
0
    def test_list_experiments(self):
        exp_id1 = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
        resource_instance1 = Resource("type1", "instance1")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id1, resource_instance1)

        exp_id2 = ExperimentInstanceId("exp2", "ud-pld", "PLD Experiments")
        resource_instance2 = Resource("type2", "instance1")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id2, resource_instance2)

        resources = self.resources_manager.list_experiments()
        self.assertEquals(1, len(resources))
        self.assertTrue(ExperimentId('ud-pld', 'PLD Experiments') in resources)
示例#6
0
    def test_remove_resource_instance_id(self):
        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        experiment_instances = self.resources_manager.list_experiment_instances_by_type(
            exp_id.to_experiment_id())
        self.assertEquals(1, len(experiment_instances))

        self.resources_manager.remove_resource_instance_id(exp_id)

        experiment_instances = self.resources_manager.list_experiment_instances_by_type(
            exp_id.to_experiment_id())
        self.assertEquals(0, len(experiment_instances))
    def _clean_current_reservation(self, reservation_id):
        client = self.redis_maker()

        enqueue_free_experiment_args = None
        if reservation_id is not None:
            weblab_reservation_pqueue = WEBLAB_RESOURCE_RESERVATION_PQUEUE % (self.resource_type_name, reservation_id)
            reservation_data_str = client.get(weblab_reservation_pqueue)
            if reservation_data_str is not None:
                downgraded = self.reservations_manager.downgrade_confirmation(reservation_id)
                if downgraded:
                    reservation_data      = json.loads(reservation_data_str)
                    resource_instance_str = reservation_data.get(RESOURCE_INSTANCE)
                    if resource_instance_str is not None:
                        resource_instance       = Resource.parse(resource_instance_str)
                        weblab_resource_pqueue_instance_reservations = WEBLAB_RESOURCE_PQUEUE_INSTANCE_RESERVATIONS % (resource_instance.resource_type, resource_instance.resource_instance)
                        client.srem(weblab_resource_pqueue_instance_reservations, reservation_id)
                        # print "RELEASING AT _clean_current_reservation. SHOULD NEVER HAPPEN."
                        # self.resources_manager.release_resource(resource_instance)
                        lab_session_id          = reservation_data.get(LAB_SESSION_ID)
                        experiment_instance_str = reservation_data.get(EXPERIMENT_INSTANCE)
                        experiment_instance_id  = ExperimentInstanceId.parse(experiment_instance_str)
                        if experiment_instance_id is not None: 
                            # If the experiment instance doesn't exist, there is no need to call the free_experiment method
                            lab_coord_address  = reservation_data.get(LAB_COORD)
                            enqueue_free_experiment_args = (lab_coord_address, reservation_id, lab_session_id, experiment_instance_id)
                # otherwise the student has been removed
        return enqueue_free_experiment_args
示例#8
0
    def test_add_experiment_instance_id_redundant(self):

        self.assertEquals([], self.resources_manager.list_resources())

        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")

        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        # No problem in adding twice the same
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        # Everything is all right
        self._check_resource_added()
        self._check_experiment_instance_id_added()

        # However, we can't add another time the same experiment instance with a different laboratory id:
        self.assertRaises(CoordExc.InvalidExperimentConfigError,
                          self.resources_manager.add_experiment_instance_id,
                          "laboratory2:WL_SERVER1@WL_MACHINE1", exp_id,
                          Resource("type", "instance"))

        # Or the same experiment instance with a different resource instance:
        self.assertRaises(CoordExc.InvalidExperimentConfigError,
                          self.resources_manager.add_experiment_instance_id,
                          "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
                          Resource("type", "instance2"))
    def setUp(self):
        self.mocker = mocker.Mocker()
        self.lab_mock = self.mocker.mock()

        self.locator = FakeLocator(lab=self.lab_mock)
        self.db = FakeDatabase()

        self.cfg_manager = ConfigurationManager.ConfigurationManager()
        self.cfg_manager.append_module(configuration_module)
        self.cfg_manager._set_value(
            COORDINATOR_LABORATORY_SERVERS, {
                'server:laboratoryserver@labmachine': {
                    'inst1|ud-dummy|Dummy experiments': 'res_inst@res_type'
                }
            })

        self.commands_store = TemporalInformationStore.CommandsTemporalInformationStore(
        )

        self.coordinator = coordinator_create(SQLALCHEMY,
                                              self.locator,
                                              self.cfg_manager,
                                              ConfirmerClass=FakeConfirmer)
        self.coordinator._clean()
        self.coordinator.add_experiment_instance_id(
            "server:laboratoryserver@labmachine",
            ExperimentInstanceId('inst', 'ud-dummy', 'Dummy experiments'),
            Resource("res_type", "res_inst"))

        self.processor = UserProcessor.UserProcessor(
            self.locator,
            {'db_session_id': ValidDatabaseSessionId('my_db_session_id')},
            self.cfg_manager, self.coordinator, self.db, self.commands_store)
示例#10
0
    def test_remove_resource_instance(self):
        session = self.session_maker()
        try:
            exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
            resource_instance = Resource("type", "instance")
            self.resources_manager.add_experiment_instance_id(
                "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
                resource_instance)

            # Checking that the resources are there
            experiment_instances = session.query(
                CoordinatorModel.ExperimentInstance).all()
            self.assertEquals(1, len(experiment_instances))
            resource_instances = session.query(
                CoordinatorModel.ResourceInstance).all()
            self.assertEquals(1, len(resource_instances))

            # Removing resource instance
            self.resources_manager.remove_resource_instance(
                session, resource_instance)

            # Checking that the resources are not there, neither the experiment instances
            resource_instances = session.query(
                CoordinatorModel.ResourceInstance).all()
            self.assertEquals(0, len(resource_instances))
            experiment_instances = session.query(
                CoordinatorModel.ExperimentInstance).all()
            self.assertEquals(0, len(experiment_instances))

            session.commit()
        finally:
            session.close()
示例#11
0
    def test_confirm_experiment(self):
        lab_session_id = SessionId.SessionId("samplesession_id")

        mock_laboratory = self.mocker.mock()
        mock_laboratory.reserve_experiment(ExperimentInstanceId('inst1','exp1','cat1'), '"sample initial data"', mocker.ANY)
        self.mocker.result((lab_session_id, None, 'server:inst@mach'))

        self.mock_locator.real_mock = self.mocker.mock()
        self.mock_locator.real_mock.get_server_from_coordaddress(
                self.coord_address,
                coord_addr(self.lab_address),
                ServerType.Laboratory,
                'all'
        )
        self.mocker.result((mock_laboratory,))
        self.mocker.count(min=1,max=None)

        self.mocker.replay()
        status, reservation1_id = self.coordinator.reserve_experiment(ExperimentId('exp1','cat1'), 30, 5, True, 'sample initial data', DEFAULT_REQUEST_INFO, {})
        now = datetime.datetime.fromtimestamp(int(time.time())) # Remove milliseconds as MySQL do
        self.coordinator.confirmer._confirm_handler.join()
        self.assertEquals( None, self.confirmer._confirm_handler.raised_exc )

        status = self.coordinator.get_reservation_status(reservation1_id)
        expected_status =  WSS.LocalReservedStatus(reservation1_id, CoordAddress.CoordAddress.translate_address(self.lab_address), lab_session_id, 30, '{}', now, now, True, 30, 'http://www.weblab.deusto.es/weblab/client/adfas')

        self.assertTrue(hasattr(status, 'timestamp_before'),  "Unexpected status. Expected\n %s\n, but the obtained does not have timestamp_before:\n %s\n" % (status, expected_status))
        self.assertTrue(status.timestamp_before >= now and status.timestamp_before <= now + datetime.timedelta(seconds=10),
                        "Unexpected status due to timestamp_before: %s; expected something like %s" % (status, expected_status))
        self.assertTrue(status.timestamp_after  >= now and status.timestamp_after  <= now + datetime.timedelta(seconds=10),
                        "Unexpected status due to timestamp_after: %s; expected something like %s" % (status, expected_status))

        status.timestamp_before = now
        status.timestamp_after = now
        self.assertEquals( expected_status, status )
示例#12
0
    def setUp(self):
        cfg_manager = ConfigurationManager.ConfigurationManager()
        cfg_manager.append_module(configuration_module)

        self.fake_client = FakeClient()
        self.fake_locator = FakeLocator((self.fake_client, ))
        locator = EasyLocator.EasyLocator(
            CoordAddress.CoordAddress('mach', 'inst', 'serv'),
            self.fake_locator)

        self.experiment_instance_id = ExperimentInstanceId(
            "exp_inst", "exp_name", "exp_cat")
        self.experiment_coord_address = CoordAddress.CoordAddress.translate_address(
            'myserver:myinstance@mymachine')

        cfg_manager._set_value(
            'laboratory_assigned_experiments', {
                'exp_inst:exp_name@exp_cat': {
                    'coord_address':
                    'myserver1:myinstance@mymachine',
                    'checkers': (
                        ('WebcamIsUpAndRunningHandler', ("https://...", )),
                        ('HostIsUpAndRunningHandler', ("hostname", 80), {}),
                    )
                }
            })

        self.lab = LaboratoryServer.LaboratoryServer(None, locator,
                                                     cfg_manager)
示例#13
0
    def _clean_current_reservation(self, reservation_id):
        client = self.redis_maker()

        enqueue_free_experiment_args = None
        if reservation_id is not None:
            weblab_reservation_pqueue = WEBLAB_RESOURCE_RESERVATION_PQUEUE % (self.resource_type_name, reservation_id)
            reservation_data_str = client.get(weblab_reservation_pqueue)
            if reservation_data_str is not None:
                downgraded = self.reservations_manager.downgrade_confirmation(reservation_id)
                if downgraded:
                    reservation_data      = json.loads(reservation_data_str)
                    resource_instance_str = reservation_data.get(RESOURCE_INSTANCE)
                    if resource_instance_str is not None:
                        resource_instance       = Resource.parse(resource_instance_str)
                        weblab_resource_pqueue_instance_reservations = WEBLAB_RESOURCE_PQUEUE_INSTANCE_RESERVATIONS % (resource_instance.resource_type, resource_instance.resource_instance)
                        client.srem(weblab_resource_pqueue_instance_reservations, reservation_id)
                        self.resources_manager.release_resource(resource_instance)
                        lab_session_id          = reservation_data.get(LAB_SESSION_ID)
                        experiment_instance_str = reservation_data.get(EXPERIMENT_INSTANCE)
                        experiment_instance_id  = ExperimentInstanceId.parse(experiment_instance_str)
                        if experiment_instance_id is not None: 
                            # If the experiment instance doesn't exist, there is no need to call the free_experiment method
                            lab_coord_address  = reservation_data.get(LAB_COORD)
                            enqueue_free_experiment_args = (lab_coord_address, reservation_id, lab_session_id, experiment_instance_id)
                # otherwise the student has been removed
        return enqueue_free_experiment_args
    def list_laboratories_addresses(self):
        client = self._redis_maker()

        laboratory_addresses = {
            # laboratory_coord_address : {
            #         experiment_instance_id : resource_instance
            # }
        }

        for experiment_type in client.smembers(WEBLAB_EXPERIMENT_TYPES):
            experiment_id = ExperimentId.parse(experiment_type)
            experiment_instance_names = client.smembers(
                WEBLAB_EXPERIMENT_INSTANCES % experiment_type)
            for experiment_instance_name in experiment_instance_names:
                experiment_instance_id = ExperimentInstanceId(
                    experiment_instance_name, experiment_id.exp_name,
                    experiment_id.cat_name)
                weblab_experiment_instance = WEBLAB_EXPERIMENT_INSTANCE % (
                    experiment_type, experiment_instance_name)
                laboratory_address = client.hget(weblab_experiment_instance,
                                                 LAB_COORD)
                resource_str = client.hget(weblab_experiment_instance,
                                           RESOURCE_INST)
                resource = Resource.parse(resource_str)
                current = laboratory_addresses.get(laboratory_address, {})
                current[experiment_instance_id] = resource
                laboratory_addresses[laboratory_address] = current

        return laboratory_addresses
示例#15
0
    def setUp(self):
        self.cfg_manager = ConfigurationManager.ConfigurationManager()
        self.cfg_manager.append_module(configuration_module)

        self.locator = FakeLocator(FakeClient())

        self.experiment_instance_id = ExperimentInstanceId(
            "exp_inst", "exp_name", "exp_cat")
示例#16
0
    def test_get_resource_instance_by_experiment_instance_id_failing(self):
        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        exp_invalid_type = ExperimentInstanceId("exp1", "ud-pld.invalid",
                                                "PLD Experiments")

        self.assertRaises(
            CoordExc.ExperimentNotFoundError, self.resources_manager.
            get_resource_instance_by_experiment_instance_id, exp_invalid_type)

        exp_invalid_inst = ExperimentInstanceId("exp.invalid", "ud-pld",
                                                "PLD Experiments")
        self.assertRaises(
            CoordExc.ExperimentNotFoundError, self.resources_manager.
            get_resource_instance_by_experiment_instance_id, exp_invalid_inst)
 def list_experiment_instances_by_type(self, experiment_id):
     client = self._redis_maker()
     weblab_experiment_instances = WEBLAB_EXPERIMENT_INSTANCES % experiment_id.to_weblab_str(
     )
     return [
         ExperimentInstanceId(inst, experiment_id.exp_name,
                              experiment_id.cat_name)
         for inst in client.smembers(weblab_experiment_instances)
     ]
 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',
                         'servexp:inst@mach'))
     self.lab_mock.resolve_experiment_address('my_lab_session_id')
     self.mocker.result(CoordAddress.CoordAddress("exp", "inst", "mach"))
     self.mocker.count(1, 2)
示例#19
0
    def test_get_resource_instance_by_experiment_instance_id(self):
        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        resource = self.resources_manager.get_resource_instance_by_experiment_instance_id(
            exp_id)
        expected_resource = Resource("type", "instance")
        self.assertEquals(expected_resource, resource)
示例#20
0
    def test_get_resource_types_by_experiment_id_error(self):
        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        self.assertRaises(
            CoordExc.ExperimentNotFoundError,
            self.resources_manager.get_resource_types_by_experiment_id,
            ExperimentId("foo", "bar"))
示例#21
0
    def setUp(self):
        self.cfg_manager = ConfigurationManager.ConfigurationManager()
        self.cfg_manager.append_module(configuration_module)

        self.locator = EasyLocator.EasyLocator(
            CoordAddress.CoordAddress('mach', 'inst', 'serv'),
            FakeLocator((FakeClient(), )))

        self.experiment_instance_id = ExperimentInstanceId(
            "exp_inst", "exp_name", "exp_cat")
示例#22
0
    def test_free_experiment_raises_exception(self):
        self.mock_locator[coord_addr(self.lab_address)]
        self.mocker.throw(Exception('foo'))

        self.mocker.replay()
        self.confirmer.enqueue_free_experiment(
            self.lab_address, '5', 'lab_session_id',
            ExperimentInstanceId('inst1', 'exp1', 'cat1'))
        self.confirmer._free_handler.join()

        self.assertEquals(None, self.confirmer._free_handler.raised_exc)
示例#23
0
    def test_get_resource_types_by_experiment_id(self):
        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        exp_type_id = ExperimentId("ud-pld", "PLD Experiments")
        resource_types = self.resources_manager.get_resource_types_by_experiment_id(
            exp_type_id)
        self.assertEquals(1, len(resource_types))
        self.assertTrue(u"type" in resource_types)
示例#24
0
    def test_coordination_configuration_parser(self):
        self.cfg_manager._set_value(CoordinationConfigurationParser.COORDINATOR_LABORATORY_SERVERS, {
                        'laboratory1:WL_SERVER1@WL_MACHINE1' : {
                                'exp1|ud-fpga|FPGA experiments' : 'fpga1@fpga boards',
                                'exp1|ud-pld|PLD experiments' : 'pld1@pld boards',
                            },
                    })

        configuration = self.coordination_configuration_parser.parse_configuration()
        self.assertEquals(1, len(configuration))
        lab_config = configuration['laboratory1:WL_SERVER1@WL_MACHINE1']
        self.assertEquals(2, len(lab_config))
        exp_fpga = ExperimentInstanceId("exp1","ud-fpga","FPGA experiments")
        exp_pld  = ExperimentInstanceId("exp1","ud-pld","PLD experiments")

        fpga_resource = lab_config[exp_fpga]
        self.assertEquals(Resource("fpga boards", "fpga1"), fpga_resource)

        pld_resource = lab_config[exp_pld]
        self.assertEquals(Resource("pld boards", "pld1"), pld_resource)
    def test_remove_resource_instance_id(self):
        exp_id = ExperimentInstanceId("exp1","ud-pld","PLD Experiments")
        self.resources_manager.add_experiment_instance_id("laboratory1:WL_SERVER1@WL_MACHINE1", exp_id, Resource("type", "instance"))

        experiment_instances = self.resources_manager.list_experiment_instances_by_type(exp_id.to_experiment_id())
        self.assertEquals(1, len(experiment_instances))

        self.resources_manager.remove_resource_instance_id(exp_id)

        experiment_instances = self.resources_manager.list_experiment_instances_by_type(exp_id.to_experiment_id())
        self.assertEquals(0, len(experiment_instances))
示例#26
0
    def test_scheduler_reservation_associations(self):
        exp_inst_id1 = ExperimentInstanceId("exp1", "ud-pld",
                                            "PLD experiments")
        exp_inst_id1b = ExperimentInstanceId("exp2", "ud-pld",
                                             "PLD experiments")
        exp_inst_id2 = ExperimentInstanceId("exp1", "ud-fpga",
                                            "FPGA experiments")

        exp_id1 = exp_inst_id1.to_experiment_id()
        exp_id2 = exp_inst_id2.to_experiment_id()

        self.resources_manager.add_resource(Resource("pld_local", "instance"))
        self.resources_manager.add_resource(Resource("pld_remote", "instance"))
        self.resources_manager.add_resource(Resource("fpga_remote",
                                                     "instance"))

        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_inst_id1,
            Resource("pld_local", "instance"))
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_inst_id1b,
            Resource("pld_remote", "instance"))
        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_inst_id2,
            Resource("fpga_remote", "instance"))

        reservation1 = 'reservation1'
        reservation2 = 'reservation2'

        self.resources_manager.associate_scheduler_to_reservation(
            reservation1, exp_id1, 'pld_local')
        self.resources_manager.associate_scheduler_to_reservation(
            reservation1, exp_id1, 'pld_remote')
        self.resources_manager.associate_scheduler_to_reservation(
            reservation2, exp_id2, 'fpga_remote')

        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(
            reservation1, exp_id1)
        self.assertEquals(set(('pld_local', 'pld_remote')),
                          set(resource_type_names))
        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(
            reservation2, exp_id2)
        self.assertEquals(['fpga_remote'], list(resource_type_names))

        self.resources_manager.dissociate_scheduler_from_reservation(
            reservation1, exp_id1, 'pld_remote')
        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(
            reservation1, exp_id1)
        self.assertEquals(['pld_local'], list(resource_type_names))

        self.resources_manager.clean_associations_for_reservation(
            reservation1, exp_id1)

        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(
            reservation1, exp_id1)
        self.assertEquals(0, len(resource_type_names))
    def test_scheduler_reservation_associations(self):
        exp_inst_id1  = ExperimentInstanceId("exp1","ud-pld",  "PLD experiments")
        exp_inst_id1b = ExperimentInstanceId("exp2","ud-pld",  "PLD experiments")
        exp_inst_id2  = ExperimentInstanceId("exp1","ud-fpga", "FPGA experiments")

        exp_id1 = exp_inst_id1.to_experiment_id()
        exp_id2 = exp_inst_id2.to_experiment_id()

        session = self.session_maker()
        try:
            self.resources_manager.add_resource(session, Resource("pld_local", "instance"))
            self.resources_manager.add_resource(session, Resource("pld_remote", "instance"))
            self.resources_manager.add_resource(session, Resource("fpga_remote", "instance"))
            session.commit()
        finally:
            session.close()

        self.resources_manager.add_experiment_instance_id("laboratory1:WL_SERVER1@WL_MACHINE1", exp_inst_id1, Resource("pld_local",  "instance"))
        self.resources_manager.add_experiment_instance_id("laboratory1:WL_SERVER1@WL_MACHINE1", exp_inst_id1b, Resource("pld_remote", "instance"))
        self.resources_manager.add_experiment_instance_id("laboratory1:WL_SERVER1@WL_MACHINE1", exp_inst_id2, Resource("fpga_remote", "instance"))

        reservation1 = 'reservation1'
        reservation2 = 'reservation2'

        self.resources_manager.associate_scheduler_to_reservation(reservation1, exp_id1, 'pld_local')
        self.resources_manager.associate_scheduler_to_reservation(reservation1, exp_id1, 'pld_remote')
        self.resources_manager.associate_scheduler_to_reservation(reservation2, exp_id2, 'fpga_remote')

        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(reservation1, exp_id1)
        self.assertEquals(set(('pld_local','pld_remote')), set(resource_type_names))
        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(reservation2, exp_id2)
        self.assertEquals(['fpga_remote'], list(resource_type_names))

        self.resources_manager.dissociate_scheduler_from_reservation(reservation1, exp_id1, 'pld_remote')
        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(reservation1, exp_id1)
        self.assertEquals(['pld_local'], list(resource_type_names))

        self.resources_manager.clean_associations_for_reservation(reservation1, exp_id1)

        resource_type_names = self.resources_manager.retrieve_schedulers_per_reservation(reservation1, exp_id1)
        self.assertEquals(0, len(resource_type_names))
示例#28
0
    def test_free_experiment_success(self):
        mock_laboratory = self.mocker.mock()
        mock_laboratory.free_experiment('lab_session_id')

        self.mock_locator[coord_addr(self.lab_address)]
        self.mocker.result(mock_laboratory)

        self.mocker.replay()
        self.confirmer.enqueue_free_experiment(
            self.lab_address, '5', 'lab_session_id',
            ExperimentInstanceId('inst1', 'exp1', 'cat1'))
        self.confirmer._free_handler.join()
示例#29
0
    def test_add_experiment_instance_id(self):

        self.assertEquals([], self.resources_manager.list_resources())

        exp_id = ExperimentInstanceId("exp1", "ud-pld", "PLD Experiments")

        self.resources_manager.add_experiment_instance_id(
            "laboratory1:WL_SERVER1@WL_MACHINE1", exp_id,
            Resource("type", "instance"))

        self._check_resource_added()
        self._check_experiment_instance_id_added()
示例#30
0
    def remove_resource_instance(self, resource):
        client = self._redis_maker()

        weblab_resource = WEBLAB_RESOURCE % resource.resource_type
        if client.srem(weblab_resource, resource.resource_instance):
            # else it did not exist
            weblab_resource_instance_experiments = WEBLAB_RESOURCE_INSTANCE_EXPERIMENTS % (resource.resource_type, resource.resource_instance)
            experiment_instances = client.smembers(weblab_resource_instance_experiments) or []
            client.delete(weblab_resource_instance_experiments)
            for experiment_instance in experiment_instances:
                experiment_instance_id = ExperimentInstanceId.parse(experiment_instance)
                self.remove_resource_instance_id(experiment_instance_id)
示例#31
0
    def list_experiment_instance_ids_by_resource(self, resource):
        client = self._redis_maker()

        experiment_instance_ids = []

        weblab_resource_instance_experiments = WEBLAB_RESOURCE_INSTANCE_EXPERIMENTS % (resource.resource_type, resource.resource_instance)
        current_members = client.smembers(weblab_resource_instance_experiments) or []
        for member in current_members:
            experiment_instance_id = ExperimentInstanceId.parse(member)
            experiment_instance_ids.append(experiment_instance_id)

        return experiment_instance_ids
 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',
                         'servexp:inst@mach'))
     self.lab_mock.resolve_experiment_address('my_lab_session_id')
     self.mocker.result(CoordAddress.CoordAddress("exp", "inst", "mach"))
     self.lab_mock.should_experiment_finish(
         SessionId.SessionId('my_lab_session_id'))
     self.mocker.result(0)
     self.mocker.replay()
示例#33
0
    def list_experiment_instance_ids_by_resource(self, resource):
        client = self._redis_maker()

        experiment_instance_ids = []

        weblab_resource_instance_experiments = WEBLAB_RESOURCE_INSTANCE_EXPERIMENTS % (resource.resource_type, resource.resource_instance)
        current_members = client.smembers(weblab_resource_instance_experiments) or []
        for member in current_members:
            experiment_instance_id = ExperimentInstanceId.parse(member)
            experiment_instance_ids.append(experiment_instance_id)

        return experiment_instance_ids
示例#34
0
    def remove_resource_instance(self, resource):
        client = self._redis_maker()

        weblab_resource = WEBLAB_RESOURCE % resource.resource_type
        if client.srem(weblab_resource, resource.resource_instance):
            # else it did not exist
            weblab_resource_instance_experiments = WEBLAB_RESOURCE_INSTANCE_EXPERIMENTS % (resource.resource_type, resource.resource_instance)
            experiment_instances = client.smembers(weblab_resource_instance_experiments) or []
            client.delete(weblab_resource_instance_experiments)
            for experiment_instance in experiment_instances:
                experiment_instance_id = ExperimentInstanceId.parse(experiment_instance)
                self.remove_resource_instance_id(experiment_instance_id)
    def list_experiment_instance_ids(self):
        experiment_instance_ids = []
        for category_name in self._experiments:
            experiments = self._experiments[category_name]
            for experiment_name in experiments:
                instances = experiments[experiment_name]
                for instance_name in instances:
                    exp_instance_id = ExperimentInstanceId(
                        instance_name, experiment_name, category_name)
                    experiment_instance_ids.append(exp_instance_id)

        return experiment_instance_ids
    def test_remove_resource_instance(self):
        exp_id = ExperimentInstanceId("exp1","ud-pld","PLD Experiments")
        resource_instance = Resource("type", "instance")
        self.resources_manager.add_experiment_instance_id("laboratory1:WL_SERVER1@WL_MACHINE1", exp_id, resource_instance)

        # Checking that the resources are there
        experiment_instances = self.resources_manager.list_experiment_instances_by_type(exp_id.to_experiment_id())
        self.assertEquals(1, len(experiment_instances))
        resource_instances = self.resources_manager.list_resource_instances()
        self.assertEquals(1, len(resource_instances))

        # Removing resource instance
        self.resources_manager.remove_resource_instance(resource_instance)

        # Checking that the resources are not there, neither the experiment instances
        resource_instances = self.resources_manager.list_resource_instances()
        self.assertEquals(0, len(resource_instances))
        experiment_instances = self.resources_manager.list_experiment_instances_by_type(exp_id.to_experiment_id())
        self.assertEquals(0, len(experiment_instances))