Exemplo n.º 1
0
        public async Task CancelAsyncHard()
        {
            if (IsMultiplexing)
            {
                return; // Multiplexing, cancellation
            }
            await using var postmasterMock = new PgPostmasterMock(ConnectionString);
            using var _          = CreateTempPool(postmasterMock.ConnectionString, out var connectionString);
            await using var conn = await OpenConnectionAsync(connectionString);

            var processId = conn.ProcessID;

            var cancellationSource = new CancellationTokenSource();

            using var cmd = new NpgsqlCommand("SELECT 1", conn);
            var t = cmd.ExecuteScalarAsync(cancellationSource.Token);

            cancellationSource.Cancel();
            Assert.That(async() => await t, Throws.Exception
                        .TypeOf <OperationCanceledException>()
                        .With.InnerException.Null);

            Assert.That(conn.FullState, Is.EqualTo(ConnectionState.Broken));
            Assert.That(postmasterMock.GetPendingCancellationRequest().ProcessId,
                        Is.EqualTo(processId));
        }
Exemplo n.º 2
0
        public async Task TimeoutAsyncHard()
        {
            if (IsMultiplexing)
            {
                return; // Multiplexing, Timeout
            }
            var builder = new NpgsqlConnectionStringBuilder(ConnectionString)
            {
                CommandTimeout = 1
            };

            await using var postmasterMock = new PgPostmasterMock(builder.ConnectionString);
            using var _          = CreateTempPool(postmasterMock.ConnectionString, out var connectionString);
            await using var conn = await OpenConnectionAsync(connectionString);

            var processId = conn.ProcessID;

            Assert.That(async() => await conn.ExecuteScalarAsync("SELECT 1"),
                        Throws.Exception
                        .TypeOf <NpgsqlException>()
                        .With.InnerException.TypeOf <TimeoutException>());

            Assert.That(conn.FullState, Is.EqualTo(ConnectionState.Broken));
            Assert.That(postmasterMock.GetPendingCancellationRequest().ProcessId,
                        Is.EqualTo(processId));
        }