diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2017-02-01 12:47:58 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-01 12:47:58 -0800 |
commit | 39756643df2f88805649595e651b719c8f5a4dea (patch) | |
tree | 1d40c98484d729fc4bffa722e84e5ca526a859db /conformance/conformance_php.php | |
parent | 7f3e23707122f31ebfa58b7280bd56cbe77cb44e (diff) | |
download | protobuf-39756643df2f88805649595e651b719c8f5a4dea.tar.gz protobuf-39756643df2f88805649595e651b719c8f5a4dea.tar.bz2 protobuf-39756643df2f88805649595e651b719c8f5a4dea.zip |
Add conformance test for php (#2655)
Diffstat (limited to 'conformance/conformance_php.php')
-rwxr-xr-x | conformance/conformance_php.php | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/conformance/conformance_php.php b/conformance/conformance_php.php new file mode 100755 index 00000000..c2314001 --- /dev/null +++ b/conformance/conformance_php.php @@ -0,0 +1,102 @@ +<?php + +require_once("Conformance/WireFormat.php"); +require_once("Conformance/ConformanceResponse.php"); +require_once("Conformance/ConformanceRequest.php"); +require_once("Google/Protobuf/Any.php"); +require_once("Google/Protobuf/Duration.php"); +require_once("Google/Protobuf/FieldMask.php"); +require_once("Google/Protobuf/Struct.php"); +require_once("Google/Protobuf/Value.php"); +require_once("Google/Protobuf/ListValue.php"); +require_once("Google/Protobuf/NullValue.php"); +require_once("Google/Protobuf/Timestamp.php"); +require_once("Google/Protobuf/DoubleValue.php"); +require_once("Google/Protobuf/BytesValue.php"); +require_once("Google/Protobuf/FloatValue.php"); +require_once("Google/Protobuf/Int64Value.php"); +require_once("Google/Protobuf/UInt32Value.php"); +require_once("Google/Protobuf/BoolValue.php"); +require_once("Google/Protobuf/DoubleValue.php"); +require_once("Google/Protobuf/Int32Value.php"); +require_once("Google/Protobuf/StringValue.php"); +require_once("Google/Protobuf/UInt64Value.php"); +require_once("Protobuf_test_messages/Proto3/ForeignMessage.php"); +require_once("Protobuf_test_messages/Proto3/ForeignEnum.php"); +require_once("Protobuf_test_messages/Proto3/TestAllTypes.php"); +require_once("Protobuf_test_messages/Proto3/TestAllTypes_NestedMessage.php"); +require_once("Protobuf_test_messages/Proto3/TestAllTypes_NestedEnum.php"); + +require_once("GPBMetadata/Conformance.php"); +require_once("GPBMetadata/Google/Protobuf/Any.php"); +require_once("GPBMetadata/Google/Protobuf/Duration.php"); +require_once("GPBMetadata/Google/Protobuf/FieldMask.php"); +require_once("GPBMetadata/Google/Protobuf/Struct.php"); +require_once("GPBMetadata/Google/Protobuf/Timestamp.php"); +require_once("GPBMetadata/Google/Protobuf/Wrappers.php"); +require_once("GPBMetadata/Google/Protobuf/TestMessagesProto3.php"); + +use \Conformance\WireFormat; + +$test_count = 0; + +function doTest($request) +{ + $test_message = new \Protobuf_test_messages\Proto3\TestAllTypes(); + $response = new \Conformance\ConformanceResponse(); + if ($request->getPayload() == "protobuf_payload") { + $test_message->encode($request->getProtobufPayload()); + } elseif ($request->getPayload() == "json_payload") { + // TODO(teboring): Implmement json decoding. + } else { + trigger_error("Request didn't have payload.", E_USER_ERROR); + } + + if ($request->getRequestedOutputFormat() == WireFormat::UNSPECIFIED) { + trigger_error("Unspecified output format.", E_USER_ERROR); + } elseif ($request->getRequestedOutputFormat() == WireFormat::PROTOBUF) { + $response->setProtobufPayload($test_message->encode()); + } elseif ($request->getRequestedOutputFormat() == WireFormat::JSON) { + // TODO(teboring): Implmement json encoding. + } + + return $response; +} + +function doTestIO() +{ + $length_bytes = fread(STDIN, 4); + if (strlen($length_bytes) == 0) { + return false; # EOF + } elseif (strlen($length_bytes) != 4) { + trigger_error("I/O error", E_USER_ERROR); + } + + $length = unpack("V", $length_bytes)[1]; + $serialized_request = fread(STDIN, $length); + if (strlen($serialized_request) != $length) { + trigger_error("I/O error", E_USER_ERROR); + } + + $request = new \Conformance\ConformanceRequest(); + $request->decode($serialized_request); + + $response = doTest($request); + + $serialized_response = $response->encode(); + fwrite(STDOUT, pack("V", strlen($serialized_response))); + fwrite(STDOUT, $serialized_response); + + $GLOBALS['test_count'] += 1; + + return true; +} + +while(true){ + if (!doTestIO()) { + fprintf(STDERR, + "conformance_php: received EOF from test runner " + + "after %d tests, exiting\n", $test_count); + exit; + } +} |