Php 7.3 fix (#5434) * Inherit from message instead of implement When regestering class (implmenets other class) during MINIT, zend_class_implements would call zend_class_entry->interface_gets_implemented(). In PHP-7.3 interface_gets_implemented shares the same location with create_object. However, during MINIT, the global object storeage hasn't been initialized. And thus, caused segment fault in php 7.3. * Use zend_string_init where interned string may be the value. zend_string_dup will keep using the existing interned string. In php 7.3, interned string cannot be destroyed from user's code. * Uncommment debug code * Use latest phpunit for each php versions * Revert change in Dockerfile * Update php test to use the new docker image * Update composer * Change docker organization * Update phpunit * Debug phpunit * Store phpunit into bin dir in docker image * Install valgrind to docker * Fix compatibility test * Remove generated_service_test from compatibility c extension test * Update 32bit php test to the new docker image * Install bison * Fix build.sh * Fix DOCKERIMAGE_PREFIX * Fix basename * Add comment to build_and_run_docker2.sh * Remove commented code * Fix comments
diff --git a/php/tests/array_test.php b/php/tests/array_test.php index 36a649e..b008433 100644 --- a/php/tests/array_test.php +++ b/php/tests/array_test.php
@@ -7,7 +7,7 @@ use Foo\TestMessage; use Foo\TestMessage\Sub; -class RepeatedFieldTest extends PHPUnit_Framework_TestCase +class RepeatedFieldTest extends \PHPUnit\Framework\TestCase { #########################################################
diff --git a/php/tests/compatibility_test.sh b/php/tests/compatibility_test.sh index dc8de5d..f4af524 100755 --- a/php/tests/compatibility_test.sh +++ b/php/tests/compatibility_test.sh
@@ -123,8 +123,12 @@ sed -i.bak '/php_implementation_test.php/d' phpunit.xml sed -i.bak '/generated_phpdoc_test.php/d' phpunit.xml sed -i.bak 's/generated_phpdoc_test.php//g' tests/test.sh +sed -i.bak 's/generated_service_test.php//g' tests/test.sh sed -i.bak '/memory_leak_test.php/d' tests/test.sh sed -i.bak '/^ public function testTimestamp()$/,/^ }$/d' tests/well_known_test.php +sed -i.bak 's/PHPUnit_Framework_TestCase/\\PHPUnit\\Framework\\TestCase/g' tests/array_test.php +sed -i.bak 's/PHPUnit_Framework_TestCase/\\PHPUnit\\Framework\\TestCase/g' tests/map_field_test.php +sed -i.bak 's/PHPUnit_Framework_TestCase/\\PHPUnit\\Framework\\TestCase/g' tests/test_base.php for t in "${tests[@]}" do remove_error_test tests/$t
diff --git a/php/tests/encode_decode_test.php b/php/tests/encode_decode_test.php index 8168eeb..06f9a90 100644 --- a/php/tests/encode_decode_test.php +++ b/php/tests/encode_decode_test.php
@@ -31,6 +31,7 @@ { $m = new TestMessage(); $m->mergeFromJsonString("{\"optionalInt32\":1}"); + $this->assertEquals(1, $m->getOptionalInt32()); } public function testDecodeTopLevelBoolValue() @@ -276,6 +277,7 @@ $to = new TestPackedMessage(); $to->mergeFromString(TestUtil::getGoldenTestPackedMessage()); TestUtil::assertTestPackedMessage($to); + $this->assertTrue(true); } public function testPackedDecodeUnpacked() @@ -283,6 +285,7 @@ $to = new TestPackedMessage(); $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage()); TestUtil::assertTestPackedMessage($to); + $this->assertTrue(true); } public function testUnpackedEncode() @@ -298,6 +301,7 @@ $to = new TestUnpackedMessage(); $to->mergeFromString(TestUtil::getGoldenTestPackedMessage()); TestUtil::assertTestPackedMessage($to); + $this->assertTrue(true); } public function testUnpackedDecodeUnpacked() @@ -305,6 +309,7 @@ $to = new TestUnpackedMessage(); $to->mergeFromString(TestUtil::getGoldenTestUnpackedMessage()); TestUtil::assertTestPackedMessage($to); + $this->assertTrue(true); } public function testDecodeInt64() @@ -361,6 +366,7 @@ $data = hex2bin('c80501'); $m = new TestMessage(); $m->mergeFromString($data); + $this->assertTrue(true); } public function testEncodeNegativeInt32()
diff --git a/php/tests/generated_class_test.php b/php/tests/generated_class_test.php index 96dad22..38c3809 100644 --- a/php/tests/generated_class_test.php +++ b/php/tests/generated_class_test.php
@@ -260,12 +260,14 @@ { $m = new TestMessage(); $m->setOptionalNestedEnum(NestedEnum::ZERO); + $this->assertTrue(true); } public function testLegacyNestedEnum() { $m = new TestMessage(); $m->setOptionalNestedEnum(\Foo\TestMessage_NestedEnum::ZERO); + $this->assertTrue(true); } public function testLegacyTypehintWithNestedEnums() @@ -405,6 +407,7 @@ $m = new TestMessage(); $hex = hex2bin("ff"); $m->setOptionalBytes($hex); + $this->assertTrue(true); } ######################################################### @@ -709,6 +712,8 @@ // test nested messages $sub = new NoNamespaceMessage\NestedMessage(); $n->setNestedMessage($sub); + + $this->assertTrue(true); } public function testEnumWithoutNamespace() @@ -718,6 +723,7 @@ $repeatedNoNamespaceEnum = $m->getRepeatedNoNamespaceEnum(); $repeatedNoNamespaceEnum[] = NoNameSpaceEnum::VALUE_A; $m->setRepeatedNoNamespaceEnum($repeatedNoNamespaceEnum); + $this->assertTrue(true); } ######################################################### @@ -1262,6 +1268,8 @@ $m = \Upper_enum_value\NotAllowed::NULL; $m = \Upper_enum_value\NotAllowed::VOID; $m = \Upper_enum_value\NotAllowed::ITERABLE; + + $this->assertTrue(true); } ######################################################### @@ -1297,6 +1305,7 @@ { $m = new testLowerCaseMessage(); $n = testLowerCaseEnum::VALUE; + $this->assertTrue(true); } ######################################################### @@ -1363,6 +1372,7 @@ ]); TestUtil::assertTestMessage($m); + $this->assertTrue(true); } #########################################################
diff --git a/php/tests/map_field_test.php b/php/tests/map_field_test.php index 447bdd9..0260879 100644 --- a/php/tests/map_field_test.php +++ b/php/tests/map_field_test.php
@@ -7,7 +7,7 @@ use Foo\TestMessage; use Foo\TestMessage\Sub; -class MapFieldTest extends PHPUnit_Framework_TestCase { +class MapFieldTest extends \PHPUnit\Framework\TestCase { ######################################################### # Test int32 field.
diff --git a/php/tests/test_base.php b/php/tests/test_base.php index 80f603c..27efc87 100644 --- a/php/tests/test_base.php +++ b/php/tests/test_base.php
@@ -4,7 +4,7 @@ use Foo\TestEnum; use Foo\TestMessage\Sub; -class TestBase extends PHPUnit_Framework_TestCase +class TestBase extends \PHPUnit\Framework\TestCase { public function setFields(TestMessage $m) @@ -338,5 +338,6 @@ // This test is to avoid the warning of no test by php unit. public function testNone() { + $this->assertTrue(true); } }
diff --git a/php/tests/well_known_test.php b/php/tests/well_known_test.php index db5d5a7..a16e070 100644 --- a/php/tests/well_known_test.php +++ b/php/tests/well_known_test.php
@@ -48,6 +48,7 @@ public function testImportDescriptorProto() { $msg = new TestImportDescriptorProto(); + $this->assertTrue(true); } public function testAny()