From: Fam Zheng <famz@redhat.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [RFC] test/docker/Makefile.include: add a generic docker-run target
Date: Wed, 21 Sep 2016 12:09:01 +0800 [thread overview]
Message-ID: <20160921040901.GC20653@lemon> (raw)
In-Reply-To: <20160920135616.2215-1-alex.bennee@linaro.org>
On Tue, 09/20 14:56, Alex Bennée wrote:
> This re-factors the docker makefile to include a docker-run target which
> can be controlled entirely from environment variables specified on the
> make command line. This allows us to run against any given docker image
> we may have in our repository, for example:
>
> make docker-run TEST="test-quick" IMAGE="debian:arm64" \
> EXECUTABLE=./aarch64-linux-user/qemu-aarch64
>
> The existing docker-foo@bar targets still work but the inline
> verification has been shunted into other target prerequisites before a
> sub-make is invoked for the docker-run target.
Hi Alex,
I understand sometimes one can have specialized images, but still: is it
possible to convert them to Dockerfile and include in the tree?
Or, is this for testing/debugging purpose?
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> NB: I dropped the awk magic that verifies the image exists before
> running. I couldn't get the thing to work in my shell so wasn't quite
> sure what it was doing.
It was to allow "make docker-test" to skip debian-bootstrap image if it is not
there (e.g. when qemu-user not available).
I'm not much too concerned about that though, since most of the time we will
use docker-FOO@BAR, for specific combinations, instead of docker-test for a
blanket coverage.
> ---
> tests/docker/Makefile.include | 82 ++++++++++++++++++++++++++++++++-----------
> 1 file changed, 62 insertions(+), 20 deletions(-)
>
> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include
> index 19d4cc7..ee47085 100644
> --- a/tests/docker/Makefile.include
> +++ b/tests/docker/Makefile.include
> @@ -101,31 +101,73 @@ docker:
> @echo ' NOCACHE=1 Ignore cache when build images.'
> @echo ' EXECUTABLE=<path> Include executable in image.'
>
> -docker-run-%: CMD = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\1/')
> -docker-run-%: IMAGE = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\2/')
> -docker-run-%: docker-qemu-src
> +# This rule if for directly running against an arbitary docker target.
> +# It is called by the expanded docker targets (e.g. make
> +# docker-test-foo@bar) which will do additional verification.
> +#
> +# For example: make docker-run TEST="test-quick" IMAGE="debian:arm64" EXECUTABLE=./aarch64-linux-user/qemu-aarch64
> +#
> +docker-run: docker-qemu-src
This target should probably be documented in "make docker".
> @mkdir -p "$(DOCKER_CCACHE_DIR)"
> - @if test -z "$(IMAGE)" || test -z "$(CMD)"; \
> - then echo "Invalid target"; exit 1; \
> + @if test -z "$(IMAGE)" || test -z "$(TEST)"; \
> + then echo "Invalid target $(IMAGE)/$(TEST)"; exit 1; \
> fi
> - $(if $(filter $(TESTS),$(CMD)),$(if $(filter $(IMAGES),$(IMAGE)), \
> - $(call quiet-command,\
> - if $(SRC_PATH)/tests/docker/docker.py images | \
> - awk '$$1=="qemu" && $$2=="$(IMAGE)"{found=1} END{exit(!found)}'; then \
> - $(SRC_PATH)/tests/docker/docker.py run $(if $V,,--rm) \
> - -t \
> - $(if $(DEBUG),-i,--net=none) \
> - -e TARGET_LIST=$(TARGET_LIST) \
> + $(if $(EXECUTABLE), \
> + $(call quiet-command, \
> + $(SRC_PATH)/tests/docker/docker.py update \
> + $(IMAGE) $(EXECUTABLE)))
> + $(call quiet-command, \
> + $(SRC_PATH)/tests/docker/docker.py run \
> + -t \
> + $(if $V,,--rm) \
> + $(if $(DEBUG),-i,--net=none) \
> + -e TARGET_LIST=$(TARGET_LIST) \
> -e EXTRA_CONFIGURE_OPTS=$(EXTRA_CONFIGURE_OPTS) \
> - -e V=$V -e J=$J -e DEBUG=$(DEBUG)\
> - -e CCACHE_DIR=/var/tmp/ccache \
> + -e V=$V -e J=$J -e DEBUG=$(DEBUG) \
> + -e CCACHE_DIR=/var/tmp/ccache \
> -v $$(readlink -e $(DOCKER_SRC_COPY)):/var/tmp/qemu:z$(COMMA)ro \
> -v $(DOCKER_CCACHE_DIR):/var/tmp/ccache:z \
> - qemu:$(IMAGE) \
> - /var/tmp/qemu/run \
> - $(CMD); \
> - fi \
> - , " RUN $(CMD) in $(IMAGE)")))
> + $(IMAGE) \
> + /var/tmp/qemu/run \
> + $(TEST), " RUN $(TEST) in ${IMAGE}")
> +
> +#
> +# Verification targets
> +#
> +# These targets help verify the test (CMD) and docker tag (IMAGE) are
> +# part of the built in set of tests and images. You can still call the
> +# docker-run target directly for testsing against arbitary images.
s/arbitary/arbitrary/
One more of this below.
> +#
> +
> +docker-verify-image-%: IMAGE = $(shell echo '$@' | sed -e 's/docker-verify-image-\([^@]*\)@\(.*\)/\2/')
> +docker-verify-image-%:
> + @if test -z "$(IMAGE)"; \
> + then echo "Invalid image"; exit 1; \
> + fi
> + $(if $(findstring $(IMAGE), $(DOCKER_IMAGES)) \
This seems inaccurate. what if it is in a form of "$(findstring abc, abcde)"?
> + , @echo "Verified $(IMAGE)" \
> + , @echo "$(IMAGE) is not a known image"; exit 1)
> +
> +docker-verify-test-%: CMD = $(shell echo '$@' | sed -e 's/docker-verify-test-\([^@]*\)@\(.*\)/\1/')
> +docker-verify-test-%:
> + @if test -z "$(CMD)"; \
> + then echo "Invalid test"; exit 1; \
> + fi
> + $(if $(findstring $(CMD), $(DOCKER_TESTS)) \
The same question to findstring as above.
> + , @echo "Verified $(CMD)" \
No need to echo anything in case of verified, or at least use quiet-command
please.
> + , @echo "$(CMD) is not a known test"; exit 1)
> +
> +# Run targets
> +#
> +# This will take a target such as docker-test-foo@bar and verify that:
> +# - the test test-foo is a known test
> +# - the image bar is a known image
> +#
> +# It will then call the docker-run
> +docker-run-%: CMD = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\1/')
> +docker-run-%: IMAGE = $(shell echo '$@' | sed -e 's/docker-run-\([^@]*\)@\(.*\)/\2/')
> +docker-run-%: docker-verify-image-% docker-verify-test-%
> + @make docker-run TEST=$(CMD) IMAGE=qemu:$(IMAGE)
>
> docker-clean:
> $(call quiet-command, $(SRC_PATH)/tests/docker/docker.py clean)
> --
> 2.9.3
>
Fam
next prev parent reply other threads:[~2016-09-21 4:09 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-20 13:56 [Qemu-devel] [RFC] test/docker/Makefile.include: add a generic docker-run target Alex Bennée
2016-09-21 4:09 ` Fam Zheng [this message]
2016-09-21 7:50 ` Alex Bennée
2016-09-21 8:10 ` Fam Zheng
2016-09-21 9:44 ` Alex Bennée
2016-09-21 10:09 ` Fam Zheng
2016-09-21 10:22 ` Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160921040901.GC20653@lemon \
--to=famz@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).