예제 #1
0
  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"})
예제 #2
0
  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"})
예제 #3
0
    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"})
예제 #4
0
파일: vfs_test.py 프로젝트: avmi/grr
  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)
예제 #5
0
    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)
예제 #6
0
파일: vfs_test.py 프로젝트: avmi/grr
  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)
예제 #7
0
    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)
예제 #8
0
파일: vfs_test.py 프로젝트: avmi/grr
  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")
예제 #9
0
파일: vfs_test.py 프로젝트: x35029/grr
  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)
예제 #10
0
파일: vfs_test.py 프로젝트: slad99/grr
  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")
예제 #11
0
파일: vfs_test.py 프로젝트: x35029/grr
  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")