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); }
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); }
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}"); } }
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); }
public async Task CredentialFileNotFound() { var builder = new SpannerConnectionStringBuilder("CredentialFile=..\\BadFilePath.json"); var options = new SpannerClientCreationOptions(builder); await Assert.ThrowsAsync <FileNotFoundException>(() => options.GetCredentialsAsync()); }
public async Task CredentialFileP12Error() { var builder = new SpannerConnectionStringBuilder("CredentialFile=SpannerEF-8dfc036f6000.p12"); var options = new SpannerClientCreationOptions(builder); await Assert.ThrowsAsync <InvalidOperationException>(() => options.GetCredentialsAsync()); }