def test_ps_table(self):
        cg_path = create_random_cg(self.parent_cg_path)
        multithead_sleep = "\n".join([
            'import time, threading',
            't = threading.Thread(target=time.sleep, args=(10,))',
            't.start()',
            't.join()'
        ])
        subprocess.Popen(["sudo", "cgexec", "-g",
                          descriptor_from_cg_path(cg_path),
                          "sh", "-c", "sleep 10"])
        subprocess.Popen(["sudo", "cgexec", "-g",
                          descriptor_from_cg_path(cg_path),
                          "python", "-c", multithead_sleep])

        time.sleep(2)  # Sleep for a little bit to let them spawn
        cg = Cgroup(cg_path)
        table = cg.ps_table()

        # We should see 3 processes (but there are 4 threads here)
        self.assertEqual(3, len(table))
        by_name = {proc["name"]: proc for proc in table}
        self.assertEqual(["python", "sh", "sleep"], sorted(by_name.keys()))

        for name in ["sh", "sleep"]:
            proc = by_name[name]
            self.assertIsInstance(proc["pid"], int)
            self.assertIsInstance(proc["memory_info"].vms, int)
            self.assertIsInstance(proc["memory_info"].rss, int)
            self.assertIsInstance(proc["cmdline"], list)
            self.assertIn(proc["status"], PROC_STATUSES_RAW.keys())
    def test_ps_table(self):
        cg_path = create_random_cg(self.parent_cg_path)
        subprocess.Popen([
            "sudo", "cgexec", "-g",
            descriptor_from_cg_path(cg_path), "sh", "-c", "sleep 10"
        ])
        time.sleep(2)  # Sleep for a little bit to let them spawn
        cg = Cgroup(cg_path)
        table = cg.ps_table()

        self.assertEqual(2, len(table))
        by_name = {proc["name"]: proc for proc in table}
        self.assertEqual(["sh", "sleep"], sorted(by_name.keys()))

        for name in ["sh", "sleep"]:
            proc = by_name[name]
            self.assertIsInstance(proc["pid"], int)
            self.assertIsInstance(proc["memory_info"].vms, int)
            self.assertIsInstance(proc["memory_info"].rss, int)
            self.assertIsInstance(proc["cmdline"], list)
            self.assertIn(proc["status"], PROC_STATUSES_RAW.keys())