compatibility_test.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/bin/bash
  2. use_php() {
  3. VERSION=$1
  4. PHP=`which php`
  5. PHP_CONFIG=`which php-config`
  6. PHPIZE=`which phpize`
  7. ln -sfn "/usr/local/php-${VERSION}/bin/php" $PHP
  8. ln -sfn "/usr/local/php-${VERSION}/bin/php-config" $PHP_CONFIG
  9. ln -sfn "/usr/local/php-${VERSION}/bin/phpize" $PHPIZE
  10. }
  11. generate_proto() {
  12. PROTOC1=$1
  13. PROTOC2=$2
  14. rm -rf generated
  15. mkdir generated
  16. $PROTOC1 --php_out=generated proto/test_include.proto
  17. $PROTOC2 --php_out=generated proto/test.proto proto/test_no_namespace.proto proto/test_prefix.proto
  18. pushd ../../src
  19. $PROTOC2 --php_out=../php/tests/generated google/protobuf/empty.proto
  20. $PROTOC2 --php_out=../php/tests/generated -I../php/tests -I. ../php/tests/proto/test_import_descriptor_proto.proto
  21. popd
  22. }
  23. set -ex
  24. # Change to the script's directory.
  25. cd $(dirname $0)
  26. # The old version of protobuf that we are testing compatibility against.
  27. case "$1" in
  28. ""|3.3.0)
  29. OLD_VERSION=3.3.0
  30. OLD_VERSION_PROTOC=http://repo1.maven.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0-linux-x86_64.exe
  31. ;;
  32. *)
  33. echo "[ERROR]: Unknown version number: $1"
  34. exit 1
  35. ;;
  36. esac
  37. # Extract the latest protobuf version number.
  38. VERSION_NUMBER=`grep "PHP_PROTOBUF_VERSION" ../ext/google/protobuf/protobuf.h | sed "s|#define PHP_PROTOBUF_VERSION \"\(.*\)\"|\1|"`
  39. echo "Running compatibility tests between $VERSION_NUMBER and $OLD_VERSION"
  40. # Check protoc
  41. [ -f ../../src/protoc ] || {
  42. echo "[ERROR]: Please build protoc first."
  43. exit 1
  44. }
  45. # Download old test.
  46. rm -rf protobuf
  47. git clone https://github.com/google/protobuf.git
  48. pushd protobuf
  49. git checkout v$OLD_VERSION
  50. popd
  51. # Build and copy the new runtime
  52. use_php 5.5
  53. pushd ../ext/google/protobuf
  54. make clean || true
  55. phpize && ./configure && make
  56. popd
  57. rm -rf protobuf/php/ext
  58. rm -rf protobuf/php/src
  59. cp -r ../ext protobuf/php/ext/
  60. cp -r ../src protobuf/php/src/
  61. # Download old version protoc compiler (for linux)
  62. wget $OLD_VERSION_PROTOC -O old_protoc
  63. chmod +x old_protoc
  64. NEW_PROTOC=`pwd`/../../src/protoc
  65. OLD_PROTOC=`pwd`/old_protoc
  66. cd protobuf/php
  67. cp -r /usr/local/vendor-5.5 vendor
  68. wget https://phar.phpunit.de/phpunit-4.8.0.phar -O /usr/bin/phpunit
  69. cd tests
  70. # Test A.1:
  71. # proto set 1: use old version
  72. # proto set 2 which may import protos in set 1: use old version
  73. generate_proto $OLD_PROTOC $OLD_PROTOC
  74. ./test.sh
  75. pushd ..
  76. phpunit
  77. popd
  78. # Test A.2:
  79. # proto set 1: use new version
  80. # proto set 2 which may import protos in set 1: use old version
  81. generate_proto $NEW_PROTOC $OLD_PROTOC
  82. ./test.sh
  83. pushd ..
  84. phpunit
  85. popd
  86. # Test A.3:
  87. # proto set 1: use old version
  88. # proto set 2 which may import protos in set 1: use new version
  89. generate_proto $OLD_PROTOC $NEW_PROTOC
  90. ./test.sh
  91. pushd ..
  92. phpunit
  93. popd