コード例 #1
0
        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");
        }
コード例 #2
0
        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"));
            }
        }
コード例 #3
0
        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();
        }