#!/usr/bin/env python3 # # Copyright 2019, The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # """ Unit tests for the compiler.py script. Install: $> sudo apt-get install python3-pytest ## OR $> pip install -U pytest See also https://docs.pytest.org/en/latest/getting-started.html Usage: $> pytest compiler_test.py See also https://docs.pytest.org/en/latest/usage.html """ import os import compiler_ri as compiler DIR = os.path.abspath(os.path.dirname(__file__)) TEXTCACHE = os.path.join(DIR, 'test_fixtures/compiler/common_textcache') SYSTRACE = os.path.join(DIR, 'test_fixtures/compiler/common_systrace') ARGV = [os.path.join(DIR, 'compiler.py'), '-i', TEXTCACHE, '-t', SYSTRACE] PERFETTO_TRACE = os.path.join(DIR, 'test_fixtures/compiler/common_perfetto_trace.pb') def assert_compile_result(output, expected, *extra_argv): argv = ARGV + ['-o', output] + [args for args in extra_argv] compiler.main(argv) with open(output, 'rb') as f1, open(expected, 'rb') as f2: assert f1.read() == f2.read() ### Unit tests - testing compiler code directly def test_transform_perfetto_trace_to_systrace(tmpdir): expected = os.path.join(DIR, 'test_fixtures/compiler/test_result_systrace') output = tmpdir.mkdir('compiler').join('tmp_systrace') compiler.transform_perfetto_trace_to_systrace(PERFETTO_TRACE, str(output)) with open(output, 'rb') as f1, open(expected, 'rb') as f2: assert f1.read() == f2.read() ### Functional tests - calls 'compiler.py --args...' def test_compiler_main(tmpdir): output = tmpdir.mkdir('compiler').join('output') # No duration expected = os.path.join(DIR, 'test_fixtures/compiler/test_result_without_duration.TraceFile.pb') assert_compile_result(output, expected) # 10ms duration expected = os.path.join(DIR, 'test_fixtures/compiler/test_result_with_duration.TraceFile.pb') assert_compile_result(output, expected, '--duration', '10000') # 30ms duration expected = os.path.join(DIR, 'test_fixtures/compiler/test_result_without_duration.TraceFile.pb') assert_compile_result(output, expected, '--duration', '30000')