From 4f42a9706715c9c5add46632343f7108aabcd530 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 12 Jun 2019 17:42:43 -0400 Subject: [PATCH] run_tests: add a helper for invoking unittests This makes it very easy for people to run all our unittests with just `./run_tests`. There doesn't seem to be any other way currently to quickly invoke any of the tests. Change-Id: I1f9a3745fa397a1e797bd64065c2ba7f338de4a1 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/227613 Tested-by: David Pursehouse Reviewed-by: David Pursehouse --- SUBMITTING_PATCHES.md | 26 ++++++++++++++----- run_tests | 54 +++++++++++++++++++++++++++++++++++++++ tests/fixtures/.gitignore | 2 ++ 3 files changed, 76 insertions(+), 6 deletions(-) create mode 100755 run_tests create mode 100644 tests/fixtures/.gitignore diff --git a/SUBMITTING_PATCHES.md b/SUBMITTING_PATCHES.md index 07f76616..e8a72e87 100644 --- a/SUBMITTING_PATCHES.md +++ b/SUBMITTING_PATCHES.md @@ -1,3 +1,5 @@ +[TOC] + # Short Version - Make small logical changes. @@ -52,17 +54,29 @@ Run `flake8` on changes modules: flake8 file.py -Note that repo generally follows [Google's python style guide] -(https://google.github.io/styleguide/pyguide.html) rather than [PEP 8] -(https://www.python.org/dev/peps/pep-0008/), so it's possible that -the output of `flake8` will be quite noisy. It's not mandatory to -avoid all warnings, but at least the maximum line length should be -followed. +Note that repo generally follows [Google's python style guide] rather than +[PEP 8], so it's possible that the output of `flake8` will be quite noisy. +It's not mandatory to avoid all warnings, but at least the maximum line +length should be followed. If there are many occurrences of the same warning that cannot be avoided without going against the Google style guide, these may be suppressed in the included `.flake8` file. +[Google's python style guide]: https://google.github.io/styleguide/pyguide.html +[PEP 8]: https://www.python.org/dev/peps/pep-0008/ + + +## Running tests + +There is a [`./run_tests`](./run_tests) helper script for quickly invoking all +of our unittests. The coverage isn't great currently, but it should still be +run for all commits. + +Adding more unittests for changes you make would be greatly appreciated :). +Check out the [tests/](./tests/) subdirectory for more details. + + ## Check the license repo is licensed under the Apache License, 2.0. diff --git a/run_tests b/run_tests new file mode 100755 index 00000000..f72b22c5 --- /dev/null +++ b/run_tests @@ -0,0 +1,54 @@ +#!/usr/bin/python +# -*- coding:utf-8 -*- +# 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. + +"""Wrapper to run pytest with the right settings.""" + +from __future__ import print_function + +import errno +import os +import subprocess +import sys + + +def run_pytest(cmd, argv): + """Run the unittests via |cmd|.""" + try: + subprocess.check_call([cmd] + argv) + return 0 + except OSError as e: + if e.errno == errno.ENOENT: + print('%s: unable to run `%s`: %s' % (__file__, cmd, e), file=sys.stderr) + print('%s: Try installing pytest: sudo apt-get install python-pytest' % + (__file__,), file=sys.stderr) + return 1 + else: + raise + + +def main(argv): + """The main entry.""" + # Add the repo tree to PYTHONPATH as the tests expect to be able to import + # modules directly. + topdir = os.path.dirname(os.path.realpath(__file__)) + pythonpath = os.environ.get('PYTHONPATH', '') + os.environ['PYTHONPATH'] = '%s:%s' % (topdir, pythonpath) + + return run_pytest('pytest', argv) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/tests/fixtures/.gitignore b/tests/fixtures/.gitignore new file mode 100644 index 00000000..7b3d2db9 --- /dev/null +++ b/tests/fixtures/.gitignore @@ -0,0 +1,2 @@ +/.repo_not.present.gitconfig.json +/.repo_test.gitconfig.json