Beispiel #1
0
        public async Task <PostgresStreamStoreFixture> Get(
            ITestOutputHelper outputHelper,
            string schema = "dbo")
        {
            var fixturePool = _fixturePoolBySchema.GetOrAdd(
                schema,
                _ => new ConcurrentQueue <PostgresStreamStoreFixture>());

            if (!fixturePool.TryDequeue(out var fixture))
            {
                var databaseName   = $"test_{Guid.NewGuid():n}";
                var dockerInstance = new PostgresContainer(databaseName);
                await dockerInstance.Start();

                await dockerInstance.CreateDatabase();

                fixture = new PostgresStreamStoreFixture(
                    schema,
                    dockerInstance,
                    databaseName,
                    onDispose: () => fixturePool.Enqueue(fixture));

                outputHelper.WriteLine($"Using new fixture with db {databaseName}");
            }
            else
            {
                outputHelper.WriteLine($"Using pooled fixture with db {fixture.DatabaseName}");
            }

            await fixture.Prepare();

            return(fixture);
        }
        private async Task PrintPostgresDbVersion(PostgresContainer postgres)
        {
            using (var connection = new NpgsqlConnection(postgres.GetConnectionString()))
                using (var command = new NpgsqlCommand("select version();", connection))
                {
                    await connection.OpenAsync();

                    var reader = await command.ExecuteReaderAsync();

                    await reader.ReadAsync();

                    _testOutput.WriteLine($"Postgres Version: {reader.GetString(0)}");
                }
        }
        public PostgresStreamStoreFixture(
            string schema,
            PostgresContainer dockerInstance,
            string databaseName,
            Action onDispose)
        {
            _onDispose = onDispose;

            DatabaseName = databaseName;
            var connectionString = dockerInstance.ConnectionString;

            _settings = new PostgresStreamStoreSettings(connectionString)
            {
                Schema    = schema,
                GetUtcNow = () => GetUtcNow(),
                DisableDeletionTracking = false,
                ScavengeAsynchronously  = false,
            };
        }