Skip to content

Commit

Permalink
Add tests for baseline ConnectionTimeout.
Browse files Browse the repository at this point in the history
  • Loading branch information
bgrainger committed Sep 16, 2016
1 parent e88cafe commit 1567935
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 1 deletion.
29 changes: 28 additions & 1 deletion tests/SideBySide.New/ConnectSync.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
using System.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using Xunit;

Expand Down Expand Up @@ -125,6 +133,25 @@ public void ConnectNoPassword()
}
}

[Fact(Skip = "Not yet implemented")]
public void ConnectTimeout()
{
var csb = new MySqlConnectionStringBuilder
{
Server = "www.mysql.com",
Pooling = false,
ConnectionTimeout = 3,
};

using (var connection = new MySqlConnection(csb.ConnectionString))
{
var stopwatch = Stopwatch.StartNew();
Assert.Throws<MySqlException>(() => connection.Open());
stopwatch.Stop();
Assert.InRange(stopwatch.ElapsedMilliseconds, 2800, 3500);
}
}

readonly DatabaseFixture m_database;
}
}
74 changes: 74 additions & 0 deletions tests/SideBySide.New/ConnectionPool.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using Xunit;

Expand Down Expand Up @@ -74,6 +79,75 @@ public void ResetConnection(object connectionReset, int poolSize, long expected)
}
}

[Fact(Skip = "Not yet implemented")]
public async Task ExhaustConnectionPoolWithTimeout()
{
var csb = Constants.CreateConnectionStringBuilder();
csb.Pooling = true;
csb.MinimumPoolSize = 0;
csb.MaximumPoolSize = 3;
csb.ConnectionTimeout = 5;

var connections = new List<MySqlConnection>();

for (int i = 0; i < csb.MaximumPoolSize; i++)
{
var connection = new MySqlConnection(csb.ConnectionString);
await connection.OpenAsync().ConfigureAwait(false);
connections.Add(connection);
}

using (var extraConnection = new MySqlConnection(csb.ConnectionString))
{
var stopwatch = Stopwatch.StartNew();
Assert.Throws<MySqlException>(() => extraConnection.Open());
stopwatch.Stop();
Assert.InRange(stopwatch.ElapsedMilliseconds, 4500, 5500);
}

foreach (var connection in connections)
connection.Dispose();
}

[Fact(Skip = "Not yet implemented")]
public async Task ExhaustConnectionPoolBeforeTimeout()
{
var csb = Constants.CreateConnectionStringBuilder();
csb.Pooling = true;
csb.MinimumPoolSize = 0;
csb.MaximumPoolSize = 3;
csb.ConnectionTimeout = 60;

var connections = new List<MySqlConnection>();

for (int i = 0; i < csb.MaximumPoolSize; i++)
{
var connection = new MySqlConnection(csb.ConnectionString);
await connection.OpenAsync().ConfigureAwait(false);
connections.Add(connection);
}

var closeTask = Task.Run(() =>
{
Thread.Sleep(5000);
connections[0].Dispose();
connections.RemoveAt(0);
});

using (var extraConnection = new MySqlConnection(csb.ConnectionString))
{
var stopwatch = Stopwatch.StartNew();
await extraConnection.OpenAsync().ConfigureAwait(false);
stopwatch.Stop();
Assert.InRange(stopwatch.ElapsedMilliseconds, 4500, 7500);
}

closeTask.Wait();

foreach (var connection in connections)
connection.Dispose();
}

public void Dispose()
{
MySqlConnection.ClearAllPools();
Expand Down

0 comments on commit 1567935

Please sign in to comment.