aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Paul Yang <TeBoring@users.noreply.github.com>2017-05-05 11:14:11 -0700
committerGravatar GitHub <noreply@github.com>2017-05-05 11:14:11 -0700
commit25abd7b7e7a6e7f3dfabe6b3a762e2346b2ae185 (patch)
tree295af0fef9c2a8240d06de6920eaa7fd453564d9
parent483396068d7788efca4d51584d160dc4da28c99d (diff)
Add compatibility test for php. (#3041)
* Add compatibility test for php. * Revert API incompatible change.
-rw-r--r--.gitignore2
-rw-r--r--Makefile.am1
-rwxr-xr-xjenkins/buildcmds/pull_request_32.sh2
-rwxr-xr-xphp/tests/compatibility_test.sh111
-rwxr-xr-xphp/tests/test.sh4
-rwxr-xr-xtests.sh13
6 files changed, 129 insertions, 4 deletions
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