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)); }
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)); }