xref: /aosp_15_r20/external/protobuf/php/tests/compatibility_test.sh (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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