| #!/usr/bin/env python |
| # Copyright 2019 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 os |
| import sys |
| import unittest |
| |
| import test_env |
| import lib.command as command |
| from lib.host import Host |
| from lib.factory import Factory |
| from test_case import TestCaseWithIO |
| |
| |
| class IntegrationTest(TestCaseWithIO): |
| |
| def assertNoErrors(self): |
| """Convenience method to reset stdout and assert stderr is empty.""" |
| self.assertOut([], n=0) |
| self.assertErr([]) |
| |
| def test_e2e(self): |
| # Set up hermetic environment. |
| host = Host() |
| host.fd_out = self._stdout |
| host.fd_err = self._stderr |
| |
| with host.temp_dir() as temp_dir: |
| |
| # (Re-)parse the command line arguments, a la main.py. |
| factory = Factory(host=host) |
| parser = factory.parser |
| args = parser.parse_args() |
| |
| # Ensure exactly 1 fuzzer is selected. |
| fuzzer = factory.create_fuzzer(args) |
| self.assertNoErrors() |
| args.name = str(fuzzer) |
| |
| list_args = parser.parse_args(['list', args.name]) |
| list_args.command(list_args, factory) |
| self.assertOut( |
| ['Found 1 matching fuzzer for "{}":'.format(str(fuzzer))], n=1) |
| self.assertNoErrors() |
| |
| start_args = parser.parse_args( |
| ['start', '-o', temp_dir.pathname, args.name]) |
| proc = command.start_fuzzer(start_args, factory) |
| self.assertNoErrors() |
| |
| stop_args = parser.parse_args(['stop', args.name]) |
| command.stop_fuzzer(stop_args, factory) |
| self.assertNoErrors() |
| if proc: |
| proc.wait() |
| |
| check_args = parser.parse_args(['check', args.name]) |
| command.check_fuzzer(check_args, factory) |
| self.assertOut(['{}: STOPPED'.format(args.name)], n=1) |
| self.assertNoErrors() |
| |
| unit = os.path.join(temp_dir.pathname, 'unit') |
| with open(unit, 'w') as opened: |
| opened.write('hello world') |
| |
| repro_args = parser.parse_args(['repro', args.name, unit]) |
| command.repro_units(repro_args, factory) |
| self.assertNoErrors() |
| |
| analyze_args = ['analyze', '-max_total_time=10', args.name] |
| if args.local: |
| analyze_args.append('--local') |
| analyze_args = parser.parse_args(analyze_args) |
| command.analyze_fuzzer(analyze_args, factory) |
| self.assertNoErrors() |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |