public async Task CanRetryAndSucceed() { var address = NetworkAddress.Parse("127.0.0.1:11001"); HConsole.Configure(x => x.Configure(this).SetIndent(0).SetPrefix("TEST")); HConsole.WriteLine(this, "Begin"); HConsole.WriteLine(this, "Start server"); var count = 0; await using var server = new Server(address, async(xsvr, xconn, xmsg) => await HandleAsync(xsvr, xconn, xmsg, async(svr, conn, msg) => { HConsole.WriteLine(svr, "Handle request."); ClientMessage response; if (++count > 3) { HConsole.WriteLine(svr, "Respond with success."); response = ClientPingServerCodec.EncodeResponse(); } else { HConsole.WriteLine(svr, "Respond with error."); response = CreateErrorMessage(RemoteError.RetryableHazelcast); response.Flags |= ClientMessageFlags.BeginFragment | ClientMessageFlags.EndFragment; } response.CorrelationId = msg.CorrelationId; await conn.SendAsync(response).CfAwait(); }), LoggerFactory); await server.StartAsync().CfAwait(); HConsole.WriteLine(this, "Start client"); var options = HazelcastOptions.Build(configure: (configuration, options) => { options.Networking.Addresses.Add("127.0.0.1:11001"); }); await using var client = (HazelcastClient) await HazelcastClientFactory.StartNewClientAsync(options); HConsole.WriteLine(this, "Send message"); var message = ClientPingServerCodec.EncodeRequest(); var token = new CancellationTokenSource(3_000).Token; await client.Cluster.Messaging.SendAsync(message, token); // default is 120s Assert.AreEqual(4, count); await server.StopAsync().CfAwait(); }
public async Task TimeoutsIfServerIsTooSlow() { var address = NetworkAddress.Parse("127.0.0.1:11001"); HConsole.Configure(this, config => config.SetIndent(0).SetPrefix("TEST")); HConsole.WriteLine(this, "Begin"); HConsole.WriteLine(this, "Start server"); await using var server = new Server(address, async(svr, conn, msg) => { HConsole.WriteLine(svr, "Handle request (slowww...)"); await Task.Delay(10_000).CAF(); HConsole.WriteLine(svr, "Respond with success."); var response = ClientPingServerCodec.EncodeResponse(); response.CorrelationId = msg.CorrelationId; await conn.SendAsync(response).CAF(); }, LoggerFactory); await server.StartAsync().CAF(); HConsole.WriteLine(this, "Start client"); var options = HazelcastOptions.Build(configure: (configuration, options) => { options.Networking.Addresses.Add("127.0.0.1:11001"); }); await using var client = (HazelcastClient)HazelcastClientFactory.CreateClient(options); await client.StartAsync().CAF(); HConsole.WriteLine(this, "Send message"); var message = ClientPingServerCodec.EncodeRequest(); Assert.ThrowsAsync <TaskCanceledException>(async() => { var token = new CancellationTokenSource(3_000).Token; await client.Cluster.Messaging.SendAsync(message, token); // default is 120s }); // TODO dispose the client, the server await server.StopAsync().CAF(); }