| #!/usr/bin/env fuchsia-vendored-python | |
| # | |
| # Copyright 2022 The Fuchsia 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 argparse | |
| import io | |
| import os | |
| import sys | |
| import unittest | |
| from contextlib import redirect_stdout | |
| import mem_digest | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument( | |
| "--test_dir_path", help="Path to the test data directory.", required=True | |
| ) | |
| args = parser.parse_args() | |
| TEST_DIR_PATH = args.test_dir_path | |
| # The python_host_test build rule calls `unittest.main`. | |
| # So we need to get rid of the test arguments in order | |
| # to prevent them from interfering with `unittest`'s args. | |
| # | |
| # Pop twice to get rid of the `--test_dir_path` flag and | |
| # its value. | |
| sys.argv.pop() | |
| sys.argv.pop() | |
| class MainArgParserTests(unittest.TestCase): | |
| @unittest.skip(reason="test broken. b/361301238") | |
| def test_digest(self): | |
| parser = mem_digest.get_arg_parser() | |
| snapshot_path = os.path.join(TEST_DIR_PATH, "test_snapshot.json") | |
| digest_path = os.path.join(TEST_DIR_PATH, "test_digest.json") | |
| csv_path = os.path.join(TEST_DIR_PATH, "test_output.csv") | |
| args = parser.parse_args( | |
| [ | |
| "--snapshot", | |
| snapshot_path, | |
| "--digest", | |
| digest_path, | |
| "--output=csv", | |
| ] | |
| ) | |
| stdout = run_capture_output(mem_digest.main, args) | |
| with open(csv_path) as csv: | |
| self.assertEqual(stdout, csv.read()) | |
| @unittest.skip(reason="test broken. b/361301238") | |
| def test_digest_human(self): | |
| parser = mem_digest.get_arg_parser() | |
| snapshot_path = os.path.join(TEST_DIR_PATH, "test_snapshot.json") | |
| digest_path = os.path.join(TEST_DIR_PATH, "test_digest.json") | |
| human_path = os.path.join(TEST_DIR_PATH, "test_human_output.txt") | |
| args = parser.parse_args( | |
| [ | |
| "--snapshot", | |
| snapshot_path, | |
| "--digest", | |
| digest_path, | |
| "--output=human", | |
| ] | |
| ) | |
| stdout = run_capture_output(mem_digest.main, args) | |
| with open(human_path) as human: | |
| self.assertEqual(stdout, human.read()) | |
| def test_fmt_size(self): | |
| self.assertEqual(mem_digest.fmt_size(0), "0B") | |
| self.assertEqual(mem_digest.fmt_size(1023), "1023B") | |
| self.assertEqual(mem_digest.fmt_size(1024), "1KiB") | |
| self.assertEqual(mem_digest.fmt_size(1024 + 511), "1.499KiB") | |
| self.assertEqual(mem_digest.fmt_size(1024 * 1024), "1MiB") | |
| self.assertEqual(mem_digest.fmt_size(32 * 1024 * 1024), "32MiB") | |
| self.assertEqual(mem_digest.fmt_size(10248192), "9.773MiB") | |
| def run_capture_output(f, arguments): | |
| f = io.StringIO() | |
| with redirect_stdout(f): | |
| mem_digest.main(arguments) | |
| return f.getvalue() | |
| if __name__ == "__main__": | |
| unittest.main() |