public async Task Should_append_manual_checkpoint() { SystemClock.UseRealClock(); var tagListHandler = WithCheckpointStorageService(storageService => new SimulatorBuilder(storageService).Build()); using var svc = CreateCheckpointService(); var checkpoints = new List <Checkpoint>(); var wsConnected = false; var client = new CheckpointServiceClient(svc.ListenUri); using var sub = client.CreateSubscription(DateTime.UtcNow.AddHours(-1)); sub.Checkpoints.Subscribe(cp => checkpoints.Add(cp)); sub.WebSocketConnected.Subscribe(s => wsConnected = s.IsConnected); sub.Start(); await new Timing().ExpectAsync(() => wsConnected); await client.AppendCheckpoint("555"); await new Timing() .Logger(Logger) .FailureDetails(() => $"checkpoints.Count = {checkpoints.Count}") .ExpectAsync(() => checkpoints.Count >= 1); checkpoints.Should().Contain(x => x.RiderId == "555"); }
public async Task Should_stream_checkpoints_over_websocket() { SystemClock.UseRealClock(); var tagListHandler = WithCheckpointStorageService(storageService => new SimulatorBuilder(storageService).Build()); using var svc = CreateCheckpointService(); tagListHandler.ReturnOnce(new Tag { TagId = "1" }); tagListHandler.ReturnOnce(new Tag { TagId = "2" }); var checkpoints = new List <Checkpoint>(); var wsConnected = false; var client = new CheckpointServiceClient(svc.ListenUri); using var sub = client.CreateSubscription(DateTime.UtcNow.AddHours(-1)); sub.Checkpoints.Subscribe(cp => checkpoints.Add(cp)); sub.WebSocketConnected.Subscribe(s => wsConnected = s.IsConnected); sub.Start(); await new Timing().ExpectAsync(() => wsConnected); tagListHandler.ReturnOnce(new Tag { TagId = "3" }); tagListHandler.ReturnOnce(new Tag { TagId = "4" }); await new Timing() .Logger(Logger) .FailureDetails(() => $"checkpoints.Count = {checkpoints.Count}") .ExpectAsync(() => checkpoints.Count >= 4); }
public async Task Subscription_reconnects() { SystemClock.UseRealClock(); var tagListHandler = WithCheckpointStorageService(storageService => new SimulatorBuilder(storageService).Build()); var port = GetAvailablePort(); var address = $"http://127.0.0.1:{port}"; var client = new CheckpointServiceClient(address); var checkpoints = new List <Checkpoint>(); var wsConnectionStatus = new List <WsConnectionStatus>(); using var sub = (CheckpointSubscription)client.CreateSubscription(DateTime.UtcNow.AddHours(-1), TimeSpan.FromMilliseconds(500)); sub.Checkpoints.Subscribe(cp => checkpoints.Add(cp)); sub.WebSocketConnected.Subscribe(s => wsConnectionStatus.Add(s)); sub.Start(); // Assert we could not connect, but were trying await new Timing().ExpectAsync(() => wsConnectionStatus.Count > 2); wsConnectionStatus.Should().NotContain(x => x.IsConnected); using (CreateCheckpointService(port: port)) { // Now we connect await new Timing().ExpectAsync(() => wsConnectionStatus.LastOrDefault()?.IsConnected == true); await client.AppendCheckpoint("123"); await new Timing().ExpectAsync(() => checkpoints.Any(cp => cp.RiderId == "123")); } // Disconnect again await new Timing().ExpectAsync(() => wsConnectionStatus.LastOrDefault()?.IsConnected == false); using (var svc = CreateCheckpointService(port: port)) { // Connect again await new Timing().ExpectAsync(() => wsConnectionStatus.LastOrDefault()?.IsConnected == true); await client.AppendCheckpoint("567"); await new Timing().ExpectAsync(() => checkpoints.Any(cp => cp.RiderId == "567")); } }
public async Task Should_ignore_empty_manual_checkpoint() { SystemClock.UseRealClock(); var tagListHandler = WithCheckpointStorageService(storageService => new SimulatorBuilder(storageService).Build()); using var svc = CreateCheckpointService(); var checkpoints = new List <Checkpoint>(); var wsConnected = false; var client = new CheckpointServiceClient(svc.ListenUri); using var sub = client.CreateSubscription(DateTime.UtcNow.AddHours(-1)); sub.Checkpoints.Subscribe(cp => checkpoints.Add(cp)); sub.WebSocketConnected.Subscribe(s => wsConnected = s.IsConnected); sub.Start(); await new Timing().ExpectAsync(() => wsConnected); await client.AppendCheckpoint(""); (await new Timing() .Timeout(5000) .Logger(Logger) .WaitAsync(() => checkpoints.Count > 0)).Should().BeFalse(); }