1*1b3f573fSAndroid Build Coastguard Worker#!/bin/bash 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Workerfunction generate_proto() { 4*1b3f573fSAndroid Build Coastguard Worker PROTOC1=$1 5*1b3f573fSAndroid Build Coastguard Worker PROTOC2=$2 6*1b3f573fSAndroid Build Coastguard Worker 7*1b3f573fSAndroid Build Coastguard Worker rm -rf generated 8*1b3f573fSAndroid Build Coastguard Worker mkdir generated 9*1b3f573fSAndroid Build Coastguard Worker 10*1b3f573fSAndroid Build Coastguard Worker $PROTOC1 --php_out=generated proto/test_include.proto 11*1b3f573fSAndroid Build Coastguard Worker $PROTOC2 --php_out=generated \ 12*1b3f573fSAndroid Build Coastguard Worker -I../../src -I. \ 13*1b3f573fSAndroid Build Coastguard Worker proto/empty/echo.proto \ 14*1b3f573fSAndroid Build Coastguard Worker proto/test.proto \ 15*1b3f573fSAndroid Build Coastguard Worker proto/test_no_namespace.proto \ 16*1b3f573fSAndroid Build Coastguard Worker proto/test_prefix.proto \ 17*1b3f573fSAndroid Build Coastguard Worker proto/test_php_namespace.proto \ 18*1b3f573fSAndroid Build Coastguard Worker proto/test_empty_php_namespace.proto \ 19*1b3f573fSAndroid Build Coastguard Worker proto/test_reserved_enum_lower.proto \ 20*1b3f573fSAndroid Build Coastguard Worker proto/test_reserved_enum_upper.proto \ 21*1b3f573fSAndroid Build Coastguard Worker proto/test_reserved_enum_value_lower.proto \ 22*1b3f573fSAndroid Build Coastguard Worker proto/test_reserved_enum_value_upper.proto \ 23*1b3f573fSAndroid Build Coastguard Worker proto/test_reserved_message_lower.proto \ 24*1b3f573fSAndroid Build Coastguard Worker proto/test_reserved_message_upper.proto \ 25*1b3f573fSAndroid Build Coastguard Worker proto/test_service.proto \ 26*1b3f573fSAndroid Build Coastguard Worker proto/test_service_namespace.proto \ 27*1b3f573fSAndroid Build Coastguard Worker proto/test_wrapper_type_setters.proto \ 28*1b3f573fSAndroid Build Coastguard Worker proto/test_descriptors.proto 29*1b3f573fSAndroid Build Coastguard Worker 30*1b3f573fSAndroid Build Coastguard Worker pushd ../../src 31*1b3f573fSAndroid Build Coastguard Worker $PROTOC2 --php_out=../php/tests/generated -I../php/tests -I. ../php/tests/proto/test_import_descriptor_proto.proto 32*1b3f573fSAndroid Build Coastguard Worker popd 33*1b3f573fSAndroid Build Coastguard Worker} 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker# Remove tests to expect error. These were added to API tests by mistake. 36*1b3f573fSAndroid Build Coastguard Workerfunction remove_error_test() { 37*1b3f573fSAndroid Build Coastguard Worker local TEMPFILE=`tempfile` 38*1b3f573fSAndroid Build Coastguard Worker cat $1 | \ 39*1b3f573fSAndroid Build Coastguard Worker awk -v file=`basename $1` -v dir=`basename $(dirname $1)` ' 40*1b3f573fSAndroid Build Coastguard Worker BEGIN { 41*1b3f573fSAndroid Build Coastguard Worker show = 1 42*1b3f573fSAndroid Build Coastguard Worker } 43*1b3f573fSAndroid Build Coastguard Worker /@expectedException PHPUnit_Framework_Error/ { show = 0; next; } 44*1b3f573fSAndroid Build Coastguard Worker / *\*\// { print; next; } 45*1b3f573fSAndroid Build Coastguard Worker / *}/ { 46*1b3f573fSAndroid Build Coastguard Worker if (!show) { 47*1b3f573fSAndroid Build Coastguard Worker show = 1; 48*1b3f573fSAndroid Build Coastguard Worker next; 49*1b3f573fSAndroid Build Coastguard Worker } 50*1b3f573fSAndroid Build Coastguard Worker } 51*1b3f573fSAndroid Build Coastguard Worker show { print } 52*1b3f573fSAndroid Build Coastguard Worker ' > $TEMPFILE 53*1b3f573fSAndroid Build Coastguard Worker cp $TEMPFILE $1 54*1b3f573fSAndroid Build Coastguard Worker} 55*1b3f573fSAndroid Build Coastguard Worker 56*1b3f573fSAndroid Build Coastguard Workerset -ex 57*1b3f573fSAndroid Build Coastguard Worker 58*1b3f573fSAndroid Build Coastguard Worker# Change to the script's directory. 59*1b3f573fSAndroid Build Coastguard Workercd $(dirname $0) 60*1b3f573fSAndroid Build Coastguard Worker 61*1b3f573fSAndroid Build Coastguard WorkerOLD_VERSION=$1 62*1b3f573fSAndroid Build Coastguard WorkerOLD_VERSION_PROTOC=https://repo1.maven.org/maven2/com/google/protobuf/protoc/$OLD_VERSION/protoc-$OLD_VERSION-linux-x86_64.exe 63*1b3f573fSAndroid Build Coastguard Worker 64*1b3f573fSAndroid Build Coastguard Worker# Extract the latest protobuf version number. 65*1b3f573fSAndroid Build Coastguard WorkerVERSION_NUMBER=`grep "PHP_PROTOBUF_VERSION" ../ext/google/protobuf/protobuf.h | sed "s|#define PHP_PROTOBUF_VERSION \"\(.*\)\"|\1|"` 66*1b3f573fSAndroid Build Coastguard Worker 67*1b3f573fSAndroid Build Coastguard Workerecho "Running compatibility tests between current $VERSION_NUMBER and released $OLD_VERSION" 68*1b3f573fSAndroid Build Coastguard Worker 69*1b3f573fSAndroid Build Coastguard Worker# Check protoc 70*1b3f573fSAndroid Build Coastguard Worker[ -f ../../src/protoc ] || { 71*1b3f573fSAndroid Build Coastguard Worker echo "[ERROR]: Please build protoc first." 72*1b3f573fSAndroid Build Coastguard Worker exit 1 73*1b3f573fSAndroid Build Coastguard Worker} 74*1b3f573fSAndroid Build Coastguard Worker 75*1b3f573fSAndroid Build Coastguard Worker# Download old test. 76*1b3f573fSAndroid Build Coastguard Workerrm -rf protobuf 77*1b3f573fSAndroid Build Coastguard Workergit clone https://github.com/protocolbuffers/protobuf.git 78*1b3f573fSAndroid Build Coastguard Workerpushd protobuf 79*1b3f573fSAndroid Build Coastguard Workergit checkout v$OLD_VERSION 80*1b3f573fSAndroid Build Coastguard Workerpopd 81*1b3f573fSAndroid Build Coastguard Worker 82*1b3f573fSAndroid Build Coastguard Worker# Build and copy the new runtime 83*1b3f573fSAndroid Build Coastguard Workerpushd ../ext/google/protobuf 84*1b3f573fSAndroid Build Coastguard Workermake clean || true 85*1b3f573fSAndroid Build Coastguard Workerphpize && ./configure && make 86*1b3f573fSAndroid Build Coastguard Workerpopd 87*1b3f573fSAndroid Build Coastguard Worker 88*1b3f573fSAndroid Build Coastguard Workerrm -rf protobuf/php/ext 89*1b3f573fSAndroid Build Coastguard Workerrm -rf protobuf/php/src 90*1b3f573fSAndroid Build Coastguard Workercp -r ../ext protobuf/php/ext/ 91*1b3f573fSAndroid Build Coastguard Workercp -r ../src protobuf/php/src/ 92*1b3f573fSAndroid Build Coastguard Worker 93*1b3f573fSAndroid Build Coastguard Worker# Download old version protoc compiler (for linux) 94*1b3f573fSAndroid Build Coastguard Workerwget $OLD_VERSION_PROTOC -O old_protoc 95*1b3f573fSAndroid Build Coastguard Workerchmod +x old_protoc 96*1b3f573fSAndroid Build Coastguard Worker 97*1b3f573fSAndroid Build Coastguard WorkerNEW_PROTOC=`pwd`/../../src/protoc 98*1b3f573fSAndroid Build Coastguard WorkerOLD_PROTOC=`pwd`/old_protoc 99*1b3f573fSAndroid Build Coastguard Workercd protobuf/php 100*1b3f573fSAndroid Build Coastguard Workercomposer install 101*1b3f573fSAndroid Build Coastguard Worker 102*1b3f573fSAndroid Build Coastguard Worker# Remove implementation detail tests. 103*1b3f573fSAndroid Build Coastguard Worker# TODO(teboring): Temporarily disable encode_decode_test.php. In 3.13.0-rc1, 104*1b3f573fSAndroid Build Coastguard Worker# repeated primitive field encoding is changed to packed, which is a bug fix. 105*1b3f573fSAndroid Build Coastguard Worker# However, this fails the compatibility test which hard coded old encoding. 106*1b3f573fSAndroid Build Coastguard Worker# Will re-enable the test after making a release. After the version bump, the 107*1b3f573fSAndroid Build Coastguard Worker# compatibility test will use the updated test code. 108*1b3f573fSAndroid Build Coastguard Workertests=( array_test.php generated_class_test.php map_field_test.php well_known_test.php ) 109*1b3f573fSAndroid Build Coastguard Workersed -i.bak '/php_implementation_test.php/d' phpunit.xml 110*1b3f573fSAndroid Build Coastguard Workersed -i.bak '/generated_phpdoc_test.php/d' phpunit.xml 111*1b3f573fSAndroid Build Coastguard Workersed -i.bak '/encode_decode_test.php/d' phpunit.xml 112*1b3f573fSAndroid Build Coastguard Workersed -i.bak 's/generated_phpdoc_test.php//g' tests/test.sh 113*1b3f573fSAndroid Build Coastguard Workersed -i.bak 's/generated_service_test.php//g' tests/test.sh 114*1b3f573fSAndroid Build Coastguard Workersed -i.bak 's/encode_decode_test.php//g' tests/test.sh 115*1b3f573fSAndroid Build Coastguard Workersed -i.bak '/memory_leak_test.php/d' tests/test.sh 116*1b3f573fSAndroid Build Coastguard Workersed -i.bak '/^ public function testTimestamp()$/,/^ }$/d' tests/well_known_test.php 117*1b3f573fSAndroid Build Coastguard Workersed -i.bak 's/PHPUnit_Framework_TestCase/\\PHPUnit\\Framework\\TestCase/g' tests/array_test.php 118*1b3f573fSAndroid Build Coastguard Workersed -i.bak 's/PHPUnit_Framework_TestCase/\\PHPUnit\\Framework\\TestCase/g' tests/map_field_test.php 119*1b3f573fSAndroid Build Coastguard Workersed -i.bak 's/PHPUnit_Framework_TestCase/\\PHPUnit\\Framework\\TestCase/g' tests/test_base.php 120*1b3f573fSAndroid Build Coastguard Workerfor t in "${tests[@]}" 121*1b3f573fSAndroid Build Coastguard Workerdo 122*1b3f573fSAndroid Build Coastguard Worker remove_error_test tests/$t 123*1b3f573fSAndroid Build Coastguard Workerdone 124*1b3f573fSAndroid Build Coastguard Worker 125*1b3f573fSAndroid Build Coastguard Workercd tests 126*1b3f573fSAndroid Build Coastguard Worker 127*1b3f573fSAndroid Build Coastguard Worker# Test A.1: 128*1b3f573fSAndroid Build Coastguard Worker# proto set 1: use old version 129*1b3f573fSAndroid Build Coastguard Worker# proto set 2 which may import protos in set 1: use old version 130*1b3f573fSAndroid Build Coastguard Workergenerate_proto $OLD_PROTOC $OLD_PROTOC 131*1b3f573fSAndroid Build Coastguard Worker./test.sh 132*1b3f573fSAndroid Build Coastguard Workerpushd .. 133*1b3f573fSAndroid Build Coastguard Worker./vendor/bin/phpunit 134*1b3f573fSAndroid Build Coastguard Workerpopd 135*1b3f573fSAndroid Build Coastguard Worker 136*1b3f573fSAndroid Build Coastguard Worker# Test A.2: 137*1b3f573fSAndroid Build Coastguard Worker# proto set 1: use new version 138*1b3f573fSAndroid Build Coastguard Worker# proto set 2 which may import protos in set 1: use old version 139*1b3f573fSAndroid Build Coastguard Workergenerate_proto $NEW_PROTOC $OLD_PROTOC 140*1b3f573fSAndroid Build Coastguard Worker./test.sh 141*1b3f573fSAndroid Build Coastguard Workerpushd .. 142*1b3f573fSAndroid Build Coastguard Worker./vendor/bin/phpunit 143*1b3f573fSAndroid Build Coastguard Workerpopd 144*1b3f573fSAndroid Build Coastguard Worker 145*1b3f573fSAndroid Build Coastguard Worker# Test A.3: 146*1b3f573fSAndroid Build Coastguard Worker# proto set 1: use old version 147*1b3f573fSAndroid Build Coastguard Worker# proto set 2 which may import protos in set 1: use new version 148*1b3f573fSAndroid Build Coastguard Workergenerate_proto $OLD_PROTOC $NEW_PROTOC 149*1b3f573fSAndroid Build Coastguard Worker./test.sh 150*1b3f573fSAndroid Build Coastguard Workerpushd .. 151*1b3f573fSAndroid Build Coastguard Worker./vendor/bin/phpunit 152*1b3f573fSAndroid Build Coastguard Workerpopd 153