summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMonty Taylor <mordred@inaugust.com>2012-01-04 19:16:29 -0800
committerMonty Taylor <mordred@inaugust.com>2012-01-04 19:16:29 -0800
commit1a8c7db488060483e788b4c03a5e05cc477aa79c (patch)
tree5d0e1858da7bccb146aafd749e391cdf8c4dee05
parent1f08ca07531c8686811f88a4bdd8843036f566c1 (diff)
downloadoslo-1a8c7db488060483e788b4c03a5e05cc477aa79c.tar.gz
oslo-1a8c7db488060483e788b4c03a5e05cc477aa79c.tar.xz
oslo-1a8c7db488060483e788b4c03a5e05cc477aa79c.zip
Use nose and tox.
-rw-r--r--run_tests.py293
-rw-r--r--setup.cfg6
-rw-r--r--tools/install_venv.py144
-rwxr-xr-xtools/with_venv.sh4
4 files changed, 0 insertions, 447 deletions
diff --git a/run_tests.py b/run_tests.py
deleted file mode 100644
index 0632a2e..0000000
--- a/run_tests.py
+++ /dev/null
@@ -1,293 +0,0 @@
-#!/usr/bin/env python
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 OpenStack, LLC
-# All Rights Reserved.
-#
-# 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.
-
-# Colorizer Code is borrowed from Twisted:
-# Copyright (c) 2001-2010 Twisted Matrix Laboratories.
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-"""
-Unittest runner for openstack
-
-To run all test::
- python run_tests.py
-
-To run a single test::
- python run_tests.py test_stores:TestSwiftBackend.test_get
-
-To run a single test module::
- python run_tests.py test_stores
-"""
-
-import gettext
-import logging
-import os
-import unittest
-import sys
-
-gettext.install('openstack', unicode=1)
-
-from nose import config
-from nose import result
-from nose import core
-
-
-class _AnsiColorizer(object):
- """
- A colorizer is an object that loosely wraps around a stream, allowing
- callers to write text to the stream in a particular color.
-
- Colorizer classes must implement C{supported()} and C{write(text, color)}.
- """
- _colors = dict(black=30, red=31, green=32, yellow=33,
- blue=34, magenta=35, cyan=36, white=37)
-
- def __init__(self, stream):
- self.stream = stream
-
- def supported(cls, stream=sys.stdout):
- """
- A class method that returns True if the current platform supports
- coloring terminal output using this method. Returns False otherwise.
- """
- if not stream.isatty():
- return False # auto color only on TTYs
- try:
- import curses
- except ImportError:
- return False
- else:
- try:
- try:
- return curses.tigetnum("colors") > 2
- except curses.error:
- curses.setupterm()
- return curses.tigetnum("colors") > 2
- except:
- raise
- # guess false in case of error
- return False
- supported = classmethod(supported)
-
- def write(self, text, color):
- """
- Write the given text to the stream in the given color.
-
- @param text: Text to be written to the stream.
-
- @param color: A string label for a color. e.g. 'red', 'white'.
- """
- color = self._colors[color]
- self.stream.write('\x1b[%s;1m%s\x1b[0m' % (color, text))
-
-
-class _Win32Colorizer(object):
- """
- See _AnsiColorizer docstring.
- """
- def __init__(self, stream):
- from win32console import GetStdHandle, STD_OUT_HANDLE, \
- FOREGROUND_RED, FOREGROUND_BLUE, FOREGROUND_GREEN, \
- FOREGROUND_INTENSITY
- red, green, blue, bold = (FOREGROUND_RED, FOREGROUND_GREEN,
- FOREGROUND_BLUE, FOREGROUND_INTENSITY)
- self.stream = stream
- self.screenBuffer = GetStdHandle(STD_OUT_HANDLE)
- self._colors = {
- 'normal': red | green | blue,
- 'red': red | bold,
- 'green': green | bold,
- 'blue': blue | bold,
- 'yellow': red | green | bold,
- 'magenta': red | blue | bold,
- 'cyan': green | blue | bold,
- 'white': red | green | blue | bold}
-
- def supported(cls, stream=sys.stdout):
- try:
- import win32console
- screenBuffer = win32console.GetStdHandle(
- win32console.STD_OUT_HANDLE)
- except ImportError:
- return False
- import pywintypes
- try:
- screenBuffer.SetConsoleTextAttribute(
- win32console.FOREGROUND_RED |
- win32console.FOREGROUND_GREEN |
- win32console.FOREGROUND_BLUE)
- except pywintypes.error:
- return False
- else:
- return True
- supported = classmethod(supported)
-
- def write(self, text, color):
- color = self._colors[color]
- self.screenBuffer.SetConsoleTextAttribute(color)
- self.stream.write(text)
- self.screenBuffer.SetConsoleTextAttribute(self._colors['normal'])
-
-
-class _NullColorizer(object):
- """
- See _AnsiColorizer docstring.
- """
- def __init__(self, stream):
- self.stream = stream
-
- def supported(cls, stream=sys.stdout):
- return True
- supported = classmethod(supported)
-
- def write(self, text, color):
- self.stream.write(text)
-
-
-class OpenstackTestResult(result.TextTestResult):
- def __init__(self, *args, **kw):
- result.TextTestResult.__init__(self, *args, **kw)
- self._last_case = None
- self.colorizer = None
- # NOTE(vish, tfukushima): reset stdout for the terminal check
- stdout = sys.stdout
- sys.stdout = sys.__stdout__
- for colorizer in [_Win32Colorizer, _AnsiColorizer, _NullColorizer]:
- if colorizer.supported():
- self.colorizer = colorizer(self.stream)
- break
- sys.stdout = stdout
-
- def getDescription(self, test):
- return str(test)
-
- # NOTE(vish, tfukushima): copied from unittest with edit to add color
- def addSuccess(self, test):
- unittest.TestResult.addSuccess(self, test)
- if self.showAll:
- self.colorizer.write("OK", 'green')
- self.stream.writeln()
- elif self.dots:
- self.stream.write('.')
- self.stream.flush()
-
- # NOTE(vish, tfukushima): copied from unittest with edit to add color
- def addFailure(self, test, err):
- unittest.TestResult.addFailure(self, test, err)
- if self.showAll:
- self.colorizer.write("FAIL", 'red')
- self.stream.writeln()
- elif self.dots:
- self.stream.write('F')
- self.stream.flush()
-
- # NOTE(vish, tfukushima): copied from unittest with edit to add color
- def addError(self, test, err):
- """
- Overrides normal addError to add support for errorClasses.
- If the exception is a registered class, the error will be added
- to the list for that class, not errors.
- """
- stream = getattr(self, 'stream', None)
- ec, ev, tb = err
- try:
- exc_info = self._exc_info_to_string(err, test)
- except TypeError:
- # This is for compatibility with Python 2.3.
- exc_info = self._exc_info_to_string(err)
- for cls, (storage, label, isfail) in self.errorClasses.items():
- if result.isclass(ec) and issubclass(ec, cls):
- if isfail:
- test.passwd = False
- storage.append((test, exc_info))
- # Might get patched into a streamless result
- if stream is not None:
- if self.showAll:
- message = [label]
- detail = result._exception_detail(err[1])
- if detail:
- message.append(detail)
- stream.writeln(": ".join(message))
- elif self.dots:
- stream.write(label[:1])
- return
- self.errors.append((test, exc_info))
- test.passed = False
- if stream is not None:
- if self.showAll:
- self.colorizer.write("ERROR", 'red')
- self.stream.writeln()
- elif self.dots:
- stream.write('E')
-
- def startTest(self, test):
- unittest.TestResult.startTest(self, test)
- current_case = test.test.__class__.__name__
-
- if self.showAll:
- if current_case != self._last_case:
- self.stream.writeln(current_case)
- self._last_case = current_case
-
- self.stream.write(
- ' %s' % str(test.test._testMethodName).ljust(60))
- self.stream.flush()
-
-
-class OpenstackTestRunner(core.TextTestRunner):
- def _makeResult(self):
- return OpenstackTestResult(self.stream,
- self.descriptions,
- self.verbosity,
- self.config)
-
-
-if __name__ == '__main__':
- logger = logging.getLogger()
- hdlr = logging.StreamHandler()
- formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
- hdlr.setFormatter(formatter)
- logger.addHandler(hdlr)
- logger.setLevel(logging.DEBUG)
-
- c = config.Config(stream=sys.stdout,
- env=os.environ,
- verbosity=3,
- plugins=core.DefaultPluginManager())
-
- runner = OpenstackTestRunner(stream=c.stream,
- verbosity=c.verbosity,
- config=c)
- sys.exit(not core.run(config=c, testRunner=runner))
diff --git a/setup.cfg b/setup.cfg
index 4e3327c..f82e970 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -9,12 +9,6 @@ with-coverage=1
cover-package=openstack.common
cover-html=1
cover-inclusive=1
-with-tissue=1
-tissue-repeat=1
-tissue-show-pep8=1
-tissue-show-source=1
-tissue-inclusive=1
-tissue-color=1
with-openstack=1
openstack-red=0.05
openstack-yellow=0.025
diff --git a/tools/install_venv.py b/tools/install_venv.py
deleted file mode 100644
index c73943f..0000000
--- a/tools/install_venv.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-# Copyright 2010 OpenStack LLC.
-#
-# 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.
-
-"""
-Installation script for openstack common's development virtualenv
-"""
-
-import os
-import subprocess
-import sys
-
-
-ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
-VENV = os.path.join(ROOT, '.openstack-common-venv')
-PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
-
-
-def die(message, *args):
- print >> sys.stderr, message % args
- sys.exit(1)
-
-
-def run_command(cmd, redirect_output=True, check_exit_code=True):
- """
- Runs a command in an out-of-process shell, returning the
- output of that command. Working directory is ROOT.
- """
- if redirect_output:
- stdout = subprocess.PIPE
- else:
- stdout = None
-
- proc = subprocess.Popen(cmd, cwd=ROOT, stdout=stdout)
- output = proc.communicate()[0]
- if check_exit_code and proc.returncode != 0:
- die('Command "%s" failed.\n%s', ' '.join(cmd), output)
- return output
-
-
-HAS_EASY_INSTALL = bool(run_command(['which', 'easy_install'],
- check_exit_code=False).strip())
-HAS_VIRTUALENV = bool(run_command(['which', 'virtualenv'],
- check_exit_code=False).strip())
-
-
-def check_dependencies():
- """Make sure virtualenv is in the path."""
-
- if not HAS_VIRTUALENV:
- print 'not found.'
- # Try installing it via easy_install...
- if HAS_EASY_INSTALL:
- print 'Installing virtualenv via easy_install...',
- if not run_command(['which', 'easy_install']):
- die('ERROR: virtualenv not found.\n\n'
- 'Openstack development requires virtualenv, please install'
- ' it using your favorite package management tool')
- print 'done.'
- print 'done.'
-
-
-def create_virtualenv(venv=VENV):
- """
- Creates the virtual environment and installs PIP only into the
- virtual environment
- """
- print 'Creating venv...',
- run_command(['virtualenv', '-q', '--no-site-packages', VENV])
- print 'done.'
- print 'Installing pip in virtualenv...',
- if not run_command(['tools/with_venv.sh', 'easy_install', 'pip']).strip():
- die("Failed to install pip.")
- print 'done.'
-
-
-def install_package(venv=VENV):
- print 'Installing packages (this can take a while)...'
- venv_tool = 'tools/with_venv.sh'
- run_command([venv_tool, 'pip', 'install', '-E', venv, '-e', ROOT],
- redirect_output=False)
-
- # Tell the virtual env how to "import openstack-common"
- py_ver = _detect_python_version(venv)
- pthfile = os.path.join(venv, "lib", py_ver, "site-packages",
- "openstack-common.pth")
- f = open(pthfile, 'w')
- f.write("%s\n" % ROOT)
-
-
-def _detect_python_version(venv):
- lib_dir = os.path.join(venv, "lib")
- for pathname in os.listdir(lib_dir):
- if pathname.startswith('python'):
- return pathname
- raise Exception('Unable to detect Python version')
-
-
-def print_help():
- help = """
- Openstack-Common development environment setup is complete.
-
- Openstack-Common development uses virtualenv to track and manage Python
- dependencies while in development and testing.
-
- To activate the Openstack-Common virtualenv for the extent of your
- current shell session you can run:
-
- $ source .openstack-common-venv/bin/activate
-
- Or, if you prefer, you can run commands in the virtualenv on a case by case
- basis by running:
-
- $ tools/with_venv.sh <your command>
-
- Also, make test will automatically use the virtualenv.
- """
- print help
-
-
-def main(argv):
- check_dependencies()
- create_virtualenv()
- install_package()
- print_help()
-
-if __name__ == '__main__':
- main(sys.argv)
diff --git a/tools/with_venv.sh b/tools/with_venv.sh
deleted file mode 100755
index f42b577..0000000
--- a/tools/with_venv.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-TOOLS=`dirname $0`
-VENV=$TOOLS/../.openstack-common-venv
-source $VENV/bin/activate && $@