class UserNotificationIntTest(IonIntegrationTestCase): def setUp(self): self._start_container() self.container.start_rel_from_url('res/deploy/r2dm.yml') self.unsc = UserNotificationServiceClient(node=self.container.node) self.rrc = ResourceRegistryServiceClient(node=self.container.node) self.imc = IdentityManagementServiceClient(node=self.container.node) def xtest_find_event_types_for_resource(self): dataset_object = IonObject(RT.DataSet, name="dataset1") dataset_id, version = self.rrc.create(dataset_object) events = self.unsc.find_event_types_for_resource(dataset_id) log.debug("dataset events = " + str(events)) try: events = self.unsc.find_event_types_for_resource("bogus_id") self.fail("failed to detect non-existant resource") except: pass def test_create_two_user_notifications(self): user_identty_object = IonObject(RT.UserIdentity, name="user1") user_id = self.imc.create_user_identity(user_identty_object) user_info_object = IonObject(RT.UserInfo, {"name":"user1_info", "contact":{"email":'*****@*****.**'}}) self.imc.create_user_info(user_id, user_info_object) notification_object = IonObject(RT.NotificationRequest, {"name":"notification1", "origin_list":['Some_Resource_Agent_ID1'], "events_list":['resource_lifecycle']}) self.unsc.create_notification(notification_object, user_id) notification_object = IonObject(RT.NotificationRequest, {"name":"notification2", "origin_list":['Some_Resource_Agent_ID2'], "events_list":['data']}) self.unsc.create_notification(notification_object, user_id) def test_delete_user_notifications(self): user_identty_object = IonObject(RT.UserIdentity, name="user1") user_id = self.imc.create_user_identity(user_identty_object) user_info_object = IonObject(RT.UserInfo, {"name":"user1_info", "contact":{"email":'*****@*****.**'}}) self.imc.create_user_info(user_id, user_info_object) notification_object1 = IonObject(RT.NotificationRequest, {"name":"notification1", "origin_list":['Some_Resource_Agent_ID1'], "events_list":['resource_lifecycle']}) notification1_id = self.unsc.create_notification(notification_object1, user_id) notification_object2 = IonObject(RT.NotificationRequest, {"name":"notification2", "origin_list":['Some_Resource_Agent_ID2'], "events_list":['data']}) notification2_id = self.unsc.create_notification(notification_object2, user_id) self.unsc.delete_notification(notification1_id) self.unsc.delete_notification(notification2_id) def test_find_user_notifications(self): user_identty_object = IonObject(RT.UserIdentity, name="user1") user_id = self.imc.create_user_identity(user_identty_object) user_info_object = IonObject(RT.UserInfo, {"name":"user1_info", "contact":{"email":'*****@*****.**'}}) self.imc.create_user_info(user_id, user_info_object) notification_object = IonObject(RT.NotificationRequest, {"name":"notification1", "origin_list":['Some_Resource_Agent_ID1'], "events_list":['resource_lifecycle']}) self.unsc.create_notification(notification_object, user_id) notification_object = IonObject(RT.NotificationRequest, {"name":"notification2", "origin_list":['Some_Resource_Agent_ID2'], "events_list":['data']}) self.unsc.create_notification(notification_object, user_id) notifications = self.unsc.find_notifications_by_user(user_id) for n in notifications: log.debug("n = " +str(n)) def test_update_user_notification(self): user_identty_object = IonObject(RT.UserIdentity, name="user1") user_id = self.imc.create_user_identity(user_identty_object) user_info_object = IonObject(RT.UserInfo, {"name":"user1_info", "contact":{"email":'*****@*****.**'}}) self.imc.create_user_info(user_id, user_info_object) notification_object = IonObject(RT.NotificationRequest, {"name":"notification1", "origin_list":['Some_Resource_Agent_ID1'], "events_list":['resource_lifecycle']}) notification_id = self.unsc.create_notification(notification_object, user_id) notification = self.rrc.read(notification_id) notification.origin_list = ['Some_Resource_Agent_ID5'] self.unsc.update_notification(notification) def test_send_notification_emails(self): user_identty_object = IonObject(RT.UserIdentity, name="user1") user_id = self.imc.create_user_identity(user_identty_object) user_info_object = IonObject(RT.UserInfo, {"name":"user1_info", "contact":{"email":'*****@*****.**'}}) self.imc.create_user_info(user_id, user_info_object) notification_object = IonObject(RT.NotificationRequest, {"name":"notification1", "origin_list":['Some_Resource_Agent_ID1'], "events_list":['resource_lifecycle']}) self.unsc.create_notification(notification_object, user_id) notification_object = IonObject(RT.NotificationRequest, {"name":"notification2", "origin_list":['Some_Resource_Agent_ID2'], "events_list":['data']}) self.unsc.create_notification(notification_object, user_id) rle_publisher = ResourceLifecycleEventPublisher() rle_publisher.create_and_publish_event(origin='Some_Resource_Agent_ID1', description="RLE test event") de_publisher = DataEventPublisher() de_publisher.create_and_publish_event(origin='Some_Resource_Agent_ID2', description="DE test event") gevent.sleep(1) def test_find_events(self): rle_publisher = ResourceLifecycleEventPublisher(event_repo=self.container.event_repository) rle_publisher.create_and_publish_event(origin='Some_Resource_Agent_ID1', description="RLE test event1") rle_publisher.create_and_publish_event(origin='Some_Resource_Agent_ID1', description="RLE test event2") de_publisher = DataEventPublisher(event_repo=self.container.event_repository) de_publisher.create_and_publish_event(origin='Some_Resource_Agent_ID2', description="DE test event1") de_publisher.create_and_publish_event(origin='Some_Resource_Agent_ID2', description="DE test event2") events = self.unsc.find_events(origin='Some_Resource_Agent_ID1') for event in events: log.debug("event=" + str(event)) events = self.unsc.find_events(type='DataEvent') for event in events: log.debug("event=" + str(event))
class TestIdentityManagementServiceInt(IonIntegrationTestCase): def setUp(self): self.subject = "/DC=org/DC=cilogon/C=US/O=ProtectNetwork/CN=Roger Unwin A254" # Start container self._start_container() # Establish endpoint with container container_client = ContainerAgentClient(node=self.container.node, name=self.container.name) container_client.start_rel_from_url('res/deploy/r2coi.yml') self.identity_management_service = IdentityManagementServiceClient(node=self.container.node) def test_user_identity(self): user_identity_obj = IonObject("UserIdentity", {"name": self.subject}) user_id = self.identity_management_service.create_user_identity(user_identity_obj) user_identity = self.identity_management_service.read_user_identity(user_id) user_identity.name = 'Updated subject' self.identity_management_service.update_user_identity(user_identity) self.identity_management_service.delete_user_identity(user_id) with self.assertRaises(NotFound) as cm: self.identity_management_service.read_user_identity(user_id) self.assertTrue("does not exist" in cm.exception.message) with self.assertRaises(NotFound) as cm: self.identity_management_service.delete_user_identity(user_id) self.assertTrue("does not exist" in cm.exception.message) def test_user_credentials(self): user_identity_obj = IonObject("UserIdentity", {"name": self.subject}) user_id = self.identity_management_service.create_user_identity(user_identity_obj) user_credentials_obj = IonObject("UserCredentials", {"name": self.subject}) self.identity_management_service.register_user_credentials(user_id, user_credentials_obj) with self.assertRaises(NotFound) as cm: self.identity_management_service.unregister_user_credentials("bad", self.subject) self.assertTrue("does not exist" in cm.exception.message) with self.assertRaises(NotFound) as cm: self.identity_management_service.unregister_user_credentials(user_id, "bad") self.assertTrue("does not exist" in cm.exception.message) with self.assertRaises(NotFound) as cm: self.identity_management_service.unregister_user_credentials('bad', 'bad') self.assertTrue("does not exist" in cm.exception.message) self.identity_management_service.unregister_user_credentials(user_id, self.subject) self.identity_management_service.delete_user_identity(user_id) def test_user_info(self): user_identity_obj = IonObject("UserIdentity", {"name": self.subject}) user_id = self.identity_management_service.create_user_identity(user_identity_obj) user_credentials_obj = IonObject("UserCredentials", {"name": self.subject}) self.identity_management_service.register_user_credentials(user_id, user_credentials_obj) user_info_obj = IonObject("UserInfo", {"name": "Foo"}) user_info = self.identity_management_service.create_user_info(user_id, user_info_obj) with self.assertRaises(Conflict) as cm: self.identity_management_service.create_user_info(user_id, user_info_obj) self.assertTrue("UserInfo already exists for user id" in cm.exception.message) user_info_obj = self.identity_management_service.find_user_info_by_id(user_id) user_info_obj = self.identity_management_service.find_user_info_by_name("Foo") user_info_obj = self.identity_management_service.find_user_info_by_subject(self.subject) user_info_obj = self.identity_management_service.read_user_info(user_info) user_info_obj.name = 'Jane Doe' self.identity_management_service.update_user_info(user_info_obj) self.identity_management_service.delete_user_info(user_info) with self.assertRaises(NotFound) as cm: self.identity_management_service.read_user_info(user_info) self.assertTrue('does not exist' in cm.exception.message) with self.assertRaises(NotFound) as cm: self.identity_management_service.delete_user_info(user_info) self.assertTrue('does not exist' in cm.exception.message) with self.assertRaises(NotFound) as cm: self.identity_management_service.find_user_info_by_name("John Doe") self.assertEqual(cm.exception.message, 'UserInfo with name John Doe does not exist') with self.assertRaises(NotFound) as cm: self.identity_management_service.find_user_info_by_subject("Bogus subject") self.assertEqual(cm.exception.message, "UserCredentials with subject Bogus subject does not exist") self.identity_management_service.unregister_user_credentials(user_id, self.subject) self.identity_management_service.delete_user_identity(user_id) def test_signon(self): certificate = """-----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgICBQAwDQYJKoZIhvcNAQEFBQAwajETMBEGCgmSJomT8ixkARkWA29yZzEX MBUGCgmSJomT8ixkARkWB2NpbG9nb24xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdDSUxvZ29uMRsw GQYDVQQDExJDSUxvZ29uIEJhc2ljIENBIDEwHhcNMTAxMTE4MjIyNTA2WhcNMTAxMTE5MTAzMDA2 WjBvMRMwEQYKCZImiZPyLGQBGRMDb3JnMRcwFQYKCZImiZPyLGQBGRMHY2lsb2dvbjELMAkGA1UE BhMCVVMxFzAVBgNVBAoTDlByb3RlY3ROZXR3b3JrMRkwFwYDVQQDExBSb2dlciBVbndpbiBBMjU0 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6QhsWxhUXbIxg+1ZyEc7d+hIGvchVmtb g0kKLmivgoVsA4U7swNDRH6svW242THta0oTf6crkRx7kOKg6jma2lcAC1sjOSddqX7/92ChoUPq 7LWt2T6GVVA10ex5WAeB/o7br/Z4U8/75uCBis+ru7xEDl09PToK20mrkcz9M4HqIv1eSoPkrs3b 2lUtQc6cjuHRDU4NknXaVMXTBHKPM40UxEDHJueFyCiZJFg3lvQuSsAl4JL5Z8pC02T8/bODBuf4 dszsqn2SC8YDw1xrujvW2Bd7Q7BwMQ/gO+dZKM1mLJFpfEsR9WrjMeg6vkD2TMWLMr0/WIkGC8u+ 6M6SMQIDAQABo4HdMIHaMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgSwMBMGA1UdJQQMMAoG CCsGAQUFBwMCMBgGA1UdIAQRMA8wDQYLKwYBBAGCkTYBAgEwagYDVR0fBGMwYTAuoCygKoYoaHR0 cDovL2NybC5jaWxvZ29uLm9yZy9jaWxvZ29uLWJhc2ljLmNybDAvoC2gK4YpaHR0cDovL2NybC5k b2Vncmlkcy5vcmcvY2lsb2dvbi1iYXNpYy5jcmwwHwYDVR0RBBgwFoEUaXRzYWdyZWVuMUB5YWhv by5jb20wDQYJKoZIhvcNAQEFBQADggEBAEYHQPMY9Grs19MHxUzMwXp1GzCKhGpgyVKJKW86PJlr HGruoWvx+DLNX75Oj5FC4t8bOUQVQusZGeGSEGegzzfIeOI/jWP1UtIjzvTFDq3tQMNvsgROSCx5 CkpK4nS0kbwLux+zI7BWON97UpMIzEeE05pd7SmNAETuWRsHMP+x6i7hoUp/uad4DwbzNUGIotdK f8b270icOVgkOKRdLP/Q4r/x8skKSCRz1ZsRdR+7+B/EgksAJj7Ut3yiWoUekEMxCaTdAHPTMD/g Mh9xL90hfMJyoGemjJswG5g3fAdTP/Lv0I6/nWeH/cLjwwpQgIEjEAVXl7KHuzX5vPD/wqQ= -----END CERTIFICATE-----""" id, valid_until, registered = self.identity_management_service.signon(certificate, True) self.assertFalse(registered) id2, valid_until2, registered2 = self.identity_management_service.signon(certificate, True) self.assertFalse(registered2) self.assertTrue(id == id2) self.assertTrue(valid_until == valid_until2) user_info_obj = IonObject("UserInfo", {"name": "Foo"}) self.identity_management_service.create_user_info(id, user_info_obj) id3, valid_until3, registered3 = self.identity_management_service.signon(certificate, True) self.assertTrue(registered3) self.assertTrue(id == id3) self.assertTrue(valid_until == valid_until3)