def InitFromDatabaseObject(self, db_obj, approval_subject_obj=None): _InitApiApprovalFromDatabaseObject(self, db_obj) if not approval_subject_obj: approval_subject_obj = data_store.REL_DB.ReadHuntObject( db_obj.subject_id) approval_subject_counters = data_store.REL_DB.ReadHuntCounters( db_obj.subject_id) self.subject = api_hunt.ApiHunt().InitFromHuntObject( approval_subject_obj, hunt_counters=approval_subject_counters, with_full_summary=True) original_object = approval_subject_obj.original_object if original_object.object_type == "FLOW_REFERENCE": original_flow = data_store.REL_DB.ReadFlowObject( original_object.flow_reference.client_id, original_object.flow_reference.flow_id) self.copied_from_flow = api_flow.ApiFlow().InitFromFlowObject( original_flow) elif original_object.object_type == "HUNT_REFERENCE": original_hunt = data_store.REL_DB.ReadHuntObject( original_object.hunt_reference.hunt_id) original_hunt_counters = data_store.REL_DB.ReadHuntCounters( original_object.hunt_reference.hunt_id) self.copied_from_hunt = api_hunt.ApiHunt().InitFromHuntObject( original_hunt, hunt_counters=original_hunt_counters, with_full_summary=True) return self
def testDoesNothingIfArgsHaveNoChanges(self): before = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt.urn, token=self.token)) self.handler.Handle(self.args, token=self.token) after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt.urn, token=self.token)) self.assertEqual(before, after)
def testDoesNothingIfArgsHaveNoChanges(self): before = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) self.handler.Handle(self.args, token=self.token) after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) self.assertEqual(before, after)
def testDoesNotModifyHuntIfStateChangeFails(self): self.args.client_limit = 42 self.args.state = "COMPLETED" with self.assertRaises(hunt_plugin.InvalidHuntStateError): self.handler.Handle(self.args, token=self.token) if data_store.RelationalDBEnabled(): after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) else: after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt_urn, token=self.token)) self.assertNotEqual(after.client_limit, 42)
def testModifiesHuntCorrectly(self): self.args.client_rate = 100 self.args.client_limit = 42 self.args.duration = rdfvalue.Duration("1d") self.handler.Handle(self.args, token=self.token) if data_store.RelationalDBEnabled(): after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) else: after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt_urn, token=self.token)) self.assertEqual(after.client_rate, 100) self.assertEqual(after.client_limit, 42) self.assertEqual(after.duration, rdfvalue.Duration("1d"))
def testDoesNotModifyHuntIfStateChangeFails(self): with self.assertRaises(hunt_plugin.InvalidHuntStateError): self.args.client_limit = 42 self.args.state = "COMPLETED" self.handler.Handle(self.args, token=self.token) after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt.urn, token=self.token)) self.assertNotEqual(after.client_limit, 42)
def testDoesNothingIfArgsHaveNoChanges(self): if data_store.RelationalDBEnabled(): before = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) else: before = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt_urn, token=self.token)) self.handler.Handle(self.args, token=self.token) if data_store.RelationalDBEnabled(): after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) else: after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt_urn, token=self.token)) self.assertEqual(before, after)
def testModifiesHuntCorrectly(self): self.args.client_rate = 100 self.args.client_limit = 42 self.args.expires = rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42) self.handler.Handle(self.args, token=self.token) if data_store.RelationalDBReadEnabled("hunts"): after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) else: after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt_urn, token=self.token)) self.assertEqual(after.client_rate, 100) self.assertEqual(after.client_limit, 42) self.assertEqual(after.expires, rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))
def testModifiesHuntCorrectly(self): self.args.client_rate = 100 self.args.client_limit = 42 self.args.expires = rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42) self.handler.Handle(self.args, token=self.token) after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt.urn, token=self.token)) self.assertEqual(after.client_rate, 100) self.assertEqual(after.client_limit, 42) self.assertEqual(after.expires, rdfvalue.RDFDatetime.FromSecondsSinceEpoch(42))
def testModifiesHuntCorrectly(self): self.args.client_rate = 100 self.args.client_limit = 42 self.args.duration = rdfvalue.DurationSeconds("1d") self.handler.Handle(self.args, token=self.token) after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) self.assertEqual(after.client_rate, 100) self.assertEqual(after.client_limit, 42) self.assertEqual(after.duration, rdfvalue.DurationSeconds("1d"))
def testModifiesHuntCorrectly(self): duration = rdfvalue.Duration("1w") self.args.client_rate = 100 self.args.client_limit = 42 self.args.expires = rdfvalue.RDFDatetime.Now() + duration self.handler.Handle(self.args, token=self.token) if data_store.RelationalDBReadEnabled(): after = hunt_plugin.ApiHunt().InitFromHuntObject( data_store.REL_DB.ReadHuntObject(self.hunt_id)) else: after = hunt_plugin.ApiHunt().InitFromAff4Object( aff4.FACTORY.Open(self.hunt_urn, token=self.token)) self.assertEqual(after.client_rate, 100) self.assertEqual(after.client_limit, 42) # TODO: The test should not modify expiry time (because it # should not be possible to modify it). Instead, it should modify duration # and test that for change. now = rdfvalue.RDFDatetime.Now() self.assertBetween(after.expires - duration, after.created, now)