assertSame($opName, $op->getName()); $this->assertSame($opClient, $op->getOperationsClient()); } public function testWithoutResponse() { $opName = 'operations/opname'; $opClient = self::createOperationsClient(); $op = new OperationResponse($opName, $opClient); $this->assertNull($op->getLastProtoResponse()); $this->assertFalse($op->isDone()); $this->assertNull($op->getResult()); $this->assertNull($op->getError()); $this->assertNull($op->getMetadata()); $this->assertFalse($op->operationSucceeded()); $this->assertFalse($op->operationFailed()); $this->assertEquals([ 'operationReturnType' => null, 'metadataReturnType' => null, ], $op->getReturnTypeOptions()); } public function testWithResponse() { $opName = 'operations/opname'; $opClient = self::createOperationsClient(); $protoResponse = new Operation(); $op = new OperationResponse($opName, $opClient, [ 'lastProtoResponse' => $protoResponse, ]); $this->assertSame($protoResponse, $op->getLastProtoResponse()); $this->assertFalse($op->isDone()); $this->assertNull($op->getResult()); $this->assertNull($op->getError()); $this->assertNull($op->getMetadata()); $this->assertFalse($op->operationSucceeded()); $this->assertFalse($op->operationFailed()); $this->assertEquals([ 'operationReturnType' => null, 'metadataReturnType' => null, ], $op->getReturnTypeOptions()); $response = self::createAny(self::createStatus(0, "response")); $error = self::createStatus(2, "error"); $metadata = self::createAny(self::createStatus(0, "metadata")); $protoResponse->setDone(true)->setResponse($response)->setMetadata($metadata); $this->assertTrue($op->isDone()); $this->assertSame($response, $op->getResult()); $this->assertSame($metadata, $op->getMetadata()); $this->assertTrue($op->operationSucceeded()); $this->assertFalse($op->operationFailed()); $protoResponse->clearResponse()->setError($error); $this->assertNull($op->getResult()); $this->assertSame($error, $op->getError()); $this->assertFalse($op->operationSucceeded()); $this->assertTrue($op->operationFailed()); } public function testWithOptions() { $opName = 'operations/opname'; $opClient = self::createOperationsClient(); $protoResponse = new Operation(); $op = new OperationResponse($opName, $opClient, [ 'operationReturnType' => '\google\rpc\Status', 'metadataReturnType' => '\google\protobuf\Any', 'lastProtoResponse' => $protoResponse, ]); $this->assertSame($protoResponse, $op->getLastProtoResponse()); $this->assertFalse($op->isDone()); $this->assertNull($op->getResult()); $this->assertNull($op->getError()); $this->assertNull($op->getMetadata()); $this->assertEquals([ 'operationReturnType' => '\google\rpc\Status', 'metadataReturnType' => '\google\protobuf\Any', ], $op->getReturnTypeOptions()); $innerResponse = self::createStatus(0, "response"); $innerMetadata = (new Any())->setValue("metadata"); $response = self::createAny($innerResponse); $metadata = self::createAny($innerMetadata); $protoResponse->setDone(true)->setResponse($response)->setMetadata($metadata); $this->assertTrue($op->isDone()); $this->assertEquals($innerResponse, $op->getResult()); $this->assertEquals($innerMetadata, $op->getMetadata()); } public static function createAny($value) { $any = new Any(); return $any->setValue($value->serialize()); } public static function createStatus($code, $message) { $value = new Status(); return $value->setCode($code)->setMessage($message); } public static function createOperationsClient($stub = null) { $client = new OperationsClient([ 'createOperationsStubFunction' => function ($hostname, $opts) use ($stub) { return $stub; }, 'serviceAddress' => '', 'scopes' => [], ]); return $client; } }