def testPsCmdParser(self): """Tests for the PsCmdParser class.""" parser = linux_cmd_parser.PsCmdParser() # Check the detailed 'ps' output. i.e. lots of args. content = open(os.path.join(self.base_path, "pscmd.out"), "rb").read() args = [ "h", "-ewwo", "pid,ppid,comm,ruid,uid,suid,rgid,gid,sgid,user,tty,stat,nice," "thcount,pcpu,rss,vsz,pmem,cmd" ] processes = list(parser.Parse("/bin/ps", args, content, "", 0, 5, None)) # Confirm we parsed all the appropriate lines. self.assertEqual(5, len(processes)) # Check we got a list of valid processes. process = None for process in processes: self.assertTrue(isinstance(process, rdf_client.Process)) # Now lets tear apart the last one. self.assertEquals(136095, process.pid) self.assertEquals("ps", process.name) self.assertEquals(27262, process.effective_uid) self.assertEquals("usernam", process.username) self.assertEquals("pts/0", process.terminal) self.assertEquals(0.0, process.user_cpu_time) self.assertEquals(920, process.RSS_size) args.insert(0, "ps") self.assertEquals(args, process.cmdline) # Check the simple 'ps -ef' output. content = open(os.path.join(self.base_path, "psefcmd.out"), "rb").read() args = ["-ef"] processes = list(parser.Parse("/bin/ps", args, content, "", 0, 5, None)) # Confirm we parsed all the appropriate lines. self.assertEqual(6, len(processes)) # Check we got a list of valid processes. process = None for process in processes: self.assertTrue(isinstance(process, rdf_client.Process)) # Now lets tear apart the last one. self.assertEquals(337492, process.pid) self.assertEquals(592357, process.ppid) self.assertEquals("ps", process.name) self.assertEquals("usernam", process.username) self.assertEquals("pts/0", process.terminal) self.assertEquals(0.0, process.cpu_percent) args.insert(0, "ps") self.assertEquals(args, process.cmdline)
def testRealOutput(self): stdout = """\ UID PID PPID C STIME TTY TIME CMD root 1 0 0 Oct02 ? 00:01:35 /sbin/init splash root 2 0 0 Oct02 ? 00:00:00 [kthreadd] root 5 2 0 Oct02 ? 00:00:00 [kworker/0:0H] colord 68931 1 0 Oct02 ? 00:00:00 /usr/lib/colord/colord foobar 69081 69080 1 Oct02 ? 02:08:49 cinnamon --replace """ parser = linux_cmd_parser.PsCmdParser() processes = list(parser.Parse("/bin/ps", "-ef", stdout, "", 0, 0, None)) self.assertLen(processes, 5) self.assertEqual(processes[0].username, "root") self.assertEqual(processes[0].pid, 1) self.assertEqual(processes[0].ppid, 0) self.assertEqual(processes[0].cpu_percent, 0.0) self.assertEqual(processes[0].terminal, "?") self.assertEqual(processes[0].cmdline, ["/sbin/init", "splash"]) self.assertEqual(processes[1].username, "root") self.assertEqual(processes[1].pid, 2) self.assertEqual(processes[1].ppid, 0) self.assertEqual(processes[1].cpu_percent, 0.0) self.assertEqual(processes[1].terminal, "?") self.assertEqual(processes[1].cmdline, ["[kthreadd]"]) self.assertEqual(processes[2].username, "root") self.assertEqual(processes[2].pid, 5) self.assertEqual(processes[2].ppid, 2) self.assertEqual(processes[2].cpu_percent, 0.0) self.assertEqual(processes[2].terminal, "?") self.assertEqual(processes[2].cmdline, ["[kworker/0:0H]"]) self.assertEqual(processes[3].username, "colord") self.assertEqual(processes[3].pid, 68931) self.assertEqual(processes[3].ppid, 1) self.assertEqual(processes[3].cpu_percent, 0.0) self.assertEqual(processes[3].terminal, "?") self.assertEqual(processes[3].cmdline, ["/usr/lib/colord/colord"]) self.assertEqual(processes[4].username, "foobar") self.assertEqual(processes[4].pid, 69081) self.assertEqual(processes[4].ppid, 69080) self.assertEqual(processes[4].cpu_percent, 1.0) self.assertEqual(processes[4].terminal, "?") self.assertEqual(processes[4].cmdline, ["cinnamon", "--replace"])
def testDoesNotFailOnIncorrectInput(self): stdout = """\ UID PID PPID C STIME TTY TIME CMD foo 1 0 0 Sep01 ? 00:01:23 /baz/norf bar 2 1 0 Sep02 ? 00:00:00 /baz/norf --thud --quux THIS IS AN INVALID LINE quux 5 2 0 Sep03 ? 00:00:00 /blargh/norf quux ??? ??? 0 Sep04 ? 00:00:00 ??? foo 4 2 0 Sep05 ? 00:00:00 /foo/bar/baz --quux=1337 """ parser = linux_cmd_parser.PsCmdParser() processes = list(parser.Parse("/bin/ps", "-ef", stdout, "", 0, 0, None)) self.assertLen(processes, 4) self.assertEqual(processes[0].username, "foo") self.assertEqual(processes[0].pid, 1) self.assertEqual(processes[0].ppid, 0) self.assertEqual(processes[0].cpu_percent, 0) self.assertEqual(processes[0].terminal, "?") self.assertEqual(processes[0].cmdline, ["/baz/norf"]) self.assertEqual(processes[1].username, "bar") self.assertEqual(processes[1].pid, 2) self.assertEqual(processes[1].ppid, 1) self.assertEqual(processes[1].cpu_percent, 0) self.assertEqual(processes[1].terminal, "?") self.assertEqual(processes[1].cmdline, ["/baz/norf", "--thud", "--quux"]) self.assertEqual(processes[2].username, "quux") self.assertEqual(processes[2].pid, 5) self.assertEqual(processes[2].ppid, 2) self.assertEqual(processes[2].cpu_percent, 0) self.assertEqual(processes[2].terminal, "?") self.assertEqual(processes[2].cmdline, ["/blargh/norf"]) self.assertEqual(processes[3].username, "foo") self.assertEqual(processes[3].pid, 4) self.assertEqual(processes[3].ppid, 2) self.assertEqual(processes[3].cpu_percent, 0) self.assertEqual(processes[3].terminal, "?") self.assertEqual(processes[3].cmdline, ["/foo/bar/baz", "--quux=1337"])