Example #1
0
    def testMultipleItems(self):
        process1 = sysinfo_pb2.Process()
        process1.pid = 1
        process1.username = '******'
        process1.nice = 10
        process1.VMS_size = 42
        process1.RSS_size = 43
        process1.status = 'sleeping'
        process1.cpu_percent = 1.5
        process1.memory_percent = 2.5
        process1.exe = '/foo/bar'

        process2 = sysinfo_pb2.Process()
        process2.pid = 2
        process2.username = '******'
        process2.VMS_size = 40
        process2.RSS_size = 41
        process2.status = 'zombie'
        process2.exe = '/foo/baz/quux'

        ps = representer.ProcessList([process1, process2])

        out = io.StringIO()
        ps._repr_pretty_(pretty.PrettyPrinter(out, max_width=55), cycle=False)

        expected = """
   PID USER       NI  VIRT   RES S CPU% MEM% Command
     1 admin      10   42B   43B S  1.5  2.5 /foo/bar
     2 admin       0   40B   41B Z  0.0  0.0 /foo/baz/q
"""
        self.assertEqual(out.getvalue(), expected)
Example #2
0
    def ps(self):
        """Returns a list of processes running on the client."""
        args = flows_pb2.ListProcessesArgs()

        try:
            ps = self._client.CreateFlow(name='ListProcesses', args=args)
        except api_errors.AccessForbiddenError as e:
            raise errors.ApprovalMissingError(self.id, e)

        _timeout.await_flow(ps)
        return representer.ProcessList([_.payload for _ in ps.ListResults()])
Example #3
0
  def ps(self) -> Sequence[sysinfo_pb2.Process]:
    """Returns a list of processes running on the client."""
    args = flows_pb2.ListProcessesArgs()

    try:
      ps = self._client.CreateFlow(name='ListProcesses', args=args)
    except api_errors.AccessForbiddenError as e:
      raise errors.ApprovalMissingError(self.id, e)

    _timeout.await_flow(ps)

    def process(result: message.Message) -> sysinfo_pb2.Process:
      if not isinstance(result, sysinfo_pb2.Process):
        raise TypeError(f'Unexpected flow result type: {type(result)!r}')

      return result

    results = [process(response.payload) for response in ps.ListResults()]
    return representer.ProcessList(results)
Example #4
0
    def testSlice(self):
        process1 = sysinfo_pb2.Process()
        process2 = sysinfo_pb2.Process()

        ps = representer.ProcessList([process1, process2])
        self.assertIsInstance(ps[:1], representer.ProcessList)
Example #5
0
    def testCycle(self):
        ps = representer.ProcessList([])

        out = io.StringIO()
        with self.assertRaises(AssertionError):
            ps._repr_pretty_(pretty.PrettyPrinter(out), cycle=True)
Example #6
0
    def testEmptyResults(self):
        ps = representer.ProcessList([])

        out = io.StringIO()
        ps._repr_pretty_(pretty.PrettyPrinter(out), cycle=False)
        self.assertEqual(out.getvalue(), 'No results.')