浏览代码

Merge pull request #4916 from xfxyjwf/docker

Add cpp tests under release docker image.
Feng Xiao 7 年之前
父节点
当前提交
07d69d04a6
共有 5 个文件被更改,包括 29 次插入107 次删除
  1. 5 0
      autogen.sh
  2. 11 3
      kokoro/linux/cpp_distcheck/build.sh
  3. 1 1
      kokoro/linux/pull_request_in_docker.sh
  4. 6 6
      src/google/protobuf/map_entry.h
  5. 6 97
      tests.sh

+ 5 - 0
autogen.sh

@@ -28,6 +28,11 @@ fi
 
 set -ex
 
+# The absence of a m4 directory in googletest causes autoreconf to fail when
+# building under the CentOS docker image. It's a warning in regular build on
+# Ubuntu/gLinux as well.
+mkdir -p third_party/googletest/m4
+
 # TODO(kenton):  Remove the ",no-obsolete" part and fix the resulting warnings.
 autoreconf -f -i -Wall,no-obsolete
 

+ 11 - 3
kokoro/linux/cpp_distcheck/build.sh

@@ -5,7 +5,15 @@
 # Change to repo root
 cd $(dirname $0)/../../..
 
-# Prepare worker environment to run tests
-source kokoro/linux/prepare_build_linux_rc
-
 ./tests.sh cpp_distcheck
+
+# Run tests under release docker image.
+DOCKER_IMAGE_NAME=protobuf/protoc_$(sha1sum protoc-artifacts/Dockerfile | cut -f1 -d " ")
+docker pull $DOCKER_IMAGE_NAME
+
+docker run -v $(pwd):/var/local/protobuf --rm $DOCKER_IMAGE_NAME \
+  bash -l /var/local/protobuf/tests.sh cpp || FAILED="true"
+
+if [ "$FAILED" = "true" ]; then
+  exit 1
+fi

+ 1 - 1
kokoro/linux/pull_request_in_docker.sh

@@ -5,7 +5,7 @@
 
 WORKSPACE_BASE=`pwd`
 MY_DIR="$(dirname "$0")"
-TEST_SCRIPT=$MY_DIR/../../tests.sh
+TEST_SCRIPT=./tests.sh
 BUILD_DIR=/tmp/protobuf
 
 set -e  # exit immediately on error

+ 6 - 6
src/google/protobuf/map_entry.h

@@ -95,12 +95,12 @@ class MapEntry
   typedef void InternalArenaConstructable_;
   typedef void DestructorSkippable_;
 
-  using typename MapEntryImpl<Derived, Message, Key, Value, kKeyFieldType,
-                              kValueFieldType,
-                              default_enum_value>::KeyTypeHandler;
-  using typename MapEntryImpl<Derived, Message, Key, Value, kKeyFieldType,
-                              kValueFieldType,
-                              default_enum_value>::ValueTypeHandler;
+  typedef typename MapEntryImpl<
+      Derived, Message, Key, Value, kKeyFieldType, kValueFieldType,
+      default_enum_value>::KeyTypeHandler KeyTypeHandler;
+  typedef typename MapEntryImpl<
+      Derived, Message, Key, Value, kKeyFieldType, kValueFieldType,
+      default_enum_value>::ValueTypeHandler ValueTypeHandler;
   size_t SpaceUsedLong() const override {
     size_t size = sizeof(Derived);
     size += KeyTypeHandler::SpaceUsedInMapEntryLong(this->key_);

+ 6 - 97
tests.sh

@@ -1,14 +1,8 @@
 #!/bin/bash
 #
-# Build and runs tests for the protobuf project.  The tests as written here are
-# used by both Jenkins and Travis, though some specialized logic is required to
-# handle the differences between them.
-
-on_travis() {
-  if [ "$TRAVIS" == "true" ]; then
-    "$@"
-  fi
-}
+# Build and runs tests for the protobuf project. We use this script to run
+# tests on kokoro (Ubuntu and MacOS). It can run locally as well but you
+# will need to make sure the required compilers/tools are available.
 
 # For when some other test needs the C++ main build, including protoc and
 # libprotobuf.
@@ -18,15 +12,6 @@ internal_build_cpp() {
     return
   fi
 
-  if [[ $(uname -s) == "Linux" && "$TRAVIS" == "true" ]]; then
-    # Install GCC 4.8 to replace the default GCC 4.6. We need 4.8 for more
-    # decent C++ 11 support in order to compile conformance tests.
-    sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
-    sudo apt-get update -qq
-    sudo apt-get install -qq g++-4.8
-    export CXX="g++-4.8" CC="gcc-4.8"
-  fi
-
   # Initialize any submodules.
   git submodule update --init --recursive
 
@@ -43,8 +28,6 @@ build_cpp() {
 
   # The benchmark code depends on cmake, so test if it is installed before
   # trying to do the build.
-  # NOTE: The travis macOS images say they have cmake, but the xcode8.1 image
-  # appears to be missing it: https://github.com/travis-ci/travis-ci/issues/6996
   if [[ $(type cmake 2>/dev/null) ]]; then
     # Verify benchmarking code can build successfully.
     cd benchmarks && make cpp-benchmark && cd ..
@@ -121,10 +104,6 @@ build_golang() {
   # Add protoc to the path so that the examples build finds it.
   export PATH="`pwd`/src:$PATH"
 
-  # Install Go and the Go protobuf compiler plugin.
-  on_travis sudo apt-get update -qq
-  on_travis sudo apt-get install -qq golang
-
   export GOPATH="$HOME/gocode"
   mkdir -p "$GOPATH/src/github.com/google"
   rm -f "$GOPATH/src/github.com/google/protobuf"
@@ -139,27 +118,17 @@ use_java() {
   version=$1
   case "$version" in
     jdk7)
-      on_travis sudo apt-get install openjdk-7-jdk
       export PATH=/usr/lib/jvm/java-7-openjdk-amd64/bin:$PATH
       export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
       ;;
     oracle7)
-      if [ "$TRAVIS" == "true" ]; then
-        sudo apt-get install python-software-properties # for apt-add-repository
-        echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 select true" | \
-          sudo debconf-set-selections
-        yes | sudo apt-add-repository ppa:webupd8team/java
-        yes | sudo apt-get install oracle-java7-installer
-      fi;
       export PATH=/usr/lib/jvm/java-7-oracle/bin:$PATH
       export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
       ;;
   esac
 
-  if [ "$TRAVIS" != "true" ]; then
-    MAVEN_LOCAL_REPOSITORY=/var/maven_local_repository
-    MVN="$MVN -e -X --offline -Dmaven.repo.local=$MAVEN_LOCAL_REPOSITORY"
-  fi;
+  MAVEN_LOCAL_REPOSITORY=/var/maven_local_repository
+  MVN="$MVN -e -X --offline -Dmaven.repo.local=$MAVEN_LOCAL_REPOSITORY"
 
   which java
   java -version
@@ -190,12 +159,6 @@ build_java_with_conformance_tests() {
   cd conformance && make test_java && cd ..
 }
 
-build_javanano() {
-  # Java build needs `protoc`.
-  internal_build_cpp
-  cd javanano && $MVN test && cd ..
-}
-
 build_java_jdk7() {
   use_java jdk7
   build_java_with_conformance_tests
@@ -213,38 +176,6 @@ build_java_compatibility() {
   ./test.sh 3.0.0-beta-4
 }
 
-build_javanano_jdk7() {
-  use_java jdk7
-  build_javanano
-}
-build_javanano_oracle7() {
-  use_java oracle7
-  build_javanano
-}
-
-internal_install_python_deps() {
-  if [ "$TRAVIS" != "true" ]; then
-    return;
-  fi
-  # Install tox (OS X doesn't have pip).
-  if [ $(uname -s) == "Darwin" ]; then
-    brew upgrade python
-    python3 -m pip install tox
-  else
-    sudo pip install tox
-  fi
-  # Only install Python2.6/3.x on Linux.
-  if [ $(uname -s) == "Linux" ]; then
-    sudo apt-get install -y python-software-properties # for apt-add-repository
-    sudo apt-add-repository -y ppa:fkrull/deadsnakes
-    sudo apt-get update -qq
-    sudo apt-get install -y python3.3 python3.3-dev
-    sudo apt-get install -y python3.4 python3.4-dev
-    sudo apt-get install -y python3.5 python3.5-dev
-    sudo apt-get install -y python3.6 python3.6-dev
-  fi
-}
-
 build_objectivec_ios() {
   # Reused the build script that takes care of configuring and ensuring things
   # are up to date.  The OS X test runs the objc conformance test, so skip it
@@ -279,9 +210,7 @@ build_objectivec_cocoapods_integration() {
 
 build_python() {
   internal_build_cpp
-  internal_install_python_deps
   cd python
-  # Only test Python 2.6/3.x on Linux
   if [ $(uname -s) == "Linux" ]; then
     envlist=py\{27,33,34,35,36\}-python
   else
@@ -293,11 +222,9 @@ build_python() {
 
 build_python_cpp() {
   internal_build_cpp
-  internal_install_python_deps
   export LD_LIBRARY_PATH=../src/.libs # for Linux
   export DYLD_LIBRARY_PATH=../src/.libs # for OS X
   cd python
-  # Only test Python 3.x on Linux
   if [ $(uname -s) == "Linux" ]; then
     envlist=py\{27,33,34,35,36\}-cpp
   else
@@ -337,21 +264,12 @@ build_ruby25() {
   internal_build_cpp  # For conformance tests.
   cd ruby && bash travis-test.sh ruby-2.5.0 && cd ..
 }
-build_jruby() {
-  internal_build_cpp  # For conformance tests.
-  # TODO(xiaofeng): Upgrade to jruby-9.x. There are some broken jests to be
-  # fixed.
-  cd ruby && bash travis-test.sh jruby-1.7 && cd ..
-}
 build_ruby_all() {
   build_ruby21
   build_ruby22
   build_ruby23
   build_ruby24
   build_ruby25
-  # TODO(teboring): Disable jruby test temperarily for it randomly fails.
-  # https://grpc-testing.appspot.com/job/protobuf_pull_request/735/consoleFull.
-  # build_jruby
 }
 
 build_javascript() {
@@ -632,14 +550,6 @@ build_php_all() {
   build_php_compatibility
 }
 
-# Note: travis currently does not support testing more than one language so the
-# .travis.yml cheats and claims to only be cpp.  If they add multiple language
-# support, this should probably get updated to install steps and/or
-# rvm/gemfile/jdk/etc. entries rather than manually doing the work.
-
-# .travis.yml uses matrix.exclude to block the cases where app-get can't be
-# use to install things.
-
 # -------- main --------
 
 if [ "$#" -ne 1 ]; then
@@ -650,8 +560,6 @@ Usage: $0 { cpp |
             java_jdk7 |
             java_oracle7 |
             java_compatibility |
-            javanano_jdk7 |
-            javanano_oracle7 |
             objectivec_ios |
             objectivec_ios_debug |
             objectivec_ios_release |
@@ -680,4 +588,5 @@ fi
 
 set -e  # exit immediately on error
 set -x  # display all commands
+cd $(dirname $0)
 eval "build_$1"