Mypal/testing/talos/tests/test_xrestop.py
2019-03-11 13:26:37 +03:00

64 lines
1.7 KiB
Python

#!/usr/bin/env python
"""
Tests for talos.xrestop
"""
import os
import subprocess
import unittest
from talos.cmanager_linux import xrestop
here = os.path.dirname(os.path.abspath(__file__))
xrestop_output = os.path.join(here, 'xrestop_output.txt')
class TestXrestop(unittest.TestCase):
def test_parsing(self):
"""test parsing xrestop output from xrestop_output.txt"""
class MockPopen(object):
"""
stub class for subprocess.Popen
We mock this to return a local static copy of xrestop output
This has the unfortunate nature of depending on implementation
details.
"""
def __init__(self, *args, **kwargs):
self.returncode = 0
def communicate(self):
stdout = open(xrestop_output).read()
return stdout, ''
# monkey-patch subprocess.Popen
Popen = subprocess.Popen
subprocess.Popen = MockPopen
# get the output
output = xrestop()
# ensure that the parsed output is equal to what is in
# xrestop_output.txt
self.assertEqual(len(output), 7) # seven windows with PIDs
# the first window is Thunderbird
pid = 2035 # thundrbird's pid
self.assertTrue(pid in output)
thunderbird = output[pid]
self.assertEqual(thunderbird['index'], 0)
self.assertEqual(thunderbird['total bytes'], '~4728761')
# PID=1668 is a Terminal
pid = 1668
self.assertTrue(pid in output)
terminal = output[pid]
self.assertEqual(terminal['pixmap bytes'], '1943716')
# cleanup: set subprocess.Popen back
subprocess.Popen = Popen
if __name__ == '__main__':
unittest.main()