def test_rr_create_with_id(self):
        res_obj1 = IonObject(RT.ActorIdentity)

        newid = uuid.uuid4().hex
        rid1, _ = self.rr.create(res_obj1, object_id=newid)

        self.assertEqual(rid1, newid)

        res_list = [
            IonObject(RT.TestInstrument, name="ID1"),
            IonObject(RT.TestInstrument, name="ID2"),
            IonObject(RT.TestInstrument, name="ID3"),
        ]

        rid_list = self.rr.create_mult(res_list)
        self.assertEquals(len(rid_list), 3)

        owned_list, _ = self.rr.find_subjects(subject_type=RT.TestInstrument, predicate=PRED.hasOwner, object=rid1, id_only=True)
        self.assertEquals(len(owned_list), 0)

        self.rr.rr_store.delete_mult([rid for (rid, rrv) in rid_list])

        rid_list = self.rr.create_mult(res_list, actor_id=rid1)
        self.assertEquals(len(rid_list), 3)

        owned_list, _ = self.rr.find_subjects(subject_type=RT.TestInstrument, predicate=PRED.hasOwner, object=rid1, id_only=True)
        self.assertEquals(len(owned_list), 3)

        self.rr.rr_store.delete_mult([rid for (rid, rrv) in rid_list])
        self.rr.delete(rid1)
Example #2
0
    def test_get_resource_extension(self):


        #Testing multiple instrument owners
        subject1 = "/DC=org/DC=cilogon/C=US/O=ProtectNetwork/CN=Roger Unwin A254"

        actor_identity_obj1 = IonObject("ActorIdentity", {"name": subject1})
        user_id1,_ = self.rr.create(actor_identity_obj1)

        user_info_obj1 = IonObject("UserInfo", {"name": "Foo"})
        user_info_id1,_ = self.rr.create(user_info_obj1)
        self.rr.create_association(user_id1, PRED.hasInfo, user_info_id1)

        subject2 = "/DC=org/DC=cilogon/C=US/O=ProtectNetwork/CN=Bob Cumbers A256"

        actor_identity_obj2 = IonObject("ActorIdentity", {"name": subject2})
        user_id2,_ = self.rr.create(actor_identity_obj2)

        user_info_obj2 = IonObject("UserInfo", {"name": "Foo2"})
        user_info_id2,_ = self.rr.create(user_info_obj2)
        self.rr.create_association(user_id2, PRED.hasInfo, user_info_id2)

        test_obj = IonObject('InformationResource',  {"name": "TestResource"})
        test_obj_id,_ = self.rr.create(test_obj)
        self.rr.create_association(test_obj_id, PRED.hasOwner, user_id1)
        self.rr.create_association(test_obj_id, PRED.hasOwner, user_id2)

        extended_resource = self.rr.get_resource_extension(test_obj_id, 'ExtendedInformationResource')

        self.assertEqual(test_obj_id,extended_resource._id)
        self.assertEqual(len(extended_resource.owners),2)

        extended_resource_list = self.rr.get_resource_extension(str([user_info_id1,user_info_id2]), 'ExtendedInformationResource')
        self.assertEqual(len(extended_resource_list), 2)
Example #3
0
    def test_rr_read_assoc(self):
        res_obj1 = IonObject(RT.Org)
        rid1, _ = self.rr.create(res_obj1)

        res_obj2 = IonObject(RT.InstrumentDevice)
        rid2, _ = self.rr.create(res_obj2)

        with self.assertRaises(NotFound) as ex:
            read_obj2 = self.rr.read_object(rid1, PRED.hasResource)

        aid1, _ = self.rr.create_association(rid1, PRED.hasResource, rid2)

        read_obj2 = self.rr.read_object(rid1, PRED.hasResource)
        self.assertEquals(read_obj2._id, rid2)

        read_obj2 = self.rr.read_object(rid1, PRED.hasResource, id_only=True)
        self.assertEquals(read_obj2, rid2)

        read_obj2 = self.rr.read_object(assoc=aid1)
        self.assertEquals(read_obj2._id, rid2)

        read_obj1 = self.rr.read_subject(None, PRED.hasResource, rid2)
        self.assertEquals(read_obj1._id, rid1)

        read_obj1 = self.rr.read_subject(None,
                                         PRED.hasResource,
                                         rid2,
                                         id_only=True)
        self.assertEquals(read_obj1, rid1)

        read_obj1 = self.rr.read_subject(assoc=aid1)
        self.assertEquals(read_obj1._id, rid1)

        res_obj3 = IonObject(RT.InstrumentDevice)
        rid3, _ = self.rr.create(res_obj3)

        res_obj4 = IonObject(RT.Org)
        rid4, _ = self.rr.create(res_obj4)

        aid2, _ = self.rr.create_association(rid1, PRED.hasResource, rid3)

        aid3, _ = self.rr.create_association(rid4, PRED.hasResource, rid3)

        with self.assertRaises(Inconsistent) as ex:
            read_obj2 = self.rr.read_object(rid1, PRED.hasResource)

        with self.assertRaises(Inconsistent) as ex:
            read_obj1 = self.rr.read_subject(None, PRED.hasResource, rid3)

        res_obj5 = IonObject(RT.PlatformDevice)
        rid5, _ = self.rr.create(res_obj5)

        aid4, _ = self.rr.create_association(rid1, PRED.hasResource, rid5)

        read_obj5 = self.rr.read_object(rid1, PRED.hasResource,
                                        RT.PlatformDevice)
    def trigger_garbage_collection(self):
        """Triggers a garbage collection in all containers

        @throws BadRequest    None
        """
        self.perform_action(ALL_CONTAINERS_INSTANCE,
                            IonObject(OT.TriggerGarbageCollection))
    def reset_policy_cache(self, headers=None, timeout=None):
        """Clears and reloads the policy caches in all of the containers.

        @throws BadRequest    None
        """
        self.perform_action(ALL_CONTAINERS_INSTANCE,
                            IonObject(OT.ResetPolicyCache))
 def set_log_level(self, logger='', level='', recursive=False):
     self.perform_action(
         ALL_CONTAINERS_INSTANCE,
         IonObject(OT.ChangeLogLevel,
                   logger=logger,
                   level=level,
                   recursive=recursive))
Example #7
0
 def _create_resource(self, restype, name, *args, **kwargs):
     res_obj = IonObject(restype, dict(name=name, **kwargs))
     res_obj_res = self.data_store.create(res_obj,
                                          create_unique_resource_id())
     res_obj._id = res_obj_res[0]
     self.resources[name] = res_obj
     return res_obj_res[0]
Example #8
0
    def set_configuration(self, config):
        log.warn("DRIVER: set_configuration")
        """
        expect configuration to have:
        - parser module/class
        - directory, wildcard to find data files
        - optional timestamp of last granule
        - optional poll rate
        - publish info
        """
        log.error("Log level: %s", log.getEffectiveLevel())
        log.debug('using configuration: %s', config)
        self.config = config
        self.max_records = get_safe(config, 'max_records', 100)
        self.stream_config = self.CFG.get('stream_config', {})
        if len(self.stream_config) == 1:
            stream_cfg = self.stream_config.values()[0]
        elif len(self.stream_config) > 1:
            stream_cfg = self.stream_config.values()[0]

        stream_id = stream_cfg['stream_id']
        stream_route = IonObject(OT.StreamRoute,
                                 routing_key=stream_cfg['routing_key'],
                                 exchange_point=stream_cfg['exchange_point'])
        param_dict = stream_cfg['stream_def_dict']['parameter_dictionary']
        self.publisher = StandaloneStreamPublisher(stream_id=stream_id,
                                                   stream_route=stream_route)
        self.parameter_dictionary = ParameterDictionary.load(param_dict)
        self.time_field = self.parameter_dictionary.get_temporal_context()
        self.latest_granule_time = get_safe(config, 'last_time', 0)
Example #9
0
    def test_rr_create_with_id(self):
        res_obj1 = IonObject(RT.Org)

        newid = uuid.uuid4().hex
        rid1,_ = self.rr.create(res_obj1, object_id=newid)

        self.assertEqual(rid1, newid)
Example #10
0
    def test_garbage_collection_handler(self):
        """ initial log level for ion.process.event is INFO -- test we can change it to TRACE """

        #
        handler = pyon.container.management.GarbageCollectionHandler()
        action = IonObject(OT.TriggerGarbageCollection)
        handler.handle_request(action)
Example #11
0
    def _execute(self, cprefix, command):
        if not command:
            raise iex.BadRequest("execute argument 'command' not present")
        if not command.command:
            raise iex.BadRequest("command not set")

        cmd_res = IonObject("AgentCommandResult", command_id=command.command_id, command=command.command)
        cmd_func = getattr(self, cprefix + str(command.command), None)
        if cmd_func:
            cmd_res.ts_execute = get_ion_ts()
            try:
                res = cmd_func(*command.args, **command.kwargs)
                cmd_res.status = 0
                cmd_res.result = res
            except iex.IonException as ex:
                # TODO: Distinguish application vs. uncaught exception
                cmd_res.status = getattr(ex, 'status_code', -1)
                cmd_res.result = str(ex)
                log.warn("Agent command %s failed with trace=%s" % (command.command, traceback.format_exc()))
        else:
            log.info("Agent command not supported: %s" % (command.command))
            ex = iex.NotFound("Command not supported: %s" % command.command)
            cmd_res.status = iex.NotFound.status_code
            cmd_res.result = str(ex)

        sub_type = "%s.%s" % (command.command, cmd_res.status)
        post_event = self._event_publisher._create_event(event_type=self.COMMAND_EVENT_TYPE,
                                origin=self.resource_id, origin_type=self.ORIGIN_TYPE,
                                sub_type=sub_type, command=command, result=cmd_res)
        post_event = self._post_execute_event_hook(post_event)
        success = self._event_publisher._publish_event(post_event, origin=post_event.origin)

        return cmd_res
Example #12
0
 def get_resource_object(self,
                         my_resource_id,
                         resource_name='TestSystem_Resource'):
     '''
     Method used for testing
     '''
     return IonObject(RT.SystemResource, name=resource_name)
Example #13
0
    def xtest_policy_cache_handler(self):
        """ initial log level for ion.process.event is INFO -- test we can change it to TRACE """

        #
        handler = pyon.container.management.PolicyCacheHandler()
        action = IonObject(OT.ResetPolicyCache)
        handler.handle_request(action)
Example #14
0
    def test_read_negotiation(self):

        negotiation_handler = Negotiation(self)

        with self.assertRaises(BadRequest) as cm:
            negotiation_handler.read_negotiation()
        self.assertIn(
            'The sap parameter must be a valid Service Agreement Proposal object',
            cm.exception.message)

        sap = IonObject(OT.EnrollmentProposal,
                        consumer=self.actor_identity._id,
                        provider=self.org._id)

        with self.assertRaises(BadRequest) as cm:
            negotiation_handler.read_negotiation(sap)
        self.assertIn(
            'The Service Agreement Proposal object (sap) is missing a negotiation_id value',
            cm.exception.message)

        negotiation = Mock()
        negotiation._id = '456'

        sap.negotiation_id = negotiation._id

        self.mock_read.return_value = negotiation

        neg_obj = negotiation_handler.read_negotiation(sap)

        self.assertEqual(neg_obj, negotiation)
Example #15
0
    def test_get_valid_org_commitment(self):
        from pyon.util.containers import get_ion_ts_millis

        # create ION org and an actor
        ion_org = IonObject(RT.Org, name='ION')
        ion_org_id, _ = self.rr.create(ion_org)
        ion_org._id = ion_org_id
        actor = IonObject(RT.ActorIdentity, name='actor1')
        actor_id, _ = self.rr.create(actor)
        device = IonObject(RT.TestDevice, name="device1")
        device_id, _ = self.rr.create(device)

        # create an expired commitment in the org
        ts = get_ion_ts_millis() - 50000
        com_obj = IonObject(RT.Commitment,
                            provider=ion_org_id,
                            consumer=actor_id,
                            commitment=True,
                            expiration=ts)
        com_id, _ = self.rr.create(com_obj)
        self.rr.create_association(ion_org_id, PRED.hasCommitment, com_id)
        c = get_valid_principal_commitments(ion_org_id, actor_id)
        # verify that the commitment is not returned
        self.assertIsNone(c)

        self.rr.create_association(com_id, PRED.hasTarget, device_id)
        c = get_valid_resource_commitments(device_id, actor_id)
        # verify that the commitment is not returned
        self.assertIsNone(c)

        # create a commitment that has not expired yet
        ts = get_ion_ts_millis() + 50000
        com_obj = IonObject(RT.Commitment,
                            provider=ion_org_id,
                            consumer=actor_id,
                            commitment=True,
                            expiration=ts)
        com_id, _ = self.rr.create(com_obj)
        self.rr.create_association(ion_org_id, PRED.hasCommitment, com_id)
        c = get_valid_principal_commitments(ion_org_id, actor_id)
        # verify that the commitment is returned
        self.assertIsNotNone(c)

        self.rr.create_association(com_id, PRED.hasTarget, device_id)
        c = get_valid_resource_commitments(device_id, actor_id)
        # verify that the commitment is not returned
        self.assertIsNotNone(c)
Example #16
0
 def create_test_col(level=0, ot=dict, no_ion=False):
     if level == 0:
         return get_value(0, 15, uvals)
     if ot == dict:
         res_dict = {}
         num_kinds = 1 if do_ion and no_ion else (1 if do_dict else 0) + (
             1 if do_list else 0)
         for i in xrange(breadth / num_kinds):
             if do_ion and not no_ion:
                 key = get_key()
                 res_obj = IonObject(restype,
                                     name="TestObject %s.%s" % (level, key))
                 res_obj.addl = create_test_col(level - 1,
                                                dict,
                                                no_ion=True)
                 res_dict[key] = res_obj
             else:
                 if do_dict:
                     res_dict[get_key()] = create_test_col(level - 1, dict)
                 if do_list:
                     res_dict[get_key()] = create_test_col(level - 1, list)
         return res_dict
     elif ot == list:
         res_list = []
         num_kinds = 1 if do_ion and no_ion else (1 if do_dict else 0) + (
             1 if do_list else 0)
         for i in xrange(breadth / num_kinds):
             if do_ion and not no_ion:
                 res_obj = IonObject(restype,
                                     name="TestObject %s.%s" %
                                     (level, random.randint(1000, 9999)))
                 res_obj.addl = create_test_col(level - 1,
                                                dict,
                                                no_ion=True)
                 res_list.append(res_obj)
             else:
                 if do_dict:
                     res_list.append(create_test_col(level - 1, dict))
                 if do_list:
                     res_list.append(create_test_col(level - 1, list))
         return res_list
     elif ot == "IonObject":
         res_obj = IonObject(restype,
                             name="TestObject %s.%s" %
                             (level, random.randint(1000, 9999)))
         return res_obj
Example #17
0
    def test_get_sytsem_actor_header(self):
        actor = IonObject(RT.ActorIdentity, name='ionsystem')

        actor_id, _ = self.rr.create(actor)

        system_actor_header = get_system_actor_header()
        self.assertDictEqual(system_actor_header['ion-actor-roles'],
                             {'ION': [MEMBER_ROLE]})
Example #18
0
 def fun():
     #ret = Mock()
     self.log.debug("Creating sample %s" % impl.iontype)
     ret = IonObject(impl.iontype)
     ret.name = "sample %s" % impl.iontype
     ret.description = "description of sample %s" % impl.iontype
     for k, v in resource_params.iteritems():
         setattr(ret, k, v)
     return ret
Example #19
0
 def svcmethod(self, *args, **kwargs):
     assert len(
         args
     ) == 0, "You MUST used named keyword args when calling a dynamically generated remote method"  # we have no way of getting correct order
     headers = kwargs.pop(
         'headers', None
     )  # pull headers off, cannot put this in the signature due to *args for ordering
     ionobj = IonObject(in_obj, **kwargs)
     return self.request(ionobj, op=name, headers=headers)
Example #20
0
    def set_computed_attributes(self, res_container, computed_resource_type,
                                ext_exclude):

        if not computed_resource_type or computed_resource_type is None:
            return

        res_container.computed = IonObject(computed_resource_type)

        self.set_object_field_values(res_container.computed,
                                     res_container.resource, ext_exclude)
    def on_init(self):
        IonObject("Resource")  # suppress pyflakes error

        self.override_clients(self.clients)

        self.init_module_uploader()

        self.get_unique_id = (lambda: uuid4().hex)

        self.data_product_management = DataProductManagementServiceClient()
Example #22
0
    def set_computed_attributes(self, res_container, computed_resource_type, ext_exclude, **kwargs):
        """
        Creates the specified ComputedAttributes object if given and iterate over the fields
        to set the computed values.
        """
        if not computed_resource_type or computed_resource_type is None:
            return

        res_container.computed = IonObject(computed_resource_type)

        self.set_object_field_values(res_container.computed, res_container.resource, ext_exclude, **kwargs)
Example #23
0
    def obtain_agent_calculation(self, device_id, result_container):
        ret = IonObject(result_container)

        h_agent, reason = self.get_device_agent(device_id)
        if None is h_agent:
            ret.status = ComputedValueAvailability.NOTAVAILABLE
            ret.reason = reason
        else:
            ret.status = ComputedValueAvailability.PROVIDED

        return h_agent, ret
Example #24
0
    def test_logging_handler(self):
        """ initial log level for ion.process.event is INFO -- test we can change it to TRACE """
        config.replace_configuration(os.path.join(TEST_DIR, 'logging.yml'))
        log.debug('this should probably not be logged')

        self.assertFalse(log.isEnabledFor(TRACE))
        #
        handler = pyon.container.management.LogLevelHandler()
        action = IonObject(OT.ChangeLogLevel, logger='pyon.container', level='TRACE')
        handler.handle_request(action)
        #
        self.assertTrue(log.isEnabledFor(TRACE))
Example #25
0
    def create_role_request(self, org_id, user_id, role_name):

        request_object = IonObject(RT.RoleRequest,
                                   name='Role Request',
                                   org_id=org_id,
                                   user_id=user_id,
                                   role_name=role_name,
                                   status="Initialized",
                                   description='%s Role Request at %s' %
                                   (user_id, str(now)))

        return request_object
Example #26
0
    def create_enrollment_request(self, org_id, user_id):

        request_object = IonObject(
            RT.EnrollmentRequest,
            name='Enroll Request',
            org_id=org_id,
            user_id=user_id,
            status="Initialized",
            description='%s Org Enrollment Request at %s' %
            (user_id, str(now)))

        return request_object
Example #27
0
    def xtest_logging_root(self):
        """ initial root log level is WARN -- test that we can change it to ERROR """
        config.replace_configuration(os.path.join(TEST_DIR, 'logging.yml'))
        otherlog = logging.getLogger('pyon.container')

        self.assertTrue(otherlog.isEnabledFor(logging.WARN))
        #
        handler = pyon.container.management.LogLevelHandler()
        action = IonObject(OT.ChangeLogLevel, logger='pyon', level='ERROR')
        handler.handle_request(action)
        #
        self.assertFalse(otherlog.isEnabledFor(logging.WARN))
Example #28
0
    def test_encode_decode(self):
        obj = IonObject(RT.InstrumentDevice, name='SBE37IMDevice', description="SBE37IMDevice", serial_number="12345" )
        d = self.subject.encode(obj)
        print 'keys: ' + repr(d)
        self.assertFalse('_id' in d.keys())
        new_obj = self.subject.decode(d)
        self.assertEqual(obj, new_obj)
        d2 = self.subject.encode(new_obj, add_id=True)
        self.assertTrue('_id' in d2.keys(), msg=repr(d2.keys()))

        # retains key once added
        d3 = self.subject.encode(self.subject.decode(d2))
        self.assertTrue('_id' in d3.keys())
Example #29
0
    def create_acquire_resource(self, org_id, user_id, resource_id):

        request_object = IonObject(
            RT.ResourceRequest,
            name='Acquire Resource Request',
            org_id=org_id,
            user_id=user_id,
            resource_id=resource_id,
            status="Initialized",
            description='%s Acquire Resource Request at %s' %
            (user_id, str(now)))

        return request_object
Example #30
0
    def test_validate(self):
        obj = self.registry.new('SampleObject')
        self.name = 'monkey'
        self.int = 1
        obj._validate()

        obj.name = 3
        self.assertRaises(AttributeError, obj._validate)

        # TEST: setattr validation
        obj.name = 'monkey'
        with self.assertRaises(AttributeError):
            obj.extra_field = 5

        # TEST: Validate of object inheritance
        taskable_resource = self.registry.new('TaskableResource')
        taskable_resource.name = "Fooy"
        obj.abstract_val = taskable_resource
        self.assertRaises(AttributeError, obj._validate)
        
        exec_res = self.registry.new('ExecutableResource')
        exec_res.name = "Fooy"
        obj.abstract_val = exec_res
        obj._validate()

        # TEST: Validate of object inheritance in message objects
        from interface.messages import resource_registry_create_in
        msg_obj = resource_registry_create_in()
        msg_obj.object = IonObject("Resource", name="foo")
        msg_obj._validate()

        msg_obj.object = IonObject("InformationResource", name="foo")
        msg_obj._validate()

        msg_obj.object = IonObject("TestInstrument", name="foo")
        msg_obj._validate()

        msg_obj.object = IonObject("Association")
        self.assertRaises(AttributeError, msg_obj._validate)