public void CloseDuringRead(bool pooled)
{
var csb = new NpgsqlConnectionStringBuilder(ConnectionString);
if (pooled)
csb.MaxPoolSize = 1;
else
csb.Pooling = false;
var conn = OpenConnection(csb);
var connectorId = conn.ProcessID;
using (var cmd = new NpgsqlCommand("SELECT 1", conn))
using (var reader = cmd.ExecuteReader())
{
reader.Read();
conn.Close();
Assert.That(conn.State, Is.EqualTo(ConnectionState.Closed));
Assert.That(reader.IsClosed);
}
conn.Open();
if (pooled) // Make sure we can reuse the pooled connector
Assert.That(conn.ProcessID, Is.EqualTo(connectorId));
Assert.That(conn.FullState, Is.EqualTo(ConnectionState.Open));
Assert.That(conn.ExecuteScalar("SELECT 1"), Is.EqualTo(1));
}