Clean up the image functional test
1. Move setup_docker.sh to tools directory 2. Make a setup_gate.sh that installs necessary packages including docker and starts docker. 3. Add logging output. 4. Add default test timeout of 2 hours. 5. Add user to the docker group before running test cases. 6. Run image build as dockerroot group. This patch has to be one commit to fix the gate in one go. Co-Authored-By: Steven Dake <stdake@cisco.com> Change-Id: I83f3cdb1dabf0dfface589c581cb22c155467acc
This commit is contained in:
parent
751180ae01
commit
78b27e3e60
@ -1,4 +1,7 @@
|
||||
[DEFAULT]
|
||||
test_command=python -m subunit.run discover tests $LISTOPT $IDOPTION
|
||||
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
||||
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
||||
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-7200} \
|
||||
${PYTHON:-python} -m subunit.run discover ${OS_TEST_PATH:-./tests} $LISTOPT $IDOPTION
|
||||
test_id_option=--load-list $IDFILE
|
||||
test_list_option=--list
|
||||
|
@ -1,3 +1,5 @@
|
||||
oslo.log>=1.0.0 # Apache-2.0
|
||||
oslotest>=1.5.1 # Apache-2.0
|
||||
PyYAML
|
||||
python-barbicanclient>=3.0.1
|
||||
python-ceilometerclient>=1.0.6
|
||||
|
14
tests/setup_gate.sh
Executable file
14
tests/setup_gate.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
sudo yum install -y libffi-devel openssl-devel docker
|
||||
sudo /usr/sbin/usermod -a -G dockerroot ${SUDO_USER:-$USER}
|
||||
sudo systemctl start docker
|
||||
sleep 1
|
||||
|
||||
group_str="jenkins ALL=(:dockerroot) NOPASSWD: ALL"
|
||||
sudo grep -x "$group_str" /etc/sudoers > /dev/null || sudo bash -c "echo \"$group_str\" >> /etc/sudoers"
|
||||
sudo chown root:dockerroot /var/run/docker.sock
|
||||
|
||||
echo "Completed $0."
|
@ -10,33 +10,53 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import testtools
|
||||
from subprocess import check_output
|
||||
from oslo_log import fixture as log_fixture
|
||||
from oslo_log import log as logging
|
||||
from oslotest import base
|
||||
|
||||
class ImagesTest(testtools.TestCase):
|
||||
from subprocess import Popen, PIPE, STDOUT
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
class ImagesTest(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(ImagesTest, self).setUp()
|
||||
self.useFixture(log_fixture.SetLogLevel([__name__],
|
||||
logging.logging.INFO))
|
||||
|
||||
def test_builds(self):
|
||||
build_output = check_output(["tools/build-all-docker-images",
|
||||
"--release",
|
||||
"--pull",
|
||||
"--testmode"])
|
||||
proc = Popen(['tools/build-all-docker-images',
|
||||
'--testmode'],
|
||||
stdout=PIPE, stderr=STDOUT, bufsize=1)
|
||||
with proc.stdout:
|
||||
for line in iter(proc.stdout.readline, b''):
|
||||
LOG.info(line.strip())
|
||||
proc.wait()
|
||||
|
||||
# these are images that are known to not build properly
|
||||
excluded_images = ["kollaglue/centos-rdo-swift-proxy-server",
|
||||
"kollaglue/centos-rdo-swift-container",
|
||||
"kollaglue/centos-rdo-swift-base",
|
||||
"kollaglue/centos-rdo-swift-account",
|
||||
excluded_images = ["kollaglue/centos-rdo-swift-base",
|
||||
"kollaglue/centos-rdo-swift-object",
|
||||
"kollaglue/centos-rdo-barbican",
|
||||
"kollaglue/fedora-rdo-base",
|
||||
"kollaglue/centos-rdo-swift-proxy-server",
|
||||
"kollaglue/centos-rdo-swift-container",
|
||||
"kollaglue/centos-rdo-swift-account",
|
||||
"kollaglue/centos-rdo-zaqar",
|
||||
"kollaglue/centos-rdo-rhel-osp-base"]
|
||||
|
||||
results = eval(build_output.splitlines()[-1])
|
||||
results = eval(line)
|
||||
|
||||
failures = 0
|
||||
for image, result in results.iteritems():
|
||||
if image in excluded_images:
|
||||
self.assertEqual(result, 'fail')
|
||||
if result is 'fail':
|
||||
continue
|
||||
failures = failures + 1
|
||||
LOG.warning(">>> Expected image '%s' to fail, please update"
|
||||
" the excluded_images in source file above if the"
|
||||
" image build has been fixed." % image)
|
||||
else:
|
||||
self.assertNotEqual(result, 'fail')
|
||||
if result is not 'fail':
|
||||
continue
|
||||
failures = failures + 1
|
||||
LOG.critical(">>> Expected image '%s' to succeed!" % image)
|
||||
|
||||
self.assertEqual(failures, 0, "%d failure(s) occurred" % failures)
|
||||
|
@ -35,7 +35,7 @@ EOF
|
||||
[ -f $TOPDIR/.buildconf ] && . $TOPDIR/.buildconf
|
||||
[ -f $IMGDIR/.buildconf ] && . $IMGDIR/.buildconf
|
||||
|
||||
ARGS=$(getopt -o hr:n:t:pfuN -l help,namespace:,push,private-registry:,release,tag:,force-rm,no-cache,no-use-released-parent -- "$@") || { usage >&2; exit 2; }
|
||||
ARGS=$(getopt -o hr:n:t:pfuN -l help,namespace:,push,pull,private-registry:,release,tag:,force-rm,no-cache,no-use-released-parent -- "$@") || { usage >&2; exit 2; }
|
||||
|
||||
eval set -- "$ARGS"
|
||||
|
||||
|
5
tox.ini
5
tox.ini
@ -22,16 +22,17 @@ commands =
|
||||
|
||||
[testenv:setupenv]
|
||||
whitelist_externals = bash
|
||||
commands = bash -c tests/setup_docker.sh
|
||||
commands = bash -c tests/setup_gate.sh
|
||||
|
||||
[testenv:images]
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
whitelist_externals = find
|
||||
bash
|
||||
sudo
|
||||
commands =
|
||||
find . -type f -name "*.pyc" -delete
|
||||
bash -c "if [ ! -d .testrepository ]; then testr init; fi"
|
||||
testr run ^(test_images).*
|
||||
sudo -g dockerroot testr run ^(test_images).*
|
||||
|
||||
[testenv:startenv]
|
||||
whitelist_externals = bash
|
||||
|
Loading…
Reference in New Issue
Block a user