���� JFIF �� � ( %"1"%)+...383,7(-.-
![]() Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.20 System : Linux st2.domain.com 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 User : apache ( 48) PHP Version : 7.4.20 Disable Function : NONE Directory : /var/www/html/st2/vendor/google/gax/tests/ApiCore/Tests/Unit/ |
<?php /* * Copyright 2017, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of Google Inc. nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ namespace Google\ApiCore\Tests\Unit; use Google\Api\HttpRule; use Google\ApiCore\Serializer; use Google\Protobuf\Any; use Google\Protobuf\FieldMask; use Google\Protobuf\ListValue; use Google\Protobuf\Struct; use Google\Protobuf\Value; use Google\Rpc\Status; use Google\Type\Color; use PHPUnit\Framework\TestCase; /** * @group core */ class SerializerTest extends TestCase { /** * @param \Google\Protobuf\Internal\Message $message A protobuf message * @param array $arrayStructure An array structure corresponding the expected encoding of $message */ private function verifySerializeAndDeserialize($message, $arrayStructure) { $serializer = new Serializer(); $klass = get_class($message); // Check that $message when encoded is equal to $arrayStructure $serializedMessage = $serializer->encodeMessage($message); $this->assertEquals($arrayStructure, $serializedMessage); // Check that $message when encoded and decoded is unchanged $deserializedMessage = $serializer->decodeMessage(new $klass(), $serializedMessage); $this->assertEquals($message, $deserializedMessage); // Check that $arrayStructure when decoded is equal to $message $deserializedStructure = $serializer->decodeMessage(new $klass(), $arrayStructure); $this->assertEquals($message, $deserializedStructure); // Check that $arrayStructure when decoded and encoded is unchanged $reserializedStructure = $serializer->encodeMessage($deserializedStructure); $this->assertEquals($arrayStructure, $reserializedStructure); } public function testStatusMessage() { $details = [new Any()]; $message = new Status(); $message->setMessage("message"); $message->setCode(0); $message->setDetails($details); $encodedMessage = [ 'message' => 'message', 'code' => 0, 'details' => [ [ 'typeUrl' => '', 'value' => '', ], ] ]; $this->verifySerializeAndDeserialize($message, $encodedMessage); } public function testHttpRule() { $message = new HttpRule(); $encodedMessage = [ 'selector' => '', 'body' => '', 'additionalBindings' => [], ]; $this->verifySerializeAndDeserialize($message, $encodedMessage); } public function testHttpRuleSetOneof() { $message = new HttpRule(); $message->setPatch(''); $encodedMessage = [ 'selector' => '', 'patch' => '', 'body' => '', 'additionalBindings' => [], ]; $this->verifySerializeAndDeserialize($message, $encodedMessage); } public function testHttpRuleSetOneofToValue() { $message = new HttpRule(); $message->setPatch('test'); $encodedMessage = [ 'selector' => '', 'patch' => 'test', 'body' => '', 'additionalBindings' => [], ]; $this->verifySerializeAndDeserialize($message, $encodedMessage); } public function testFieldMask() { $message = new FieldMask(); $encodedMessage = [ 'paths' => [] ]; $this->verifySerializeAndDeserialize($message, $encodedMessage); } public function testProperlyHandlesMessage() { $value = 'test'; // Using this class because it contains maps, oneofs and structs $message = new \Google\Protobuf\Struct(); $innerValue1 = new Value(); $innerValue1->setStringValue($value); $innerValue2 = new Value(); $innerValue2->setBoolValue(true); $structValue1 = new Value(); $structValue1->setStringValue(strtoupper($value)); $structValue2 = new Value(); $structValue2->setStringValue($value); $labels = [ strtoupper($value) => $structValue1, $value => $structValue2, ]; $innerStruct = new Struct(); $innerStruct->setFields($labels); $innerValue3 = new Value(); $innerValue3->setStructValue($innerStruct); $innerValues = [$innerValue1, $innerValue2, $innerValue3]; $listValue = new ListValue(); $listValue->setValues($innerValues); $fieldValue = new Value(); $fieldValue->setListValue($listValue); $fields = [ 'listField' => $fieldValue, ]; $message->setFields($fields); $encodedMessage = [ 'fields' => [ 'listField' => [ 'listValue' => [ 'values' => [ [ 'stringValue' => $value, ], [ 'boolValue' => true, ], [ 'structValue' => [ 'fields' => [ strtoupper($value) => [ 'stringValue' => strtoupper($value), ], $value => [ 'stringValue' => $value, ] ], ], ] ] ] ] ], ]; $this->verifySerializeAndDeserialize($message, $encodedMessage); } public function testSpecialEncodingDecodingByFieldName() { $serializer = new Serializer([ 'red' => function ($v) { return $v * 2; } ], [], [ 'red' => function ($v) { return $v / 2; } ]); $data = [ 'red' => 0.2, 'green' => 0.3, 'blue' => 0.4, 'alpha' => [ 'value' => 1.0 ] ]; $color = $serializer->decodeMessage(new Color(), $data); $this->assertEquals(0.1, $color->getRed(), '', 0.0000001); $this->assertEquals(0.3, $color->getGreen(), '', 0.0000001); $this->assertEquals(0.4, $color->getBlue(), '', 0.0000001); $alpha = $color->getAlpha(); $this->assertEquals(1.0, $alpha->getValue(), '', 0.0000001); $array = $serializer->encodeMessage($color); $this->assertEquals($data['red'], $array['red'], '', 0.0000001); $this->assertEquals($data['green'], $array['green'], '', 0.0000001); $this->assertEquals($data['blue'], $array['blue'], '', 0.0000001); $this->assertEquals($data['alpha']['value'], $array['alpha']['value'], '', 0.0000001); } public function testSpecialEncodingDecodingByFieldType() { $serializer = new Serializer([], [ 'google.protobuf.FloatValue' => function ($v) { return [ 'value' => $v['value'] * 2 ]; } ], [], [ 'google.protobuf.FloatValue' => function ($v) { return [ 'value' => $v['value'] / 2 ]; } ]); $data = [ 'red' => 0.2, 'green' => 0.3, 'blue' => 0.4, 'alpha' => [ 'value' => 1.0 ] ]; $color = $serializer->decodeMessage(new Color(), $data); $this->assertEquals(0.2, $color->getRed(), '', 0.0000001); $this->assertEquals(0.3, $color->getGreen(), '', 0.0000001); $this->assertEquals(0.4, $color->getBlue(), '', 0.0000001); $alpha = $color->getAlpha(); $this->assertEquals(0.5, $alpha->getValue(), '', 0.0000001); $array = $serializer->encodeMessage($color); $this->assertEquals($data['red'], $array['red'], '', 0.0000001); $this->assertEquals($data['green'], $array['green'], '', 0.0000001); $this->assertEquals($data['blue'], $array['blue'], '', 0.0000001); $this->assertEquals($data['alpha']['value'], $array['alpha']['value'], '', 0.0000001); } }