Allow testing non-default configs with complex definitions

Ensure we can provide multiple configurations to exercise different
behaviour within modules with complex job definition inputs.

This ensures that behaviour can be put behind config options, while
providing a platform to exercise these non-default values with the full
complexity of the OpenStack JJB definitions.

Since config options may result in different output, success is
determined by simply succeeding in executing JJB without error.

For additional review, any differences are outputted.

Change-Id: Ifd2b48ae85fbe7b5a2858dd426137c735c6ccd02
This commit is contained in:
Darragh Bailey 2016-04-24 02:58:29 +01:00 committed by Darragh Bailey
parent 008082568c
commit 31d5996192
3 changed files with 95 additions and 0 deletions

View File

@ -0,0 +1,16 @@
[job_builder]
keep_descriptions=True
ignore_cache=True
recursive=True
exclude=.*:manual:./development
allow_duplicates=True
allow_empty_variables=True
[jenkins]
user=jenkins
password=1234567890abcdef1234567890abcdef
url=https://jenkins.example.com
query_plugins_info=False
[__future__]
param_order_from_yaml=True

76
tools/run-compare-configs.sh Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash -e
#
# Copyright 2016 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.
rm -fr .test
mkdir -p .test/run-conf/config
CONFIGS_DIR=$(dirname ${0})/configs
CONFIGS=$(ls -1 ${CONFIGS_DIR}/*.conf 2>/dev/null)
cd .test
if [ -e /usr/zuul-env/bin/zuul-cloner ];
then
/usr/zuul-env/bin/zuul-cloner -m ../tools/run-compare-clonemap.yaml --cache-dir /opt/git git://git.openstack.org openstack-infra/project-config
else
git clone --depth=1 git://git.openstack.org/openstack-infra/project-config
fi
# setup a default configuration to compare results against
cp -r project-config/jenkins/jobs/* run-conf/config
cd ..
mkdir -p .test/run-conf/default/out
tox -e compare-xml-config
echo "############################################################"
echo "Starting processing configs"
for conf_file in ${CONFIGS}
do
echo "============================================================"
echo "Processing non-default config ${conf_file}"
conf_name=$(basename ${conf_file%%.conf})
mkdir -p .test/run-conf/${conf_name}/out
tox -e compare-xml-config -- --conf ${conf_file} test -o .test/run-conf/${conf_name}/out/ .test/run-conf/config
echo "------------------------------------------------------------"
done
echo "############################################################"
echo "Comparing differences from default to alternative configs"
for conf_file in ${CONFIGS}
do
echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
echo "Comparing config ${conf_file}"
conf_name=$(basename ${conf_file%%.conf})
CHANGED=0
for x in `(cd .test/run-conf/default/out/ && find -type f)`
do
differences=$(diff -u .test/run-conf/default/out/${x} .test/run-conf/${conf_name}/out/${x} 2>&1)
if [ $? -ne 0 ]
then
CHANGED=1
echo "============================================================"
echo ${x}
echo "------------------------------------------------------------"
echo "${differences}"
fi
done
if [ "${CHANGED}" -eq "0" ]
then
echo "No differences between default and ${conf_name} configs"
fi
done
# should only fail if previous command exited with a non-zero status
exit 0

View File

@ -26,6 +26,9 @@ commands = flake8
deps = pyflakes deps = pyflakes
commands = pyflakes jenkins_jobs tests setup.py commands = pyflakes jenkins_jobs tests setup.py
[testenv:compare-xml-config]
commands = jenkins-jobs {posargs:test -o .test/run-conf/default/out/ .test/run-conf/config/}
[testenv:compare-xml-old] [testenv:compare-xml-old]
commands = jenkins-jobs test -o .test/old/out/ .test/old/config/ commands = jenkins-jobs test -o .test/old/out/ .test/old/config/