def test_multiple_process_pre_conditions(self): hello1 = self.container.spawn_process('hello_service1','examples.service.hello_service','HelloService' ) self.addCleanup(self.container.terminate_process, hello1) hello2 = self.container.spawn_process('hello_service2','examples.service.hello_service','HelloService' ) self.addCleanup(self.container.terminate_process, hello2) hello3 = self.container.spawn_process('hello_service3','examples.service.hello_service','HelloService' ) #self.addCleanup(self.container.terminate_process, hello3) client = HelloServiceProcessClient(node=self.container.node, process=self.gov_client) actor_id='anonymous' text='mytext 123' actor_headers = get_actor_header(actor_id) ret = client.hello(text, headers=actor_headers) self.assertIn(text, ret) with self.assertRaises(Unauthorized) as cm: ret = client.noop(text=text) self.assertIn('The noop operation has been denied', cm.exception.message) self.container.terminate_process(hello3) with self.assertRaises(Unauthorized) as cm: ret = client.noop(text=text) self.assertIn('The noop operation has been denied', cm.exception.message)
def hello_noop(container, actor_id='anonymous', text='mytext 123'): try: client = HelloServiceProcessClient(node=container.node, process=FakeProcess()) actor_headers = get_actor_header(actor_id) ret = client.noop(text, headers=actor_headers) except Exception, e: print "client.hello() failed: " + e.message
def hello_noop(container, actor_id='anonymous', text='mytext 123'): try: client = HelloServiceProcessClient(node=container.node, process=FakeProcess()) actor_headers = get_actor_header(actor_id) ret = client.noop(text, headers=actor_headers) except Exception ,e: print "client.hello() failed: " + e.message
def hello_client(container, actor_id='anonymous', text='mytext 123'): try: client = HelloServiceProcessClient(node=container.node, process=FakeProcess()) actor_headers = get_actor_header(actor_id) ret = client.hello(text, headers=actor_headers) print "Returned: " + str(ret) ret = client.hello('second message text', headers=actor_headers) print "Returned: " + str(ret) ret = client.noop(text='third message text', headers=actor_headers) print "Returned" except Exception as e: print "client.hello() failed: " + e.message
def test_multiple_process_pre_conditions(self): hello1 = self.container.spawn_process( 'hello_service1', 'ion.service.examples.hello_service', 'HelloService') self.addCleanup(self.container.terminate_process, hello1) hello2 = self.container.spawn_process( 'hello_service2', 'ion.service.examples.hello_service', 'HelloService') self.addCleanup(self.container.terminate_process, hello2) hello3 = self.container.spawn_process( 'hello_service3', 'ion.service.examples.hello_service', 'HelloService') #self.addCleanup(self.container.terminate_process, hello3) client = HelloServiceProcessClient(process=self.gov_client) actor_id = 'anonymous' text = 'mytext 123' actor_headers = get_actor_header(actor_id) ret = client.hello(text, headers=actor_headers) self.assertIn(text, ret) with self.assertRaises(Unauthorized) as cm: ret = client.noop(text=text) self.assertIn('The noop operation has been denied', cm.exception.message) self.container.terminate_process(hello3) with self.assertRaises(Unauthorized) as cm: ret = client.noop(text=text) self.assertIn('The noop operation has been denied', cm.exception.message)
def test_get_actor_header(self): #Setup data actor = IonObject(RT.ActorIdentity, name='actor1') actor_id, _ = self.rr.create(actor) ion_org = IonObject(RT.Org, name='ION', org_governance_name='ION') ion_org_id, _ = self.rr.create(ion_org) ion_org._id = ion_org_id manager_role = IonObject(RT.UserRole, name='Org Manager', governance_name=ORG_MANAGER_ROLE, description='Org Manager') manager_role_id = self.add_user_role(ion_org, manager_role) member_role = IonObject(RT.UserRole, name='Org Member', governance_name=ORG_MEMBER_ROLE, description='Org Member') # all actors have a defaul org_member_role actor_roles = find_roles_by_actor(actor_id) self.assertDictEqual(actor_roles, {'ION': [ORG_MEMBER_ROLE]}) actor_header = get_actor_header(actor_id) self.assertDictEqual(actor_header, {'ion-actor-id': actor_id, 'ion-actor-roles': {'ION': [ORG_MEMBER_ROLE]}}) #Add Org Manager Role self.rr.create_association(actor_id, PRED.hasRole, manager_role_id) actor_roles = find_roles_by_actor(actor_id) role_header = get_role_message_headers({'ION': [manager_role, member_role]}) self.assertDictEqual(actor_roles, role_header) org2 = IonObject(RT.Org, name='Org 2', org_governance_name='Second_Org') org2_id, _ = self.rr.create(org2) org2._id = org2_id member2_role = IonObject(RT.UserRole, governance_name=ORG_MEMBER_ROLE, name='Org Member', description='Org Member') member2_role_id = self.add_user_role(org2, member2_role) operator2_role = IonObject(RT.UserRole, governance_name='INSTRUMENT_OPERATOR', name='Instrument Operator', description='Instrument Operator') operator2_role_id = self.add_user_role(org2, operator2_role) self.rr.create_association(actor_id, PRED.hasRole, member2_role_id) self.rr.create_association(actor_id, PRED.hasRole, operator2_role_id) actor_roles = find_roles_by_actor(actor_id) role_header = get_role_message_headers({'ION': [manager_role, member_role], 'Second_Org': [operator2_role, member2_role]}) self.assertEqual(len(actor_roles), 2) self.assertEqual(len(role_header), 2) self.assertIn('Second_Org', actor_roles) self.assertIn('Second_Org', role_header) self.assertEqual(len(actor_roles['Second_Org']), 2) self.assertEqual(len(role_header['Second_Org']), 2) self.assertIn('INSTRUMENT_OPERATOR', actor_roles['Second_Org']) self.assertIn('INSTRUMENT_OPERATOR', role_header['Second_Org']) self.assertIn(ORG_MEMBER_ROLE, actor_roles['Second_Org']) self.assertIn(ORG_MEMBER_ROLE, role_header['Second_Org']) self.assertIn('ION', actor_roles) self.assertIn('ION', role_header) self.assertIn(ORG_MANAGER_ROLE, actor_roles['ION']) self.assertIn(ORG_MEMBER_ROLE, actor_roles['ION']) self.assertIn(ORG_MANAGER_ROLE, role_header['ION']) self.assertIn(ORG_MEMBER_ROLE, role_header['ION']) actor_header = get_actor_header(actor_id) self.assertEqual(actor_header['ion-actor-id'], actor_id) self.assertEqual(actor_header['ion-actor-roles'], actor_roles) #Now make sure we can change the name of the Org and not affect the headers org2 = self.rr.read(org2_id) org2.name = 'Updated Org 2' org2_id, _ = self.rr.update(org2) actor_roles = find_roles_by_actor(actor_id) self.assertEqual(len(actor_roles), 2) self.assertEqual(len(role_header), 2) self.assertIn('Second_Org', actor_roles) self.assertIn('Second_Org', role_header) self.assertEqual(len(actor_roles['Second_Org']), 2) self.assertEqual(len(role_header['Second_Org']), 2) self.assertIn('INSTRUMENT_OPERATOR', actor_roles['Second_Org']) self.assertIn('INSTRUMENT_OPERATOR', role_header['Second_Org']) self.assertIn(ORG_MEMBER_ROLE, actor_roles['Second_Org']) self.assertIn(ORG_MEMBER_ROLE, role_header['Second_Org']) self.assertIn('ION', actor_roles) self.assertIn('ION', role_header) self.assertIn(ORG_MANAGER_ROLE, actor_roles['ION']) self.assertIn(ORG_MEMBER_ROLE, actor_roles['ION']) self.assertIn(ORG_MANAGER_ROLE, role_header['ION']) self.assertIn(ORG_MEMBER_ROLE, role_header['ION']) actor_header = get_actor_header(actor_id) self.assertEqual(actor_header['ion-actor-id'], actor_id) self.assertEqual(actor_header['ion-actor-roles'], actor_roles)
def test_observatory_org_extended(self): stuff = self._make_associations() parsed_pdict_id = self.dataset_management.read_parameter_dictionary_by_name('ctd_parsed_param_dict', id_only=True) parsed_stream_def_id = self.pubsubcli.create_stream_definition(name='parsed', parameter_dictionary_id=parsed_pdict_id) tdom, sdom = time_series_domain() sdom = sdom.dump() tdom = tdom.dump() dp_obj = IonObject(RT.DataProduct, name='the parsed data', description='ctd stream test', temporal_domain = tdom, spatial_domain = sdom) data_product_id1 = self.dpclient.create_data_product(data_product=dp_obj, stream_definition_id=parsed_stream_def_id) self.damsclient.assign_data_product(input_resource_id=stuff.instrument_device_id, data_product_id=data_product_id1) #Create a user to be used as regular member member_actor_obj = IonObject(RT.ActorIdentity, name='org member actor') member_actor_id,_ = self.RR.create(member_actor_obj) assert(member_actor_id) member_actor_header = get_actor_header(member_actor_id) member_user_obj = IonObject(RT.UserInfo, name='org member user') member_user_id,_ = self.RR.create(member_user_obj) assert(member_user_id) self.RR.create_association(subject=member_actor_id, predicate=PRED.hasInfo, object=member_user_id) #Build the Service Agreement Proposal to enroll a user actor sap = IonObject(OT.EnrollmentProposal,consumer=member_actor_id, provider=stuff.org_id ) sap_response = self.org_management_service.negotiate(sap, headers=member_actor_header ) #enroll the member without using negotiation self.org_management_service.enroll_member(org_id=stuff.org_id, actor_id=member_actor_id) #-------------------------------------------------------------------------------- # Get the extended Site (platformSite) #-------------------------------------------------------------------------------- try: extended_site = self.OMS.get_site_extension(stuff.platform_site_id) except: log.error('failed to get extended site', exc_info=True) raise log.debug("extended_site: %r ", extended_site) self.assertEqual(1, len(extended_site.platform_devices)) self.assertEqual(1, len(extended_site.platform_models)) self.assertEqual(stuff.platform_device_id, extended_site.platform_devices[0]._id) self.assertEqual(stuff.platform_model_id, extended_site.platform_models[0]._id) log.debug("verify that PlatformDeviceb is linked to PlatformDevice with hasNetworkParent link") associations = self.RR.find_associations(subject=stuff.platform_deviceb_id, predicate=PRED.hasNetworkParent, object=stuff.platform_device_id, id_only=True) self.assertIsNotNone(associations, "PlatformDevice child not connected to PlatformDevice parent.") #-------------------------------------------------------------------------------- # Get the extended Org #-------------------------------------------------------------------------------- #test the extended resource extended_org = self.OMS.get_marine_facility_extension(stuff.org_id) log.debug("test_observatory_org_extended: extended_org: %s ", str(extended_org)) #self.assertEqual(2, len(extended_org.instruments_deployed) ) #self.assertEqual(1, len(extended_org.platforms_not_deployed) ) self.assertEqual(2, extended_org.number_of_platforms) self.assertEqual(2, len(extended_org.platform_models) ) self.assertEqual(2, extended_org.number_of_instruments) self.assertEqual(2, len(extended_org.instrument_models) ) self.assertEqual(1, len(extended_org.members)) self.assertNotEqual(extended_org.members[0]._id, member_actor_id) self.assertEqual(extended_org.members[0]._id, member_user_id) self.assertEqual(1, len(extended_org.open_requests)) self.assertTrue(len(extended_site.deployments)>0) self.assertEqual(len(extended_site.deployments), len(extended_site.deployment_info)) #test the extended resource of the ION org ion_org_id = self.org_management_service.find_org() extended_org = self.OMS.get_marine_facility_extension(ion_org_id._id, user_id=12345) log.debug("test_observatory_org_extended: extended_ION_org: %s ", str(extended_org)) self.assertEqual(1, len(extended_org.members)) self.assertEqual(0, extended_org.number_of_platforms) #self.assertEqual(1, len(extended_org.sites)) #-------------------------------------------------------------------------------- # Get the extended Site #-------------------------------------------------------------------------------- #create device state events to use for op /non-op filtering in extended t = get_ion_ts() self.event_publisher.publish_event( ts_created= t, event_type = 'ResourceAgentStateEvent', origin = stuff.instrument_device_id, state=ResourceAgentState.STREAMING ) self.event_publisher.publish_event( ts_created= t, event_type = 'ResourceAgentStateEvent', origin = stuff.instrument_device2_id, state=ResourceAgentState.INACTIVE ) extended_site = self.OMS.get_site_extension(stuff.instrument_site2_id) log.debug("test_observatory_org_extended: extended_site: %s ", str(extended_site)) self.dpclient.delete_data_product(data_product_id1)
def test_get_actor_header(self): #Setup data actor = IonObject(RT.ActorIdentity, name='actor1') actor_id, _ = self.rr.create(actor) ion_org = IonObject(RT.Org, name='ION', org_governance_name='ION') ion_org_id, _ = self.rr.create(ion_org) ion_org._id = ion_org_id manager_role = IonObject(RT.UserRole, name='Org Manager', governance_name=MODERATOR_ROLE, description='Org Manager') manager_role_id = self.add_org_role(ion_org, manager_role) member_role = IonObject(RT.UserRole, name='Org Member', governance_name=MEMBER_ROLE, description='Org Member') # all actors have a defaul MEMBER_ROLE actor_roles = find_roles_by_actor(actor_id) self.assertDictEqual(actor_roles, {'ION': [MEMBER_ROLE]}) actor_header = get_actor_header(actor_id) self.assertDictEqual(actor_header, { 'ion-actor-id': actor_id, 'ion-actor-roles': { 'ION': [MEMBER_ROLE] } }) #Add Org Manager Role self.rr.create_association(actor_id, PRED.hasRole, manager_role_id) actor_roles = find_roles_by_actor(actor_id) role_header = get_role_message_headers( {'ION': [manager_role, member_role]}) self.assertDictEqual(actor_roles, role_header) org2 = IonObject(RT.Org, name='Org 2', org_governance_name='Second_Org') org2_id, _ = self.rr.create(org2) org2._id = org2_id member2_role = IonObject(RT.UserRole, governance_name=MEMBER_ROLE, name='Org Member', description='Org Member') member2_role_id = self.add_org_role(org2, member2_role) operator2_role = IonObject(RT.UserRole, governance_name='OPERATOR', name='Instrument Operator', description='Instrument Operator') operator2_role_id = self.add_org_role(org2, operator2_role) self.rr.create_association(actor_id, PRED.hasRole, member2_role_id) self.rr.create_association(actor_id, PRED.hasRole, operator2_role_id) actor_roles = find_roles_by_actor(actor_id) role_header = get_role_message_headers({ 'ION': [manager_role, member_role], 'Second_Org': [operator2_role, member2_role] }) self.assertEqual(len(actor_roles), 2) self.assertEqual(len(role_header), 2) self.assertIn('Second_Org', actor_roles) self.assertIn('Second_Org', role_header) self.assertEqual(len(actor_roles['Second_Org']), 2) self.assertEqual(len(role_header['Second_Org']), 2) self.assertIn('OPERATOR', actor_roles['Second_Org']) self.assertIn('OPERATOR', role_header['Second_Org']) self.assertIn(MEMBER_ROLE, actor_roles['Second_Org']) self.assertIn(MEMBER_ROLE, role_header['Second_Org']) self.assertIn('ION', actor_roles) self.assertIn('ION', role_header) self.assertIn(MODERATOR_ROLE, actor_roles['ION']) self.assertIn(MEMBER_ROLE, actor_roles['ION']) self.assertIn(MODERATOR_ROLE, role_header['ION']) self.assertIn(MEMBER_ROLE, role_header['ION']) actor_header = get_actor_header(actor_id) self.assertEqual(actor_header['ion-actor-id'], actor_id) self.assertEqual(actor_header['ion-actor-roles'], actor_roles) #Now make sure we can change the name of the Org and not affect the headers org2 = self.rr.read(org2_id) org2.name = 'Updated Org 2' org2_id, _ = self.rr.update(org2) actor_roles = find_roles_by_actor(actor_id) self.assertEqual(len(actor_roles), 2) self.assertEqual(len(role_header), 2) self.assertIn('Second_Org', actor_roles) self.assertIn('Second_Org', role_header) self.assertEqual(len(actor_roles['Second_Org']), 2) self.assertEqual(len(role_header['Second_Org']), 2) self.assertIn('OPERATOR', actor_roles['Second_Org']) self.assertIn('OPERATOR', role_header['Second_Org']) self.assertIn(MEMBER_ROLE, actor_roles['Second_Org']) self.assertIn(MEMBER_ROLE, role_header['Second_Org']) self.assertIn('ION', actor_roles) self.assertIn('ION', role_header) self.assertIn(MODERATOR_ROLE, actor_roles['ION']) self.assertIn(MEMBER_ROLE, actor_roles['ION']) self.assertIn(MODERATOR_ROLE, role_header['ION']) self.assertIn(MEMBER_ROLE, role_header['ION']) actor_header = get_actor_header(actor_id) self.assertEqual(actor_header['ion-actor-id'], actor_id) self.assertEqual(actor_header['ion-actor-roles'], actor_roles)
def test_observatory_org_extended(self): self.patch_cfg(CFG["container"], {"extended_resources": { "strip_results": False }}) stuff = self._make_associations() parsed_pdict_id = self.dataset_management.read_parameter_dictionary_by_name( 'ctd_parsed_param_dict', id_only=True) parsed_stream_def_id = self.pubsubcli.create_stream_definition( name='parsed', parameter_dictionary_id=parsed_pdict_id) dp_obj = IonObject(RT.DataProduct, name='the parsed data', description='ctd stream test') data_product_id1 = self.dpclient.create_data_product( data_product=dp_obj, stream_definition_id=parsed_stream_def_id) self.damsclient.assign_data_product( input_resource_id=stuff.instrument_device_id, data_product_id=data_product_id1) #Create a user to be used as regular member member_actor_obj = IonObject(RT.ActorIdentity, name='org member actor') member_actor_id, _ = self.RR.create(member_actor_obj) assert (member_actor_id) member_actor_header = get_actor_header(member_actor_id) member_user_obj = IonObject(RT.UserInfo, name='org member user') member_user_id, _ = self.RR.create(member_user_obj) assert (member_user_id) self.RR.create_association(subject=member_actor_id, predicate=PRED.hasInfo, object=member_user_id) #Build the Service Agreement Proposal to enroll a user actor sap = IonObject(OT.EnrollmentProposal, consumer=member_actor_id, provider=stuff.org_id) sap_response = self.org_management_service.negotiate( sap, headers=member_actor_header) #enroll the member without using negotiation self.org_management_service.enroll_member(org_id=stuff.org_id, actor_id=member_actor_id) #-------------------------------------------------------------------------------- # Get the extended Site (platformSite) #-------------------------------------------------------------------------------- try: extended_site = self.OMS.get_site_extension(stuff.platform_site_id) except: log.error('failed to get extended site', exc_info=True) raise log.debug("extended_site: %r ", extended_site) self.assertEquals(stuff.subsiteb_id, extended_site.parent_site._id) self.assertEqual(2, len(extended_site.sites)) self.assertEqual(2, len(extended_site.platform_devices)) self.assertEqual(2, len(extended_site.platform_models)) self.assertIn(stuff.platform_device_id, [o._id for o in extended_site.platform_devices]) self.assertIn( stuff.platform_model_id, [o._id for o in extended_site.platform_models if o is not None]) log.debug( "verify that PlatformDeviceb is linked to PlatformDevice with hasNetworkParent link" ) associations = self.RR.find_associations( subject=stuff.platform_deviceb_id, predicate=PRED.hasNetworkParent, object=stuff.platform_device_id, id_only=True) self.assertIsNotNone( associations, "PlatformDevice child not connected to PlatformDevice parent.") #-------------------------------------------------------------------------------- # Get the extended Org #-------------------------------------------------------------------------------- #test the extended resource extended_org = self.OMS.get_marine_facility_extension(stuff.org_id) log.debug("test_observatory_org_extended: extended_org: %s ", str(extended_org)) #self.assertEqual(2, len(extended_org.instruments_deployed) ) #self.assertEqual(1, len(extended_org.platforms_not_deployed) ) self.assertEqual(2, extended_org.number_of_platforms) self.assertEqual(2, len(extended_org.platform_models)) self.assertEqual(2, extended_org.number_of_instruments) self.assertEqual(2, len(extended_org.instrument_models)) self.assertEqual(1, len(extended_org.members)) self.assertNotEqual(extended_org.members[0]._id, member_actor_id) self.assertEqual(extended_org.members[0]._id, member_user_id) self.assertEqual(1, len(extended_org.open_requests)) self.assertTrue(len(extended_site.deployments) > 0) self.assertEqual(len(extended_site.deployments), len(extended_site.deployment_info)) self.assertEqual(1, extended_org.number_of_assets) self.assertEqual(1, extended_org.number_of_asset_types) self.assertEqual(1, extended_org.number_of_event_durations) self.assertEqual(1, extended_org.number_of_event_duration_types) #test the extended resource of the ION org ion_org_id = self.org_management_service.find_org() extended_org = self.OMS.get_marine_facility_extension(ion_org_id._id, user_id=12345) log.debug("test_observatory_org_extended: extended_ION_org: %s ", str(extended_org)) self.assertEqual(1, len(extended_org.members)) self.assertEqual(0, extended_org.number_of_platforms) #self.assertEqual(1, len(extended_org.sites)) #-------------------------------------------------------------------------------- # Get the extended Site #-------------------------------------------------------------------------------- #create device state events to use for op /non-op filtering in extended t = get_ion_ts() self.event_publisher.publish_event( ts_created=t, event_type='ResourceAgentStateEvent', origin=stuff.instrument_device_id, state=ResourceAgentState.STREAMING) self.event_publisher.publish_event( ts_created=t, event_type='ResourceAgentStateEvent', origin=stuff.instrument_device2_id, state=ResourceAgentState.INACTIVE) extended_site = self.OMS.get_site_extension(stuff.instrument_site2_id) log.debug("test_observatory_org_extended: extended_site: %s ", str(extended_site)) self.dpclient.delete_data_product(data_product_id1)