예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
  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)
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
  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)
예제 #7
0
    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
예제 #8
0
    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)
예제 #9
0
  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")
예제 #10
0
    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)
예제 #11
0
  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")
예제 #12
0
    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)
예제 #13
0
    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))
예제 #14
0
    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)