Пример #1
0
        public void Equality_CustomHostAndPort()
        {
            string dataSource = "projects/p1/instances/i1/databases/d1";
            var    builder    = new SpannerConnectionStringBuilder {
                DataSource = dataSource, Host = "h1", Port = 500
            };
            // The data source doesn't matter
            var equalBuilder = new SpannerConnectionStringBuilder($"Data Source=projects/p2/instances/i2/databases/d2;Host = h1; Port = 500");

            var unequalBuilders = new[]
            {
                new SpannerConnectionStringBuilder {
                    DataSource = dataSource, Host = "h1", Port = 600
                },
                new SpannerConnectionStringBuilder {
                    DataSource = dataSource, Host = "h2", Port = 500
                },
                new SpannerConnectionStringBuilder {
                    DataSource = dataSource, Host = "h1", Port = 500, MaximumGrpcChannels = 5
                },
                new SpannerConnectionStringBuilder {
                    DataSource = dataSource, Host = "h1", Port = 500, MaxConcurrentStreamsLowWatermark = 25
                },
                new SpannerConnectionStringBuilder {
                    DataSource = dataSource, Host = "h1", Port = 500, CredentialFile = "creds.json"
                },
                new SpannerConnectionStringBuilder($"Data Source={dataSource}; Host = h1; Port = 500", new ComputeCredential().ToChannelCredentials())
            };

            var options        = new SpannerClientCreationOptions(builder);
            var equalOptions   = new SpannerClientCreationOptions(equalBuilder);
            var unequalOptions = unequalBuilders.Select(b => new SpannerClientCreationOptions(b)).ToArray();

            EqualityTester.AssertEqual(options, new[] { equalOptions }, unequalOptions);
        }
Пример #2
0
        public async Task CredentialFileRelative()
        {
            var builder = new SpannerConnectionStringBuilder("CredentialFile=SpannerEF-8dfc036f6000.json");
            var options = new SpannerClientCreationOptions(builder);

            Assert.NotNull(await options.GetCredentialsAsync());
        }
        public async Task CredentialFile()
        {
            string appFolder = AppDomain.CurrentDomain.BaseDirectory;
            string jsonFile  = Path.Combine(appFolder, "SpannerEF-8dfc036f6000.json");

            Assert.True(File.Exists(jsonFile));
            var builder = new SpannerConnectionStringBuilder($"CredentialFile={jsonFile}");
            var options = new SpannerClientCreationOptions(builder);

            Assert.NotNull(await options.GetCredentialsAsync());
        }
        public async Task ReleaseDecreasesCount()
        {
            var manager = new SessionPoolManager(new SessionPoolOptions(), Logger.DefaultLogger, FailingSpannerClient.Factory);

            var options = new SpannerClientCreationOptions(new SpannerConnectionStringBuilder(ConnectionString));
            var pool    = await manager.AcquireSessionPoolAsync(options);

            var stats = manager.GetStatistics().Single();

            Assert.Equal(1, stats.ActiveConnectionCount);

            manager.Release(pool);

            stats = manager.GetStatistics().Single();
            Assert.Equal(0, stats.ActiveConnectionCount);
        }
Пример #5
0
        public async Task EmulatorDetection_AlwaysUsesRegularOptions(string emulatorHost)
        {
            var regularOptions = new SessionPoolOptions();
            var manager        = new SessionPoolManager(regularOptions, SessionPoolManager.CreateDefaultSpannerSettings(), Logger.DefaultLogger, FailingSpannerClient.Factory);

            var builder = new SpannerConnectionStringBuilder(ConnectionString)
            {
                EmulatorDetection = EmulatorDetection.EmulatorOrProduction,
                // Effectively "there are no environment variables"
                EnvironmentVariableProvider = key => key == "SPANNER_EMULATOR_HOST" ? emulatorHost: null
            };
            var clientCreationOptions = new SpannerClientCreationOptions(new SpannerConnectionStringBuilder(ConnectionString));
            var pool = await manager.AcquireSessionPoolAsync(clientCreationOptions);

            Assert.Same(regularOptions, pool.Options);
        }
        public async Task EqualOptions_SameSessionPool()
        {
            int           factoryCalls = 0;
            ClientFactory factory      = (options, settings, logger) =>
            {
                factoryCalls++;
                return(Task.FromResult <SpannerClient>(new FailingSpannerClient()));
            };
            var manager = new SessionPoolManager(new SessionPoolOptions(), Logger.DefaultLogger, factory);

            var options1 = new SpannerClientCreationOptions(new SpannerConnectionStringBuilder(ConnectionString));
            var options2 = new SpannerClientCreationOptions(new SpannerConnectionStringBuilder(ConnectionString));

            var pool1 = await manager.AcquireSessionPoolAsync(options1);

            var pool2 = await manager.AcquireSessionPoolAsync(options2);

            Assert.Same(pool1, pool2);
            Assert.Equal(1, factoryCalls);
            Assert.Equal(1, manager.GetStatistics().Count);
        }
        private SpannerTestDatabase(string projectId)
        {
            TestLogger.Install();

            ProjectId = projectId;
            var builder = new SpannerConnectionStringBuilder
            {
                Host              = SpannerHost,
                DataSource        = $"projects/{ProjectId}/instances/{SpannerInstance}",
                EmulatorDetection = EmulatorDetection.EmulatorOrProduction
            };

            if (SpannerPort != null)
            {
                builder.Port = int.Parse(SpannerPort);
            }
            NoDbConnectionString         = builder.ConnectionString;
            SpannerClientCreationOptions = new SpannerClientCreationOptions(builder);
            var databaseBuilder = builder.WithDatabase(SpannerDatabase);

            ConnectionString = databaseBuilder.ConnectionString;
            DatabaseName     = databaseBuilder.DatabaseName;

            MaybeCreateInstanceOnEmulator(projectId);
            if (Fresh)
            {
                using (var connection = new SpannerConnection(NoDbConnectionString))
                {
                    var createCmd = connection.CreateDdlCommand($"CREATE DATABASE {SpannerDatabase}");
                    createCmd.ExecuteNonQuery();
                    Logger.DefaultLogger.Debug($"Created database {SpannerDatabase}");
                }
            }
            else
            {
                Logger.DefaultLogger.Debug($"Using existing database {SpannerDatabase}");
            }
        }
Пример #8
0
        public void Equality_DefaultHostAndPort()
        {
            string dataSource = "projects/p1/instances/i1/databases/d1";
            var    builder    = new SpannerConnectionStringBuilder {
                DataSource = dataSource
            };
            // Timeout doesn't matter
            var equalBuilder = new SpannerConnectionStringBuilder($"Data Source={dataSource}; Timeout=100");

            var unequalBuilders = new[]
            {
                new SpannerConnectionStringBuilder {
                    DataSource = dataSource, CredentialFile = "creds.json"
                },
                new SpannerConnectionStringBuilder($"Data Source={dataSource}", new ComputeCredential().ToChannelCredentials())
            };

            var options        = new SpannerClientCreationOptions(builder);
            var equalOptions   = new SpannerClientCreationOptions(equalBuilder);
            var unequalOptions = unequalBuilders.Select(b => new SpannerClientCreationOptions(b)).ToArray();

            EqualityTester.AssertEqual(options, new[] { equalOptions }, unequalOptions);
        }
        public async Task DifferentOptions_DifferentSessionPools()
        {
            int           factoryCalls = 0;
            ClientFactory factory      = options =>
            {
                factoryCalls++;
                return(Task.FromResult <SpannerClient>(new FailingSpannerClient()));
            };
            var manager = new SessionPoolManager(new SessionPoolOptions(), Logger.DefaultLogger, factory);

            var options1 = new SpannerClientCreationOptions(new SpannerConnectionStringBuilder(ConnectionString));
            var options2 = new SpannerClientCreationOptions(new SpannerConnectionStringBuilder(ConnectionString)
            {
                Port = 1234
            });

            var pool1 = await manager.AcquireSessionPoolAsync(options1);

            var pool2 = await manager.AcquireSessionPoolAsync(options2);

            Assert.NotSame(pool1, pool2);
            Assert.Equal(2, factoryCalls);
            Assert.Equal(2, manager.GetStatistics().Count);
        }
Пример #10
0
 public async Task CredentialFileNotFound()
 {
     var builder = new SpannerConnectionStringBuilder("CredentialFile=..\\BadFilePath.json");
     var options = new SpannerClientCreationOptions(builder);
     await Assert.ThrowsAsync <FileNotFoundException>(() => options.GetCredentialsAsync());
 }
Пример #11
0
 public async Task CredentialFileP12Error()
 {
     var builder = new SpannerConnectionStringBuilder("CredentialFile=SpannerEF-8dfc036f6000.p12");
     var options = new SpannerClientCreationOptions(builder);
     await Assert.ThrowsAsync <InvalidOperationException>(() => options.GetCredentialsAsync());
 }