qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC PATCH 1/4] tests: Introduce Docker based tests


From: Fam Zheng
Subject: [Qemu-devel] [RFC PATCH 1/4] tests: Introduce Docker based tests
Date: Wed, 3 Feb 2016 22:36:01 +0800

A new group of targets to spawn docker instances for testing is added:

- "make docker" will spawn each available docker image and run all
  available tests under tests/docker.

- "make docker-foo" will spawn image foo and run all available tests.

- "make docker X=bar" or "make docker-foo X=bar" will limit the tests to
  only matching pattern "bar".

If the docker images (tagged like qemu:foo) don't exist, the make
command will automatically build them with foo.docker.

MAKEFLAGS is passed into the container.

Breaking down the tests/docker directory:

- *.docker in Dockerfile format define the environment in which tests
  are run.

- *.sh are testing scripts to be executed by "run".

- "run" is the entry script to run inside the container.

- Anything else are indirectly used or documents.

Signed-off-by: Fam Zheng <address@hidden>
---
 Makefile                     | 33 ++++++++++++++++++++++++++++++++-
 tests/docker/basic.sh        | 11 +++++++++++
 tests/docker/centos6.docker  |  5 +++++
 tests/docker/fedora22.docker |  6 ++++++
 tests/docker/run             | 20 ++++++++++++++++++++
 tests/docker/ubuntu.docker   |  9 +++++++++
 6 files changed, 83 insertions(+), 1 deletion(-)
 create mode 100755 tests/docker/basic.sh
 create mode 100644 tests/docker/centos6.docker
 create mode 100644 tests/docker/fedora22.docker
 create mode 100755 tests/docker/run
 create mode 100644 tests/docker/ubuntu.docker

diff --git a/Makefile b/Makefile
index d0de2d4..91be64f 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ BUILD_DIR=$(CURDIR)
 # Before including a proper config-host.mak, assume we are in the source tree
 SRC_PATH=.
 
-UNCHECKED_GOALS := %clean TAGS cscope ctags
+UNCHECKED_GOALS := %clean TAGS cscope ctags docker docker-%
 
 # All following code might depend on configuration variables
 ifneq ($(wildcard config-host.mak),)
@@ -651,3 +651,34 @@ endif
 # Include automatically generated dependency files
 # Dependencies in Makefile.objs files come from our recursive subdir rules
 -include $(wildcard *.d tests/*.d)
+
+# Detect the working docker command
+DOCKER = $(shell for cmd in "docker" "sudo -n docker"; do \
+                    if $$cmd images &>/dev/null; then \
+                        echo $$cmd; \
+                    fi; done)
+
+docker: $(addprefix docker-,\
+            centos6 \
+            fedora22 \
+            ubuntu \
+        )
+docker-%: T=$(@:docker-%=%)
+docker-%:
+       @if test -z "$(DOCKER)"; then \
+               echo 'Docker not found.' \
+                       'Tried "docker" and "sudo -n docker"'; \
+       fi
+       @if ! $(DOCKER) inspect qemu:$T &>/dev/null; then \
+               $(DOCKER) build -t qemu:$T -f 
$(SRC_PATH)/tests/docker/$T.docker \
+                       $(SRC_PATH)/tests/docker; \
+       fi
+       $(DOCKER) run --privileged -t -i --rm --net=none \
+               -e IMAGE_TAG=$T \
+               -e MAKEFLAGS="$(MAKEFLAGS)" \
+               -e X="$X" \
+               -v $$(realpath $(SRC_PATH)):/var/tmp/qemu \
+               -e QEMU_SRC=/var/tmp/qemu \
+               -v /var/tmp/qemu-docker-ccache:/var/tmp/ccache \
+               -e CCACHE_DIR=/var/tmp/ccache \
+               qemu:$T sh - /var/tmp/qemu/tests/docker/run
diff --git a/tests/docker/basic.sh b/tests/docker/basic.sh
new file mode 100755
index 0000000..e51b718
--- /dev/null
+++ b/tests/docker/basic.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+cd $(mktemp -d)
+mkdir build
+mkdir install
+cd build
+$QEMU_SRC/configure --target-list=x86_64-softmmu
+    --prefix="${pwd}/install"
+make $MAKEFLAGS
+make check $MAKEFLAGS
+make install
diff --git a/tests/docker/centos6.docker b/tests/docker/centos6.docker
new file mode 100644
index 0000000..802ca79
--- /dev/null
+++ b/tests/docker/centos6.docker
@@ -0,0 +1,5 @@
+FROM centos:6
+RUN yum install -y \
+    git make gcc \
+    zlib-devel glib2-devel SDL-devel pixman-devel
+
diff --git a/tests/docker/fedora22.docker b/tests/docker/fedora22.docker
new file mode 100644
index 0000000..5fd48d6
--- /dev/null
+++ b/tests/docker/fedora22.docker
@@ -0,0 +1,6 @@
+FROM fedora:22
+RUN dnf install -y \
+    ccache git mingw{32,64}-{pixman,glib2,gmp,SDL,pkg-config} \
+    glib2-devel pixman-devel zlib-devel SDL-devel \
+    gcc g++ clang make perl which bc findutils
+
diff --git a/tests/docker/run b/tests/docker/run
new file mode 100755
index 0000000..8267766
--- /dev/null
+++ b/tests/docker/run
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -e
+# Prepare the environment
+. /etc/profile || true
+export PATH=/usr/lib/ccache:$PATH
+
+save=$QEMU_SRC
+QEMU_SRC=/var/tmp/qemu.tmp
+cp -r $save $QEMU_SRC
+
+filter_test()
+{
+    grep $(for p in ${X:-.}; do echo " -e $p"; done)
+}
+
+for t in $(cd $QEMU_SRC/tests/docker/; ls *.sh | filter_test); do
+    echo "Running $t ..."
+    $QEMU_SRC/tests/docker/$t || break
+done
diff --git a/tests/docker/ubuntu.docker b/tests/docker/ubuntu.docker
new file mode 100644
index 0000000..004201d
--- /dev/null
+++ b/tests/docker/ubuntu.docker
@@ -0,0 +1,9 @@
+FROM ubuntu:14.04
+RUN apt-get update
+RUN apt-get -y install \
+    libusb-1.0-0-dev libiscsi-dev librados-dev libncurses5-dev \
+    libseccomp-dev libgnutls-dev libssh2-1-dev  libspice-server-dev \
+    libspice-protocol-dev libnss3-dev \
+    libgtk-3-dev libvte-2.90-dev libsdl1.2-dev libpng12-dev libpixman-1-dev \
+    git make ccache python-yaml gcc clang
+
-- 
2.4.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]