From 25abd7b7e7a6e7f3dfabe6b3a762e2346b2ae185 Mon Sep 17 00:00:00 2001 From: Paul Yang Date: Fri, 5 May 2017 11:14:11 -0700 Subject: Add compatibility test for php. (#3041) * Add compatibility test for php. * Revert API incompatible change. --- .gitignore | 2 + Makefile.am | 1 + jenkins/buildcmds/pull_request_32.sh | 2 +- php/tests/compatibility_test.sh | 111 +++++++++++++++++++++++++++++++++++ php/tests/test.sh | 4 +- tests.sh | 13 +++- 6 files changed, 129 insertions(+), 4 deletions(-) create mode 100755 php/tests/compatibility_test.sh diff --git a/.gitignore b/.gitignore index b8356118..af914125 100644 --- a/.gitignore +++ b/.gitignore @@ -138,6 +138,8 @@ conformance/conformance-php-c # php test output composer.lock php/tests/generated/ +php/tests/old_protoc +php/tests/protobuf/ php/ext/google/protobuf/.libs/ php/ext/google/protobuf/Makefile.fragments php/ext/google/protobuf/Makefile.global diff --git a/Makefile.am b/Makefile.am index f1111898..04b4f4a6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -651,6 +651,7 @@ php_EXTRA_DIST= \ php/src/GPBMetadata/Google/Protobuf/Internal/Descriptor.php \ php/tests/array_test.php \ php/tests/autoload.php \ + php/tests/compatibility_test.sh \ php/tests/encode_decode_test.php \ php/tests/gdb_test.sh \ php/tests/generated_class_test.php \ diff --git a/jenkins/buildcmds/pull_request_32.sh b/jenkins/buildcmds/pull_request_32.sh index 99df2971..bf0fb7ff 100755 --- a/jenkins/buildcmds/pull_request_32.sh +++ b/jenkins/buildcmds/pull_request_32.sh @@ -12,5 +12,5 @@ export DOCKERFILE_DIR=jenkins/docker32 export DOCKER_RUN_SCRIPT=jenkins/pull_request_in_docker.sh export OUTPUT_DIR=testoutput -export TEST_SET="php_all" +export TEST_SET="php_all_32" ./jenkins/build_and_run_docker.sh diff --git a/php/tests/compatibility_test.sh b/php/tests/compatibility_test.sh new file mode 100755 index 00000000..e05b2af1 --- /dev/null +++ b/php/tests/compatibility_test.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +use_php() { + VERSION=$1 + PHP=`which php` + PHP_CONFIG=`which php-config` + PHPIZE=`which phpize` + ln -sfn "/usr/local/php-${VERSION}/bin/php" $PHP + ln -sfn "/usr/local/php-${VERSION}/bin/php-config" $PHP_CONFIG + ln -sfn "/usr/local/php-${VERSION}/bin/phpize" $PHPIZE +} + +generate_proto() { + PROTOC1=$1 + PROTOC2=$2 + + rm -rf generated + mkdir generated + + $PROTOC1 --php_out=generated proto/test_include.proto + $PROTOC2 --php_out=generated proto/test.proto proto/test_no_namespace.proto proto/test_prefix.proto + pushd ../../src + $PROTOC2 --php_out=../php/tests/generated google/protobuf/empty.proto + $PROTOC2 --php_out=../php/tests/generated -I../php/tests -I. ../php/tests/proto/test_import_descriptor_proto.proto + popd +} + +set -ex + +# Change to the script's directory. +cd $(dirname $0) + +# The old version of protobuf that we are testing compatibility against. +case "$1" in + ""|3.3.0) + OLD_VERSION=3.3.0 + OLD_VERSION_PROTOC=http://repo1.maven.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0-linux-x86_64.exe + ;; + *) + echo "[ERROR]: Unknown version number: $1" + exit 1 + ;; +esac + +# Extract the latest protobuf version number. +VERSION_NUMBER=`grep "PHP_PROTOBUF_VERSION" ../ext/google/protobuf/protobuf.h | sed "s|#define PHP_PROTOBUF_VERSION \"\(.*\)\"|\1|"` + +echo "Running compatibility tests between $VERSION_NUMBER and $OLD_VERSION" + +# Check protoc +[ -f ../../src/protoc ] || { + echo "[ERROR]: Please build protoc first." + exit 1 +} + +# Download old test. +rm -rf protobuf +git clone https://github.com/google/protobuf.git +pushd protobuf +git checkout v$OLD_VERSION +popd + +# Build and copy the new runtime +use_php 5.5 +pushd ../ext/google/protobuf +make clean || true +phpize && ./configure && make +popd + +rm -rf protobuf/php/ext +rm -rf protobuf/php/src +cp -r ../ext protobuf/php/ext/ +cp -r ../src protobuf/php/src/ + +# Download old version protoc compiler (for linux) +wget $OLD_VERSION_PROTOC -O old_protoc +chmod +x old_protoc + +NEW_PROTOC=`pwd`/../../src/protoc +OLD_PROTOC=`pwd`/old_protoc +cd protobuf/php +cp -r /usr/local/vendor-5.5 vendor +wget https://phar.phpunit.de/phpunit-4.8.0.phar -O /usr/bin/phpunit +cd tests + +# Test A.1: +# proto set 1: use old version +# proto set 2 which may import protos in set 1: use old version +generate_proto $OLD_PROTOC $OLD_PROTOC +./test.sh +pushd .. +phpunit +popd + +# Test A.2: +# proto set 1: use new version +# proto set 2 which may import protos in set 1: use old version +generate_proto $NEW_PROTOC $OLD_PROTOC +./test.sh +pushd .. +phpunit +popd + +# Test A.3: +# proto set 1: use old version +# proto set 2 which may import protos in set 1: use new version +generate_proto $OLD_PROTOC $NEW_PROTOC +./test.sh +pushd .. +phpunit +popd diff --git a/php/tests/test.sh b/php/tests/test.sh index fc3f0186..69849ab3 100755 --- a/php/tests/test.sh +++ b/php/tests/test.sh @@ -2,10 +2,10 @@ # Compile c extension pushd ../ext/google/protobuf/ -make clean +make clean || true set -e # Add following in configure for debug: --enable-debug CFLAGS='-g -O0' -phpize && ./configure --enable-debug CFLAGS='-g -O0' && make +phpize && ./configure CFLAGS='-g -O0' && make popd tests=( array_test.php encode_decode_test.php generated_class_test.php map_field_test.php well_known_test.php ) diff --git a/tests.sh b/tests.sh index edb37da7..96550cb9 100755 --- a/tests.sh +++ b/tests.sh @@ -545,7 +545,12 @@ build_php7.0_mac() { popd } -build_php_all() { +build_php_compatibility() { + internal_build_cpp + php/tests/compatibility_test.sh +} + +build_php_all_32() { build_php5.5 build_php5.6 build_php7.0 @@ -557,6 +562,11 @@ build_php_all() { build_php7.0_zts_c } +build_php_all() { + build_php_all_32 + 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 @@ -595,6 +605,7 @@ Usage: $0 { cpp | php5.6_c | php7.0 | php7.0_c | + php_compatibility | php_all) " exit 1 -- cgit v1.2.3