Skip to content

Commit b9b9a8d

Browse files
committed
Npgsql: Fix test cases to use async, stop relevant warnings
1 parent b62907a commit b9b9a8d

File tree

4 files changed

+48
-48
lines changed

4 files changed

+48
-48
lines changed

by-language/csharp-npgsql/DemoProgram.cs

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -18,51 +18,47 @@ await Parser.Default.ParseArguments<Options>(args)
1818
var connString = $"Host={options.Host};Port={options.Port};SSL Mode={options.SslMode};" +
1919
$"Username={options.Username};Password={options.Password};Database={options.Database}";
2020
Console.WriteLine($"Connecting to {connString}\n");
21-
using (var conn = new NpgsqlConnection(connString))
22-
{
23-
conn.Open();
24-
var program = new DatabaseWorkloads();
25-
await program.SystemQueryExample(conn);
26-
await program.BasicConversationExample(conn);
27-
await program.AsyncUnnestExample(conn);
28-
conn.Close();
29-
}
30-
21+
await using var conn = new NpgsqlConnection(connString);
22+
conn.Open();
23+
await DatabaseWorkloads.SystemQueryExample(conn);
24+
await DatabaseWorkloads.BasicConversationExample(conn);
25+
await DatabaseWorkloads.UnnestExample(conn);
26+
conn.Close();
3127
});
3228

3329
}
3430

3531
public class Options
3632
{
3733
[Option('h', "host", Required = false, HelpText = "Host name to connect to", Default = "localhost")]
38-
public string Host { get; set; }
34+
public string? Host { get; set; }
3935

4036
[Option('p', "port", Required = false, HelpText = "Port number to connect to", Default = 5432)]
4137
public int Port { get; set; }
4238

4339
// Controls whether SSL is used, depending on server support. Can be Require, Disable, or Prefer.
4440
// https://www.npgsql.org/doc/connection-string-parameters.html#security-and-encryption
4541
[Option('s', "ssl-mode", Required = false, HelpText = "Which SSL mode to use", Default = "Disable")]
46-
public string SslMode { get; set; }
42+
public string? SslMode { get; set; }
4743

4844
[Option('u', "username", Required = false, HelpText = "Username to authenticate with", Default = "crate")]
49-
public string Username { get; set; }
45+
public string? Username { get; set; }
5046
[Option('w', "password", Required = false, HelpText = "Password to authenticate with", Default = "")]
51-
public string Password { get; set; }
47+
public string? Password { get; set; }
5248
[Option('d', "database", Required = false, HelpText = "Database to use", Default = "testdrive")]
53-
public string Database { get; set; }
49+
public string? Database { get; set; }
5450
}
5551

5652
}
5753

5854
public class DatabaseWorkloads
5955
{
60-
public async Task<List<string>> SystemQueryExample(NpgsqlConnection conn)
56+
public static async Task<List<string>> SystemQueryExample(NpgsqlConnection conn)
6157
{
6258
Console.WriteLine("Running SystemQueryExample");
6359
var mountains = new List<string>();
64-
using (var cmd = new NpgsqlCommand("SELECT mountain FROM sys.summits ORDER BY 1 LIMIT 25", conn))
65-
using (var reader = cmd.ExecuteReader())
60+
await using (var cmd = new NpgsqlCommand("SELECT mountain FROM sys.summits ORDER BY 1 LIMIT 25", conn))
61+
await using (var reader = cmd.ExecuteReader())
6662
{
6763
while (await reader.ReadAsync())
6864
{
@@ -76,31 +72,32 @@ public async Task<List<string>> SystemQueryExample(NpgsqlConnection conn)
7672
return mountains;
7773
}
7874

79-
public async Task<List<int>> BasicConversationExample(NpgsqlConnection conn)
75+
public static async Task<List<int>> BasicConversationExample(NpgsqlConnection conn)
8076
{
8177
Console.WriteLine("Running BasicConversationExample");
8278

8379
// Submit DDL, create database schema.
84-
using (var cmd = new NpgsqlCommand("DROP TABLE IF EXISTS testdrive.basic", conn))
80+
await using (var cmd = new NpgsqlCommand("DROP TABLE IF EXISTS testdrive.basic", conn))
8581
{
8682
cmd.ExecuteNonQuery();
8783
}
88-
using (var cmd = new NpgsqlCommand("CREATE TABLE testdrive.basic (x int)", conn))
84+
85+
await using (var cmd = new NpgsqlCommand("CREATE TABLE testdrive.basic (x int)", conn))
8986
{
9087
cmd.ExecuteNonQuery();
9188
}
9289

9390
// Insert single data point.
94-
using (var cmd = new NpgsqlCommand("INSERT INTO testdrive.basic (x) VALUES (@x)", conn))
91+
await using (var cmd = new NpgsqlCommand("INSERT INTO testdrive.basic (x) VALUES (@x)", conn))
9592
{
9693
cmd.Parameters.AddWithValue("x", -999);
9794
cmd.ExecuteNonQuery();
9895
}
9996

10097
// Insert multiple data points.
101-
using (var cmd = new NpgsqlCommand("INSERT INTO testdrive.basic (x) VALUES (@x)", conn))
98+
await using (var cmd = new NpgsqlCommand("INSERT INTO testdrive.basic (x) VALUES (@x)", conn))
10299
{
103-
using (var transaction = conn.BeginTransaction())
100+
await using (var transaction = conn.BeginTransaction())
104101
{
105102
cmd.Transaction = transaction;
106103
cmd.Parameters.Add("@x", NpgsqlDbType.Integer);
@@ -116,15 +113,15 @@ public async Task<List<int>> BasicConversationExample(NpgsqlConnection conn)
116113
}
117114

118115
// Flush data.
119-
using (var cmd = new NpgsqlCommand("REFRESH TABLE testdrive.basic", conn))
116+
await using (var cmd = new NpgsqlCommand("REFRESH TABLE testdrive.basic", conn))
120117
{
121118
cmd.ExecuteNonQuery();
122119
}
123120

124121
// Query back data.
125122
var data = new List<int>();
126-
using (var cmd = new NpgsqlCommand("SELECT x FROM testdrive.basic ORDER BY 1 ASC LIMIT 10", conn))
127-
using (var reader = cmd.ExecuteReader())
123+
await using (var cmd = new NpgsqlCommand("SELECT x FROM testdrive.basic ORDER BY 1 ASC LIMIT 10", conn))
124+
await using (var reader = cmd.ExecuteReader())
128125
{
129126
while (await reader.ReadAsync())
130127
{
@@ -139,20 +136,20 @@ public async Task<List<int>> BasicConversationExample(NpgsqlConnection conn)
139136
return data;
140137
}
141138

142-
public async Task<int> AsyncUnnestExample(NpgsqlConnection conn)
139+
public static async Task<int> UnnestExample(NpgsqlConnection conn)
143140
{
144141
Console.WriteLine("Running AsyncUnnestExample");
145142

146143
// Submit DDL, create database schema.
147-
using (var cmd = new NpgsqlCommand("DROP TABLE IF EXISTS testdrive.unnest", conn))
144+
await using (var cmd = new NpgsqlCommand("DROP TABLE IF EXISTS testdrive.unnest", conn))
148145
{
149146
await cmd.ExecuteNonQueryAsync();
150147
}
151148

152-
using (var cmd2 = new NpgsqlCommand(
153-
connection: conn,
154-
cmdText: "CREATE TABLE IF NOT EXISTS testdrive.unnest (id int, name text)"
155-
))
149+
await using (var cmd2 = new NpgsqlCommand(
150+
connection: conn,
151+
cmdText: "CREATE TABLE IF NOT EXISTS testdrive.unnest (id int, name text)"
152+
))
156153
{
157154
await cmd2.ExecuteNonQueryAsync();
158155
}
@@ -170,16 +167,16 @@ public async Task<int> AsyncUnnestExample(NpgsqlConnection conn)
170167
await cmd3.ExecuteNonQueryAsync();
171168

172169
// Flush data.
173-
using (var cmd = new NpgsqlCommand("REFRESH TABLE testdrive.unnest", conn))
170+
await using (var cmd = new NpgsqlCommand("REFRESH TABLE testdrive.unnest", conn))
174171
{
175172
cmd.ExecuteNonQuery();
176173
}
177174

178175
// Query back data.
179176
var resultCount = -1;
180-
using (var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM testdrive.unnest", conn))
177+
await using (var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM testdrive.unnest", conn))
181178
{
182-
using (var reader = cmd.ExecuteReader())
179+
await using (var reader = cmd.ExecuteReader())
183180
{
184181
await reader.ReadAsync();
185182
resultCount = reader.GetInt32(0);

by-language/csharp-npgsql/README.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ For running the tests against a remote database, use, for example::
6666
export CRATEDB_DSN='Host=clustername.aks1.westeurope.azure.cratedb.net;Port=5432;SSL Mode=Require;Username=foobar;Password=X8F%Shn)TESTvF5ac7%eW4NM;Database=testdrive'
6767
dotnet test --framework=net8.0
6868

69+
For running tests selectively, use::
70+
71+
dotnet test --framework=net8.0 --filter SystemQueryExample
72+
6973

7074
.. _C#: https://en.wikipedia.org/wiki/C_Sharp_(programming_language)
7175
.. _crate-npgsql: https://github.com/crate/crate-npgsql

by-language/csharp-npgsql/demo.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
55
<TargetFrameworks>net6.0;net8.0</TargetFrameworks>
6+
<Nullable>enable</Nullable>
67
<IsPackable>false</IsPackable>
78
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
89
<GenerateProgramFile>false</GenerateProgramFile>

by-language/csharp-npgsql/tests/DemoProgramTest.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Threading.Tasks;
34
using Npgsql;
45
using Xunit;
56

@@ -41,44 +42,41 @@ public DemoProgramTest(DatabaseFixture fixture)
4142
}
4243

4344
[Fact]
44-
public void TestSystemQueryExample()
45+
public async Task TestSystemQueryExample()
4546
{
4647
var conn = fixture.Db;
4748

4849
// Invoke database workload.
49-
var task = program.SystemQueryExample(conn);
50-
task.Wait();
50+
var task = DatabaseWorkloads.SystemQueryExample(conn);
51+
var mountains = await task.WaitAsync(TimeSpan.FromSeconds(0.5));
5152

5253
// Check results.
53-
var mountains = task.Result;
5454
Assert.Equal("Acherkogel", mountains[0]);
5555
}
5656

5757
[Fact]
58-
public void TestBasicConversationExample()
58+
public async Task TestBasicConversationExample()
5959
{
6060
var conn = fixture.Db;
6161

6262
// Invoke database workload.
63-
var task = program.BasicConversationExample(conn);
64-
task.Wait();
63+
var task = DatabaseWorkloads.BasicConversationExample(conn);
64+
var results = await task.WaitAsync(TimeSpan.FromSeconds(0.5));
6565

6666
// Check results.
67-
var results = task.Result;
6867
Assert.Equal(new List<int>() { -999, 10, 20, 30, 40, 50, 60, 70, 80, 90 }, results);
6968
}
7069

7170
[Fact]
72-
public void TestAsyncUnnestExample()
71+
public async Task TestUnnestExample()
7372
{
7473
var conn = fixture.Db;
7574

7675
// Invoke database workload.
77-
var task = program.AsyncUnnestExample(conn);
78-
task.Wait();
76+
var task = DatabaseWorkloads.UnnestExample(conn);
77+
var resultCount = await task.WaitAsync(TimeSpan.FromSeconds(0.5));
7978

8079
// Check results.
81-
var resultCount = task.Result;
8280
Assert.Equal(10, resultCount);
8381
}
8482

0 commit comments

Comments
 (0)