| #!/usr/bin/python2 |
| # Copyright 2018 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import qemu_target |
| import shutil |
| import subprocess |
| import tempfile |
| import time |
| import unittest |
| |
| TEST_PAYLOAD = "Let's get this payload across the finish line!" |
| |
| tmpdir = tempfile.mkdtemp() |
| |
| # Register the target with the context manager so that it always gets |
| # torn down on process exit. Otherwise there might be lingering QEMU instances |
| # if Python crashes or is interrupted. |
| with qemu_target.QemuTarget(tmpdir, 'x64') as target: |
| class TestQemuTarget(unittest.TestCase): |
| @classmethod |
| def setUpClass(cls): |
| target.Start() |
| |
| @classmethod |
| def tearDownClass(cls): |
| target.Shutdown() |
| shutil.rmtree(tmpdir) |
| |
| def testCopyBidirectional(self): |
| tmp_path = tmpdir + "/payload" |
| with open(tmp_path, "w") as tmpfile: |
| tmpfile.write(TEST_PAYLOAD) |
| target.PutFile(tmp_path, '/tmp/payload') |
| |
| tmp_path_roundtrip = tmp_path + ".roundtrip" |
| target.GetFile('/tmp/payload', tmp_path_roundtrip) |
| with open(tmp_path_roundtrip) as roundtrip: |
| self.assertEqual(TEST_PAYLOAD, roundtrip.read()) |
| |
| def testRunCommand(self): |
| self.assertEqual(0, target.RunCommand(['true'])) |
| self.assertEqual(1, target.RunCommand(['false'])) |
| |
| def testRunCommandPiped(self): |
| proc = target.RunCommandPiped(['cat'], |
| stdin=subprocess.PIPE, |
| stdout=subprocess.PIPE) |
| proc.stdin.write(TEST_PAYLOAD) |
| proc.stdin.flush() |
| proc.stdin.close() |
| self.assertEqual(TEST_PAYLOAD, proc.stdout.readline()) |
| proc.kill() |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |