private void MaybeCreateInstanceOnEmulator(string projectId)
        {
            if (SpannerClientCreationOptions.UsesEmulator)
            {
                // Try to create an instance on the emulator and ignore any AlreadyExists error.
                var adminClientBuilder = new InstanceAdminClientBuilder
                {
                    EmulatorDetection = EmulatorDetection.EmulatorOnly
                };
                var instanceAdminClient = adminClientBuilder.Build();

                var instanceName = InstanceName.FromProjectInstance(projectId, SpannerInstance);
                try
                {
                    instanceAdminClient.CreateInstance(new CreateInstanceRequest
                    {
                        InstanceId          = instanceName.InstanceId,
                        ParentAsProjectName = ProjectName.FromProject(projectId),
                        Instance            = new Instance
                        {
                            InstanceName = instanceName,
                            ConfigAsInstanceConfigName = new InstanceConfigName(projectId, "emulator-config"),
                            DisplayName = "Test Instance",
                            NodeCount   = 1,
                        },
                    }).PollUntilCompleted();
                }
                catch (RpcException e) when(e.StatusCode == StatusCode.AlreadyExists)
                {
                    // Ignore
                }
            }
        }
        private static async Task MaybeCreateInstanceOnEmulatorAsync(string projectId, string instanceId)
        {
            // Try to create an instance on the emulator and ignore any AlreadyExists error.
            var adminClientBuilder = new InstanceAdminClientBuilder
            {
                EmulatorDetection = EmulatorDetection.EmulatorOnly
            };
            var instanceAdminClient = await adminClientBuilder.BuildAsync();

            var instanceName = InstanceName.FromProjectInstance(projectId, instanceId);

            try
            {
                await instanceAdminClient.CreateInstance(new CreateInstanceRequest
                {
                    InstanceId          = instanceName.InstanceId,
                    ParentAsProjectName = ProjectName.FromProject(projectId),
                    Instance            = new Instance
                    {
                        InstanceName = instanceName,
                        ConfigAsInstanceConfigName = new InstanceConfigName(projectId, "emulator-config"),
                        DisplayName = "Sample Instance",
                        NodeCount   = 1,
                    },
                }).PollUntilCompletedAsync();
            }
            catch (RpcException e) when(e.StatusCode == StatusCode.AlreadyExists)
            {
                // Ignore
            }
        }
        public void NoHeaderOnCreateInstanceIfEmptyProjectName()
        {
            var invoker = new FakeCallInvoker();
            var client = new InstanceAdminClientBuilder {
                CallInvoker = invoker
            }.Build();

            client.CreateInstance(new CreateInstanceRequest());
            Assert.Null(invoker.Metadata.FirstOrDefault(e => e.Key == ResourcePrefixHeader));
        }
        public void NoHeaderOnGetInstanceConfigIfEmptyInstanceConfigName()
        {
            var invoker = new FakeCallInvoker();
            var client = new InstanceAdminClientBuilder {
                CallInvoker = invoker
            }.Build();

            client.GetInstanceConfig(new GetInstanceConfigRequest());
            Assert.Null(invoker.Metadata.FirstOrDefault(e => e.Key == ResourcePrefixHeader));
        }
        public void NoHeaderOnGetInstanceIfInvalidInstanceName()
        {
            var invoker = new FakeCallInvoker();
            var client = new InstanceAdminClientBuilder {
                CallInvoker = invoker
            }.Build();

            client.GetInstance(new GetInstanceRequest {
                Name = "projects/instances"
            });
            Assert.Null(invoker.Metadata.FirstOrDefault(e => e.Key == ResourcePrefixHeader));
        }
        public void SetsHeaderOnDeleteInstance()
        {
            var invoker = new FakeCallInvoker();
            var client = new InstanceAdminClientBuilder {
                CallInvoker = invoker
            }.Build();

            client.DeleteInstance(new DeleteInstanceRequest {
                Name = SampleInstanceName
            });
            Metadata.Entry entry = Assert.Single(invoker.Metadata, e => e.Key == ResourcePrefixHeader);
            Assert.Equal(SampleInstanceName, entry.Value);
        }
        public void SetsHeaderOnListInstances()
        {
            var invoker = new FakeCallInvoker();
            var client = new InstanceAdminClientBuilder {
                CallInvoker = invoker
            }.Build();

            client.ListInstances(new ListInstancesRequest {
                Parent = SampleProjectName
            }).AsRawResponses().First();
            Metadata.Entry entry = Assert.Single(invoker.Metadata, e => e.Key == ResourcePrefixHeader);
            Assert.Equal(SampleProjectName, entry.Value);
        }