Skip to content

Commit 1286481

Browse files
committed
don't run unnecessary RESP2-client permutations
1 parent bb48867 commit 1286481

1 file changed

Lines changed: 28 additions & 16 deletions

File tree

tests/StackExchange.Redis.Tests/Resp3HandshakeTests.cs

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77

88
namespace StackExchange.Redis.Tests;
99

10-
[RunPerProtocol]
1110
public class Resp3HandshakeTests(ITestOutputHelper log)
1211
{
1312
public enum ServerResponse
1413
{
15-
SuccessResp3,
16-
SuccessResp2,
14+
Resp3,
15+
Resp2,
1716
UnknownCommand,
1817
}
1918

@@ -31,31 +30,44 @@ public enum HandshakeFlags
3130
private static readonly int HandshakeFlagsCount = Enum.GetValues(typeof(HandshakeFlags)).Length - 1;
3231
public static IEnumerable<object[]> GetHandshakeParameters()
3332
{
34-
// all server-response modes; all flag permutations
35-
foreach (ServerResponse response in Enum.GetValues(typeof(ServerResponse)))
33+
// all client protocols, all server-response modes; all flag permutations
34+
var clients = (RedisProtocol[])Enum.GetValues(typeof(RedisProtocol));
35+
var servers = (ServerResponse[])Enum.GetValues(typeof(ServerResponse));
36+
foreach (var client in clients)
3637
{
37-
int count = 1 << HandshakeFlagsCount;
38-
for (int i = 0; i < count; i++)
38+
foreach (var server in servers)
3939
{
40-
yield return [response, (HandshakeFlags)i];
40+
if (client is RedisProtocol.Resp2 & server is not ServerResponse.Resp2)
41+
{
42+
// we don't issue HELLO for this, nothing to test
43+
}
44+
else
45+
{
46+
int count = 1 << HandshakeFlagsCount;
47+
for (int i = 0; i < count; i++)
48+
{
49+
yield return [client, server, (HandshakeFlags)i];
50+
}
51+
}
4152
}
4253
}
4354
}
4455

4556
[Theory]
4657
[MemberData(nameof(GetHandshakeParameters))]
47-
public async Task Handshake(ServerResponse response, HandshakeFlags flags)
58+
public async Task Handshake(RedisProtocol client, ServerResponse server, HandshakeFlags flags)
4859
{
49-
using var server = new HandshakeServer(response, log);
50-
server.Password = (flags & HandshakeFlags.Authenticated) == 0 ? null : "mypassword";
51-
var config = server.GetClientConfig();
60+
using var serverObj = new HandshakeServer(server, log);
61+
serverObj.Password = (flags & HandshakeFlags.Authenticated) == 0 ? null : "mypassword";
62+
var config = serverObj.GetClientConfig();
63+
config.Protocol = client;
5264
config.TieBreaker = (flags & HandshakeFlags.TieBreaker) == 0 ? "" : "tiebreaker_key";
5365
config.ConfigurationChannel = (flags & HandshakeFlags.ConfigChannel) == 0 ? "" : "broadcast_channel";
5466

55-
using var client = await ConnectionMultiplexer.ConnectAsync(config);
67+
using var clientObj = await ConnectionMultiplexer.ConnectAsync(config);
5668

57-
var sub = client.GetSubscriber();
58-
var db = client.GetDatabase();
69+
var sub = clientObj.GetSubscriber();
70+
var db = clientObj.GetDatabase();
5971
ConcurrentBag<string> received = [];
6072
RedisChannel channel = RedisChannel.Literal("mychannel");
6173
RedisKey key = "mykey";
@@ -92,7 +104,7 @@ private sealed class HandshakeServer(ServerResponse response, ITestOutputHelper
92104
{
93105
protected override RedisProtocol MaxProtocol => response switch
94106
{
95-
ServerResponse.SuccessResp3 => RedisProtocol.Resp3,
107+
ServerResponse.Resp3 => RedisProtocol.Resp3,
96108
_ => RedisProtocol.Resp2,
97109
};
98110

0 commit comments

Comments
 (0)