Skip to content

Commit b05b899

Browse files
committed
Add tests.
Signed-off-by: Bradley Grainger <[email protected]>
1 parent 450f375 commit b05b899

File tree

2 files changed

+163
-1
lines changed

2 files changed

+163
-1
lines changed
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace MySqlConnector.Tests;
8+
9+
public class ConnectionOpenedCallbackTests : IDisposable
10+
{
11+
public ConnectionOpenedCallbackTests()
12+
{
13+
m_server = new();
14+
m_server.Start();
15+
16+
m_csb = new MySqlConnectionStringBuilder()
17+
{
18+
Server = "localhost",
19+
Port = (uint) m_server.Port,
20+
};
21+
m_dataSource = new MySqlDataSourceBuilder(m_csb.ConnectionString)
22+
.UseConnectionOpenedCallback(OnConnectionOpenedAsync)
23+
.Build();
24+
}
25+
26+
public void Dispose()
27+
{
28+
m_dataSource.Dispose();
29+
m_server.Stop();
30+
}
31+
32+
[Fact]
33+
public void CallbackIsInvoked()
34+
{
35+
using (var connection = m_dataSource.CreateConnection())
36+
{
37+
Assert.Equal(0, m_connectionOpenedCount);
38+
Assert.Equal(MySqlConnectionOpenedConditions.None, m_connectionOpenedConditions);
39+
40+
connection.Open();
41+
42+
Assert.Equal(1, m_connectionOpenedCount);
43+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
44+
}
45+
}
46+
47+
[Fact]
48+
public void SyncCallbackIsInvoked()
49+
{
50+
var dataSource = new MySqlDataSourceBuilder(m_csb.ConnectionString)
51+
.UseConnectionOpenedCallback((conn, cond) =>
52+
{
53+
m_connectionOpenedCount++;
54+
m_connectionOpenedConditions = cond;
55+
})
56+
.Build();
57+
using (var connection = dataSource.CreateConnection())
58+
{
59+
Assert.Equal(0, m_connectionOpenedCount);
60+
Assert.Equal(MySqlConnectionOpenedConditions.None, m_connectionOpenedConditions);
61+
62+
connection.Open();
63+
64+
Assert.Equal(1, m_connectionOpenedCount);
65+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
66+
}
67+
}
68+
69+
[Fact]
70+
public void CallbackIsInvokedForPooledConnection()
71+
{
72+
using (var connection = m_dataSource.CreateConnection())
73+
{
74+
Assert.Equal(0, m_connectionOpenedCount);
75+
Assert.Equal(MySqlConnectionOpenedConditions.None, m_connectionOpenedConditions);
76+
77+
connection.Open();
78+
79+
Assert.Equal(1, m_connectionOpenedCount);
80+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
81+
}
82+
83+
using (var connection = m_dataSource.OpenConnection())
84+
{
85+
Assert.Equal(2, m_connectionOpenedCount);
86+
Assert.Equal(MySqlConnectionOpenedConditions.Reset, m_connectionOpenedConditions);
87+
}
88+
89+
using (var connection = m_dataSource.OpenConnection())
90+
{
91+
Assert.Equal(3, m_connectionOpenedCount);
92+
Assert.Equal(MySqlConnectionOpenedConditions.Reset, m_connectionOpenedConditions);
93+
}
94+
}
95+
96+
[Fact]
97+
public void CallbackIsInvokedForNonPooledConnection()
98+
{
99+
var csb = new MySqlConnectionStringBuilder(m_csb.ConnectionString)
100+
{
101+
Pooling = false,
102+
};
103+
using var dataSource = new MySqlDataSourceBuilder(csb.ConnectionString)
104+
.UseConnectionOpenedCallback(OnConnectionOpenedAsync)
105+
.Build();
106+
107+
using (var connection = dataSource.OpenConnection())
108+
{
109+
Assert.Equal(1, m_connectionOpenedCount);
110+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
111+
}
112+
113+
using (var connection = dataSource.OpenConnection())
114+
{
115+
Assert.Equal(2, m_connectionOpenedCount);
116+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
117+
}
118+
119+
using (var connection = dataSource.OpenConnection())
120+
{
121+
Assert.Equal(3, m_connectionOpenedCount);
122+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
123+
}
124+
}
125+
126+
[Fact]
127+
public void ConditionsForNonResetConnection()
128+
{
129+
var csb = new MySqlConnectionStringBuilder(m_csb.ConnectionString)
130+
{
131+
ConnectionReset = false,
132+
};
133+
using var dataSource = new MySqlDataSourceBuilder(csb.ConnectionString)
134+
.UseConnectionOpenedCallback(OnConnectionOpenedAsync)
135+
.Build();
136+
137+
using (var connection = dataSource.OpenConnection())
138+
{
139+
Assert.Equal(1, m_connectionOpenedCount);
140+
Assert.Equal(MySqlConnectionOpenedConditions.New, m_connectionOpenedConditions);
141+
}
142+
using (var connection = dataSource.OpenConnection())
143+
{
144+
Assert.Equal(2, m_connectionOpenedCount);
145+
Assert.Equal(MySqlConnectionOpenedConditions.None, m_connectionOpenedConditions);
146+
}
147+
}
148+
149+
private ValueTask OnConnectionOpenedAsync(MySqlConnection connection, MySqlConnectionOpenedConditions conditions)
150+
{
151+
m_connectionOpenedCount++;
152+
m_connectionOpenedConditions = conditions;
153+
return default;
154+
}
155+
156+
private readonly FakeMySqlServer m_server;
157+
private readonly MySqlConnectionStringBuilder m_csb;
158+
private readonly MySqlDataSource m_dataSource;
159+
160+
private int m_connectionOpenedCount;
161+
private MySqlConnectionOpenedConditions m_connectionOpenedConditions;
162+
}

tests/MySqlConnector.Tests/MySqlConnector.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
<ItemGroup Condition=" '$(Configuration)' == 'MySqlData' ">
4949
<PackageReference Include="MySql.Data" />
50-
<Compile Remove="ByteBufferWriterTests.cs;CachedProcedureTests.cs;CancellationTests.cs;ColumnCountPayloadTests.cs;ColumnReaderTests.cs;ConnectionTests.cs;FakeMySqlServer.cs;FakeMySqlServerConnection.cs;LoadBalancerTests.cs;MySqlConnectionTests.cs;MySqlDecimalTests.cs;MySqlExceptionTests.cs;MySqlParameterAppendBinaryTests.cs;MySqlParameterCollectionNameToIndexTests.cs;NormalizeTests.cs;ServerVersionTests.cs;StatementPreparerTests.cs;TypeMapperTests.cs;UtilityTests.cs" />
50+
<Compile Remove="ByteBufferWriterTests.cs;CachedProcedureTests.cs;CancellationTests.cs;ColumnCountPayloadTests.cs;ColumnReaderTests.cs;ConnectionOpenedCallbackTests.cs;ConnectionTests.cs;FakeMySqlServer.cs;FakeMySqlServerConnection.cs;LoadBalancerTests.cs;MySqlConnectionTests.cs;MySqlDecimalTests.cs;MySqlExceptionTests.cs;MySqlParameterAppendBinaryTests.cs;MySqlParameterCollectionNameToIndexTests.cs;NormalizeTests.cs;ServerVersionTests.cs;StatementPreparerTests.cs;TypeMapperTests.cs;UtilityTests.cs" />
5151
<Compile Remove="Metrics\*.cs" />
5252
<Using Include="MySql.Data.MySqlClient" />
5353
<Using Include="MySql.Data.Types" />

0 commit comments

Comments
 (0)