memory_leak_test.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <?php
  2. # phpunit has memory leak by itself. Thus, it cannot be used to test memory leak.
  3. require_once('generated/NoNamespaceEnum.php');
  4. require_once('generated/NoNamespaceMessage.php');
  5. require_once('generated/NoNamespaceMessage/NestedEnum.php');
  6. require_once('generated/NoNamespaceMessage/NestedMessage.php');
  7. require_once('generated/PrefixEmpty.php');
  8. require_once('generated/PrefixTestPrefix.php');
  9. require_once('generated/PrefixTestPrefix/PrefixNestedEnum.php');
  10. require_once('generated/PrefixTestPrefix/PrefixNestedMessage.php');
  11. require_once('generated/TestEmptyNamespace.php');
  12. require_once('generated/TestEmptyNamespace/NestedEnum.php');
  13. require_once('generated/TestEmptyNamespace/NestedMessage.php');
  14. require_once('generated/Bar/TestInclude.php');
  15. require_once('generated/Bar/TestLegacyMessage.php');
  16. require_once('generated/Bar/TestLegacyMessage/NestedEnum.php');
  17. require_once('generated/Bar/TestLegacyMessage/NestedMessage.php');
  18. require_once('generated/Foo/PBARRAY.php');
  19. require_once('generated/Foo/PBEmpty.php');
  20. require_once('generated/Foo/TestAny.php');
  21. require_once('generated/Foo/TestBoolValue.php');
  22. require_once('generated/Foo/TestBytesValue.php');
  23. require_once('generated/Foo/TestEnum.php');
  24. require_once('generated/Foo/TestIncludeNamespaceMessage.php');
  25. require_once('generated/Foo/TestIncludePrefixMessage.php');
  26. require_once('generated/Foo/TestInt32Value.php');
  27. require_once('generated/Foo/TestInt64Value.php');
  28. require_once('generated/Foo/TestMessage.php');
  29. require_once('generated/Foo/TestMessage/PBEmpty.php');
  30. require_once('generated/Foo/TestMessage/NestedEnum.php');
  31. require_once('generated/Foo/TestMessage/Sub.php');
  32. require_once('generated/Foo/TestPackedMessage.php');
  33. require_once('generated/Foo/TestPhpDoc.php');
  34. require_once('generated/Foo/TestRandomFieldOrder.php');
  35. require_once('generated/Foo/TestReverseFieldOrder.php');
  36. require_once('generated/Foo/TestStringValue.php');
  37. require_once('generated/Foo/TestUInt32Value.php');
  38. require_once('generated/Foo/TestUInt64Value.php');
  39. require_once('generated/Foo/TestUnpackedMessage.php');
  40. require_once('generated/Foo/testLowerCaseMessage.php');
  41. require_once('generated/Foo/testLowerCaseEnum.php');
  42. require_once('generated/GPBMetadata/Proto/Test.php');
  43. require_once('generated/TestEmptyPhpNamespace.php');
  44. require_once('generated/GPBMetadata/Proto/TestInclude.php');
  45. require_once('generated/TestNoNamespace.php');
  46. require_once('generated/Metadata/Php/Test/TestPhpNamespace.php');
  47. require_once('generated/GPBMetadata/Proto/TestPrefix.php');
  48. require_once('generated/Php/Test/TestNamespace.php');
  49. require_once('generated/Php/Test/TestNamespace/PBEmpty.php');
  50. require_once('generated/Php/Test/TestNamespace/PBEmpty/NestedEnum.php');
  51. require_once('generated/Php/Test/TestNamespace/PBEmpty/NestedMessage.php');
  52. require_once('generated/Php/Test/TestNamespace/NestedEnum.php');
  53. require_once('generated/Php/Test/TestNamespace/NestedMessage.php');
  54. require_once('test_util.php');
  55. use Google\Protobuf\Internal\RepeatedField;
  56. use Google\Protobuf\Internal\GPBType;
  57. use Foo\TestAny;
  58. use Foo\TestMessage;
  59. use Foo\TestMessage\Sub;
  60. $from = new TestMessage();
  61. TestUtil::setTestMessage($from);
  62. TestUtil::assertTestMessage($from);
  63. $data = $from->serializeToString();
  64. $to = new TestMessage();
  65. $to->mergeFromString($data);
  66. TestUtil::assertTestMessage($to);
  67. $from = new TestMessage();
  68. TestUtil::setTestMessage2($from);
  69. $data = $from->serializeToString();
  70. $to->mergeFromString($data);
  71. // TODO(teboring): This causes following tests fail in php7.
  72. # $from->setRecursive($from);
  73. $arr = new RepeatedField(GPBType::MESSAGE, TestMessage::class);
  74. $arr[] = new TestMessage;
  75. $arr[0]->SetRepeatedRecursive($arr);
  76. // Test oneof fields.
  77. $m = new TestMessage();
  78. $m->setOneofInt32(1);
  79. assert(1 === $m->getOneofInt32());
  80. assert(0.0 === $m->getOneofFloat());
  81. assert('' === $m->getOneofString());
  82. assert(NULL === $m->getOneofMessage());
  83. $data = $m->serializeToString();
  84. $n = new TestMessage();
  85. $n->mergeFromString($data);
  86. assert(1 === $n->getOneofInt32());
  87. $m->setOneofFloat(2.0);
  88. assert(0 === $m->getOneofInt32());
  89. assert(2.0 === $m->getOneofFloat());
  90. assert('' === $m->getOneofString());
  91. assert(NULL === $m->getOneofMessage());
  92. $data = $m->serializeToString();
  93. $n = new TestMessage();
  94. $n->mergeFromString($data);
  95. assert(2.0 === $n->getOneofFloat());
  96. $m->setOneofString('abc');
  97. assert(0 === $m->getOneofInt32());
  98. assert(0.0 === $m->getOneofFloat());
  99. assert('abc' === $m->getOneofString());
  100. assert(NULL === $m->getOneofMessage());
  101. $data = $m->serializeToString();
  102. $n = new TestMessage();
  103. $n->mergeFromString($data);
  104. assert('abc' === $n->getOneofString());
  105. $sub_m = new Sub();
  106. $sub_m->setA(1);
  107. $m->setOneofMessage($sub_m);
  108. assert(0 === $m->getOneofInt32());
  109. assert(0.0 === $m->getOneofFloat());
  110. assert('' === $m->getOneofString());
  111. assert(1 === $m->getOneofMessage()->getA());
  112. $data = $m->serializeToString();
  113. $n = new TestMessage();
  114. $n->mergeFromString($data);
  115. assert(1 === $n->getOneofMessage()->getA());
  116. $m = new TestMessage();
  117. $m->mergeFromString(hex2bin('F80601'));
  118. assert('f80601' === bin2hex($m->serializeToString()));
  119. // Test create repeated field via array.
  120. $str_arr = array("abc");
  121. $m = new TestMessage();
  122. $m->setRepeatedString($str_arr);
  123. // Test create map field via array.
  124. $str_arr = array("abc"=>"abc");
  125. $m = new TestMessage();
  126. $m->setMapStringString($str_arr);
  127. // Test unset
  128. $from = new TestMessage();
  129. TestUtil::setTestMessage($from);
  130. unset($from);
  131. // Test wellknown
  132. $from = new \Google\Protobuf\Timestamp();
  133. $from->setSeconds(1);
  134. assert(1, $from->getSeconds());
  135. $timestamp = new \Google\Protobuf\Timestamp();
  136. date_default_timezone_set('UTC');
  137. $from = new DateTime('2011-01-01T15:03:01.012345UTC');
  138. $timestamp->fromDateTime($from);
  139. assert($from->format('U') == $timestamp->getSeconds());
  140. assert(1000 * $from->format('u') == $timestamp->getNanos());
  141. $to = $timestamp->toDateTime();
  142. assert(\DateTime::class == get_class($to));
  143. assert($from->format('U') == $to->format('U'));
  144. $from = new \Google\Protobuf\Value();
  145. $from->setNumberValue(1);
  146. assert(1, $from->getNumberValue());
  147. // Test discard unknown in message.
  148. $m = new TestMessage();
  149. $from = hex2bin('F80601');
  150. $m->mergeFromString($from);
  151. $m->discardUnknownFields();
  152. $to = $m->serializeToString();
  153. assert("" === bin2hex($to));
  154. // Test clear
  155. $m = new TestMessage();
  156. TestUtil::setTestMessage($m);
  157. $m->clear();
  158. // Test unset map element
  159. $m = new TestMessage();
  160. $map = $m->getMapStringString();
  161. $map[1] = 1;
  162. unset($map[1]);
  163. // Test descriptor
  164. $pool = \Google\Protobuf\DescriptorPool::getGeneratedPool();
  165. $desc = $pool->getDescriptorByClassName("\Foo\TestMessage");
  166. $field = $desc->getField(1);
  167. $from = new TestMessage();
  168. $to = new TestMessage();
  169. TestUtil::setTestMessage($from);
  170. $to->mergeFrom($from);
  171. TestUtil::assertTestMessage($to);
  172. // Test decode Any
  173. // Make sure packed message has been created at least once.
  174. $packed = new TestMessage();
  175. $m = new TestAny();
  176. $m->mergeFromJsonString(
  177. "{\"any\":" .
  178. " {\"@type\":\"type.googleapis.com/foo.TestMessage\"," .
  179. " \"optionalInt32\":1}}");
  180. assert("type.googleapis.com/foo.TestMessage" ===
  181. $m->getAny()->getTypeUrl());
  182. assert("0801" === bin2hex($m->getAny()->getValue()));