def Run(self): client_ids = self.SetupClients(1) client_id = client_ids[0] client_mock = flow_test_lib.CrashClientMock(client_id, self.token) with test_lib.FakeTime(42): with self.CreateHunt(description="the hunt") as hunt_obj: hunt_obj.Run() with test_lib.FakeTime(45): self.AssignTasksToClients(client_ids) hunt_test_lib.TestHuntHelperWithMultipleMocks( {client_id: client_mock}, False, self.token) crashes = aff4_grr.VFSGRRClient.CrashCollectionForCID(client_id) crash = list(crashes)[0] session_id = crash.session_id.Basename() replace = { hunt_obj.urn.Basename(): "H:123456", session_id: "H:11223344" } self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id.Basename()), replace=replace) self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id.Basename(), count=1), replace=replace) self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id.Basename(), offset=1, count=1), replace=replace)
def Run(self): client = self.SetupTestClientObject(0) client_id = client.client_id client_ids = [rdf_client.ClientURN(client_id)] client_mock = flow_test_lib.CrashClientMock( rdf_client.ClientURN(client_id), self.token) with test_lib.FakeTime(42): hunt_urn = self.StartHunt(description="the hunt") with test_lib.FakeTime(45): self.AssignTasksToClients(client_ids) hunt_test_lib.TestHuntHelperWithMultipleMocks( {client_id: client_mock}, False, self.token) crashes = data_store.REL_DB.ReadClientCrashInfoHistory(str(client_id)) crash = list(crashes)[0] replace = { hunt_urn.Basename(): "H:123456", str(crash.session_id): "<some session id>" } self.Check( "ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs(client_id=client_id), replace=replace) self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id, count=1), replace=replace) self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id, offset=1, count=1), replace=replace)
def Run(self): client_id = self.SetupClient(0) client_mock = flow_test_lib.CrashClientMock(client_id) with test_lib.FakeTime(42): hunt_id = self.StartHunt(description="the hunt") with test_lib.FakeTime(45): self.AssignTasksToClients([client_id]) hunt_test_lib.TestHuntHelperWithMultipleMocks({client_id: client_mock}) crashes = data_store.REL_DB.ReadClientCrashInfoHistory(str(client_id)) crash = list(crashes)[0] replace = {hunt_id: "H:123456", str(crash.session_id): "<some session id>"} self.Check( "ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs(client_id=client_id), replace=replace) self.Check( "ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id, count=1), replace=replace) self.Check( "ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id, offset=1, count=1), replace=replace)
def SetUpCrashedFlowInHunt(self): client_ids = [ rdf_client.ClientURN("C.%016X" % i) for i in range(0, 10) ] client_mocks = dict([ (client_id, flow_test_lib.CrashClientMock(client_id, self.token)) for client_id in client_ids ]) client_rule_set = rdf_foreman.ForemanClientRuleSet(rules=[ rdf_foreman.ForemanClientRule( rule_type=rdf_foreman.ForemanClientRule.Type.REGEX, regex=rdf_foreman.ForemanRegexClientRule( attribute_name="GRR client", attribute_regex="")) ]) with implementation.GRRHunt.StartHunt( hunt_name=standard.SampleHunt.__name__, client_rule_set=client_rule_set, client_rate=0, token=self.token) as hunt: hunt.Run() foreman = aff4.FACTORY.Open("aff4:/foreman", mode="rw", token=self.token) for client_id in client_ids: self.assertTrue(foreman.AssignTasksToClient(client_id)) hunt_test_lib.TestHuntHelperWithMultipleMocks(client_mocks, False, self.token) return client_ids
def SetUpCrashedFlowInHunt(self): client_ids = self.SetupClients(10) client_mocks = dict([ (client_id, flow_test_lib.CrashClientMock(client_id, self.token)) for client_id in client_ids ]) client_rule_set = self._CreateForemanClientRuleSet() # Make this not match anything. client_rule_set.rules[0].regex.attribute_regex = "" with implementation.StartHunt(hunt_name=standard.SampleHunt.__name__, client_rule_set=client_rule_set, client_rate=0, token=self.token) as hunt: hunt.Run() foreman_obj = foreman.GetForeman(token=self.token) for client_id in client_ids: self.assertTrue( foreman_obj.AssignTasksToClient(client_id.Basename())) hunt_test_lib.TestHuntHelperWithMultipleMocks(client_mocks, False, self.token) return client_ids
def Run(self): client_ids = self.SetupClients(1) client_mocks = dict([(client_id, flow_test_lib.CrashClientMock( client_id, self.token)) for client_id in client_ids]) with test_lib.FakeTime(42): with self.CreateHunt(description="the hunt") as hunt_obj: hunt_obj.Run() with test_lib.FakeTime(45): self.AssignTasksToClients(client_ids) hunt_test_lib.TestHuntHelperWithMultipleMocks(client_mocks, False, self.token) crashes = implementation.GRRHunt.CrashCollectionForHID( hunt_obj.urn, token=self.token) crash = list(crashes)[0] session_id = crash.session_id.Basename() replace = {hunt_obj.urn.Basename(): "H:123456", session_id: "H:11223344"} self.Check( "ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs( hunt_id=hunt_obj.urn.Basename()), replace=replace) self.Check( "ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs( hunt_id=hunt_obj.urn.Basename(), count=1), replace=replace) self.Check( "ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs( hunt_id=hunt_obj.urn.Basename(), offset=1, count=1), replace=replace)
def SetUpCrashedFlowInHunt(self): client_ids = [ rdf_client.ClientURN("C.%016X" % i) for i in range(0, 10) ] client_mocks = dict([ (client_id, flow_test_lib.CrashClientMock(client_id, self.token)) for client_id in client_ids ]) client_rule_set = self._CreateForemanClientRuleSet() # Make this not match anything. client_rule_set.rules[0].regex.attribute_regex = "" with implementation.GRRHunt.StartHunt( hunt_name=standard.SampleHunt.__name__, client_rule_set=client_rule_set, client_rate=0, token=self.token) as hunt: hunt.Run() foreman = aff4.FACTORY.Open("aff4:/foreman", mode="rw", token=self.token) for client_id in client_ids: self.assertTrue(foreman.AssignTasksToClient(client_id)) hunt_test_lib.TestHuntHelperWithMultipleMocks(client_mocks, False, self.token) return client_ids
def Run(self): if data_store.RelationalDBEnabled(): client_obj = self.SetupTestClientObject(0) client_id = client_obj.client_id else: client_id = self.SetupClient(0).Basename() client_mocks = { client_id: flow_test_lib.CrashClientMock(client_id, self.token) } if data_store.RelationalDBEnabled(): hunt_id = self.CreateHunt(description="the hunt") hunt.StartHunt(hunt_id) else: with test_lib.FakeTime(42): with self.CreateHunt(description="the hunt") as hunt_obj: hunt_obj.Run() hunt_id = hunt_obj.urn.Basename() with test_lib.FakeTime(45): self.AssignTasksToClients([client_id]) hunt_test_lib.TestHuntHelperWithMultipleMocks( client_mocks, False, self.token) if data_store.RelationalDBEnabled(): crash = data_store.REL_DB.ReadHuntFlows( hunt_id, 0, 1, filter_condition=db.HuntFlowsCondition.CRASHED_FLOWS_ONLY, )[0].client_crash_info else: crashes = implementation.GRRHunt.CrashCollectionForHID( hunt_obj.urn) crash = list(crashes)[0] replace = { hunt_id: "H:123456", unicode(crash.session_id): "aff4:/hunts/H:123456/C.1000000000000000/H:11223344" } self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs(hunt_id=hunt_id), replace=replace) self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs(hunt_id=hunt_id, count=1), replace=replace) self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs(hunt_id=hunt_id, offset=1, count=1), replace=replace)
def testListCrashes(self): hunt_id = self.StartHunt() client_ids = self.SetupClients(2) client_mocks = dict([(client_id, flow_test_lib.CrashClientMock(client_id)) for client_id in client_ids]) self.AssignTasksToClients(client_ids) hunt_test_lib.TestHuntHelperWithMultipleMocks(client_mocks) crashes = list(self.api.Hunt(hunt_id).ListCrashes()) self.assertLen(crashes, 2) self.assertCountEqual([x.client.client_id for x in crashes], client_ids) for c in crashes: self.assertEqual(c.crash_message, "Client killed during transaction")
def Run(self): if data_store.RelationalDBReadEnabled(): client = self.SetupTestClientObject(0) client_id = client.client_id client_ids = [rdf_client.ClientURN(client_id)] else: client_ids = self.SetupClients(1) client_id = client_ids[0].Basename() client_mock = flow_test_lib.CrashClientMock( rdf_client.ClientURN(client_id), self.token) with test_lib.FakeTime(42): with self.CreateHunt(description="the hunt") as hunt_obj: hunt_obj.Run() with test_lib.FakeTime(45): self.AssignTasksToClients(client_ids) hunt_test_lib.TestHuntHelperWithMultipleMocks( {client_id: client_mock}, False, self.token) if data_store.RelationalDBReadEnabled(): crashes = data_store.REL_DB.ReadClientCrashInfoHistory( unicode(client_id)) else: crashes = aff4_grr.VFSGRRClient.CrashCollectionForCID( rdf_client.ClientURN(client_id)) crash = list(crashes)[0] session_id = crash.session_id.Basename() replace = { hunt_obj.urn.Basename(): "H:123456", session_id: "H:11223344" } self.Check( "ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs(client_id=client_id), replace=replace) self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id, count=1), replace=replace) self.Check("ListClientCrashes", args=client_plugin.ApiListClientCrashesArgs( client_id=client_id, offset=1, count=1), replace=replace)
def testListCrashes(self): self.hunt_obj.Run() client_ids = self.SetupClients(2) client_mocks = dict([(client_id, flow_test_lib.CrashClientMock( client_id, self.token)) for client_id in client_ids]) self.AssignTasksToClients(client_ids) hunt_test_lib.TestHuntHelperWithMultipleMocks(client_mocks, False, self.token) crashes = list(self.api.Hunt(self.hunt_obj.urn.Basename()).ListCrashes()) self.assertEqual(len(crashes), 2) self.assertEqual( set(x.client.client_id for x in crashes), set(x.Basename() for x in client_ids)) for c in crashes: self.assertEqual(c.crash_message, "Client killed during transaction")
def Run(self): client_id = self.SetupClient(0) client_mocks = { client_id: flow_test_lib.CrashClientMock(client_id, self.token) } hunt_id = self.CreateHunt(description="the hunt", creator=self.token.username) hunt.StartHunt(hunt_id) with test_lib.FakeTime(45): self.AssignTasksToClients([client_id]) hunt_test_lib.TestHuntHelperWithMultipleMocks( client_mocks, self.token) crash = data_store.REL_DB.ReadHuntFlows( hunt_id, 0, 1, filter_condition=db.HuntFlowsCondition.CRASHED_FLOWS_ONLY, )[0].client_crash_info replace = { hunt_id: "H:123456", str(crash.session_id): "aff4:/hunts/H:123456/C.1000000000000000/H:11223344" } self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs(hunt_id=hunt_id), replace=replace) self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs(hunt_id=hunt_id, count=1), replace=replace) self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs(hunt_id=hunt_id, offset=1, count=1), replace=replace)
def testEndToEndTests(self): self.client_ids = [ "aff4:/C.6000000000000000", "aff4:/C.6000000000000001", "aff4:/C.6000000000000002" ] for clientid in self.client_ids: self._SetSummaries(clientid) self.client_mock = action_mocks.ListDirectoryClientMock() with test_lib.ConfigOverrider( {"Test.end_to_end_client_ids": self.client_ids}): with utils.MultiStubber( (base.AutomatedTest, "classes", { "MockEndToEndTest": endtoend_mocks.MockEndToEndTest }), (system.EndToEndTests, "lifetime", 0)): # The test harness doesn't understand the callstate at a later time that # this flow is doing, so we need to disable check_flow_errors. for _ in flow_test_lib.TestFlowHelper( system.EndToEndTests.__name__, self.client_mock, client_id=self.client_id, check_flow_errors=False, token=self.token): pass hunt_test_lib.TestHuntHelperWithMultipleMocks( {}, check_flow_errors=False, token=self.token) hunt_ids = list( aff4.FACTORY.Open("aff4:/hunts", token=self.token).ListChildren()) # We have only created one hunt, and we should have started with a clean # aff4 space. self.assertEqual(len(hunt_ids), 1) hunt_obj = aff4.FACTORY.Open(hunt_ids[0], token=self.token, age=aff4.ALL_TIMES) self.assertItemsEqual(sorted(hunt_obj.GetClients()), sorted(self.client_ids))
def Run(self): if data_store.RelationalDBReadEnabled(): client_obj = self.SetupTestClientObject(0) client_id = client_obj.client_id else: client_id = self.SetupClient(0).Basename() client_mocks = { client_id: flow_test_lib.CrashClientMock(client_id, self.token) } with test_lib.FakeTime(42): with self.CreateHunt(description="the hunt") as hunt_obj: hunt_obj.Run() with test_lib.FakeTime(45): self.AssignTasksToClients([client_id]) hunt_test_lib.TestHuntHelperWithMultipleMocks( client_mocks, False, self.token) crashes = implementation.GRRHunt.CrashCollectionForHID(hunt_obj.urn) crash = list(crashes)[0] session_id = crash.session_id.Basename() replace = { hunt_obj.urn.Basename(): "H:123456", session_id: "H:11223344" } self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs( hunt_id=hunt_obj.urn.Basename()), replace=replace) self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs( hunt_id=hunt_obj.urn.Basename(), count=1), replace=replace) self.Check("ListHuntCrashes", args=hunt_plugin.ApiListHuntCrashesArgs( hunt_id=hunt_obj.urn.Basename(), offset=1, count=1), replace=replace)