def test_event(self): ev = event.Event(eventType='activity', id=identifier.generate_uuid(), eventTime=timestamp.get_utc_now(), initiator=resource.Resource(typeURI='storage'), initiatorId=identifier.generate_uuid(), action='read', target=resource.Resource(typeURI='storage'), targetId=identifier.generate_uuid(), observer='target', outcome='success', reason=reason.Reason(reasonType='HTTP', reasonCode='200'), severity='high') ev.add_measurement(measurement.Measurement(result='100')) ev.add_tag(tag.generate_name_value_tag('name', 'val')) ev.add_attachment(attachment.Attachment(typeURI='attachURI', content='content', name='attachment_name')) ev.observer = resource.Resource(typeURI='service/security') ev.add_reporterstep(reporterstep.Reporterstep( role='observer', reporter=resource.Resource(typeURI='service/security'))) ev.add_reporterstep(reporterstep.Reporterstep( reporterId=identifier.generate_uuid())) dict_ev = ev.as_dict() for key in event.EVENT_KEYNAMES: self.assertIn(key, dict_ev)
def _create_event(self, req): correlation_id = identifier.generate_uuid() action = self.get_action(req) initiator = ClientResource( typeURI=taxonomy.ACCOUNT_USER, id=req.environ.get('HTTP_X_USER_ID', taxonomy.UNKNOWN), name=req.environ.get('HTTP_X_USER_NAME', taxonomy.UNKNOWN), host=host.Host(address=req.client_addr, agent=req.user_agent), credential=KeystoneCredential( token=req.environ.get('HTTP_X_AUTH_TOKEN', ''), identity_status=req.environ.get('HTTP_X_IDENTITY_STATUS', taxonomy.UNKNOWN)), project_id=req.environ.get('HTTP_X_PROJECT_ID', taxonomy.UNKNOWN)) target = self.get_target_resource(req) event = factory.EventFactory().new_event( eventType=cadftype.EVENTTYPE_ACTIVITY, outcome=taxonomy.OUTCOME_PENDING, action=action, initiator=initiator, target=target, observer=resource.Resource(id='target')) event.requestPath = req.path_qs event.add_tag(tag.generate_name_value_tag('correlation_id', correlation_id)) return event
def test_credential(self): cred = credential.Credential(type='auth token', token=identifier.generate_uuid()) self.assertEqual(cred.is_valid(), True) dict_cred = cred.as_dict() for key in credential.CRED_KEYNAMES: self.assertIn(key, dict_cred)
def _create_event(self, req): correlation_id = identifier.generate_uuid() action = self._cadf_audit.get_action(req) initiator = ClientResource( typeURI=taxonomy.ACCOUNT_USER, id=identifier.norm_ns(str(req.environ['HTTP_X_USER_ID'])), name=req.environ['HTTP_X_USER_NAME'], host=host.Host(address=req.client_addr, agent=req.user_agent), credential=KeystoneCredential( token=req.environ['HTTP_X_AUTH_TOKEN'], identity_status=req.environ['HTTP_X_IDENTITY_STATUS']), project_id=identifier.norm_ns(req.environ['HTTP_X_PROJECT_ID'])) target = self._cadf_audit.get_target_resource(req) event = factory.EventFactory().new_event( eventType=cadftype.EVENTTYPE_ACTIVITY, outcome=taxonomy.OUTCOME_PENDING, action=action, initiator=initiator, target=target, observer=resource.Resource(id='target')) event.requestPath = req.path_qs event.add_tag(tag.generate_name_value_tag('correlation_id', correlation_id)) # cache model in request to allow tracking of transistive steps. req.environ['cadf_event'] = event return event
def _create_event(self, req): correlation_id = identifier.generate_uuid() action = self._cadf_audit.get_action(req) initiator = ClientResource( typeURI=taxonomy.ACCOUNT_USER, id=identifier.norm_ns(str(req.environ['HTTP_X_USER_ID'])), name=req.environ['HTTP_X_USER_NAME'], host=host.Host(address=req.client_addr, agent=req.user_agent), credential=KeystoneCredential( token=req.environ['HTTP_X_AUTH_TOKEN'], identity_status=req.environ['HTTP_X_IDENTITY_STATUS']), project_id=identifier.norm_ns(req.environ['HTTP_X_PROJECT_ID'])) target = self._cadf_audit.get_target_resource(req) event = factory.EventFactory().new_event( eventType=cadftype.EVENTTYPE_ACTIVITY, outcome=taxonomy.OUTCOME_PENDING, action=action, initiator=initiator, target=target, observer=resource.Resource(id='target')) event.requestPath = req.path_qs event.add_tag( tag.generate_name_value_tag('correlation_id', correlation_id)) # cache model in request to allow tracking of transistive steps. req.environ['cadf_event'] = event return event
def test_metric(self): metric_val = metric.Metric(metricId=identifier.generate_uuid(), unit='b', name='bytes') dict_metric_val = metric_val.as_dict() for key in metric.METRIC_KEYNAMES: self.assertIn(key, dict_metric_val)
def test_cadfabstracttype_attribute_error(self): """Test an invalid CADFAbstractType attribute is set returns False""" h = host.Host(id=identifier.generate_uuid(), address='192.168.0.1', agent='client', platform='AIX') self.assertEqual(False, h._isset(uuid.uuid4().hex))
def test_cadfabstracttype_attribute_error(self): """Test an invalid CADFAbstractType attribute is set returns False""" h = host.Host(id=identifier.generate_uuid(), address='192.168.0.1', agent='client', platform='AIX') self.assertEqual(h._isset(uuid.uuid4().hex), False)
def test_host(self): h = host.Host(id=identifier.generate_uuid(), address='192.168.0.1', agent='client', platform='AIX') dict_host = h.as_dict() for key in host.HOST_KEYNAMES: self.assertIn(key, dict_host)
def __init__( self, id=None, typeURI=cadftaxonomy.UNKNOWN, name=None, ref=None, domain=None, credential=None, host=None, geolocation=None, geolocationId=None, ): """Resource data type :param id: id of resource :param typeURI: typeURI of resource, defaults to 'unknown' if not set :param name: name of resource :param domain: domain to qualify name of resource :param credential: optional security Credential data type :param host: optional Host data type information relating to resource :param geolocation: optional CADF Geolocation of resource :param geolocationId: optional id of CADF Geolocation for resource """ # Resource.id setattr(self, RESOURCE_KEYNAME_ID, id or identifier.generate_uuid()) # Resource.typeURI if getattr(self, RESOURCE_KEYNAME_ID) != "target" and getattr(self, RESOURCE_KEYNAME_ID) != "initiator": setattr(self, RESOURCE_KEYNAME_TYPEURI, typeURI) # Resource.name if name is not None: setattr(self, RESOURCE_KEYNAME_NAME, name) # Resource.ref if ref is not None: setattr(self, RESOURCE_KEYNAME_REF, ref) # Resource.domain if domain is not None: setattr(self, RESOURCE_KEYNAME_DOMAIN, domain) # Resource.credential if credential is not None: setattr(self, RESOURCE_KEYNAME_CRED, credential) # Resource.host if host is not None: setattr(self, RESOURCE_KEYNAME_HOST, host) # Resource.geolocation if geolocation is not None: setattr(self, RESOURCE_KEYNAME_GEO, geolocation) # Resource.geolocationId if geolocationId: setattr(self, RESOURCE_KEYNAME_GEOID, geolocationId)
def test_identifier(self, warning_mock): # empty string self.assertFalse(identifier.is_valid('')) # generated uuid self.assertTrue(identifier.is_valid(identifier.generate_uuid())) self.assertFalse(warning_mock.called) # any string self.assertTrue(identifier.is_valid('blah')) self.assertTrue(warning_mock.called)
def test_reason(self): reason_val = reason.Reason(reasonType='HTTP', reasonCode='200', policyType='poltype', policyId=identifier.generate_uuid()) dict_reason_val = reason_val.as_dict() for key in reason.REASON_KEYNAMES: self.assertIn(key, dict_reason_val)
def test_host(self): h = host.Host(id=identifier.generate_uuid(), address='192.168.0.1', agent='client', platform='AIX') self.assertEqual(h.is_valid(), True) dict_host = h.as_dict() for key in host.HOST_KEYNAMES: self.assertIn(key, dict_host)
def _certificate_resource(fingerprint): if fingerprint is None: res_id = identifier.generate_uuid() else: res_id = "certificate:%s" % (fingerprint, ) return resource.Resource( id=res_id, typeURI=cadftaxonomy.SECURITY_KEY, )
def test_resource(self): res = resource.Resource(typeURI='storage', name='res_name', domain='res_domain', ref='res_ref', credential=credential.Credential( token=identifier.generate_uuid()), host=host.Host(address='192.168.0.1'), geolocation=geolocation.Geolocation(), geolocationId=identifier.generate_uuid()) res.add_attachment(attachment.Attachment(typeURI='attachURI', content='content', name='attachment_name')) res.add_address(endpoint.Endpoint(url='http://192.168.0.1')) dict_res = res.as_dict() for key in resource.RESOURCE_KEYNAMES: self.assertIn(key, dict_res)
def _certificate_resource(fingerprint): if fingerprint is None: res_id = identifier.generate_uuid() else: res_id = "certificate:%s" % (fingerprint,) return resource.Resource( id=res_id, typeURI=cadftaxonomy.SECURITY_KEY, )
def test_metric(self): metric_val = metric.Metric(metricId=identifier.generate_uuid(), unit='b', name='bytes') self.assertEqual(metric_val.is_valid(), True) dict_metric_val = metric_val.as_dict() for key in metric.METRIC_KEYNAMES: self.assertIn(key, dict_metric_val)
def append_audit_event(self, req): """Append a CADF event to req.environ['CADF_EVENT'] Also, stores model in request for future process and includes a CADF correlation id. """ correlation_id = identifier.generate_uuid() req.environ['CADF_EVENT_CORRELATION_ID'] = correlation_id event = self.create_event(req, correlation_id) setattr(req, 'cadf_model', event) req.environ['CADF_EVENT'] = event.as_dict()
def test_measurement(self): measure_val = measurement.Measurement( result='100', metric=metric.Metric(), metricId=identifier.generate_uuid(), calculatedBy=resource.Resource(typeURI='storage')) dict_measure_val = measure_val.as_dict() for key in measurement.MEASUREMENT_KEYNAMES: self.assertIn(key, dict_measure_val)
def test_reporterstep(self): step = reporterstep.Reporterstep( role='modifier', reporter=resource.Resource(typeURI='storage'), reporterId=identifier.generate_uuid(), reporterTime=timestamp.get_utc_now()) dict_step = step.as_dict() for key in reporterstep.REPORTERSTEP_KEYNAMES: self.assertIn(key, dict_step)
def test_reason(self): reason_val = reason.Reason(reasonType='HTTP', reasonCode='200', policyType='poltype', policyId=identifier.generate_uuid()) self.assertEqual(reason_val.is_valid(), True) dict_reason_val = reason_val.as_dict() for key in reason.REASON_KEYNAMES: self.assertIn(key, dict_reason_val)
def __init__(self, eventType=cadftype.EVENTTYPE_ACTIVITY, id=None, eventTime=None, action=cadftaxonomy.UNKNOWN, outcome=cadftaxonomy.UNKNOWN, initiator=None, initiatorId=None, target=None, targetId=None, severity=None, reason=None, observer=None, observerId=None): # Establish typeURI for the CADF Event data type # TODO(mrutkows): support extended typeURIs for Event subtypes setattr(self, EVENT_KEYNAME_TYPEURI, TYPE_URI_EVENT) # Event.eventType (Mandatory) setattr(self, EVENT_KEYNAME_EVENTTYPE, eventType) # Event.id (Mandatory) setattr(self, EVENT_KEYNAME_ID, id or identifier.generate_uuid()) # Event.eventTime (Mandatory) setattr(self, EVENT_KEYNAME_EVENTTIME, eventTime or timestamp.get_utc_now()) # Event.action (Mandatory) setattr(self, EVENT_KEYNAME_ACTION, action) # Event.outcome (Mandatory) setattr(self, EVENT_KEYNAME_OUTCOME, outcome) # Event.observer (Mandatory if no observerId) if observer is not None: setattr(self, EVENT_KEYNAME_OBSERVER, observer) # Event.observerId (Dependent) if observerId is not None: setattr(self, EVENT_KEYNAME_OBSERVERID, observerId) # Event.initiator (Mandatory if no initiatorId) if initiator is not None: setattr(self, EVENT_KEYNAME_INITIATOR, initiator) # Event.initiatorId (Dependent) if initiatorId is not None: setattr(self, EVENT_KEYNAME_INITIATORID, initiatorId) # Event.target (Mandatory if no targetId) if target is not None: setattr(self, EVENT_KEYNAME_TARGET, target) # Event.targetId (Dependent) if targetId is not None: setattr(self, EVENT_KEYNAME_TARGETID, targetId) # Event.severity (Optional) if severity is not None: setattr(self, EVENT_KEYNAME_SEVERITY, severity) # Event.reason (Optional) if reason is not None: setattr(self, EVENT_KEYNAME_REASON, reason)
def test_event_unique(self): ev = event.Event(eventType='activity', initiator=resource.Resource(typeURI='storage'), initiatorId=identifier.generate_uuid(), action='read', target=resource.Resource(typeURI='storage'), targetId=identifier.generate_uuid(), observer='target', outcome='success') time.sleep(1) ev2 = event.Event(eventType='activity', initiator=resource.Resource(typeURI='storage'), initiatorId=identifier.generate_uuid(), action='read', target=resource.Resource(typeURI='storage'), targetId=identifier.generate_uuid(), observer='target', outcome='success') self.assertNotEqual(ev.id, ev2.id) self.assertNotEqual(ev.eventTime, ev2.eventTime)
def test_resource(self): res = resource.Resource(typeURI='storage', name='res_name', domain='res_domain', ref='res_ref', credential=credential.Credential( token=identifier.generate_uuid()), host=host.Host(address='192.168.0.1'), geolocation=geolocation.Geolocation(), geolocationId=identifier.generate_uuid()) res.add_attachment(attachment.Attachment(typeURI='attachURI', content='content', name='attachment_name')) res.add_address(endpoint.Endpoint(url='http://192.168.0.1')) self.assertEqual(res.is_valid(), True) dict_res = res.as_dict() for key in resource.RESOURCE_KEYNAMES: self.assertIn(key, dict_res)
def __init__(self, metricId=None, unit=None, name=None): # Metric.id setattr(self, METRIC_KEYNAME_METRICID, metricId or identifier.generate_uuid()) # Metric.unit if unit is not None: setattr(self, METRIC_KEYNAME_UNIT, unit) # Metric.name if name is not None: setattr(self, METRIC_KEYNAME_NAME, name)
def test_geolocation(self): geo = geolocation.Geolocation(id=identifier.generate_uuid(), latitude='43.6481 N', longitude='79.4042 W', elevation='0', accuracy='1', city='toronto', state='ontario', regionICANN='ca') dict_geo = geo.as_dict() for key in geolocation.GEO_KEYNAMES: self.assertIn(key, dict_geo)
def test_reporterstep(self): step = reporterstep.Reporterstep( role='modifier', reporter=resource.Resource(typeURI='storage'), reporterId=identifier.generate_uuid(), reporterTime=timestamp.get_utc_now()) self.assertEqual(False, step.is_valid()) dict_step = step.as_dict() for key in reporterstep.REPORTERSTEP_KEYNAMES: self.assertIn(key, dict_step) step = reporterstep.Reporterstep( role='modifier', reporter=resource.Resource(typeURI='storage'), reporterTime=timestamp.get_utc_now()) self.assertEqual(True, step.is_valid()) step = reporterstep.Reporterstep(role='modifier', reporterId=identifier.generate_uuid(), reporterTime=timestamp.get_utc_now()) self.assertEqual(True, step.is_valid())
def test_geolocation(self): geo = geolocation.Geolocation(id=identifier.generate_uuid(), latitude='43.6481 N', longitude='79.4042 W', elevation='0', accuracy='1', city='toronto', state='ontario', regionICANN='ca') self.assertEqual(geo.is_valid(), True) dict_geo = geo.as_dict() for key in geolocation.GEO_KEYNAMES: self.assertIn(key, dict_geo)
def __init__(self, id=None, typeURI=cadftaxonomy.UNKNOWN, name=None, ref=None, domain=None, credential=None, host=None, geolocation=None, geolocationId=None): """Resource data type :param id: id of resource :param typeURI: typeURI of resource, defaults to 'unknown' if not set :param name: name of resource :param domain: domain to qualify name of resource :param credential: optional security Credential data type :param host: optional Host data type information relating to resource :param geolocation: optional CADF Geolocation of resource :param geolocationId: optional id of CADF Geolocation for resource """ # Resource.id setattr(self, RESOURCE_KEYNAME_ID, id or identifier.generate_uuid()) # Resource.typeURI if (getattr(self, RESOURCE_KEYNAME_ID) != "target" and getattr(self, RESOURCE_KEYNAME_ID) != "initiator"): setattr(self, RESOURCE_KEYNAME_TYPEURI, typeURI) # Resource.name if name is not None: setattr(self, RESOURCE_KEYNAME_NAME, name) # Resource.ref if ref is not None: setattr(self, RESOURCE_KEYNAME_REF, ref) # Resource.domain if domain is not None: setattr(self, RESOURCE_KEYNAME_DOMAIN, domain) # Resource.credential if credential is not None: setattr(self, RESOURCE_KEYNAME_CRED, credential) # Resource.host if host is not None: setattr(self, RESOURCE_KEYNAME_HOST, host) # Resource.geolocation if geolocation is not None: setattr(self, RESOURCE_KEYNAME_GEO, geolocation) # Resource.geolocationId if geolocationId: setattr(self, RESOURCE_KEYNAME_GEOID, geolocationId)
def test_measurement(self): measure_val = measurement.Measurement( result='100', metric=metric.Metric(), metricId=identifier.generate_uuid(), calculatedBy=resource.Resource(typeURI='storage')) self.assertEqual(measure_val.is_valid(), False) dict_measure_val = measure_val.as_dict() for key in measurement.MEASUREMENT_KEYNAMES: self.assertIn(key, dict_measure_val) measure_val = measurement.Measurement( result='100', metric=metric.Metric(), calculatedBy=resource.Resource(typeURI='storage')) self.assertEqual(measure_val.is_valid(), True) measure_val = measurement.Measurement( result='100', metricId=identifier.generate_uuid(), calculatedBy=resource.Resource(typeURI='storage')) self.assertEqual(measure_val.is_valid(), True)
def __init__(self, id=None, typeURI=cadftaxonomy.UNKNOWN, name=None, ref=None, domain=None, credential=None, host=None, geolocation=None, geolocationId=None): # Resource.id setattr(self, RESOURCE_KEYNAME_ID, id or identifier.generate_uuid()) # Resource.typeURI if (getattr(self, RESOURCE_KEYNAME_ID) != "target" and getattr(self, RESOURCE_KEYNAME_ID) != "initiator"): setattr(self, RESOURCE_KEYNAME_TYPEURI, typeURI) # Resource.name if name is not None: setattr(self, RESOURCE_KEYNAME_NAME, name) # Resource.ref if ref is not None: setattr(self, RESOURCE_KEYNAME_REF, ref) # Resource.domain if domain is not None: setattr(self, RESOURCE_KEYNAME_DOMAIN, domain) # Resource.credential if credential is not None: setattr(self, RESOURCE_KEYNAME_CRED, credential) # Resource.host if host is not None: setattr(self, RESOURCE_KEYNAME_HOST, host) # Resource.geolocation if geolocation is not None: setattr(self, RESOURCE_KEYNAME_GEO, geolocation) # Resource.geolocationId if geolocationId: setattr(self, RESOURCE_KEYNAME_GEOID, geolocationId)
def __init__(self, metricId=None, unit=None, name=None): """Create metric data type :param metricId: id of metric. uuid generated if not provided :param unit: unit of metric :param name: name of metric """ # Metric.id setattr(self, METRIC_KEYNAME_METRICID, metricId or identifier.generate_uuid()) # Metric.unit if unit is not None: setattr(self, METRIC_KEYNAME_UNIT, unit) # Metric.name if name is not None: setattr(self, METRIC_KEYNAME_NAME, name)
def test_federated_credential(self): cred = credential.FederatedCredential( token=identifier.generate_uuid(), type='http://docs.oasis-open.org/security/saml/v2.0', identity_provider=identifier.generate_uuid(), user=identifier.generate_uuid(), groups=[ identifier.generate_uuid(), identifier.generate_uuid(), identifier.generate_uuid()]) self.assertEqual(cred.is_valid(), True) dict_cred = cred.as_dict() for key in credential.FED_CRED_KEYNAMES: self.assertIn(key, dict_cred)
def test_identifier_generated_uuid(self, warning_mock): # generated uuid self.assertTrue(identifier.is_valid(identifier.generate_uuid())) self.assertFalse(warning_mock.called)
def __init__(self, eventType=cadftype.EVENTTYPE_ACTIVITY, id=None, eventTime=None, action=cadftaxonomy.UNKNOWN, outcome=cadftaxonomy.UNKNOWN, initiator=None, initiatorId=None, target=None, targetId=None, severity=None, reason=None, observer=None, observerId=None): """Create an Event :param eventType: eventType of Event. Defaults to 'activity' type :param id: id of event. will generate uuid if None :param eventTime: time of event. will take current utc if None :param action: event's action (see Action taxonomy) :param outcome: Event's outcome (see Outcome taxonomy) :param initiator: Event's Initiator Resource :param initiatorId: Event's Initiator Resource id :param target: Event's Target Resource :param targetId: Event's Target Resource id :param severity: domain-relative severity of Event :param reason: domain-specific Reason type :param observer: Event's Observer Resource :param observerId: Event's Observer Resource id """ # Establish typeURI for the CADF Event data type # TODO(mrutkows): support extended typeURIs for Event subtypes setattr(self, EVENT_KEYNAME_TYPEURI, TYPE_URI_EVENT) # Event.eventType (Mandatory) setattr(self, EVENT_KEYNAME_EVENTTYPE, eventType) # Event.id (Mandatory) setattr(self, EVENT_KEYNAME_ID, id or identifier.generate_uuid()) # Event.eventTime (Mandatory) setattr(self, EVENT_KEYNAME_EVENTTIME, eventTime or timestamp.get_utc_now()) # Event.action (Mandatory) setattr(self, EVENT_KEYNAME_ACTION, action) # Event.outcome (Mandatory) setattr(self, EVENT_KEYNAME_OUTCOME, outcome) # Event.observer (Mandatory if no observerId) if observer is not None: setattr(self, EVENT_KEYNAME_OBSERVER, observer) # Event.observerId (Dependent) if observerId is not None: setattr(self, EVENT_KEYNAME_OBSERVERID, observerId) # Event.initiator (Mandatory if no initiatorId) if initiator is not None: setattr(self, EVENT_KEYNAME_INITIATOR, initiator) # Event.initiatorId (Dependent) if initiatorId is not None: setattr(self, EVENT_KEYNAME_INITIATORID, initiatorId) # Event.target (Mandatory if no targetId) if target is not None: setattr(self, EVENT_KEYNAME_TARGET, target) # Event.targetId (Dependent) if targetId is not None: setattr(self, EVENT_KEYNAME_TARGETID, targetId) # Event.severity (Optional) if severity is not None: setattr(self, EVENT_KEYNAME_SEVERITY, severity) # Event.reason (Optional) if reason is not None: setattr(self, EVENT_KEYNAME_REASON, reason)
def test_identifier_empty(self): self.assertFalse(identifier.is_valid('')) self.assertTrue(identifier.is_valid(identifier.generate_uuid()))
def test_event(self): ev = event.Event(eventType='activity', id=identifier.generate_uuid(), eventTime=timestamp.get_utc_now(), initiator=resource.Resource(typeURI='storage'), initiatorId=identifier.generate_uuid(), action='read', target=resource.Resource(typeURI='storage'), targetId=identifier.generate_uuid(), observer=resource.Resource(id='target'), observerId=identifier.generate_uuid(), outcome='success', reason=reason.Reason(reasonType='HTTP', reasonCode='200'), severity='high') ev.add_measurement( measurement.Measurement(result='100', metricId=identifier.generate_uuid())), ev.add_tag(tag.generate_name_value_tag('name', 'val')) ev.add_attachment(attachment.Attachment(typeURI='attachURI', content='content', name='attachment_name')) ev.observer = resource.Resource(typeURI='service/security') ev.add_reporterstep(reporterstep.Reporterstep( role='observer', reporter=resource.Resource(typeURI='service/security'))) ev.add_reporterstep(reporterstep.Reporterstep( reporterId=identifier.generate_uuid())) self.assertEqual(ev.is_valid(), False) dict_ev = ev.as_dict() for key in event.EVENT_KEYNAMES: self.assertIn(key, dict_ev) ev = event.Event(eventType='activity', id=identifier.generate_uuid(), eventTime=timestamp.get_utc_now(), initiator=resource.Resource(typeURI='storage'), action='read', target=resource.Resource(typeURI='storage'), observer=resource.Resource(id='target'), outcome='success') self.assertEqual(ev.is_valid(), True) ev = event.Event(eventType='activity', id=identifier.generate_uuid(), eventTime=timestamp.get_utc_now(), initiatorId=identifier.generate_uuid(), action='read', targetId=identifier.generate_uuid(), observerId=identifier.generate_uuid(), outcome='success') self.assertEqual(ev.is_valid(), True) ev = event.Event(eventType='activity', id=identifier.generate_uuid(), eventTime=timestamp.get_utc_now(), initiator=resource.Resource(typeURI='storage'), action='read', targetId=identifier.generate_uuid(), observer=resource.Resource(id='target'), outcome='success') self.assertEqual(ev.is_valid(), True)