def Start(self): self.state.Register("hunt_id", None) self.state.Register("client_ids", set()) self.state.Register("client_ids_failures", set()) self.state.Register("client_ids_result_reported", set()) self.state.client_ids = base.GetClientTestTargets(token=self.token) if not self.state.client_ids: self.Log("No clients to test on, define them in " "Test.end_to_end_client_ids") return token = access_control.ACLToken(username="******", reason="Running endtoend tests.").SetUID() runner_args = rdfvalue.FlowRunnerArgs(flow_name="EndToEndTestFlow") flow_request = rdfvalue.FlowRequest( client_ids=self.state.client_ids, args=rdfvalue.EndToEndTestFlowArgs(), runner_args=runner_args) bogus_rule = rdfvalue.ForemanAttributeRegex( attribute_name="System", attribute_regex="Does not match anything") hunt_args = rdfvalue.VariableGenericHuntArgs(flows=[flow_request]) hunt_args.output_plugins = self.GetOutputPlugins() with hunts.GRRHunt.StartHunt( hunt_name="VariableGenericHunt", args=hunt_args, regex_rules=[bogus_rule], client_rate=0, expiry_time="1d", token=token) as hunt: self.state.hunt_id = hunt.session_id hunt.SetDescription("EndToEnd tests run by cron") hunt.Run() hunt.ManuallyScheduleClients(token=token) # Set a callback to check the results after 50 minutes. This should be # plenty of time for the clients to receive the hunt and run the tests, but # not so long that the flow lease will expire. wait_duration = rdfvalue.Duration( config_lib.CONFIG.Get("Test.end_to_end_result_check_wait")) completed_time = rdfvalue.RDFDatetime().Now() + wait_duration self.CallState(next_state="CheckResults", start_time=completed_time)
def RunVariableGenericHunt(self): args = rdfvalue.VariableGenericHuntArgs() self._AppendFlowRequest(args.flows, 1, 1) self._AppendFlowRequest(args.flows, 2, 2) self._AppendFlowRequest(args.flows, 2, 3) with hunts.GRRHunt.StartHunt(hunt_name="VariableGenericHunt", args=args, client_rate=0, token=self.token) as hunt: hunt.Run() hunt.ManuallyScheduleClients() # Run the hunt. client_mock = test_lib.SampleHuntMock(failrate=100) test_lib.TestHuntHelper(client_mock, self.client_ids, False, self.token) with aff4.FACTORY.Open(hunt.session_id, mode="rw", token=self.token) as hunt: hunt.Stop() return hunt