diff --git a/MANIFEST.in b/MANIFEST.in index 4ec4282e3..0dd4ae65b 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,7 +6,7 @@ include LICENSE include README.rst include MANIFEST.in pylintrc include openstack-common.conf -include babel.cfg install.sh run_tests.sh tox.ini uninstall.sh +include babel.cfg install.sh tox.ini uninstall.sh include heat/cloudinit/config include heat/cloudinit/boothook.sh include heat/cloudinit/loguserdata.py diff --git a/run_tests.sh b/run_tests.sh deleted file mode 100755 index d64531182..000000000 --- a/run_tests.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/bash - -BASE_DIR=`dirname $0` - -function usage { - echo "Usage: $0 [OPTION]..." - echo "Run Heat's test suite(s)" - echo "" - echo " -V, --virtual-env Use virtualenv. Install automatically if not present." - echo " (Default is to run tests in local environment)" - echo " -F, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added." - echo " -f, --func Functional tests have been removed." - echo " -u, --unit Run unit tests (default when nothing specified)" - echo " -p, --pep8 Run flake8 and HACKING compliance check (default when nothing specified)" - echo " -P, --no-pep8 Don't run flake8 and HACKING compliance check" - echo " --all Run pep8 and unit tests" - echo " -c, --coverage Generate coverage report" - echo " -d, --debug Run tests with testtools instead of testr. This allows you to use the debugger." - echo " -h, --help Print this usage message" - exit -} - -# must not assign -a as an option, needed for selecting custom attributes -no_venv=1 -function process_option { - case "$1" in - -V|--virtual-env) no_venv=0;; - -F|--force) force=1;; - -f|--func) test_func=1;; - -u|--unit) test_unit=1;; - -p|--pep8) test_pep8=1;; - -P|--no-pep8) test_pep8=0;; - --all) test_unit=1; test_pep8=1;; - -c|--coverage) coverage=1;; - -d|--debug) debug=1;; - -h|--help) usage;; - *) args="$args $1"; test_unit=1;; - esac -} - -venv=.venv -with_venv=tools/with_venv.sh -wrapper="" -debug=0 -flake8args="heat bin/heat-api bin/heat-api-cfn bin/heat-api-cloudwatch bin/heat-engine bin/heat-manage contrib" - -function run_tests { - echo 'Running tests' - # Remove any extraneous DB migrations - find heat/db/sqlalchemy/migrate_repo/versions/ -name '*.pyc' -delete - - if [ $debug -eq 1 ]; then - echo "Debugging..." - if [ "$args" = "" ]; then - # Default to running all tests if specific test is not - # provided. - testrargs="discover ./heat/tests" - fi - ${wrapper} python -m testtools.run $args $testrargs - - # Short circuit because all of the testr and coverage stuff - # below does not make sense when running testtools.run for - # debugging purposes. - return $? - fi - - # Just run the test suites in current environment - if [ -n "$args" ] ; then - args="-t $args" - fi - ${wrapper} python setup.py testr --slowest $args -} - -function run_pep8 { - echo "Running flake8..." - bash -c "${wrapper} flake8 ${flake8args}" -} - -# run unit tests with pep8 when no arguments are specified -# otherwise process CLI options -if [[ $# == 0 ]]; then - test_pep8=1 - test_unit=1 -else - for arg in "$@"; do - process_option $arg - done -fi - -if [ "$no_venv" == 0 ] -then - # Remove the virtual environment if --force used - if [ "$force" == 1 ]; then - echo "Cleaning virtualenv..." - rm -rf ${venv} - fi - if [ -e ${venv} ]; then - wrapper="${with_venv}" - else - # Automatically install the virtualenv - python tools/install_venv.py - wrapper="${with_venv}" - fi -fi - -result=0 - -# If functional or unit tests have been selected, run them -if [ "$test_unit" == 1 ] || [ "$debug" == 1 ] ; then - run_tests - result=$? -fi - -# Run pep8 if it was selected -if [ "$test_pep8" == 1 ]; then - run_pep8 -fi - -# Generate coverage report -if [ "$coverage" == 1 ]; then - echo "Generating coverage report in ./cover" - ${wrapper} python setup.py testr --coverage --slowest - ${wrapper} python -m coverage report --show-missing -fi - -exit $result diff --git a/tools/install_venv.py b/tools/install_venv.py deleted file mode 100644 index b2d34d42d..000000000 --- a/tools/install_venv.py +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright 2010 United States Government as represented by the -# Administrator of the National Aeronautics and Space Administration. -# All Rights Reserved. -# -# Copyright 2010 OpenStack Foundation -# Copyright 2013 IBM Corp. -# -# 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. - -import os -import sys - -import install_venv_common as install_venv - - -def print_help(venv, root): - help = """ - Heat development environment setup is complete. - - Heat development uses virtualenv to track and manage Python dependencies - while in development and testing. - - To activate the Heat virtualenv for the extent of your current shell - session you can run: - - $ source %s/bin/activate - - Or, if you prefer, you can run commands in the virtualenv on a case by case - basis by running: - - $ %s/tools/with_venv.sh - - Also, make test will automatically use the virtualenv. - """ - print(help % (venv, root)) - - -def main(argv): - root = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) - - if os.environ.get('tools_path'): - root = os.environ['tools_path'] - venv = os.path.join(root, '.venv') - if os.environ.get('venv'): - venv = os.environ['venv'] - - pip_requires = os.path.join(root, 'requirements.txt') - test_requires = os.path.join(root, 'test-requirements.txt') - py_version = "python%s.%s" % (sys.version_info[0], sys.version_info[1]) - project = 'Heat' - install = install_venv.InstallVenv(root, venv, pip_requires, test_requires, - py_version, project) - options = install.parse_args(argv) - install.check_python_version() - install.check_dependencies() - install.create_virtualenv(no_site_packages=options.no_site_packages) - install.install_dependencies() - print_help(venv, root) - -if __name__ == '__main__': - main(sys.argv) diff --git a/tools/install_venv_common.py b/tools/install_venv_common.py deleted file mode 100644 index 08cd34a61..000000000 --- a/tools/install_venv_common.py +++ /dev/null @@ -1,173 +0,0 @@ -# -# Copyright 2013 OpenStack Foundation -# Copyright 2013 IBM Corp. -# -# 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. - -"""Provides methods needed by installation script for OpenStack development -virtual environments. - -Since this script is used to bootstrap a virtualenv from the system's Python -environment, it should be kept strictly compatible with Python 2.6. - -Synced in from openstack-common -""" - -from __future__ import print_function - -import optparse -import os -import subprocess -import sys - - -class InstallVenv(object): - - def __init__(self, root, venv, requirements, - test_requirements, py_version, - project): - self.root = root - self.venv = venv - self.requirements = requirements - self.test_requirements = test_requirements - self.py_version = py_version - self.project = project - - def die(self, message, *args): - print(message % args, file=sys.stderr) - sys.exit(1) - - def check_python_version(self): - if sys.version_info < (2, 6): - self.die("Need Python Version >= 2.6") - - def run_command_with_code(self, cmd, redirect_output=True, - check_exit_code=True): - """Runs a command in an out-of-process shell. - - Returns the output of that command. Working directory is self.root. - """ - if redirect_output: - stdout = subprocess.PIPE - else: - stdout = None - - proc = subprocess.Popen(cmd, cwd=self.root, stdout=stdout) - output = proc.communicate()[0] - if check_exit_code and proc.returncode != 0: - self.die('Command "%s" failed.\n%s', ' '.join(cmd), output) - return (output, proc.returncode) - - def run_command(self, cmd, redirect_output=True, check_exit_code=True): - return self.run_command_with_code(cmd, redirect_output, - check_exit_code)[0] - - def get_distro(self): - if (os.path.exists('/etc/fedora-release') or - os.path.exists('/etc/redhat-release')): - return Fedora( - self.root, self.venv, self.requirements, - self.test_requirements, self.py_version, self.project) - else: - return Distro( - self.root, self.venv, self.requirements, - self.test_requirements, self.py_version, self.project) - - def check_dependencies(self): - self.get_distro().install_virtualenv() - - def create_virtualenv(self, no_site_packages=True): - """Creates the virtual environment and installs PIP. - - Creates the virtual environment and installs PIP only into the - virtual environment. - """ - if not os.path.isdir(self.venv): - print('Creating venv...', end=' ') - if no_site_packages: - self.run_command(['virtualenv', '-q', '--no-site-packages', - self.venv]) - else: - self.run_command(['virtualenv', '-q', self.venv]) - print('done.') - else: - print("venv already exists...") - pass - - def pip_install(self, *args): - self.run_command(['tools/with_venv.sh', - 'pip', 'install', '--upgrade'] + list(args), - redirect_output=False) - - def install_dependencies(self): - print('Installing dependencies with pip (this can take a while)...') - - # First things first, make sure our venv has the latest pip and - # setuptools and pbr - self.pip_install('pip>=1.4') - self.pip_install('setuptools') - self.pip_install('pbr') - - self.pip_install('-r', self.requirements, '-r', self.test_requirements) - - def parse_args(self, argv): - """Parses command-line arguments.""" - parser = optparse.OptionParser() - parser.add_option('-n', '--no-site-packages', - action='store_true', - help="Do not inherit packages from global Python " - "install") - return parser.parse_args(argv[1:])[0] - - -class Distro(InstallVenv): - - def check_cmd(self, cmd): - return bool(self.run_command(['which', cmd], - check_exit_code=False).strip()) - - def install_virtualenv(self): - if self.check_cmd('virtualenv'): - return - - if self.check_cmd('easy_install'): - print('Installing virtualenv via easy_install...', end=' ') - if self.run_command(['easy_install', 'virtualenv']): - print('Succeeded') - return - else: - print('Failed') - - self.die('ERROR: virtualenv not found.\n\n%s development' - ' requires virtualenv, please install it using your' - ' favorite package management tool' % self.project) - - -class Fedora(Distro): - """This covers all Fedora-based distributions. - - Includes: Fedora, RHEL, CentOS, Scientific Linux - """ - - def check_pkg(self, pkg): - return self.run_command_with_code(['rpm', '-q', pkg], - check_exit_code=False)[1] == 0 - - def install_virtualenv(self): - if self.check_cmd('virtualenv'): - return - - if not self.check_pkg('python-virtualenv'): - self.die("Please install 'python-virtualenv'.") - - super(Fedora, self).install_virtualenv() diff --git a/tools/with_venv.sh b/tools/with_venv.sh deleted file mode 100755 index 550c4774e..000000000 --- a/tools/with_venv.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -TOOLS=`dirname $0` -VENV=$TOOLS/../.venv -source $VENV/bin/activate && "$@"