def Run(self): acl_test_lib.CreateUser(self.test_username) client_id = self.SetupClient(0) # Create a running mock refresh operation. flow_args = filesystem.RecursiveListDirectoryArgs() running_flow_id = flow_test_lib.StartFlow( filesystem.RecursiveListDirectory, client_id, flow_args=flow_args, creator=self.test_username) # Create a mock refresh operation and complete it. finished_flow_id = flow_test_lib.StartFlow( filesystem.RecursiveListDirectory, client_id, flow_args=flow_args, creator=self.test_username) # Kill flow. rdf_flow = data_store.REL_DB.LeaseFlowForProcessing( client_id, finished_flow_id, rdfvalue.Duration.From(5, rdfvalue.MINUTES)) flow_cls = registry.FlowRegistry.FlowClassByName(rdf_flow.flow_class_name) flow_obj = flow_cls(rdf_flow) flow_obj.Error("Fake error") data_store.REL_DB.ReleaseProcessedFlow(rdf_flow) # Create an arbitrary flow to check on 404s. non_refresh_flow_id = flow_test_lib.StartFlow( discovery.Interrogate, client_id, creator=self.test_username) # Unknown flow ids should also cause 404s. unknown_flow_id = "12345678" # Check both operations. self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=running_flow_id), replace={running_flow_id: "ABCDEF"}) self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=finished_flow_id), replace={finished_flow_id: "ABCDEF"}) self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=non_refresh_flow_id), replace={non_refresh_flow_id: "ABCDEF"}) self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=unknown_flow_id), replace={unknown_flow_id: "ABCDEF"})
def Run(self): acl_test_lib.CreateUser(self.token.username) client_id = self.SetupClient(0).Basename() # Create a running mock refresh operation. flow_args = filesystem.RecursiveListDirectoryArgs() running_flow_id = api_regression_test_lib.StartFlow( client_id, filesystem.RecursiveListDirectory, flow_args=flow_args, token=self.token) # Create a mock refresh operation and complete it. finished_flow_id = api_regression_test_lib.StartFlow( client_id, filesystem.RecursiveListDirectory, flow_args=flow_args, token=self.token) self._KillFlow(client_id, finished_flow_id) # Create an arbitrary flow to check on 404s. non_refresh_flow_id = api_regression_test_lib.StartFlow( client_id, discovery.Interrogate, token=self.token) # Unkonwn flow ids should also cause 404s. unknown_flow_id = "F:12345678" # Check both operations. self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=running_flow_id), replace={running_flow_id: "W:ABCDEF"}) self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=finished_flow_id), replace={finished_flow_id: "W:ABCDEF"}) self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=non_refresh_flow_id), replace={non_refresh_flow_id: "W:ABCDEF"}) self.Check( "GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id, operation_id=unknown_flow_id), replace={unknown_flow_id: "W:ABCDEF"})
def Run(self): acl_test_lib.CreateUser(self.token.username) client_id = self.SetupClient(0) # Create a running mock refresh operation. self.running_flow_urn = self.CreateRecursiveListFlow( client_id, self.token) # Create a mock refresh operation and complete it. self.finished_flow_urn = self.CreateRecursiveListFlow( client_id, self.token) with aff4.FACTORY.Open(self.finished_flow_urn, aff4_type=flow.GRRFlow, mode="rw", token=self.token) as flow_obj: flow_obj.GetRunner().Error("Fake error") # Create an arbitrary flow to check on 404s. self.non_refresh_flow_urn = flow.StartFlow( client_id=client_id, flow_name=discovery.Interrogate.__name__, token=self.token) # Unkonwn flow ids should also cause 404s. self.unknown_flow_id = "F:12345678" # Check both operations. self.Check("GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id.Basename(), operation_id=str(self.running_flow_urn)), replace={self.running_flow_urn.Basename(): "W:ABCDEF"}) self.Check("GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id.Basename(), operation_id=str(self.finished_flow_urn)), replace={self.finished_flow_urn.Basename(): "W:ABCDEF"}) self.Check("GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id.Basename(), operation_id=str(self.non_refresh_flow_urn)), replace={self.non_refresh_flow_urn.Basename(): "W:ABCDEF"}) self.Check("GetVfsRefreshOperationState", args=vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=client_id.Basename(), operation_id=str(self.unknown_flow_id)), replace={self.unknown_flow_id: "W:ABCDEF"})
def testHandlerThrowsExceptionOnUnknownFlowId(self): # Create args with an operation id not referencing any flow. args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=self.client_id, operation_id="12345678") # Our mock flow can't be read, so an error should be raised. with self.assertRaises(vfs_plugin.VfsFileContentUpdateNotFoundError): self.handler.Handle(args, context=self.context)
def testHandlerThrowsExceptionOnUnknownFlowId(self): # Create args with an operation id not referencing any flow. args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( operation_id="F:12345678") # Our mock flow can't be read, so an error should be raised. with self.assertRaises(vfs_plugin.VfsRefreshOperationNotFoundError): self.handler.Handle(args, token=self.token)
def testHandlerThrowsExceptionOnArbitraryFlowId(self): # Create a mock flow. flow_id = flow.StartFlow( client_id=self.client_id, flow_cls=discovery.Interrogate) args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=self.client_id, operation_id=flow_id) # Our mock flow is not a RecursiveListFlow, so an error should be raised. with self.assertRaises(vfs_plugin.VfsRefreshOperationNotFoundError): self.handler.Handle(args, context=self.context)
def testHandlerThrowsExceptionOnArbitraryFlowId(self): # Create a mock flow. self.flow_urn = flow.StartAFF4Flow( client_id=self.client_id, flow_name=discovery.Interrogate.__name__, token=self.token) args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( operation_id=str(self.flow_urn)) # Our mock flow is not a RecursiveListFlow, so an error should be raised. with self.assertRaises(vfs_plugin.VfsRefreshOperationNotFoundError): self.handler.Handle(args, token=self.token)
def testHandlerReturnsCorrectStateForFlow(self): # Create a mock refresh operation. flow_id = self.CreateRecursiveListFlow(self.client_id) args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=self.client_id, operation_id=flow_id) # Flow was started and should be running. result = self.handler.Handle(args, context=self.context) self.assertEqual(result.state, "RUNNING") # Terminate flow. flow_base.TerminateFlow(self.client_id, flow_id, "Fake error") # Recheck status and see if it changed. result = self.handler.Handle(args, context=self.context) self.assertEqual(result.state, "FINISHED")
def testHandlerThrowsExceptionOnArbitraryFlowId(self): # Create a mock flow. if data_store.RelationalDBFlowsEnabled(): flow_id = flow.StartFlow( client_id=self.client_id.Basename(), flow_cls=discovery.Interrogate) else: flow_id = flow.StartAFF4Flow( client_id=self.client_id, flow_name=discovery.Interrogate.__name__, token=self.token).Basename() args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=self.client_id, operation_id=flow_id) # Our mock flow is not a RecursiveListFlow, so an error should be raised. with self.assertRaises(vfs_plugin.VfsRefreshOperationNotFoundError): self.handler.Handle(args, token=self.token)
def testHandlerReturnsCorrectStateForFlow(self): # Create a mock refresh operation. self.flow_urn = self.CreateRecursiveListFlow(self.client_id, self.token) args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( operation_id=str(self.flow_urn)) # Flow was started and should be running. result = self.handler.Handle(args, token=self.token) self.assertEqual(result.state, "RUNNING") # Terminate flow. with aff4.FACTORY.Open( self.flow_urn, aff4_type=flow.GRRFlow, mode="rw", token=self.token) as flow_obj: flow_obj.GetRunner().Error("Fake error") # Recheck status and see if it changed. result = self.handler.Handle(args, token=self.token) self.assertEqual(result.state, "FINISHED")
def testHandlerReturnsCorrectStateForFlow(self): # Create a mock refresh operation. flow_id = self.CreateRecursiveListFlow(self.client_id, self.token) args = vfs_plugin.ApiGetVfsRefreshOperationStateArgs( client_id=self.client_id, operation_id=flow_id) # Flow was started and should be running. result = self.handler.Handle(args, token=self.token) self.assertEqual(result.state, "RUNNING") # Terminate flow. if data_store.RelationalDBFlowsEnabled(): flow_base.TerminateFlow(self.client_id.Basename(), flow_id, "Fake error") else: flow_urn = self.client_id.Add("flows").Add(flow_id) with aff4.FACTORY.Open( flow_urn, aff4_type=flow.GRRFlow, mode="rw", token=self.token) as flow_obj: flow_obj.GetRunner().Error("Fake error") # Recheck status and see if it changed. result = self.handler.Handle(args, token=self.token) self.assertEqual(result.state, "FINISHED")