public void Timeout()
{
// Mono throws a socket exception with WouldBlock instead of TimedOut (see #1330)
var isMono = Type.GetType("Mono.Runtime") != null;
using (var conn = OpenConnection(ConnectionString + ";CommandTimeout=1"))
using (var cmd = CreateSleepCommand(conn, 10))
{
Assert.That(() => cmd.ExecuteNonQuery(), Throws.Exception
.TypeOf<NpgsqlException>()
.With.InnerException.TypeOf<IOException>()
.With.InnerException.InnerException.TypeOf<SocketException>()
.With.InnerException.InnerException.Property(nameof(SocketException.SocketErrorCode)).EqualTo(isMono ? SocketError.WouldBlock : SocketError.TimedOut)
);
Assert.That(conn.FullState, Is.EqualTo(ConnectionState.Broken));
}
}