| """Test to ensure we're not touching /dev/ptmx when running commands.""" |
| |
| from __future__ import print_function |
| |
| import os |
| import subprocess |
| import tempfile |
| import time |
| import unittest |
| from utils import command_executer |
| |
| |
| class NoPsuedoTerminalTest(unittest.TestCase): |
| """Test to ensure we're not touching /dev/ptmx when running commands.""" |
| |
| _strace_process = None |
| STRACE_TIMEOUT = 10 |
| |
| def _AttachStraceToSelf(self, output_file): |
| """Attaches strace to the current process.""" |
| args = ['strace', '-o', output_file, '-p', str(os.getpid())] |
| print(args) |
| self._strace_process = subprocess.Popen(args) |
| # Wait until we see some activity. |
| start_time = time.time() |
| while time.time() - start_time < self.STRACE_TIMEOUT: |
| if os.path.isfile(output_file) and open(output_file).read(1): |
| return True |
| time.sleep(1) |
| return False |
| |
| def _KillStraceProcess(self): |
| """Kills strace that was started by _AttachStraceToSelf().""" |
| self._strace_process.terminate() |
| self._strace_process.wait() |
| return True |
| |
| def testNoPseudoTerminalWhenRunningCommand(self): |
| """Test to make sure we're not touching /dev/ptmx when running commands.""" |
| temp_file = tempfile.mktemp() |
| self.assertTrue(self._AttachStraceToSelf(temp_file)) |
| |
| ce = command_executer.GetCommandExecuter() |
| ce.RunCommand('echo') |
| |
| self.assertTrue(self._KillStraceProcess()) |
| |
| strace_contents = open(temp_file).read() |
| self.assertFalse('/dev/ptmx' in strace_contents) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |