Exemplo n.º 1
0
    def test_observatory_structure(self):
        c = self.client

        c2 = DotDict()
        c2.resource_registry = self.client.RR

        instrument_site_impl = InstrumentSiteImpl(c2)
        platform_site_impl = PlatformSiteImpl(c2)
        platform_agent_impl = PlatformAgentImpl(c2)
        instrument_device_impl = InstrumentDeviceImpl(c2)
        sensor_device_impl = SensorDeviceImpl(c2)

        #generate a function that finds direct associations, using the more complex one in the service
        def gen_find_oms_association(output_type):
            def freeze():
                def finder_fun(obj_id):
                    ret = c.OMS.find_related_frames_of_reference(
                        obj_id, [output_type])
                    return ret[output_type]

                return finder_fun

            return freeze()

        #resource_ids = self._low_level_init()

        ###############################################
        #
        # Assumptions or Order of Events for R2 Preloaded resources
        #
        # - orgs
        # - sites
        # - models
        # - agents
        # - devices
        # - instances
        # - attachments
        #
        ###############################################

        ###############################################
        #
        # orgs
        #
        ###############################################

        ###############################################
        #
        # sites
        #
        ###############################################

        log.info("Create an observatory")
        observatory_id = self.generic_fcruf_script(RT.Observatory,
                                                   "observatory",
                                                   self.client.OMS, True)

        log.info("Create a subsite")
        subsite_id = self.generic_fcruf_script(RT.Subsite, "subsite",
                                               self.client.OMS, True)

        log.info("Create a platform site")
        platform_site_id = self.generic_fcruf_script(RT.PlatformSite,
                                                     "platform_site",
                                                     self.client.OMS, True)

        log.info("Create instrument site")
        instrument_site_id = self.generic_fcruf_script(RT.InstrumentSite,
                                                       "instrument_site",
                                                       self.client.OMS, True)

        ###############################################
        #
        # models
        #
        ###############################################

        log.info("Create a platform model")
        platform_model_id = self.generic_fcruf_script(RT.PlatformModel,
                                                      "platform_model",
                                                      self.client.IMS, True)

        log.info("Create instrument model")
        instrument_model_id = self.generic_fcruf_script(
            RT.InstrumentModel, "instrument_model", self.client.IMS, True)

        log.info("Create sensor model")
        sensor_model_id = self.generic_fcruf_script(RT.SensorModel,
                                                    "sensor_model",
                                                    self.client.IMS, True)

        ###############################################
        #
        # agents
        #
        ###############################################

        log.info("Create platform agent")
        platform_agent_id = self.generic_fcruf_script(RT.PlatformAgent,
                                                      "platform_agent",
                                                      self.client.IMS, False)

        log.info("Create instrument agent")
        instrument_agent_id = self.generic_fcruf_script(
            RT.InstrumentAgent, "instrument_agent", self.client.IMS, False)

        ###############################################
        #
        # devices
        #
        ###############################################

        log.info("Create a platform device")
        platform_device_id = self.generic_fcruf_script(RT.PlatformDevice,
                                                       "platform_device",
                                                       self.client.IMS, False)
        log.info("Create an instrument device")
        instrument_device_id = self.generic_fcruf_script(
            RT.InstrumentDevice, "instrument_device", self.client.IMS, False)

        log.info("Create a sensor device")
        sensor_device_id = self.generic_fcruf_script(RT.SensorDevice,
                                                     "sensor_device",
                                                     self.client.IMS, False)

        ###############################################
        #
        # instances
        #
        ###############################################

        ###############################################
        #
        #
        # attachments and LCS stuff
        #
        #
        ###############################################

        #----------------------------------------------
        #
        # orgs
        #
        #----------------------------------------------

        #----------------------------------------------
        #
        # sites
        #
        #----------------------------------------------

        log.info("Associate subsite with observatory")
        self.generic_association_script(
            c.OMS.assign_site_to_site,
            gen_find_oms_association(RT.Observatory),
            gen_find_oms_association(RT.Subsite), observatory_id, subsite_id)

        log.info("Associate platform site with subsite")
        self.generic_association_script(
            c.OMS.assign_site_to_site, gen_find_oms_association(RT.Subsite),
            gen_find_oms_association(RT.PlatformSite), subsite_id,
            platform_site_id)

        log.info("Associate instrument site with platform site")
        self.generic_association_script(
            c.OMS.assign_site_to_site,
            gen_find_oms_association(RT.PlatformSite),
            gen_find_oms_association(RT.InstrumentSite), platform_site_id,
            instrument_site_id)

        #----------------------------------------------
        #
        # models
        #
        #----------------------------------------------

        log.info("Associate platform model with platform site")
        self.generic_association_script(
            c.OMS.assign_platform_model_to_platform_site,
            platform_site_impl.find_having_model,
            platform_site_impl.find_stemming_model, platform_site_id,
            platform_model_id)

        log.info("Associate instrument model with instrument site")
        self.generic_association_script(
            c.OMS.assign_instrument_model_to_instrument_site,
            instrument_site_impl.find_having_model,
            instrument_site_impl.find_stemming_model, instrument_site_id,
            instrument_model_id)

        #----------------------------------------------
        #
        # agents
        #
        # - model required for DEVELOP
        # - egg required for INTEGRATE
        # - certification required for DEPLOY
        #----------------------------------------------

        self.generic_lcs_pass(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.PLAN, LCS.PLANNED)
        self.generic_lcs_fail(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.DEVELOP)
        log.info("Associate platform model with platform agent")
        self.generic_association_script(
            c.IMS.assign_platform_model_to_platform_agent,
            platform_agent_impl.find_having_model,
            platform_agent_impl.find_stemming_model, platform_agent_id,
            platform_model_id)
        self.generic_lcs_pass(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.DEVELOP, LCS.DEVELOPED)
        self.generic_lcs_fail(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.INTEGRATE)
        add_keyworded_attachment(self.client.RR, platform_agent_id,
                                 [KeywordFlag.EGG_URL])
        self.generic_lcs_pass(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.INTEGRATE, LCS.INTEGRATED)
        self.generic_lcs_fail(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.DEPLOY)
        add_keyworded_attachment(
            self.client.RR, platform_agent_id,
            [KeywordFlag.CERTIFICATION, "platform attachment"])
        self.generic_lcs_pass(self.client.IMS, "platform_agent",
                              platform_agent_id, LCE.DEPLOY, LCS.DEPLOYED)

        self.generic_lcs_pass(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.PLAN, LCS.PLANNED)
        self.generic_lcs_fail(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.DEVELOP)
        log.info("Associate instrument model with instrument agent")
        self.generic_association_script(
            c.IMS.assign_instrument_model_to_instrument_agent,
            c.IMS.find_instrument_agent_by_instrument_model,
            c.IMS.find_instrument_model_by_instrument_agent,
            instrument_agent_id, instrument_model_id)
        self.generic_lcs_pass(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.DEVELOP, LCS.DEVELOPED)
        self.generic_lcs_fail(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.INTEGRATE)
        add_keyworded_attachment(self.client.RR, instrument_agent_id,
                                 [KeywordFlag.EGG_URL])
        self.generic_lcs_pass(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.INTEGRATE,
                              LCS.INTEGRATED)
        self.generic_lcs_fail(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.DEPLOY)
        add_keyworded_attachment(self.client.RR, instrument_agent_id,
                                 [KeywordFlag.CERTIFICATION])
        self.generic_lcs_pass(self.client.IMS, "instrument_agent",
                              instrument_agent_id, LCE.DEPLOY, LCS.DEPLOYED)

        #platform instrument DELETEME just for find/replace

        #----------------------------------------------
        #
        # devices
        #
        #----------------------------------------------

        log.info("Associate platform model with platform device")
        self.generic_association_script(
            c.IMS.assign_platform_model_to_platform_device,
            c.IMS.find_platform_device_by_platform_model,
            c.IMS.find_platform_model_by_platform_device, platform_device_id,
            platform_model_id)

        log.info("Associate platform device with platform site")
        self.generic_association_script(
            c.OMS.assign_device_to_site, platform_site_impl.find_having_device,
            platform_site_impl.find_stemming_device, platform_site_id,
            platform_device_id)

        log.info("Associate instrument model with instrument device")
        self.generic_association_script(
            c.IMS.assign_instrument_model_to_instrument_device,
            c.IMS.find_instrument_device_by_instrument_model,
            c.IMS.find_instrument_model_by_instrument_device,
            instrument_device_id, instrument_model_id)

        log.info("Associate instrument device with instrument site")
        self.generic_association_script(
            c.OMS.assign_device_to_site,
            instrument_site_impl.find_having_device,
            instrument_site_impl.find_stemming_device, instrument_site_id,
            instrument_device_id)

        log.info("Associate instrument device with platform device")
        self.generic_association_script(
            c.IMS.assign_instrument_device_to_platform_device,
            c.IMS.find_platform_device_by_instrument_device,
            c.IMS.find_instrument_device_by_platform_device,
            platform_device_id, instrument_device_id)

        log.info("Associate sensor model with sensor device")
        self.generic_association_script(
            c.IMS.assign_sensor_model_to_sensor_device,
            sensor_device_impl.find_having_model,
            sensor_device_impl.find_stemming_model, sensor_device_id,
            sensor_model_id)

        log.info("Associate sensor device with instrument device")
        self.generic_association_script(
            c.IMS.assign_sensor_device_to_instrument_device,
            instrument_device_impl.find_having_device,
            instrument_device_impl.find_stemming_device, instrument_device_id,
            sensor_device_id)

        #----------------------------------------------
        #
        # instances
        #
        #----------------------------------------------

        #generic find ops for whatever

        log.info("Find an instrument site by observatory")

        entities = c.OMS.find_related_frames_of_reference(
            observatory_id, [RT.InstrumentSite])
        self.assertIn(RT.InstrumentSite, entities)
        inst_sites = entities[RT.InstrumentSite]
        self.assertEqual(1, len(inst_sites))
        self.assertEqual(instrument_site_id, inst_sites[0]._id)