diff options
author | Craig Tiller <ctiller@google.com> | 2015-09-30 07:15:05 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2015-09-30 07:15:05 -0700 |
commit | 32ba3439e317cc900d7e4bf1478f57807090316d (patch) | |
tree | 70f8ec9dded48620975d8011113a305490c4c4d1 /tools/jenkins | |
parent | 3ba6bf57d70e17e8c172dab6f9f352f15cd8b26b (diff) | |
parent | bd7682fe9954200e9806fd6714ca420fd6d35916 (diff) |
Merge pull request #3373 from jtattermusch/spawn_interop_server
Simplify running of cloud_to_cloud interop tests.
Diffstat (limited to 'tools/jenkins')
-rwxr-xr-x | tools/jenkins/build_docker_and_run_interop_tests.sh | 111 | ||||
-rwxr-xr-x | tools/jenkins/docker_prepare_interop_tests.sh | 79 | ||||
-rwxr-xr-x | tools/jenkins/docker_run_interop_servers.sh | 50 | ||||
-rwxr-xr-x | tools/jenkins/docker_run_interop_tests.sh | 39 | ||||
-rwxr-xr-x | tools/jenkins/docker_run_tests.sh | 3 | ||||
-rwxr-xr-x | tools/jenkins/run_distribution.sh | 2 | ||||
-rwxr-xr-x | tools/jenkins/run_jenkins.sh | 9 |
7 files changed, 288 insertions, 5 deletions
diff --git a/tools/jenkins/build_docker_and_run_interop_tests.sh b/tools/jenkins/build_docker_and_run_interop_tests.sh new file mode 100755 index 0000000000..d2d56d947b --- /dev/null +++ b/tools/jenkins/build_docker_and_run_interop_tests.sh @@ -0,0 +1,111 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This script is invoked by run_interop_tests.py to accommodate +# "interop tests under docker" scenario. You should never need to call this +# script on your own. + +set -ex + +cd `dirname $0`/../.. +git_root=`pwd` +cd - + +mkdir -p /tmp/ccache + +# Use image name based on Dockerfile checksum +DOCKER_IMAGE_NAME=grpc_jenkins_slave${docker_suffix}_`sha1sum tools/jenkins/grpc_jenkins_slave/Dockerfile | cut -f1 -d\ ` + +# Make sure docker image has been built. Should be instantaneous if so. +docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_jenkins_slave$docker_suffix + +# Create a local branch so the child Docker script won't complain +git branch -f jenkins-docker + +# Make sure the CID files are gone. +rm -f prepare.cid server.cid client.cid + +# Prepare image for interop tests +docker run \ + -e CCACHE_DIR=/tmp/ccache \ + -i $TTY_FLAG \ + -v "$git_root:/var/local/jenkins/grpc" \ + -v /tmp/ccache:/tmp/ccache \ + --cidfile=prepare.cid \ + $DOCKER_IMAGE_NAME \ + bash -l /var/local/jenkins/grpc/tools/jenkins/docker_prepare_interop_tests.sh || DOCKER_FAILED="true" + +PREPARE_CID=`cat prepare.cid` + +# Create image from the container, we will spawn one docker for clients +# and one for servers. +INTEROP_IMAGE=interop_`uuidgen` +docker commit $PREPARE_CID $INTEROP_IMAGE +# remove container, possibly killing it first +docker rm -f $PREPARE_CID || true +echo "Successfully built image $INTEROP_IMAGE" + +# run interop servers under docker in the background +docker run \ + -d -i \ + $SERVERS_DOCKER_EXTRA_ARGS \ + --cidfile=server.cid \ + $INTEROP_IMAGE bash -l /var/local/git/grpc/tools/jenkins/docker_run_interop_servers.sh + +SERVER_CID=`cat server.cid` + +SERVER_PORTS="" +for tuple in $SERVER_PORT_TUPLES +do + # lookup under which port docker exposes given internal port + exposed_port=`docker port $SERVER_CID ${tuple#*:} | awk -F ":" '{print $NF}'` + + # override the port for corresponding cloud_to_cloud server + SERVER_PORTS+=" --override_server ${tuple%:*}=localhost:$exposed_port" + echo "${tuple%:*} server is exposed under port $exposed_port" +done + +# run interop clients +docker run \ + -e "RUN_TESTS_COMMAND=$RUN_TESTS_COMMAND $SERVER_PORTS" \ + -w /var/local/git/grpc \ + -i $TTY_FLAG \ + --net=host \ + --cidfile=client.cid \ + $INTEROP_IMAGE bash -l /var/local/git/grpc/tools/jenkins/docker_run_interop_tests.sh || DOCKER_FAILED="true" + +CLIENT_CID=`cat client.cid` + +echo "killing and removing server container $SERVER_CID" +docker rm -f $SERVER_CID || true + +docker cp $CLIENT_CID:/var/local/git/grpc/report.xml $git_root +docker rm -f $CLIENT_CID || true +docker rmi -f $DOCKER_IMAGE_NAME || true diff --git a/tools/jenkins/docker_prepare_interop_tests.sh b/tools/jenkins/docker_prepare_interop_tests.sh new file mode 100755 index 0000000000..a1fe0b72d2 --- /dev/null +++ b/tools/jenkins/docker_prepare_interop_tests.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This script is invoked by run_jekins.sh. It contains the test logic +# that should run inside a docker container. +set -e + +mkdir -p /var/local/git +git clone --recursive /var/local/jenkins/grpc /var/local/git/grpc + +cd /var/local/git/grpc +nvm use 0.12 +rvm use ruby-2.1 + +# TODO(jtattermusch): use cleaner way to install root certs +mkdir -p /usr/local/share/grpc +cp etc/roots.pem /usr/local/share/grpc/ + +# build C++ interop client & server +make interop_client interop_server + +# build C# interop client & server +make install_grpc_csharp_ext +(cd src/csharp && mono /var/local/NuGet.exe restore Grpc.sln) +(cd src/csharp && xbuild Grpc.sln) + +# build Node interop client & server +npm install -g node-gyp +make install_c -C /var/local/git/grpc +(cd src/node && npm install && node-gyp rebuild) + +# build Ruby interop client and server +(cd src/ruby && gem update bundler && bundle && rake compile:grpc) + +# TODO(jtattermusch): add python + +# build PHP interop client +# TODO(jtattermusch): prerequisites for PHP should be installed sooner than here. +# Install composer +curl -sS https://getcomposer.org/installer | php +mv composer.phar /usr/local/bin/composer +# Download the patched PHP protobuf so that PHP gRPC clients can be generated +# from proto3 schemas. +git clone https://github.com/stanley-cheung/Protobuf-PHP.git /var/local/git/protobuf-php +(cd src/php/ext/grpc && phpize && ./configure && make) +rvm all do gem install ronn rake +(cd third_party/protobuf && make install) +(cd /var/local/git/protobuf-php \ + && rvm all do rake pear:package version=1.0 \ + && pear install Protobuf-1.0.tgz) +(cd src/php && composer install) +(cd src/php && protoc-gen-php -i tests/interop/ -o tests/interop/ tests/interop/test.proto) diff --git a/tools/jenkins/docker_run_interop_servers.sh b/tools/jenkins/docker_run_interop_servers.sh new file mode 100755 index 0000000000..9f29a65aaa --- /dev/null +++ b/tools/jenkins/docker_run_interop_servers.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This script is invoked by run_jekins.sh. It contains the test logic +# that should run inside a docker container. +set -e + +cd /var/local/git/grpc +nvm use 0.12 +rvm use ruby-2.1 + +# If port env variable is set, run corresponding interop server on given port in background. +# TODO(jtattermusch): ideally, run_interop_tests.py would generate the commands to run servers. + +[ -z "${SERVER_PORT_cxx}" ] || bins/opt/interop_server --enable_ssl --port=${SERVER_PORT_cxx} & + +[ -z "${SERVER_PORT_node}" ] || node src/node/interop/interop_server.js --use_tls=true --port=${SERVER_PORT_node} & + +[ -z "${SERVER_PORT_ruby}" ] || ruby src/ruby/bin/interop/interop_server.rb --use_tls --port=${SERVER_PORT_ruby} & + +[ -z "${SERVER_PORT_csharp}" ] || (cd src/csharp/Grpc.IntegrationTesting.Server/bin/Debug && mono Grpc.IntegrationTesting.Server.exe --use_tls --port=${SERVER_PORT_csharp}) & + +sleep infinity diff --git a/tools/jenkins/docker_run_interop_tests.sh b/tools/jenkins/docker_run_interop_tests.sh new file mode 100755 index 0000000000..29970afb25 --- /dev/null +++ b/tools/jenkins/docker_run_interop_tests.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This script is invoked by build_docker_and_run_interop_tests.sh inside +# a docker container. You should never need to call this script on your own. +set -e + +nvm use 0.12 +rvm use ruby-2.1 + +# run the cloud-to-prod interop tests +$RUN_TESTS_COMMAND diff --git a/tools/jenkins/docker_run_tests.sh b/tools/jenkins/docker_run_tests.sh index 781bff26b9..3595a95f5c 100755 --- a/tools/jenkins/docker_run_tests.sh +++ b/tools/jenkins/docker_run_tests.sh @@ -28,8 +28,9 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# This script is invoked by build_docker_and_run_tests.py inside a docker +# This script is invoked by build_docker_and_run_tests.sh inside a docker # container. You should never need to call this script on your own. + set -e export CONFIG=$config diff --git a/tools/jenkins/run_distribution.sh b/tools/jenkins/run_distribution.sh index 49b7d306d1..64c60f1502 100755 --- a/tools/jenkins/run_distribution.sh +++ b/tools/jenkins/run_distribution.sh @@ -54,7 +54,7 @@ if [ "$platform" == "linux" ]; then docker build -t $DOCKER_IMAGE_NAME tools/jenkins/grpc_linuxbrew # run per-language homebrew installation script - docker run $DOCKER_IMAGE_NAME bash -l \ + docker run --rm=true $DOCKER_IMAGE_NAME bash -l \ -c "nvm use 0.12; \ npm set unsafe-perm true; \ rvm use ruby-2.1; \ diff --git a/tools/jenkins/run_jenkins.sh b/tools/jenkins/run_jenkins.sh index c4a01a7d66..f79e739f6a 100755 --- a/tools/jenkins/run_jenkins.sh +++ b/tools/jenkins/run_jenkins.sh @@ -56,9 +56,6 @@ then ./tools/run_tests/run_tests.py --use_docker -t -l $language -c $config -x report.xml $@ || true -elif [ "$platform" == "interop" ] -then - python tools/run_tests/run_interops.py --language=$language $@ elif [ "$platform" == "windows" ] then echo "building $language on Windows" @@ -83,6 +80,12 @@ then echo "building $language on FreeBSD" MAKE=gmake ./tools/run_tests/run_tests.py -t -l $language -c $config -x report.xml $@ || true + +elif [ "$platform" == "interop" ] +then + echo "building interop tests for language $language" + + ./tools/run_tests/run_interop_tests.py --use_docker -t -l $language --cloud_to_prod --server all || true else echo "Unknown platform $platform" exit 1 |