77
88namespace StackExchange . Redis . Tests ;
99
10- [ RunPerProtocol ]
1110public 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