Skip to content

Commit 8378a06

Browse files
committed
in-proc test enhancements
1 parent d01051c commit 8378a06

8 files changed

Lines changed: 349 additions & 101 deletions

File tree

tests/StackExchange.Redis.Tests/BasicOpTests.cs

Lines changed: 35 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class BasicOpsTests(ITestOutputHelper output, SharedConnectionFixture fix
1616
public class InProcBasicOpsTests(ITestOutputHelper output, InProcServerFixture fixture)
1717
: BasicOpsTestsBase(output, null, fixture)
1818
{
19+
protected override bool UseDedicatedInProcessServer => true;
1920
}
2021

2122
[RunPerProtocol]
@@ -25,25 +26,26 @@ public abstract class BasicOpsTestsBase(ITestOutputHelper output, SharedConnecti
2526
[Fact]
2627
public async Task PingOnce()
2728
{
28-
await using var conn = Create();
29+
await using var conn = ConnectFactory();
2930
var db = conn.GetDatabase();
3031

3132
var duration = await db.PingAsync().ForAwait();
3233
Log("Ping took: " + duration);
3334
Assert.True(duration.TotalMilliseconds > 0);
3435
}
3536

36-
[Fact(Skip = "This needs some CI love, it's not a scenario we care about too much but noisy atm.")]
37+
[Fact]
3738
public async Task RapidDispose()
3839
{
39-
await using var primary = Create();
40+
SkipIfWouldUseRealServer("This needs some CI love, it's not a scenario we care about too much but noisy atm.");
41+
await using var primary = ConnectFactory();
4042
var db = primary.GetDatabase();
4143
RedisKey key = Me();
4244
db.KeyDelete(key, CommandFlags.FireAndForget);
4345

4446
for (int i = 0; i < 10; i++)
4547
{
46-
await using var secondary = Create(fail: true, shared: false);
48+
await using var secondary = primary.CreateClient();
4749
secondary.GetDatabase().StringIncrement(key, flags: CommandFlags.FireAndForget);
4850
}
4951
// Give it a moment to get through the pipe...they were fire and forget
@@ -54,7 +56,7 @@ public async Task RapidDispose()
5456
[Fact]
5557
public async Task PingMany()
5658
{
57-
await using var conn = Create();
59+
await using var conn = ConnectFactory();
5860
var db = conn.GetDatabase();
5961
var tasks = new Task<TimeSpan>[100];
6062
for (int i = 0; i < tasks.Length; i++)
@@ -69,7 +71,7 @@ public async Task PingMany()
6971
[Fact]
7072
public async Task GetWithNullKey()
7173
{
72-
await using var conn = Create();
74+
await using var conn = ConnectFactory();
7375
var db = conn.GetDatabase();
7476
const string? key = null;
7577
var ex = Assert.Throws<ArgumentException>(() => db.StringGet(key));
@@ -79,7 +81,7 @@ public async Task GetWithNullKey()
7981
[Fact]
8082
public async Task SetWithNullKey()
8183
{
82-
await using var conn = Create();
84+
await using var conn = ConnectFactory();
8385
var db = conn.GetDatabase();
8486
const string? key = null, value = "abc";
8587
var ex = Assert.Throws<ArgumentException>(() => db.StringSet(key!, value));
@@ -89,7 +91,7 @@ public async Task SetWithNullKey()
8991
[Fact]
9092
public async Task SetWithNullValue()
9193
{
92-
await using var conn = Create();
94+
await using var conn = ConnectFactory();
9395
var db = conn.GetDatabase();
9496
string key = Me();
9597
const string? value = null;
@@ -107,7 +109,7 @@ public async Task SetWithNullValue()
107109
[Fact]
108110
public async Task SetWithDefaultValue()
109111
{
110-
await using var conn = Create();
112+
await using var conn = ConnectFactory();
111113
var db = conn.GetDatabase();
112114
string key = Me();
113115
var value = default(RedisValue); // this is kinda 0... ish
@@ -125,7 +127,7 @@ public async Task SetWithDefaultValue()
125127
[Fact]
126128
public async Task SetWithZeroValue()
127129
{
128-
await using var conn = Create();
130+
await using var conn = ConnectFactory();
129131
var db = conn.GetDatabase();
130132
string key = Me();
131133
const long value = 0;
@@ -143,7 +145,7 @@ public async Task SetWithZeroValue()
143145
[Fact]
144146
public async Task GetSetAsync()
145147
{
146-
await using var conn = Create();
148+
await using var conn = ConnectFactory();
147149
var db = conn.GetDatabase();
148150

149151
RedisKey key = Me();
@@ -168,7 +170,7 @@ public async Task GetSetAsync()
168170
[Fact]
169171
public async Task GetSetSync()
170172
{
171-
await using var conn = Create();
173+
await using var conn = ConnectFactory();
172174
var db = conn.GetDatabase();
173175

174176
RedisKey key = Me();
@@ -195,7 +197,7 @@ public async Task GetSetSync()
195197
[InlineData(true, false)]
196198
public async Task GetWithExpiry(bool exists, bool hasExpiry)
197199
{
198-
await using var conn = Create();
200+
await using var conn = ConnectFactory();
199201
var db = conn.GetDatabase();
200202
RedisKey key = Me();
201203
db.KeyDelete(key, CommandFlags.FireAndForget);
@@ -231,7 +233,7 @@ public async Task GetWithExpiry(bool exists, bool hasExpiry)
231233
[Fact]
232234
public async Task GetWithExpiryWrongTypeAsync()
233235
{
234-
await using var conn = Create();
236+
await using var conn = ConnectFactory();
235237
var db = conn.GetDatabase();
236238
RedisKey key = Me();
237239
_ = db.KeyDeleteAsync(key);
@@ -254,11 +256,11 @@ public async Task GetWithExpiryWrongTypeAsync()
254256
[Fact]
255257
public async Task GetWithExpiryWrongTypeSync()
256258
{
259+
await using var conn = ConnectFactory();
260+
var db = conn.GetDatabase();
257261
RedisKey key = Me();
258262
var ex = await Assert.ThrowsAsync<RedisServerException>(async () =>
259263
{
260-
await using var conn = Create();
261-
var db = conn.GetDatabase();
262264
db.KeyDelete(key, CommandFlags.FireAndForget);
263265
db.SetAdd(key, "abc", CommandFlags.FireAndForget);
264266
db.StringGetWithExpiry(key);
@@ -270,13 +272,15 @@ public async Task GetWithExpiryWrongTypeSync()
270272
[Fact]
271273
public async Task TestSevered()
272274
{
273-
SetExpectedAmbientFailureCount(2);
274-
await using var conn = Create(allowAdmin: true, shared: false);
275+
await using var conn = ConnectFactory(allowAdmin: true, shared: false);
275276
var db = conn.GetDatabase();
276277
string key = Me();
277278
db.KeyDelete(key, CommandFlags.FireAndForget);
278279
db.StringSet(key, key, flags: CommandFlags.FireAndForget);
279-
var server = GetServer(conn);
280+
var server = GetServer(conn.DefaultClient);
281+
Assert.SkipUnless(server.CanSimulateConnectionFailure(), "Skipping because server cannot simulate connection failure");
282+
283+
SetExpectedAmbientFailureCount(2);
280284
server.SimulateConnectionFailure(SimulatedFailureType.All);
281285
var watch = Stopwatch.StartNew();
282286
await UntilConditionAsync(TimeSpan.FromSeconds(10), () => server.IsConnected);
@@ -291,7 +295,7 @@ public async Task TestSevered()
291295
[Fact]
292296
public async Task IncrAsync()
293297
{
294-
await using var conn = Create();
298+
await using var conn = ConnectFactory();
295299
var db = conn.GetDatabase();
296300
RedisKey key = Me();
297301
db.KeyDelete(key, CommandFlags.FireAndForget);
@@ -319,7 +323,7 @@ public async Task IncrAsync()
319323
[Fact]
320324
public async Task IncrSync()
321325
{
322-
await using var conn = Create();
326+
await using var conn = ConnectFactory();
323327
var db = conn.GetDatabase();
324328
RedisKey key = Me();
325329
Log(key);
@@ -348,7 +352,7 @@ public async Task IncrSync()
348352
[Fact]
349353
public async Task IncrDifferentSizes()
350354
{
351-
await using var conn = Create();
355+
await using var conn = ConnectFactory();
352356
var db = conn.GetDatabase();
353357
RedisKey key = Me();
354358
db.KeyDelete(key, CommandFlags.FireAndForget);
@@ -378,30 +382,10 @@ private static void Incr(IDatabase database, RedisKey key, int delta, ref int to
378382
total += delta;
379383
}
380384

381-
[Fact]
382-
public async Task ShouldUseSharedMuxer()
383-
{
384-
Log($"Shared: {SharedFixtureAvailable}");
385-
if (SharedFixtureAvailable)
386-
{
387-
await using var a = Create();
388-
Assert.IsNotType<ConnectionMultiplexer>(a);
389-
await using var b = Create();
390-
Assert.Same(a, b);
391-
}
392-
else
393-
{
394-
await using var a = Create();
395-
Assert.IsType<ConnectionMultiplexer>(a);
396-
await using var b = Create();
397-
Assert.NotSame(a, b);
398-
}
399-
}
400-
401385
[Fact]
402386
public async Task Delete()
403387
{
404-
await using var conn = Create();
388+
await using var conn = ConnectFactory();
405389
var db = conn.GetDatabase();
406390
var key = Me();
407391
_ = db.StringSetAsync(key, "Heyyyyy");
@@ -416,7 +400,7 @@ public async Task Delete()
416400
[Fact]
417401
public async Task DeleteAsync()
418402
{
419-
await using var conn = Create();
403+
await using var conn = ConnectFactory();
420404
var db = conn.GetDatabase();
421405
var key = Me();
422406
_ = db.StringSetAsync(key, "Heyyyyy");
@@ -431,7 +415,7 @@ public async Task DeleteAsync()
431415
[Fact]
432416
public async Task DeleteMany()
433417
{
434-
await using var conn = Create();
418+
await using var conn = ConnectFactory();
435419
var db = conn.GetDatabase();
436420
var key1 = Me();
437421
var key2 = Me() + "2";
@@ -450,7 +434,7 @@ public async Task DeleteMany()
450434
[Fact]
451435
public async Task DeleteManyAsync()
452436
{
453-
await using var conn = Create();
437+
await using var conn = ConnectFactory();
454438
var db = conn.GetDatabase();
455439
var key1 = Me();
456440
var key2 = Me() + "2";
@@ -470,7 +454,7 @@ public async Task DeleteManyAsync()
470454
public async Task WrappedDatabasePrefixIntegration()
471455
{
472456
var key = Me();
473-
await using var conn = Create();
457+
await using var conn = ConnectFactory();
474458
var db = conn.GetDatabase().WithKeyPrefix("abc");
475459
db.KeyDelete(key, CommandFlags.FireAndForget);
476460
db.StringIncrement(key, flags: CommandFlags.FireAndForget);
@@ -484,8 +468,8 @@ public async Task WrappedDatabasePrefixIntegration()
484468
[Fact]
485469
public async Task TransactionSync()
486470
{
487-
await using var conn = Create();
488-
Assert.SkipUnless(conn.RawConfig.CommandMap.IsAvailable(RedisCommand.MULTI), "MULTI is not available");
471+
await using var conn = ConnectFactory();
472+
Assert.SkipUnless(conn.DefaultClient.RawConfig.CommandMap.IsAvailable(RedisCommand.MULTI), "MULTI is not available");
489473
var db = conn.GetDatabase();
490474

491475
RedisKey key = Me();
@@ -504,8 +488,8 @@ public async Task TransactionSync()
504488
[Fact]
505489
public async Task TransactionAsync()
506490
{
507-
await using var conn = Create();
508-
Assert.SkipUnless(conn.RawConfig.CommandMap.IsAvailable(RedisCommand.MULTI), "MULTI is not available");
491+
await using var conn = ConnectFactory();
492+
Assert.SkipUnless(conn.DefaultClient.RawConfig.CommandMap.IsAvailable(RedisCommand.MULTI), "MULTI is not available");
509493

510494
var db = conn.GetDatabase();
511495

0 commit comments

Comments
 (0)