THRIFT-3452 .travis.yml: Migrating from legacy to container-based infrastructure Client: Build Patch: Nobuaki Sukegawa
Use "services: docker" This closes #730 Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/a6ab1f5e Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/a6ab1f5e Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/a6ab1f5e Branch: refs/heads/master Commit: a6ab1f5e6d8c5f8c64d356d72993a423cc2bf588 Parents: 1a32c3b Author: Nobuaki Sukegawa <[email protected]> Authored: Sat Nov 28 15:04:39 2015 +0900 Committer: Nobuaki Sukegawa <[email protected]> Committed: Sat Dec 5 11:28:27 2015 +0900 ---------------------------------------------------------------------- .travis.yml | 231 ++++++++++++++----------------- build/docker/README.md | 2 +- build/docker/centos/Dockerfile | 92 ++++++++++-- build/docker/centos/scripts/keepit | 1 + build/docker/scripts/autotools.sh | 6 + build/docker/scripts/cmake.sh | 8 ++ build/docker/scripts/cross-test.sh | 16 +++ build/docker/scripts/make-dist.sh | 6 + build/docker/ubuntu/Dockerfile | 162 ++++++++++++++++------ build/docker/ubuntu/scripts/dpkg.sh | 5 + debian/control | 10 +- debian/rules | 5 - test/crossrunner/__init__.py | 11 +- test/crossrunner/collect.py | 2 +- test/crossrunner/compat.py | 7 +- test/crossrunner/prepare.py | 2 +- test/crossrunner/report.py | 33 ++--- test/crossrunner/run.py | 9 +- test/crossrunner/test.py | 3 +- test/dart/test_client/bin/main.dart | 2 +- test/known_failures_Linux.json | 41 +++--- test/rb/integration/TestClient.rb | 4 +- test/tests.json | 3 + 23 files changed, 406 insertions(+), 255 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/.travis.yml ---------------------------------------------------------------------- diff --git a/.travis.yml b/.travis.yml index 1197fe7..65fbb12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,146 +19,123 @@ # build Apache Thrift on Travis CI - https://travis-ci.org/ -language: cpp - sudo: required -cache: - - apt - - npm - - maven - -compiler: - - clang - - gcc +services: + - docker -before_install: - - sh build/travis/installCXXDependencies.sh - - if [ "$ALL_DEPS" != "no" ] ; then sh build/travis/installDependencies.sh 1> /dev/null ; fi - - if [ "$BUILD_HASKELL" != "no" ] ; then export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/1.20/bin:$PATH ; fi - - if [ "$BUILD_HASKELL" != "no" ] ; then cabal update ; fi - # Disabling any cabal concurrent jobs to workaround GHC crashes due to out of memory. - # We can safely remove this to speed up cabal install, once Travis infrastructure is upgraded. - - if [ "$BUILD_HASKELL" != "no" ] ; then sed -i 's/^\s*jobs\s*:\s*\$ncpus\s*$/jobs:1/g' $HOME/.cabal/config && cat $HOME/.cabal/config | grep jobs ; fi - -before_script: - - sudo /etc/init.d/mysql stop - - sudo /etc/init.d/postgresql stop +install: + # TODO: Once merged, remove experimental tag and use latest + - docker pull thrift/$DISTRO:experiment || true + - cp -r ./build/docker/scripts/*.sh ./build/docker/$DISTRO/scripts/ + - docker build -q -t thrift-build build/docker/$DISTRO script: - - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then mkdir cmake_build && cd cmake_build && cmake -GNinja -DQT_MOC_EXECUTABLE="moq-qt5" $CMAKE_CONFIG $TRAVIS_BUILD_DIR ; fi - - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then ninja -j $CONCURRENT_JOBS ; fi - - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then cpack ; fi - - if [ "x$CMAKE_CONFIG" != "xnone" ] ; then ctest -VV -E "(concurrency_test|processor_test|Haskell)" ; fi - - if [ "x$CONFIG" != "xnone" ] ; then sh bootstrap.sh ; fi - - if [ "x$CONFIG" != "xnone" ] ; then sh configure $CONFIG ; fi - - if [ "x$CONFIG" != "xnone" ] ; then make $MAKE_TARGET -j $CONCURRENT_JOBS ; fi - -after_failure: - - if [ "x$ERROR_LOG" != "xnone" ] ; then cat $ERROR_LOG ; fi + - docker run $BUILD_ENV -v $(pwd):/thrift/src -it thrift-build $BUILD_CMD $BUILD_ARG env: global: - TEST_NAME="" - - CMAKE_CONFIG="none" - - CONFIG="none" - - MAKE_TARGET="check" - - ALL_DEPS="no" - # Invoke cabal only when necessary because it is flaky due to network and package updates. - - BUILD_HASKELL="no" - - GHCVER=7.8.3 - - ERROR_LOG="none" - - CONCURRENT_JOBS=2 + - BUILD_CMD="none" + - BUILD_ARG="" + - BUILD_ENV="-e CC=clang -e CXX=clang++" + - DISTRO=ubuntu matrix: - # Put it here because it's most time consuming - - TEST_NAME="make cross (automake)" - THRIFT_CROSSTEST_CONCURRENCY=6 - CONFIG="--enable-tutorial=no --without-lua --without-haxe --without-d" - ALL_DEPS="yes" - BUILD_HASKELL="yes" - MAKE_TARGET="cross" - ERROR_LOG="test/log/unexpected_failures.log" - - # CMake builds - - TEST_NAME="compiler (CMake + CPack)" - CMAKE_CONFIG="-DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF" - - TEST_NAME="all (CMake + CPack)" - CMAKE_CONFIG="" - ALL_DEPS="yes" - BUILD_HASKELL="yes" - - TEST_NAME="C++/boost-threads (CMake + CPack)" - CMAKE_CONFIG="-DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF -DWITH_BOOSTTHREADS=ON" - - TEST_NAME="C++/std-threads (CMake + CPack)" - CMAKE_CONFIG="-DCMAKE_CXX_FLAGS=-std=c++0x -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF -DWITH_STDTHREADS=ON" - - TEST_NAME="compiler (mingw32-gcc, CMake + CPack)" - CMAKE_CONFIG="-DCMAKE_TOOLCHAIN_FILE=../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF" - - # Autotool builds - # TODO: Remove them as migration is made - - TEST_NAME="compiler (automake)" - CONFIG="--disable-libs" - - # TODO: Enable tutorial once "make check -C tutorial/go" is fixed - - TEST_NAME="C C# D Dart Erlang Go Haxe (automake)" - CONFIG="--without-cpp --without-haskell --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby --enable-tutorial=no" - ALL_DEPS="yes" - - - TEST_NAME="Java Lua Node.js Perl PHP Python Ruby (automake)" - CONFIG="--without-cpp --without-haskell --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe" - ALL_DEPS="yes" - - # Isolate unstable builds from others - - TEST_NAME="C++ (automake)" - CONFIG="--without-haskell --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby" - - - TEST_NAME="Haskell (automake)" - CONFIG="--without-cpp --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby" - ALL_DEPS="yes" - BUILD_HASKELL="yes" - - - TEST_NAME="dist (automake)" - CONFIG="" - ALL_DEPS="yes" - BUILD_HASKELL="yes" - MAKE_TARGET="dist" - + # TODO: Break up by protocol types to avoid 50min limit + - TEST_NAME="Cross Language Tests" + BUILD_CMD="../cross-test.sh" + BUILD_ARG="--enable-tutorial=no" + BUILD_ENV="-e CC=clang -e CXX=clang++ -e THRIFT_CROSSTEST_CONCURRENCY=4" + + # TODO: Remove them once migrated to CMake + # Autotools builds + - TEST_NAME="C C++ C# D Erlang Go Haxe (automake)" + BUILD_CMD="../autotools.sh" + BUILD_ARG="--without-dart --without-haskell --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby" + + - TEST_NAME="C C++ - GCC (automake)" + BUILD_CMD="../autotools.sh" + BUILD_ARG="--without-csharp --without-java --without-erlang --without-nodejs --without-lua --without-python --without-perl --without-php --without-php_extension --without-dart --without-ruby --without-haskell --without-go --without-haxe --without-d" + + - TEST_NAME="Java Lua Perl PHP Python Ruby (automake)" + BUILD_CMD="../autotools.sh" + BUILD_ARG="--without-cpp --without-haskell --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe" + + # Tutorial build is unstable + - TEST_NAME="Dart (automake)" + BUILD_CMD="../autotools.sh" + BUILD_ARG="--without-cpp --without-haskell --without-c_glib --without-csharp --without-d --without-erlang --without-go --without-haxe --without-java --without-lua --without-nodejs --without-perl --without-php --without-php_extension --without-python --without-ruby --enable-tutorial=no" + + # These are flaky and also have lengthy output + - TEST_NAME="Haskell Node.js (automake)" + BUILD_CMD="../autotools.sh" + BUILD_ARG="--without-cpp --without-c_glib --without-csharp --without-d --without-dart --without-erlang --without-go --without-haxe --without-java --without-lua --without-perl --without-php --without-php_extension --without-python --without-ruby" + + # CMake build + - TEST_NAME="All" + BUILD_CMD="../cmake.sh" + + - TEST_NAME="C C++ - GCC" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DWITH_PYTHON=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + BUILD_ENV="-e CC=gcc -e CXX=g++" + + - TEST_NAME="C++ (Boost Thread)" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DWITH_BOOSTTHREADS=ON -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + + - TEST_NAME="C++ (Boost Thread - GCC)" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DWITH_BOOSTTHREADS=ON -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + BUILD_ENV="-e CC=gcc -e CXX=g++" + + - TEST_NAME="C++ (Std Thread)" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DWITH_STDTHREADS=ON -DCMAKE_CXX_FLAGS='-std=c++11' -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + + - TEST_NAME="C++ (Std Thread - GCC)" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DWITH_STDTHREADS=ON -DCMAKE_CXX_FLAGS='-std=c++11' -DWITH_PYTHON=OFF -DWITH_C_GLIB=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + BUILD_ENV="-e CC=gcc -e CXX=g++" + + - TEST_NAME="Compiler (mingw)" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DCMAKE_TOOLCHAIN_FILE=../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF" + BUILD_ENV="" + + - TEST_NAME="All (CentOS)" + BUILD_CMD="../cmake.sh" + DISTRO=centos + + - TEST_NAME="C C++ - GCC (CentOS)" + BUILD_CMD="../cmake.sh" + BUILD_ARG="-DWITH_PYTHON=OFF -DWITH_JAVA=OFF -DWITH_HASKELL=OFF" + BUILD_ENV="-e CC=gcc -e CXX=g++" + DISTRO=centos + + # Distribution + - TEST_NAME="make dist" + BUILD_CMD="../make-dist.sh" + BUILD_ENV="-e CC=gcc -e CXX=g++" + + - TEST_NAME="Debian Packages" + BUILD_CMD="../dpkg.sh" + BUILD_ENV="-e CC=gcc -e CXX=g++" matrix: allow_failures: - # gcc fails on travis seemingly due to out of memory - - compiler: gcc - - exclude: - # This one takes very long - - compiler: gcc - env: TEST_NAME="make cross (automake)" CONFIG="--without-python" ALL_DEPS="yes" MAKE_TARGET="cross" - - # Does not use native compiler, no need to do it twice - - compiler: gcc - env: TEST_NAME="compiler (mingw32-gcc, CMake + CPack)" CMAKE_CONFIG="-DCMAKE_TOOLCHAIN_FILE=../build/cmake/mingw32-toolchain.cmake -DBUILD_COMPILER=ON -DBUILD_LIBRARIES=OFF -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF" - - compiler: gcc - env: TEST_NAME="dist (automake)" CONFIG="" ALL_DEPS="yes" MAKE_TARGET="dist" + - env: TEST_NAME="All (CentOS)" BUILD_CMD="../cmake.sh" DISTRO=centos include: - - env: - - TEST_NAME="Debian Packages" - compiler: clang - before_install: - - sh build/travis/installCXXDependencies.sh; - - sh build/travis/installDependencies.sh 1> /dev/null; - - sudo apt-get install build-essential mono-gmcs mono-devel libmono-system-web2.0-cil erlang-base ruby1.8-dev python-all python-all-dev python-all-dbg php5 php5-dev - script: - - dpkg-buildpackage -tc -us -uc - - ls -al .. - - # QA jobs for code analytics and metrics - + # # static code analysis with cppcheck # add --error-exitcode=1 to --enable=all as soon as everything is fixed - - env: TEST_NAME="cppcheck" - before_install: sudo apt-get install cppcheck + - env: TEST_NAME="cppcheck" + install: + - sudo apt-get update + - sudo apt-get install cppcheck script: # Compiler cppcheck (All) - cppcheck --force --quiet --inline-suppr --enable=all -j2 compiler/cpp/src @@ -171,16 +148,13 @@ matrix: - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/cpp/src lib/cpp/test test/cpp tutorial/cpp - cppcheck --force --quiet --inline-suppr --error-exitcode=1 -j2 lib/c_glib/src lib/c_glib/test test/c_glib/src tutorial/c_glib - # TODO use findbugs for Java - # TODO use fxcop for C# - - # TODO do style checks - # search for TODO etc within source tree # some statistics about the code base # some info about the build machine - env: TEST_NAME="TODO FIXME HACK, LoC and system info" - before_install: sudo apt-get install sloccount + install: + - sudo apt-get update + - sudo apt-get install sloccount script: - grep -r TODO * - grep -r FIXME * @@ -190,6 +164,3 @@ matrix: # System Info - dpkg -l - uname -a - -# TODO make it perfect ;-r -# http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/README.md ---------------------------------------------------------------------- diff --git a/build/docker/README.md b/build/docker/README.md index 3712653..85cb3b2 100644 --- a/build/docker/README.md +++ b/build/docker/README.md @@ -23,5 +23,5 @@ From the Apache Thrift code base root * Run - docker run -v $(pwd):/thrift -it thrift /bin/bash + docker run -v $(pwd):/thrift/src -it thrift /bin/bash http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/centos/Dockerfile ---------------------------------------------------------------------- diff --git a/build/docker/centos/Dockerfile b/build/docker/centos/Dockerfile index 95601db..4ce4f42 100644 --- a/build/docker/centos/Dockerfile +++ b/build/docker/centos/Dockerfile @@ -21,37 +21,83 @@ FROM centos:7 MAINTAINER Apache Thrift <[email protected]> -ENV HOME /root +RUN yum install -y epel-release # General dependencies -RUN yum install -y tar m4 perl gcc gcc-c++ git libtool zlib-devel openssl-devel autoconf make bison bison-devel flex epel-release +RUN yum install -y \ + tar \ + m4 \ + perl \ + clang \ + gcc \ + gcc-c++ \ + git \ + libtool \ + autoconf \ + make \ + bison \ + bison-devel \ + flex # C++ dependencies -RUN yum install -y boost-devel-static libevent-devel +RUN yum install -y \ + boost-devel-static \ + zlib-devel \ + openssl-devel \ + libevent-devel # Java Dependencies -RUN yum install -y ant junit ant-junit java-1.7.0-openjdk-devel +RUN yum install -y \ + ant \ + junit \ + ant-junit \ + java-1.7.0-openjdk-devel # Python Dependencies -RUN yum install -y python-devel python-setuptools python-twisted-web python-six +RUN yum install -y \ + python-devel \ + python-setuptools \ + python-twisted-web \ + python-six # Ruby Dependencies -RUN yum install -y ruby ruby-devel rubygems && \ +RUN yum install -y \ + ruby \ + ruby-devel \ + rubygems && \ gem install bundler rake # Perl Dependencies -RUN yum install -y perl-Bit-Vector perl-Class-Accessor perl-ExtUtils-MakeMaker perl-Test-Simple \ - perl-IO-Socket-SSL perl-Net-SSLeay perl-Crypt-SSLeay +RUN yum install -y \ + perl-Bit-Vector \ + perl-Class-Accessor \ + perl-ExtUtils-MakeMaker \ + perl-Test-Simple \ + perl-IO-Socket-SSL \ + perl-Net-SSLeay \ + perl-Crypt-SSLeay # PHP Dependencies -RUN yum install -y php php-devel php-pear re2c php-phpunit-PHPUnit bzip2 +RUN yum install -y \ + php \ + php-devel \ + php-pear \ + re2c \ + php-phpunit-PHPUnit \ + bzip2 # GLibC Dependencies RUN yum install -y glib2-devel # Erlang Dependencies RUN curl -sSL http://packages.erlang-solutions.com/rpm/centos/erlang_solutions.repo -o /etc/yum.repos.d/erlang_solutions.repo && \ - yum install -y erlang-kernel erlang-erts erlang-stdlib erlang-eunit erlang-rebar erlang-tools + yum install -y \ + erlang-kernel \ + erlang-erts \ + erlang-stdlib \ + erlang-eunit \ + erlang-rebar \ + erlang-tools # Go Dependencies RUN curl -sSL https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz | tar -C /usr/local/ -xz @@ -61,13 +107,33 @@ ENV PATH /usr/local/go/bin:$PATH RUN yum -y install haskell-platform # Node.js Dependencies -RUN yum install -y nodejs nodejs-devel npm +RUN yum install -y \ + nodejs \ + nodejs-devel \ + npm # C# Dependencies -RUN yum install -y mono-core mono-devel mono-web-devel mono-extras mingw32-binutils mingw32-crt mingw32-nsis +RUN yum install -y \ + mono-core \ + mono-devel \ + mono-web-devel \ + mono-extras \ + +# MinGW Dependencies +RUN yum install -y \ + mingw32-binutils \ + mingw32-crt \ + mingw32-nsis + +# CMake +RUN curl -sSL https://cmake.org/files/v3.4/cmake-3.4.0.tar.gz | tar -xz && \ + cd cmake-3.4.0 && ./bootstrap && make -j4 && make install # Clean up RUN rm -rf /tmp/* && \ yum clean all -WORKDIR $HOME +ENV THRIFT_ROOT /thrift +RUN mkdir -p $THRIFT_ROOT/src +COPY scripts $THRIFT_ROOT +WORKDIR $THRIFT_ROOT/src http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/centos/scripts/keepit ---------------------------------------------------------------------- diff --git a/build/docker/centos/scripts/keepit b/build/docker/centos/scripts/keepit new file mode 100644 index 0000000..cb885df --- /dev/null +++ b/build/docker/centos/scripts/keepit @@ -0,0 +1 @@ +keep it http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/scripts/autotools.sh ---------------------------------------------------------------------- diff --git a/build/docker/scripts/autotools.sh b/build/docker/scripts/autotools.sh new file mode 100755 index 0000000..4c111e6 --- /dev/null +++ b/build/docker/scripts/autotools.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -ev + +./bootstrap.sh +./configure $* +make check -j4 http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/scripts/cmake.sh ---------------------------------------------------------------------- diff --git a/build/docker/scripts/cmake.sh b/build/docker/scripts/cmake.sh new file mode 100755 index 0000000..8204a1d --- /dev/null +++ b/build/docker/scripts/cmake.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -ev + +mkdir -p cmake_build && cd cmake_build +cmake $* .. +make -j4 +cpack +ctest -VV -E "(concurrency_test|processor_test)" http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/scripts/cross-test.sh ---------------------------------------------------------------------- diff --git a/build/docker/scripts/cross-test.sh b/build/docker/scripts/cross-test.sh new file mode 100755 index 0000000..d9562ab --- /dev/null +++ b/build/docker/scripts/cross-test.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -ev + +./bootstrap.sh +./configure --enable-tutorial=no +make -j4 precross + +set +e +make cross + +RET=$? +if [ $RET -ne 0 ]; then + cat test/log/unexpected_failures.log +fi + +exit $RET http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/scripts/make-dist.sh ---------------------------------------------------------------------- diff --git a/build/docker/scripts/make-dist.sh b/build/docker/scripts/make-dist.sh new file mode 100755 index 0000000..c728130 --- /dev/null +++ b/build/docker/scripts/make-dist.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -ev + +./bootstrap.sh +./configure $* +make dist http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/ubuntu/Dockerfile ---------------------------------------------------------------------- diff --git a/build/docker/ubuntu/Dockerfile b/build/docker/ubuntu/Dockerfile index d8bac0c..55c6a02 100644 --- a/build/docker/ubuntu/Dockerfile +++ b/build/docker/ubuntu/Dockerfile @@ -18,62 +18,112 @@ FROM ubuntu:trusty MAINTAINER Apache Thrift <[email protected]> -ENV HOME /root ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update -y && apt-get dist-upgrade -y - # General dependencies -RUN apt-get install -y automake libtool flex bison pkg-config g++ libssl-dev make libqt4-dev git \ - debhelper cmake +RUN apt-get update && apt-get install -y \ + apt-transport-https \ + automake \ + bison \ + clang \ + cmake \ + debhelper \ + flex \ + g++ \ + git \ + libtool \ + make \ + pkg-config # C++ dependencies -RUN apt-get install -y libboost-dev libboost-test-dev libboost-program-options-dev \ - libboost-filesystem-dev libboost-system-dev libboost-thread-dev libevent-dev +RUN apt-get update && apt-get install -y \ + libboost-dev \ + libboost-filesystem-dev \ + libboost-program-options-dev \ + libboost-system-dev \ + libboost-test-dev \ + libboost-thread-dev \ + libevent-dev \ + libqt4-dev \ + libssl-dev # Java dependencies -RUN apt-get install -y ant openjdk-7-jdk maven && \ - update-java-alternatives -s java-1.7.0-openjdk-amd64 +RUN apt-get update && apt-get install -y \ + ant \ + openjdk-7-jdk \ + maven \ + && update-java-alternatives -s java-1.7.0-openjdk-amd64 # Python dependencies -RUN apt-get install -y python-all python-all-dev python-all-dbg python-setuptools python-support \ - python-twisted python-zope.interface python-six python3-six +RUN apt-get update && apt-get install -y \ + python-all \ + python-all-dev \ + python-all-dbg \ + python-setuptools \ + python-support \ + python-twisted \ + python-zope.interface \ + python-six \ + python3-six # Ruby dependencies -RUN apt-get install -y ruby ruby-dev && \ - gem install bundler rake +RUN apt-get update && apt-get install -y \ + ruby \ + ruby-dev \ + && gem install bundler rake # Perl dependencies -RUN apt-get install -y libbit-vector-perl libclass-accessor-class-perl +RUN apt-get update && apt-get install -y \ + libbit-vector-perl \ + libclass-accessor-class-perl \ + libcrypt-ssleay-perl \ + libio-socket-ssl-perl \ + libnet-ssleay-perl # Php dependencies -RUN apt-get install -y php5 php5-dev php5-cli php-pear re2c phpunit +RUN apt-get update && apt-get install -y \ + php5 \ + php5-dev \ + php5-cli \ + php-pear \ + re2c \ + phpunit # GlibC dependencies -RUN apt-get install -y libglib2.0-dev +RUN apt-get update && apt-get install -y libglib2.0-dev # Erlang dependencies RUN echo 'deb http://packages.erlang-solutions.com/debian trusty contrib' > /etc/apt/sources.list.d/erlang_solutions.list && \ - curl -sSL http://packages.erlang-solutions.com/debian/erlang_solutions.asc | sudo apt-key add - && \ - apt-get update && \ - apt-get install -y erlang-base erlang-eunit erlang-dev erlang-tools + curl -sSL http://packages.erlang-solutions.com/debian/erlang_solutions.asc | apt-key add - && \ + apt-get update && apt-get install -y \ + erlang-base \ + erlang-eunit \ + erlang-dev \ + erlang-tools \ + rebar -# GO dependencies -RUN curl -sSL https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz | tar -C /usr/lib/ -xz && \ - mkdir -p /usr/share/go +# Go dependencies +RUN curl -sSL https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gz | tar -C /usr/local/ -xz +ENV PATH /usr/local/go/bin:$PATH -ENV GOROOT /usr/lib/go -ENV GOPATH /usr/share/go -ENV PATH ${GOROOT}/bin:${GOPATH}/bin:$PATH # Haskell dependencies -RUN apt-get install -y ghc cabal-install libghc-binary-dev libghc-network-dev libghc-http-dev \ - libghc-hashable-dev libghc-unordered-containers-dev libghc-vector-dev && \ - cabal update +RUN apt-get update && apt-get install -y \ + ghc \ + cabal-install \ + libghc-binary-dev \ + libghc-network-dev \ + libghc-http-dev \ + libghc-hashable-dev \ + libghc-unordered-containers-dev \ + libghc-vector-dev # Haxe -RUN apt-get install -y neko neko-dev libneko0 && \ - mkdir -p /tmp/haxe /usr/lib/haxe && \ +RUN apt-get update && apt-get install -y \ + neko \ + neko-dev \ + libneko0 \ + && mkdir -p /tmp/haxe /usr/lib/haxe && \ curl http://haxe.org/website-content/downloads/3.2.0/downloads/haxe-3.2.0-linux64.tar.gz -o /tmp/haxe/haxe-3.2.0-linux64.tar.gz && \ tar -xvzf /tmp/haxe/haxe-3.2.0-linux64.tar.gz -C /usr/lib/haxe --strip-components=1 && \ ln -s /usr/lib/haxe/haxe /usr/bin/haxe && \ @@ -81,26 +131,53 @@ RUN apt-get install -y neko neko-dev libneko0 && \ mkdir -p /usr/lib/haxe/lib && \ chmod -R 777 /usr/lib/haxe/lib && \ haxelib setup /usr/lib/haxe/lib && \ - haxelib install hxcpp + haxelib install hxcpp && \ + rm -rf /tmp/haxe -# Lua dependencies -RUN apt-get install -y lua5.2 lua5.2-dev # Node.js dependencies -RUN apt-get install -y nodejs nodejs-dev nodejs-legacy npm - -# CSharp -RUN apt-get install -y mono-gmcs mono-devel mono-xbuild mono-complete libmono-system-web2.0-cil \ - mingw32 mingw32-binutils mingw32-runtime nsis +RUN apt-get update && apt-get install -y \ + nodejs \ + nodejs-dev \ + nodejs-legacy \ + npm + +# CSharp dependencies +RUN apt-get update && apt-get install -y \ + libmono-system-web2.0-cil \ + mono-complete \ + mono-devel \ + mono-gmcs \ + mono-xbuild # D dependencies # THRIFT-2916: DMD pinned to 2.065.0-0 due to regression in 2.066 # THRIFT-3253: DMD pinned to 2.065.0-0 due to deprecations 2.067.1 -RUN apt-get install -y gcc-multilib xdg-utils && \ - curl -sSL http://downloads.dlang.org/releases/2.x/2.065.0/dmd_2.065.0-0_amd64.deb -o /tmp/dmd_2.065.0-0_amd64.deb && \ +RUN apt-get update && apt-get install -y \ + gcc-multilib \ + xdg-utils \ + && curl -sSL http://downloads.dlang.org/releases/2.x/2.065.0/dmd_2.065.0-0_amd64.deb -o /tmp/dmd_2.065.0-0_amd64.deb && \ dpkg -i /tmp/dmd_2.065.0-0_amd64.deb && \ rm /tmp/dmd_2.065.0-0_amd64.deb +# Dart dependencies +RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \ + curl https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list && \ + apt-get update && apt-get install -y dart +ENV PATH /usr/lib/dart/bin:$PATH + +# Lua dependencies +RUN apt-get update && apt-get install -y \ + lua5.2 \ + lua5.2-dev + +# MinGW dependencies +RUN apt-get update && apt-get install -y \ + mingw32 \ + mingw32-binutils \ + mingw32-runtime \ + nsis + # Clean up RUN apt-get clean && \ rm -rf /var/cache/apt/* && \ @@ -108,4 +185,7 @@ RUN apt-get clean && \ rm -rf /tmp/* && \ rm -rf /var/tmp/* -WORKDIR $HOME +ENV THRIFT_ROOT /thrift +RUN mkdir -p $THRIFT_ROOT/src +COPY scripts $THRIFT_ROOT +WORKDIR $THRIFT_ROOT/src http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/build/docker/ubuntu/scripts/dpkg.sh ---------------------------------------------------------------------- diff --git a/build/docker/ubuntu/scripts/dpkg.sh b/build/docker/ubuntu/scripts/dpkg.sh new file mode 100755 index 0000000..3ba0cd4 --- /dev/null +++ b/build/docker/ubuntu/scripts/dpkg.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -ev + +dpkg-buildpackage -tc -us -uc +ls -al .. http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/debian/control ---------------------------------------------------------------------- diff --git a/debian/control b/debian/control index 39d57f9..7f997b2 100644 --- a/debian/control +++ b/debian/control @@ -2,10 +2,10 @@ Source: thrift Section: devel Priority: extra Build-Depends: debhelper (>= 5), build-essential, mono-gmcs, python-dev, ant, - mono-devel, libmono-system-web2.0-cil, erlang-base, ruby1.8-dev, autoconf, automake, - pkg-config, libtool, bison, flex, libboost-dev | libboost1.40-dev, python-all, + mono-devel, libmono-system-web2.0-cil, erlang-base, ruby-dev | ruby1.9.1-dev, autoconf, automake, + pkg-config, libtool, bison, flex, libboost-dev | libboost1.53-dev, python-all, python-all-dev, python-all-dbg, openjdk-6-jdk | java-sdk, - libboost-test-dev | libboost-test1.40-dev, libevent-dev, perl (>= 5.8.0-7), + libboost-test-dev | libboost-test1.53-dev, libevent-dev, perl (>= 5.8.0-7), php5, php5-dev, libglib2.0-dev, libqt4-dev Maintainer: Thrift Developer's <[email protected]> Homepage: http://thrift.apache.org/ @@ -29,8 +29,8 @@ Description: Compiler for Thrift definition files Package: python-thrift Architecture: any Section: python -Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends} -Recommends: python-twisted-core +Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}, python-six +Recommends: python-twisted-web Provides: ${python:Provides} Description: Python bindings for Thrift Thrift is a software framework for scalable cross-language services http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/debian/rules ---------------------------------------------------------------------- diff --git a/debian/rules b/debian/rules index d8462d1..c94de2e 100755 --- a/debian/rules +++ b/debian/rules @@ -107,11 +107,6 @@ install-indep: $(CURDIR)/debian/libthrift-java/usr/share/java/ # Ruby - mkdir -p $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.8 && \ - cp $(CURDIR)/lib/rb/lib/thrift.rb \ - $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.8 - cp -r $(CURDIR)/lib/rb/lib/thrift \ - $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.8 mkdir -p $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1 && \ cp $(CURDIR)/lib/rb/lib/thrift.rb \ $(CURDIR)/debian/ruby-thrift/usr/lib/ruby/1.9.1 http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/__init__.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/__init__.py b/test/crossrunner/__init__.py index 06de2d0..584cc07 100644 --- a/test/crossrunner/__init__.py +++ b/test/crossrunner/__init__.py @@ -17,9 +17,8 @@ # under the License. # -from crossrunner.test import test_name -from crossrunner.collect import collect_tests -from crossrunner.run import TestDispatcher -from crossrunner.report import generate_known_failures -from crossrunner.report import load_known_failures -from crossrunner.prepare import prepare +from .test import test_name +from .collect import collect_tests +from .run import TestDispatcher +from .report import generate_known_failures, load_known_failures +from .prepare import prepare http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/collect.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/collect.py b/test/crossrunner/collect.py index 145afef..c6e33e9 100644 --- a/test/crossrunner/collect.py +++ b/test/crossrunner/collect.py @@ -20,7 +20,7 @@ import platform from itertools import product -from crossrunner.util import merge_dict +from .util import merge_dict # Those keys are passed to execution as is. # Note that there are keys other than these, namely: http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/compat.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/compat.py b/test/crossrunner/compat.py index 70992f6..6ab9d71 100644 --- a/test/crossrunner/compat.py +++ b/test/crossrunner/compat.py @@ -13,9 +13,12 @@ if sys.version_info[0] == 2: b = s.decode(_ENCODE) return b.join(bin_args).encode(_ENCODE) + logfile_open = open + else: path_join = os.path.join + str_join = str.join - def str_join(s, l): - return s.join(l) + def logfile_open(*args): + return open(*args, errors='replace') http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/prepare.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/prepare.py b/test/crossrunner/prepare.py index 6e4f6ee..c6784af 100644 --- a/test/crossrunner/prepare.py +++ b/test/crossrunner/prepare.py @@ -20,7 +20,7 @@ import os import subprocess -from crossrunner.collect import collect_testlibs +from .collect import collect_testlibs def prepare(config_dict, testdir, server_match, client_match): http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/report.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/report.py b/test/crossrunner/report.py index bcfe181..defc486 100644 --- a/test/crossrunner/report.py +++ b/test/crossrunner/report.py @@ -17,6 +17,7 @@ # under the License. # +from __future__ import print_function import datetime import json import multiprocessing @@ -28,7 +29,7 @@ import sys import time import traceback -from .compat import path_join, str_join +from .compat import logfile_open, path_join, str_join from .test import TestEntry LOG_DIR = 'log' @@ -44,7 +45,7 @@ def generate_known_failures(testdir, overwrite, save, out): if not r[success_index]: yield TestEntry.get_name(*r) try: - with open(os.path.join(testdir, RESULT_JSON), 'r') as fp: + with logfile_open(os.path.join(testdir, RESULT_JSON), 'r') as fp: results = json.load(fp) except IOError: sys.stderr.write('Unable to load last result. Did you run tests ?\n') @@ -67,7 +68,7 @@ def generate_known_failures(testdir, overwrite, save, out): def load_known_failures(testdir): try: - with open(os.path.join(testdir, FAIL_JSON % platform.system()), 'r') as fp: + with logfile_open(os.path.join(testdir, FAIL_JSON % platform.system()), 'r') as fp: return json.load(fp) except IOError: return [] @@ -138,16 +139,7 @@ class ExecReporter(TestReporter): self._lock.release() def killed(self): - self._lock.acquire() - try: - if self.out and not self.out.closed: - self._print_footer() - self._close() - self.out = None - else: - self._log.debug('Output stream is not available.') - finally: - self._lock.release() + self.end(None) _init_failure_exprs = { 'server': list(map(re.compile, [ @@ -177,8 +169,7 @@ class ExecReporter(TestReporter): server_logfile = self.logpath # need to handle unicode errors on Python 3 - kwargs = {} if sys.version_info[0] < 3 else {'errors': 'replace'} - with open(server_logfile, 'r', **kwargs) as fp: + with logfile_open(server_logfile, 'r') as fp: if any(map(match, fp)): return True except (KeyboardInterrupt, SystemExit): @@ -345,12 +336,12 @@ class SummaryReporter(TestReporter): def _assemble_log(self, title, indexes): if len(indexes) > 0: def add_prog_log(fp, test, prog_kind): - fp.write('*************************** %s message ***************************\n' - % prog_kind) + print('*************************** %s message ***************************' % prog_kind, + file=fp) path = self.test_logfile(test.name, prog_kind, self.testdir) - kwargs = {} if sys.version_info[0] < 3 else {'errors': 'replace'} - with open(path, 'r', **kwargs) as prog_fp: - fp.write(prog_fp.read()) + if os.path.exists(path): + with logfile_open(path, 'r') as prog_fp: + print(prog_fp.read(), file=fp) filename = title.replace(' ', '_') + '.log' with open(os.path.join(self.logdir, filename), 'w+') as fp: for test in map(self._tests.__getitem__, indexes): @@ -358,7 +349,7 @@ class SummaryReporter(TestReporter): add_prog_log(fp, test, test.server.kind) add_prog_log(fp, test, test.client.kind) fp.write('**********************************************************************\n\n') - self.out.write('%s are logged to test/%s/%s\n' % (title.capitalize(), LOG_DIR, filename)) + print('%s are logged to test/%s/%s' % (title.capitalize(), LOG_DIR, filename)) def end(self): self._print_footer() http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/run.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/run.py b/test/crossrunner/run.py index 129016c..acba335 100644 --- a/test/crossrunner/run.py +++ b/test/crossrunner/run.py @@ -21,15 +21,14 @@ import contextlib import multiprocessing import multiprocessing.managers import os -import sys import platform import random -import socket import signal +import socket import subprocess +import sys import threading import time -import traceback from .compat import str_join from .test import TestEntry, domain_socket_path @@ -165,10 +164,10 @@ def run_test(testdir, test_dict, async=True, max_retry=3): stop.set() return None except Exception as ex: - logger.warn('Error while executing test : %s' % str(ex)) + logger.warn('%s', ex) if not async: raise - logger.info(traceback.print_exc()) + logger.debug('Error executing [%s]', test.name, exc_info=sys.exc_info()) return RESULT_ERROR http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/crossrunner/test.py ---------------------------------------------------------------------- diff --git a/test/crossrunner/test.py b/test/crossrunner/test.py index 63219e1..49ba7d3 100644 --- a/test/crossrunner/test.py +++ b/test/crossrunner/test.py @@ -22,8 +22,7 @@ import multiprocessing import os import sys from .compat import path_join - -from crossrunner.util import merge_dict +from .util import merge_dict def domain_socket_path(port): http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/dart/test_client/bin/main.dart ---------------------------------------------------------------------- diff --git a/test/dart/test_client/bin/main.dart b/test/dart/test_client/bin/main.dart index 48c6b3c..5ad3cde 100644 --- a/test/dart/test_client/bin/main.dart +++ b/test/dart/test_client/bin/main.dart @@ -104,7 +104,7 @@ ArgResults _parseArgs(List<String> args) { parser.addOption('port', defaultsTo: '9090', help: 'The port to connect to'); parser.addOption('transport', defaultsTo: 'buffered', - allowed: ['buffered', 'framed'], + allowed: ['buffered', 'framed', 'http'], help: 'The transport name', allowedHelp: { 'buffered': 'TBufferedTransport', http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/known_failures_Linux.json ---------------------------------------------------------------------- diff --git a/test/known_failures_Linux.json b/test/known_failures_Linux.json index b05f61c..2293c5c 100644 --- a/test/known_failures_Linux.json +++ b/test/known_failures_Linux.json @@ -1,14 +1,12 @@ [ - "c_glib-rb_binary-accel_buffered-ip", - "c_glib-rb_binary-accel_framed-ip", - "c_glib-rb_binary_buffered-ip", - "c_glib-rb_binary_framed-ip", "cpp-cpp_binary_http-domain", "cpp-cpp_binary_http-ip", "cpp-cpp_compact_http-domain", "cpp-cpp_header_http-domain", "cpp-cpp_header_http-ip", "cpp-cpp_json_http-ip", + "cpp-dart_binary_http-ip", + "cpp-dart_json_http-ip", "cpp-hs_json_buffered-ip", "cpp-hs_json_framed-ip", "cpp-hs_json_http-ip", @@ -18,8 +16,8 @@ "cpp-java_compact_http-ip-ssl", "cpp-java_json_http-ip", "cpp-java_json_http-ip-ssl", - "cpp-nodejs_json_buffered-ip-ssl", - "cpp-rb_json_buffered-ip", + "cpp-perl_binary_buffered-ip-ssl", + "cpp-perl_binary_framed-ip-ssl", "csharp-cpp_binary_buffered-ip-ssl", "csharp-cpp_binary_framed-ip-ssl", "csharp-cpp_compact_buffered-ip-ssl", @@ -42,19 +40,18 @@ "csharp-nodejs_binary_framed-ip-ssl", "csharp-nodejs_compact_buffered-ip-ssl", "csharp-nodejs_compact_framed-ip-ssl", - "csharp-nodejs_json_buffered-ip", "csharp-nodejs_json_buffered-ip-ssl", "csharp-nodejs_json_framed-ip-ssl", + "csharp-perl_binary_buffered-ip-ssl", + "csharp-perl_binary_framed-ip-ssl", "erl-cpp_compact_buffered-ip", "erl-cpp_compact_buffered-ip-ssl", "erl-cpp_compact_framed-ip", "erl-cpp_compact_framed-ip-ssl", - "erl-go_binary_buffered-ip-ssl", - "erl-go_binary_framed-ip-ssl", - "erl-go_compact_buffered-ip-ssl", - "erl-go_compact_framed-ip-ssl", "erl-nodejs_binary_buffered-ip", "erl-nodejs_compact_buffered-ip", + "erl-perl_binary_buffered-ip-ssl", + "erl-perl_binary_framed-ip-ssl", "erl-rb_binary-accel_buffered-ip", "erl-rb_binary-accel_framed-ip", "erl-rb_binary_buffered-ip", @@ -92,24 +89,30 @@ "java-hs_json_buffered-ip", "java-hs_json_fastframed-framed-ip", "java-hs_json_framed-ip", - "nodejs-csharp_compact_buffered-ip-ssl", - "nodejs-csharp_compact_framed-ip-ssl", - "nodejs-csharp_json_buffered-ip", - "nodejs-csharp_json_buffered-ip-ssl", - "nodejs-csharp_json_framed-ip", - "nodejs-csharp_json_framed-ip-ssl", + "java-perl_binary_buffered-ip-ssl", + "java-perl_binary_fastframed-framed-ip-ssl", + "java-perl_binary_framed-ip-ssl", "nodejs-hs_binary_buffered-ip", "nodejs-hs_binary_framed-ip", "nodejs-hs_compact_buffered-ip", "nodejs-hs_compact_framed-ip", "nodejs-hs_json_buffered-ip", "nodejs-hs_json_framed-ip", - "nodejs-rb_json_buffered-ip", + "nodejs-perl_binary_buffered-ip-ssl", + "nodejs-perl_binary_framed-ip-ssl", + "perl-perl_binary_buffered-ip-ssl", + "perl-perl_binary_framed-ip-ssl", "perl-php_binary_framed-ip", "py-hs_json_buffered-ip", "py-hs_json_framed-ip", + "py-perl_accel-binary_buffered-ip-ssl", + "py-perl_accel-binary_framed-ip-ssl", + "py-perl_binary_buffered-ip-ssl", + "py-perl_binary_framed-ip-ssl", "py3-hs_json_buffered-ip", "py3-hs_json_framed-ip", + "py3-perl_binary_buffered-ip-ssl", + "py3-perl_binary_framed-ip-ssl", "rb-hs_json_buffered-ip", "rb-hs_json_framed-ip" -] \ No newline at end of file +] http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/rb/integration/TestClient.rb ---------------------------------------------------------------------- diff --git a/test/rb/integration/TestClient.rb b/test/rb/integration/TestClient.rb index 6aec596..15dcbfd 100755 --- a/test/rb/integration/TestClient.rb +++ b/test/rb/integration/TestClient.rb @@ -318,9 +318,9 @@ class SimpleClientTest < Test::Unit::TestCase def test_oneway p 'test_oneway' time1 = Time.now.to_f - @client.testOneway(3) + @client.testOneway(1) time2 = Time.now.to_f - assert_equal((time2-time1)*1000000<400, true) + assert_operator (time2-time1), :<, 0.1 end end http://git-wip-us.apache.org/repos/asf/thrift/blob/a6ab1f5e/test/tests.json ---------------------------------------------------------------------- diff --git a/test/tests.json b/test/tests.json index 2c1aa70..be7d52b 100644 --- a/test/tests.json +++ b/test/tests.json @@ -325,6 +325,7 @@ "server": { "delay": 3, "command": [ + "mono", "TestClientServer.exe", "server" ] @@ -332,6 +333,7 @@ "client": { "timeout": 9, "command": [ + "mono", "TestClientServer.exe", "client" ] @@ -451,6 +453,7 @@ ] }, "server": { + "delay": 5, "command": [ "erl", "+K",
