From 8e073738db06086f949d2be377999356aee2d8d0 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Tue, 2 Sep 2014 13:07:24 -0400 Subject: [PATCH] add integration test script from pbr the integration test script shouldn't be in pbr, it should be in requirements repo. Start the move process by copying this over now. Change-Id: I5795c6fe6af49eab3b028472dce800b73012d491 --- tools/integration.sh | 152 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 tools/integration.sh diff --git a/tools/integration.sh b/tools/integration.sh new file mode 100644 index 0000000000..7d6038aed2 --- /dev/null +++ b/tools/integration.sh @@ -0,0 +1,152 @@ +#!/bin/bash -xe + +function mkvenv { + venv=$1 + + rm -rf $venv + virtualenv $venv + $venv/bin/pip install -U pip wheel +} + +# BASE should be a directory with a subdir called "new" and in that +# dir, there should be a git repository for every entry in PROJECTS +BASE=${BASE:-/opt/stack} + +REPODIR=${REPODIR:-$BASE/new} + +# TODO: Figure out how to get this on to the box properly +sudo apt-get install -y --force-yes libxml2-dev libxslt-dev libmysqlclient-dev libpq-dev libnspr4-dev pkg-config libsqlite3-dev libzmq-dev libffi-dev libldap2-dev libsasl2-dev ccache + +# FOR numpy / pyyaml +sudo apt-get build-dep -y --force-yes python-numpy +sudo apt-get build-dep -y --force-yes python-yaml + +# And use ccache explitly +export PATH=/usr/lib/ccache:$PATH + +tmpdir=$(mktemp -d) + +#BRANCH +BRANCH=${OVERRIDE_ZUUL_BRANCH=:-master} +# PROJECTS is a list of projects that we're testing +PROJECTS=$* + +pbrsdistdir=$tmpdir/pbrsdist +git clone $REPODIR/pbr $pbrsdistdir +cd $pbrsdistdir + +eptest=$tmpdir/eptest +mkdir $eptest +cd $eptest + +cat < setup.cfg +[metadata] +name = test_project + +[entry_points] +console_scripts = + test_cmd = test_project:main + +[global] +setup-hooks = + pbr.hooks.setup_hook +EOF + +cat < setup.py +import setuptools + +setuptools.setup( + setup_requires=['pbr'], + pbr=True) +EOF + +mkdir test_project +cat < test_project/__init__.py +def main(): + print "Test cmd" +EOF + +epvenv=$eptest/venv +mkvenv $epvenv + +eppbrdir=$tmpdir/eppbrdir +git clone $REPODIR/pbr $eppbrdir +$epvenv/bin/pip install -e $eppbrdir + +PBR_VERSION=0.0 $epvenv/bin/python setup.py install +cat $epvenv/bin/test_cmd +grep 'PBR Generated' $epvenv/bin/test_cmd +$epvenv/bin/test_cmd | grep 'Test cmd' + +projectdir=$tmpdir/projects +mkdir -p $projectdir + +for PROJECT in $PROJECTS ; do + SHORT_PROJECT=$(basename $PROJECT) + if ! grep 'pbr' $REPODIR/$SHORT_PROJECT/setup.py >/dev/null 2>&1 + then + # project doesn't use pbr + continue + fi + if [ $SHORT_PROJECT = 'pypi-mirror' ]; then + # pypi-mirror doesn't consume the mirror + continue + fi + if [ $SHORT_PROJECT = 'jeepyb' ]; then + # pypi-mirror doesn't consume the mirror + continue + fi + if [ $SHORT_PROJECT = 'tempest' ]; then + # Tempest doesn't really install + continue + fi + if [ $SHORT_PROJECT = 'requirements' ]; then + # requirements doesn't really install + continue + fi + + # set up the project synced with the global requirements + sudo chown -R $USER $REPODIR/$SHORT_PROJECT + (cd $REPODIR/requirements && python update.py $REPODIR/$SHORT_PROJECT) + pushd $REPODIR/$SHORT_PROJECT + if ! git diff --quiet ; then + git commit -a -m'Update requirements' + fi + popd + + # Clone from synced repo + shortprojectdir=$projectdir/$SHORT_PROJECT + git clone $REPODIR/$SHORT_PROJECT $shortprojectdir + + # Test that we can make a tarball from scratch + sdistvenv=$tmpdir/sdist + mkvenv $sdistvenv + cd $shortprojectdir + $sdistvenv/bin/python setup.py sdist + + cd $tmpdir + + # Test that the tarball installs + tarballvenv=$tmpdir/tarball + mkvenv $tarballvenv + $tarballvenv/bin/pip install $shortprojectdir/dist/*tar.gz + + # Test pip installing + pipvenv=$tmpdir/pip + mkvenv $pipvenv + $pipvenv/bin/pip install git+file://$shortprojectdir + + # Test python setup.py install + installvenv=$tmpdir/install + mkvenv $installvenv + + installprojectdir=$projectdir/install$SHORT_PROJECT + git clone $shortprojectdir $installprojectdir + cd $installprojectdir + $installvenv/bin/python setup.py install + + # Ensure the install_package_data is doing the thing it should do + if [ $SHORT_PROJECT = 'nova' ]; then + find $installvenv | grep migrate.cfg + fi +done