示例#1
0
        public async void FollowUsers_NoUsers_AnotherUser()
        {
            var id       = Guid.NewGuid().ToString();
            var session1 = await _client.AuthenticateCustomAsync(id);

            var session2 = await _client.AuthenticateCustomAsync(id + "a");

            var completer = new TaskCompletionSource <IStatusPresenceEvent>();
            var canceller = new CancellationTokenSource();

            canceller.Token.Register(() => completer.SetCanceled());
            canceller.CancelAfter(Timeout);
            _socket.ReceivedStatusPresence += statuses => completer.SetResult(statuses);
            _socket.ReceivedError          += e => completer.TrySetException(e);
            await _socket.ConnectAsync(session1);

            await _socket.FollowUsersAsync(new[] { session2.UserId });

            var socket = Socket.From(_client);
            await socket.ConnectAsync(session2);

            await socket.UpdateStatusAsync("new status change");

            var result = await completer.Task;

            Assert.NotNull(result);
            Assert.Contains(result.Joins, joined => joined.UserId.Equals(session2.UserId));
        }
示例#2
0
        public async void Socket_AwaitedTasksAfterDisconnect_AreCanceled()
        {
            var id      = Guid.NewGuid().ToString();
            var session = await _client.AuthenticateCustomAsync(id);

            await _socket.ConnectAsync(session);

            await _socket.CloseAsync();

            var statusTask1 = _socket.FollowUsersAsync(new[] { session.UserId });
            var statusTask2 = _socket.FollowUsersAsync(new[] { session.UserId });

            await Assert.ThrowsAsync <TaskCanceledException>(() => Task.WhenAll(statusTask1, statusTask2));
        }
示例#3
0
        public async Task ShouldFollowStatusUpdate()
        {
            var session1 = await _client.AuthenticateCustomAsync($"{Guid.NewGuid()}");

            var session2 = await _client.AuthenticateCustomAsync($"{Guid.NewGuid()}");

            var completer = new TaskCompletionSource <IStatusPresenceEvent>();

            _socket.OnStatusPresence += (sender, presence) => completer.SetResult(presence);
            await _socket.ConnectAsync(session1);

            await _socket.FollowUsersAsync(new[] { session2.UserId });

            var socket2 = _client.CreateWebSocket();
            await socket2.ConnectAsync(session2, default(CancellationToken), true);

            await socket2.UpdateStatusAsync("online");

            var result = await completer.Task;

            Assert.NotNull(result);
            Assert.That(result.Joins.Count(p => p.UserId.Equals(session2.UserId)), Is.EqualTo(1));

            await socket2.DisconnectAsync();
        }