From 162f1418c7cdf900478069f753f3a5e73094d361 Mon Sep 17 00:00:00 2001 From: ZhouyihaiDing Date: Mon, 16 Jul 2018 13:12:43 -0700 Subject: [PATCH] use enable-gcp-optimizer --- Spanner/src/Connection/Grpc.php | 8 +- .../SpannerClientGcpOptimizerEnabledTest.php | 310 ++++++++++++++++++ Spanner/tests/Unit/SpannerClientTest.php | 8 +- spannerEnableGcpSample.php | 5 - 4 files changed, 316 insertions(+), 15 deletions(-) create mode 100644 Spanner/tests/Unit/SpannerClientGcpOptimizerEnabledTest.php delete mode 100755 spannerEnableGcpSample.php diff --git a/Spanner/src/Connection/Grpc.php b/Spanner/src/Connection/Grpc.php index 99f20f612a11..c08c46948085 100644 --- a/Spanner/src/Connection/Grpc.php +++ b/Spanner/src/Connection/Grpc.php @@ -122,7 +122,7 @@ class Grpc implements ConnectionInterface */ private $longRunningGrpcClients; - private function enableChonnectionManagement($conf_path) + private function enableConnectionManagement($conf_path) { // TODO: move this function to GrpcTrait. $conf = new \Grpc\Gcp\ApiConfig(); @@ -164,12 +164,12 @@ public function __construct(array $config = []) : null ); - if (isset($config['enable-gcp'])) { + if (isset($config['enable-gcp-optimizer'])) { $api = 'spanner'; $conf_path = __DIR__. "/../$api.grpc.config"; - $grpc_gcp_config = $this->enableChonnectionManagement($conf_path); + $grpc_gcp_config = $this->enableConnectionManagement($conf_path); $grpcConfig['grpc_call_invoker'] = $grpc_gcp_config->callInvoker(); - unset($config['enable-gcp']); + unset($config['enable-gcp-optimizer']); } $this->spannerClient = isset($config['gapicSpannerClient']) diff --git a/Spanner/tests/Unit/SpannerClientGcpOptimizerEnabledTest.php b/Spanner/tests/Unit/SpannerClientGcpOptimizerEnabledTest.php new file mode 100644 index 000000000000..049a51274b3e --- /dev/null +++ b/Spanner/tests/Unit/SpannerClientGcpOptimizerEnabledTest.php @@ -0,0 +1,310 @@ +checkAndSkipGrpcTests(); + + $this->connection = $this->prophesize(ConnectionInterface::class); + $this->client = \Google\Cloud\Core\Testing\TestHelpers::stub(SpannerClient::class, [ + ['projectId' => self::PROJECT, + 'enable-gcp-optimizer' => true, + ] + ]); + } + + public function testBatch() + { + $batch = $this->client->batch('foo', 'bar'); + $this->assertInstanceOf(BatchClient::class, $batch); + + $ref = new \ReflectionObject($batch); + $prop = $ref->getProperty('databaseName'); + $prop->setAccessible(true); + + $this->assertEquals(sprintf( + 'projects/%s/instances/%s/databases/%s', + self::PROJECT, 'foo', 'bar' + ), $prop->getValue($batch)); + } + + /** + * @group spanneradmin + */ + public function testInstanceConfigurations() + { + $this->connection->listInstanceConfigs(Argument::any()) + ->shouldBeCalled() + ->willReturn([ + 'instanceConfigs' => [ + [ + 'name' => InstanceAdminClient::instanceConfigName(self::PROJECT, self::CONFIG), + 'displayName' => 'Bar' + ], [ + 'name' => InstanceAdminClient::instanceConfigName(self::PROJECT, self::CONFIG), + 'displayName' => 'Bat' + ] + ] + ]); + + $this->client->___setProperty('connection', $this->connection->reveal()); + + $configs = $this->client->instanceConfigurations(); + + $this->assertInstanceOf(ItemIterator::class, $configs); + + $configs = iterator_to_array($configs); + $this->assertCount(2, $configs); + $this->assertInstanceOf(InstanceConfiguration::class, $configs[0]); + $this->assertInstanceOf(InstanceConfiguration::class, $configs[1]); + } + + /** + * @group spanneradmin + */ + public function testPagedInstanceConfigurations() + { + $firstCall = [ + 'instanceConfigs' => [ + [ + 'name' => 'projects/foo/instanceConfigs/bar', + 'displayName' => 'Bar' + ] + ], + 'nextPageToken' => 'fooBar' + ]; + + $secondCall = [ + 'instanceConfigs' => [ + [ + 'name' => 'projects/foo/instanceConfigs/bat', + 'displayName' => 'Bat' + ] + ] + ]; + + $this->connection->listInstanceConfigs(Argument::any()) + ->shouldBeCalledTimes(2) + ->willReturn($firstCall, $secondCall); + + $this->client->___setProperty('connection', $this->connection->reveal()); + + $configs = $this->client->instanceConfigurations(); + + $this->assertInstanceOf(ItemIterator::class, $configs); + + $configs = iterator_to_array($configs); + $this->assertCount(2, $configs); + $this->assertInstanceOf(InstanceConfiguration::class, $configs[0]); + $this->assertInstanceOf(InstanceConfiguration::class, $configs[1]); + } + + /** + * @group spanneradmin + */ + public function testInstanceConfiguration() + { + $config = $this->client->instanceConfiguration('bar'); + + $this->assertInstanceOf(InstanceConfiguration::class, $config); + $this->assertEquals('bar', InstanceAdminClient::parseName($config->name())['instance_config']); + } + + /** + * @group spanneradmin + */ + public function testCreateInstance() + { + $this->connection->createInstance(Argument::that(function ($arg) { + if ($arg['name'] !== InstanceAdminClient::instanceName(self::PROJECT, self::INSTANCE)) return false; + return $arg['config'] === InstanceAdminClient::instanceConfigName(self::PROJECT, self::CONFIG); + })) + ->shouldBeCalled() + ->willReturn([ + 'name' => 'operations/foo' + ]); + + $this->client->___setProperty('connection', $this->connection->reveal()); + + $config = $this->prophesize(InstanceConfiguration::class); + $config->name()->willReturn(InstanceAdminClient::instanceConfigName(self::PROJECT, self::CONFIG)); + + $operation = $this->client->createInstance($config->reveal(), self::INSTANCE); + + $this->assertInstanceOf(LongRunningOperation::class, $operation); + } + + /** + * @group spanneradmin + */ + public function testInstance() + { + $i = $this->client->instance('foo'); + $this->assertInstanceOf(Instance::class, $i); + $this->assertEquals('foo', InstanceAdminClient::parseName($i->name())['instance']); + } + + /** + * @group spanneradmin + */ + public function testInstanceWithInstanceArray() + { + $i = $this->client->instance('foo', ['key' => 'val']); + $this->assertEquals('val', $i->info()['key']); + } + + /** + * @group spanneradmin + */ + public function testInstances() + { + $this->connection->listInstances(Argument::any()) + ->shouldBeCalled() + ->willReturn([ + 'instances' => [ + ['name' => 'projects/test-project/instances/foo'], + ['name' => 'projects/test-project/instances/bar'], + ] + ]); + + $this->client->___setProperty('connection', $this->connection->reveal()); + + $instances = $this->client->instances(); + $this->assertInstanceOf(ItemIterator::class, $instances); + + $instances = iterator_to_array($instances); + $this->assertCount(2, $instances); + $this->assertEquals('foo', InstanceAdminClient::parseName($instances[0]->name())['instance']); + $this->assertEquals('bar', InstanceAdminClient::parseName($instances[1]->name())['instance']); + } + + /** + * @group spanneradmin + */ + public function testResumeOperation() + { + $opName = 'operations/foo'; + + $op = $this->client->resumeOperation($opName); + $this->assertInstanceOf(LongRunningOperation::class, $op); + $this->assertEquals($op->name(), $opName); + } + + public function testConnect() + { + $database = $this->client->connect(self::INSTANCE, self::DATABASE); + $this->assertInstanceOf(Database::class, $database); + $this->assertEquals(self::DATABASE, DatabaseAdminClient::parseName($database->name())['database']); + } + + public function testConnectWithInstance() + { + $inst = $this->client->instance(self::INSTANCE); + $database = $this->client->connect($inst, self::DATABASE); + $this->assertInstanceOf(Database::class, $database); + $this->assertEquals(self::DATABASE, DatabaseAdminClient::parseName($database->name())['database']); + } + + public function testKeyset() + { + $ks = $this->client->keySet(); + $this->assertInstanceOf(KeySet::class, $ks); + } + + public function testKeyRange() + { + $kr = $this->client->keyRange(); + $this->assertInstanceOf(KeyRange::class, $kr); + } + + public function testBytes() + { + $b = $this->client->bytes('foo'); + $this->assertInstanceOf(Bytes::class, $b); + $this->assertEquals(base64_encode('foo'), (string)$b); + } + + public function testDate() + { + $d = $this->client->date(new \DateTime); + $this->assertInstanceOf(Date::class, $d); + } + + public function testTimestamp() + { + $ts = $this->client->timestamp(new \DateTime); + $this->assertInstanceOf(Timestamp::class, $ts); + } + + public function testInt64() + { + $i64 = $this->client->int64('123'); + $this->assertInstanceOf(Int64::class, $i64); + } + + public function testDuration() + { + $d = $this->client->duration(10, 1); + $this->assertInstanceOf(Duration::class, $d); + } + + public function testCommitTimestamp() + { + $t = $this->client->commitTimestamp(); + $this->assertInstanceOf(CommitTimestamp::class, $t); + } +} diff --git a/Spanner/tests/Unit/SpannerClientTest.php b/Spanner/tests/Unit/SpannerClientTest.php index edb73e0633db..971b5c6a2bb3 100644 --- a/Spanner/tests/Unit/SpannerClientTest.php +++ b/Spanner/tests/Unit/SpannerClientTest.php @@ -15,9 +15,7 @@ * limitations under the License. */ -require_once (__DIR__ . "/../../../vendor/autoload.php"); - -//namespace Google\Cloud\Spanner\Tests\Unit; +namespace Google\Cloud\Spanner\Tests\Unit; use Google\Cloud\Core\Int64; use Google\Cloud\Core\Iterator\ItemIterator; @@ -61,9 +59,7 @@ public function setUp() $this->connection = $this->prophesize(ConnectionInterface::class); $this->client = \Google\Cloud\Core\Testing\TestHelpers::stub(SpannerClient::class, [ - ['projectId' => self::PROJECT, - 'enable-gcp' => true, - ] + ['projectId' => self::PROJECT] ]); } diff --git a/spannerEnableGcpSample.php b/spannerEnableGcpSample.php deleted file mode 100755 index 976dba2dd2ff..000000000000 --- a/spannerEnableGcpSample.php +++ /dev/null @@ -1,5 +0,0 @@ - 'ddyihai-firestore', - 'enable_gcp' => true, - ]);