|  | #!/usr/bin/python | 
|  | # 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'])) | 
|  |  | 
|  | # This is a known bug: https://fuchsia.atlassian.net/browse/NET-349 | 
|  | 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() |