distcloud/setup_ddt_tests.py

109 lines
3.3 KiB
Python

# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
#
# 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 setuptools
# In python < 2.7.4, a lazy loading of package `pbr` will break
# setuptools if some other modules registered functions in `atexit`.
# solution from: http://bugs.python.org/issue15881#msg170215
try:
import multiprocessing # noqa
except ImportError:
pass
def get_data_repo():
tmp_dir = os.environ['DATA_DIRECTORY']
return os.path.abspath(tmp_dir)
# Search the data repository to get all sub repositories
# Each sub repository will contain a configuration to run tests with
def get_cfgs():
return [d for d in os.listdir(data_dir)
if os.path.isdir(os.path.join(data_dir, d))]
# Some data sets may not have the correct database sources needed for the
# unit tests, this is specified in the tox file and filtered out here
def filter_cfgs(cfgs_full):
cfgs_usable = []
required = os.environ.get('REQUIRED_REPOS')
if required:
for cfg in cfgs_full:
subdirs = os.listdir('%s/%s' % (data_dir, cfg))
include = True
for d in required.split(','):
if d not in subdirs:
include = False
break
if include:
cfgs_usable.append(cfg)
else:
cfgs_usable = cfgs
return cfgs_usable
# writes the current data set source to a file within the tests default data
# repo this will be picked up when running tests to create the path to the
# current test configuration of the ddt framework to unpack
def set_current_test_data(cfg):
file = open('.current.cfg', 'w')
file.write('%s/%s' % (data_dir, cfg))
file.close()
def print_divider(width, txt):
width_new = (int(width) - len(txt)) / 2
print '%s%s%s' % ('_' * width_new, txt, '_' * width_new)
def get_divider_size():
width = 80
try:
rows, width = os.popen('stty size', 'r').read().split()
except Exception:
pass
return width
# Get all repository information
data_dir = get_data_repo()
print 'Using %s as data directory' % data_dir
cfgs = get_cfgs()
cfgs_usable = filter_cfgs(cfgs)
print 'Required repo databases: %s' % os.environ.get('REQUIRED_REPOS')
print "Test data folder(s) found: %s" % cfgs
if len(cfgs_usable) == 0:
print 'No usable data sets found'
exit
print 'Usable data folder(s): %s' % cfgs_usable
if os.environ.get('SINGLE_REPO') == 'True':
cfgs_usable = [cfgs_usable[0]]
print 'Restricting to single data set: %s' % cfgs_usable[0]
print ''
# Loop through all configurations and run unit tests with each
columns = get_divider_size()
for cfg in cfgs_usable:
print_divider(columns, cfg)
print 'Running unit tests with test data: %s' % cfg
set_current_test_data(cfg)
setuptools.setup(
setup_requires=['pbr>=1.8.0'],
pbr=True)
print ''