Ejemplo n.º 1
0
        public async Task Throws_ListenPortException_Given_Listen_Port_Which_Can_Not_Be_Bound()
        {
            var(client, mocks) = GetFixture();

            var port  = Mocks.Port;
            var patch = new SoulseekClientOptionsPatch(listenPort: port);

            Listener listener = null;

            try
            {
                // listen on the port to bind it
                listener = new Listener(port, new ConnectionOptions());
                listener.Start();

                using (client)
                {
                    var ex = await Record.ExceptionAsync(() => client.ReconfigureOptionsAsync(patch));

                    Assert.NotNull(ex);
                    Assert.IsType <ListenPortException>(ex);
                    Assert.True(ex.Message.ContainsInsensitive($"failed to start listening on port {port}"));
                }
            }
            finally
            {
                listener?.Stop();
            }
        }
Ejemplo n.º 2
0
        public void Clones_With_Expected_Properties_Given_A_Patch(
            bool?enableListener,
            bool?enableDistributedNetwork,
            bool?acceptDistributedChildren,
            int?distributedChildLimit,
            bool?deduplicateSearchRequests,
            bool?autoAcknowledgePrivateMessages,
            bool?autoAcknowledgePrivilegeNotifications,
            bool?acceptPrivateRoomInvitations)
        {
            var serverConnectionOptions      = new ConnectionOptions();
            var peerConnectionOptions        = new ConnectionOptions();
            var transferConnectionOptions    = new ConnectionOptions();
            var incomingConnectionOptions    = new ConnectionOptions();
            var distributedConnectionOptions = new ConnectionOptions();

            var rnd        = new Random();
            var listenPort = rnd.Next(1024, 65535);

            var patch = new SoulseekClientOptionsPatch(
                enableListener,
                listenPort,
                enableDistributedNetwork: enableDistributedNetwork,
                acceptDistributedChildren: acceptDistributedChildren,
                distributedChildLimit: distributedChildLimit,
                deduplicateSearchRequests: deduplicateSearchRequests,
                autoAcknowledgePrivateMessages: autoAcknowledgePrivateMessages,
                autoAcknowledgePrivilegeNotifications: autoAcknowledgePrivilegeNotifications,
                acceptPrivateRoomInvitations: acceptPrivateRoomInvitations,
                serverConnectionOptions: serverConnectionOptions,
                peerConnectionOptions: peerConnectionOptions,
                transferConnectionOptions: transferConnectionOptions,
                incomingConnectionOptions: incomingConnectionOptions,
                distributedConnectionOptions: distributedConnectionOptions);

            var o = new SoulseekClientOptions().With(patch);

            Assert.Equal(enableListener, o.EnableListener);
            Assert.Equal(listenPort, o.ListenPort);
            Assert.Equal(enableDistributedNetwork, o.EnableDistributedNetwork);
            Assert.Equal(acceptDistributedChildren, o.AcceptDistributedChildren);
            Assert.Equal(distributedChildLimit, o.DistributedChildLimit);
            Assert.Equal(deduplicateSearchRequests, o.DeduplicateSearchRequests);
            Assert.Equal(autoAcknowledgePrivateMessages, o.AutoAcknowledgePrivateMessages);
            Assert.Equal(autoAcknowledgePrivilegeNotifications, o.AutoAcknowledgePrivilegeNotifications);
            Assert.Equal(acceptPrivateRoomInvitations, o.AcceptPrivateRoomInvitations);
            Assert.Equal(peerConnectionOptions, o.PeerConnectionOptions);
            Assert.Equal(incomingConnectionOptions, o.IncomingConnectionOptions);
            Assert.Equal(distributedConnectionOptions, o.DistributedConnectionOptions);

            Assert.Equal(serverConnectionOptions.ReadBufferSize, o.ServerConnectionOptions.ReadBufferSize);
            Assert.Equal(serverConnectionOptions.WriteBufferSize, o.ServerConnectionOptions.WriteBufferSize);
            Assert.Equal(serverConnectionOptions.ConnectTimeout, o.ServerConnectionOptions.ConnectTimeout);
            Assert.Equal(-1, o.ServerConnectionOptions.InactivityTimeout);

            Assert.Equal(transferConnectionOptions.ReadBufferSize, o.TransferConnectionOptions.ReadBufferSize);
            Assert.Equal(transferConnectionOptions.WriteBufferSize, o.TransferConnectionOptions.WriteBufferSize);
            Assert.Equal(transferConnectionOptions.ConnectTimeout, o.TransferConnectionOptions.ConnectTimeout);
            Assert.Equal(-1, o.TransferConnectionOptions.InactivityTimeout);
        }
Ejemplo n.º 3
0
        public void Throws_If_Distributed_Child_Limit_Is_Less_Than_Zero()
        {
            SoulseekClientOptionsPatch x;
            var ex = Record.Exception(() => x = new SoulseekClientOptionsPatch(distributedChildLimit: -1));

            Assert.NotNull(ex);
            Assert.IsType <ArgumentOutOfRangeException>(ex);
        }
Ejemplo n.º 4
0
        public void Throws_If_Listen_Port_Is_Too_Low()
        {
            SoulseekClientOptionsPatch x;
            var ex = Record.Exception(() => x = new SoulseekClientOptionsPatch(listenPort: 1023));

            Assert.NotNull(ex);
            Assert.IsType <ArgumentOutOfRangeException>(ex);
        }
Ejemplo n.º 5
0
        public async Task Updates_Options()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(
                                                enableListener: false,
                                                listenPort: Mocks.Port,
                                                enableDistributedNetwork: false,
                                                acceptDistributedChildren: false,
                                                distributedChildLimit: 5,
                                                deduplicateSearchRequests: true,
                                                autoAcknowledgePrivateMessages: false,
                                                autoAcknowledgePrivilegeNotifications: false,
                                                acceptPrivateRoomInvitations: false,
                                                serverConnectionOptions: new ConnectionOptions(readBufferSize: 10),
                                                peerConnectionOptions: new ConnectionOptions(),
                                                transferConnectionOptions: new ConnectionOptions(readBufferSize: 20),
                                                incomingConnectionOptions: new ConnectionOptions(),
                                                distributedConnectionOptions: new ConnectionOptions()));

            var patch = new SoulseekClientOptionsPatch(
                enableListener: true,
                listenPort: Mocks.Port,
                enableDistributedNetwork: true,
                acceptDistributedChildren: true,
                distributedChildLimit: 10,
                deduplicateSearchRequests: false,
                autoAcknowledgePrivateMessages: true,
                autoAcknowledgePrivilegeNotifications: true,
                acceptPrivateRoomInvitations: true,
                serverConnectionOptions: new ConnectionOptions(readBufferSize: 100),
                peerConnectionOptions: new ConnectionOptions(),
                transferConnectionOptions: new ConnectionOptions(readBufferSize: 200),
                incomingConnectionOptions: new ConnectionOptions(),
                distributedConnectionOptions: new ConnectionOptions());

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Disconnected);

                await client.ReconfigureOptionsAsync(patch);

                Assert.Equal(patch.EnableListener, client.Options.EnableListener);
                Assert.Equal(patch.ListenPort, client.Options.ListenPort);
                Assert.Equal(patch.EnableDistributedNetwork, client.Options.EnableDistributedNetwork);
                Assert.Equal(patch.AcceptDistributedChildren, client.Options.AcceptDistributedChildren);
                Assert.Equal(patch.DistributedChildLimit, client.Options.DistributedChildLimit);
                Assert.Equal(patch.DeduplicateSearchRequests, client.Options.DeduplicateSearchRequests);
                Assert.Equal(patch.AutoAcknowledgePrivateMessages, client.Options.AutoAcknowledgePrivateMessages);
                Assert.Equal(patch.AutoAcknowledgePrivilegeNotifications, client.Options.AutoAcknowledgePrivilegeNotifications);
                Assert.Equal(patch.AcceptPrivateRoomInvitations, client.Options.AcceptPrivateRoomInvitations);
                Assert.Equal(patch.PeerConnectionOptions, client.Options.PeerConnectionOptions);
                Assert.Equal(patch.IncomingConnectionOptions, client.Options.IncomingConnectionOptions);
                Assert.Equal(patch.DistributedConnectionOptions, client.Options.DistributedConnectionOptions);

                Assert.Equal(patch.ServerConnectionOptions.ReadBufferSize, client.Options.ServerConnectionOptions.ReadBufferSize);
                Assert.Equal(patch.TransferConnectionOptions.ReadBufferSize, client.Options.TransferConnectionOptions.ReadBufferSize);
            }
        }
Ejemplo n.º 6
0
        public void Removes_Timeout_On_Server_And_Transfer_Options()
        {
            var serverConnectionOptions   = new ConnectionOptions();
            var transferConnectionOptions = new ConnectionOptions();

            var o = new SoulseekClientOptionsPatch(
                serverConnectionOptions: serverConnectionOptions,
                transferConnectionOptions: transferConnectionOptions);

            Assert.Equal(-1, o.ServerConnectionOptions.InactivityTimeout);
            Assert.Equal(-1, o.TransferConnectionOptions.InactivityTimeout);
        }
Ejemplo n.º 7
0
        public async Task Does_Not_Set_Count_On_DownloadTokenBucket_If_Download_Speed_Did_Not_Change(int speed)
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(maximumDownloadSpeed: speed));

            var patch = new SoulseekClientOptionsPatch(maximumDownloadSpeed: speed);

            using (client)
            {
                await client.ReconfigureOptionsAsync(patch);
            }

            mocks.DownloadTokenBucket.Verify(m => m.SetCapacity(It.IsAny <int>()), Times.Never);
        }
Ejemplo n.º 8
0
        public async Task Does_Not_Throw_Given_Empty_Patch()
        {
            var(client, _) = GetFixture();

            var patch = new SoulseekClientOptionsPatch();

            using (client)
            {
                var ex = await Record.ExceptionAsync(() => client.ReconfigureOptionsAsync(patch));

                Assert.Null(ex);
            }
        }
Ejemplo n.º 9
0
        public async Task Does_Not_Send_PrivateRoomToggle_If_Not_Connected()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions());

            var patch = new SoulseekClientOptionsPatch();

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Disconnected);

                await client.ReconfigureOptionsAsync(patch);
            }

            mocks.ServerConnection.Verify(m => m.WriteAsync(It.IsAny <PrivateRoomToggle>(), It.IsAny <CancellationToken?>()), Times.Never);
        }
Ejemplo n.º 10
0
        public async Task Sends_PrivateRoomToggle()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions());

            var patch = new SoulseekClientOptionsPatch();

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);
            }

            mocks.ServerConnection.Verify(m => m.WriteAsync(It.IsAny <PrivateRoomToggle>(), It.IsAny <CancellationToken?>()));
        }
Ejemplo n.º 11
0
        public async Task Reconfigures_Listener_If_ListenPort_Changed()
        {
            var(client, _) = GetFixture(new SoulseekClientOptions(listenPort: Mocks.Port));

            var patch = new SoulseekClientOptionsPatch(listenPort: Mocks.Port);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);

                Assert.Equal(patch.ListenPort, client.Listener.Port);
            }
        }
Ejemplo n.º 12
0
        public async Task Sends_SetListenPortCommand_If_EnableListener_Changed_From_False_To_true()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(enableListener: false));

            var patch = new SoulseekClientOptionsPatch(enableListener: true);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);
            }

            mocks.ServerConnection.Verify(m => m.WriteAsync(It.IsAny <SetListenPortCommand>(), It.IsAny <CancellationToken?>()));
        }
Ejemplo n.º 13
0
        public async Task Nulls_Listener_If_EnableListener_Changed()
        {
            var(client, _) = GetFixture(new SoulseekClientOptions(enableListener: true));

            var patch = new SoulseekClientOptionsPatch(enableListener: false);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);

                Assert.Null(client.Listener);
            }
        }
Ejemplo n.º 14
0
        public async Task Returns_True_If_Client_Connected_And_ServerConnectionOptions_Changed()
        {
            var(client, _) = GetFixture(new SoulseekClientOptions(serverConnectionOptions: new ConnectionOptions()));

            var patch = new SoulseekClientOptionsPatch(serverConnectionOptions: new ConnectionOptions());

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                var reconnectRequired = await client.ReconfigureOptionsAsync(patch);

                Assert.True(reconnectRequired);
            }
        }
Ejemplo n.º 15
0
        public async Task Reconfigures_Listener_If_IncomingConnectionOptions_Changed()
        {
            var(client, _) = GetFixture(new SoulseekClientOptions(incomingConnectionOptions: new ConnectionOptions()));

            var patch = new SoulseekClientOptionsPatch(incomingConnectionOptions: new ConnectionOptions());

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);

                Assert.Equal(patch.IncomingConnectionOptions, client.Listener.ConnectionOptions);
            }
        }
Ejemplo n.º 16
0
        public async Task Configures_Distributed_Network_()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(enableDistributedNetwork: false));

            var patch = new SoulseekClientOptionsPatch(enableDistributedNetwork: true);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);
            }

            mocks.DistributedConnectionManager.Verify(m => m.UpdateStatusAsync(It.IsAny <CancellationToken?>()));
        }
Ejemplo n.º 17
0
        public async Task Returns_True_If_Client_Connected_And_EnableDistributedNetwork_Changed_To_False()
        {
            var(client, _) = GetFixture(new SoulseekClientOptions(enableDistributedNetwork: true));

            var patch = new SoulseekClientOptionsPatch(enableDistributedNetwork: false);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                var reconnectRequired = await client.ReconfigureOptionsAsync(patch);

                Assert.True(reconnectRequired);
            }
        }
Ejemplo n.º 18
0
        public async Task Sets_Count_On_DownloadTokenBucket_If_Download_Speed_Changed(int speed)
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(maximumDownloadSpeed: 5));

            var patch = new SoulseekClientOptionsPatch(maximumDownloadSpeed: speed);

            var expected = (speed * 1024L) / 10;

            using (client)
            {
                await client.ReconfigureOptionsAsync(patch);
            }

            mocks.DownloadTokenBucket.Verify(m => m.SetCapacity(expected), Times.Once);
        }
Ejemplo n.º 19
0
        public async Task Does_Not_Throw_If_Listener_Is_Null()
        {
            var(client, _) = GetFixture(new SoulseekClientOptions(enableListener: true));

            var patch = new SoulseekClientOptionsPatch(enableListener: false);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);
                client.SetProperty("Listener", null);

                var ex = await Record.ExceptionAsync(() => client.ReconfigureOptionsAsync(patch));

                Assert.Null(ex);
            }
        }
Ejemplo n.º 20
0
        public async Task Does_Not_Reconfigure_Listener_If_Options_Changed_But_Was_Not_Listening()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(incomingConnectionOptions: new ConnectionOptions()));

            mocks.Listener.Setup(m => m.Listening).Returns(false);

            var patch = new SoulseekClientOptionsPatch(incomingConnectionOptions: new ConnectionOptions());

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                await client.ReconfigureOptionsAsync(patch);

                Assert.Equal(patch.IncomingConnectionOptions, client.Options.IncomingConnectionOptions);
                Assert.Null(client.Listener);
            }
        }
Ejemplo n.º 21
0
        public async Task Throws_TimeoutException_When_Timed_Out()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions());
            mocks.ServerConnection
            .Setup(m => m.WriteAsync(It.IsAny <IOutgoingMessage>(), It.IsAny <CancellationToken?>()))
            .Throws(new TimeoutException());

            var patch = new SoulseekClientOptionsPatch();

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                var ex = await Record.ExceptionAsync(() => client.ReconfigureOptionsAsync(patch));

                Assert.NotNull(ex);
                Assert.IsType <TimeoutException>(ex);
            }
        }
Ejemplo n.º 22
0
        public async Task Throws_SoulseekClientException_On_Any_Other_Error()
        {
            var expectedEx = new Exception("foo");

            var(client, mocks) = GetFixture(new SoulseekClientOptions());
            mocks.ServerConnection
            .Setup(m => m.WriteAsync(It.IsAny <IOutgoingMessage>(), It.IsAny <CancellationToken?>()))
            .Throws(expectedEx);

            var patch = new SoulseekClientOptionsPatch();

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Connected | SoulseekClientStates.LoggedIn);

                var ex = await Record.ExceptionAsync(() => client.ReconfigureOptionsAsync(patch));

                Assert.NotNull(ex);
                Assert.IsType <SoulseekClientException>(ex);
                Assert.Equal(expectedEx, ex.InnerException);
            }
        }
        public void Clones_With_Expected_Properties_Given_A_Patch(
            bool?enableListener,
            bool?enableDistributedNetwork,
            bool?acceptDistributedChildren,
            int?maximumUploadSpeed,
            int?maximumDownloadSpeed,
            int?distributedChildLimit,
            bool?deduplicateSearchRequests,
            bool?autoAcknowledgePrivateMessages,
            bool?autoAcknowledgePrivilegeNotifications,
            bool?acceptPrivateRoomInvitations)
        {
            var serverConnectionOptions      = new ConnectionOptions();
            var peerConnectionOptions        = new ConnectionOptions();
            var transferConnectionOptions    = new ConnectionOptions();
            var incomingConnectionOptions    = new ConnectionOptions();
            var distributedConnectionOptions = new ConnectionOptions();

            var userEndPointCache   = new Mock <IUserEndPointCache>();
            var searchResponseCache = new Mock <ISearchResponseCache>();

            var searchResponseResolver            = new Func <string, int, SearchQuery, Task <SearchResponse> >((s, i, q) => Task.FromResult <SearchResponse>(null));
            var browseResponseResolver            = new Func <string, IPEndPoint, Task <BrowseResponse> >((s, i) => Task.FromResult <BrowseResponse>(null));
            var directoryContentsResponseResolver = new Func <string, IPEndPoint, int, string, Task <Directory> >((s, i, ii, ss) => Task.FromResult <Directory>(null));
            var userInfoResponseResolver          = new Func <string, IPEndPoint, Task <UserInfo> >((s, i) => Task.FromResult <UserInfo>(null));
            var enqueueDownloadAction             = new Func <string, IPEndPoint, string, Task>((s, i, ss) => Task.CompletedTask);
            var placeInQueueResponseResolver      = new Func <string, IPEndPoint, string, Task <int?> >((s, i, ss) => Task.FromResult <int?>(0));

            var rnd        = new Random();
            var listenPort = rnd.Next(1024, 65535);

            var patch = new SoulseekClientOptionsPatch(
                enableListener,
                listenPort,
                enableDistributedNetwork: enableDistributedNetwork,
                acceptDistributedChildren: acceptDistributedChildren,
                distributedChildLimit: distributedChildLimit,
                maximumUploadSpeed: maximumUploadSpeed,
                maximumDownloadSpeed: maximumDownloadSpeed,
                deduplicateSearchRequests: deduplicateSearchRequests,
                autoAcknowledgePrivateMessages: autoAcknowledgePrivateMessages,
                autoAcknowledgePrivilegeNotifications: autoAcknowledgePrivilegeNotifications,
                acceptPrivateRoomInvitations: acceptPrivateRoomInvitations,
                serverConnectionOptions: serverConnectionOptions,
                peerConnectionOptions: peerConnectionOptions,
                transferConnectionOptions: transferConnectionOptions,
                incomingConnectionOptions: incomingConnectionOptions,
                distributedConnectionOptions: distributedConnectionOptions,
                userEndPointCache: userEndPointCache.Object,
                searchResponseResolver: searchResponseResolver,
                searchResponseCache: searchResponseCache.Object,
                browseResponseResolver: browseResponseResolver,
                directoryContentsResolver: directoryContentsResponseResolver,
                userInfoResolver: userInfoResponseResolver,
                enqueueDownload: enqueueDownloadAction,
                placeInQueueResolver: placeInQueueResponseResolver);

            var original = new SoulseekClientOptions(
                maximumConcurrentUploads: 42,
                maximumConcurrentDownloads: 24,
                minimumDiagnosticLevel: DiagnosticLevel.None);

            var o = original.With(patch);

            // make sure the options that can't be patched did not change
            Assert.Equal(42, o.MaximumConcurrentUploads);
            Assert.Equal(24, o.MaximumConcurrentDownloads);
            Assert.Equal(DiagnosticLevel.None, o.MinimumDiagnosticLevel);

            Assert.Equal(enableListener, o.EnableListener);
            Assert.Equal(listenPort, o.ListenPort);
            Assert.Equal(enableDistributedNetwork, o.EnableDistributedNetwork);
            Assert.Equal(acceptDistributedChildren, o.AcceptDistributedChildren);
            Assert.Equal(distributedChildLimit, o.DistributedChildLimit);
            Assert.Equal(maximumUploadSpeed, o.MaximumUploadSpeed);
            Assert.Equal(maximumDownloadSpeed, o.MaximumDownloadSpeed);
            Assert.Equal(deduplicateSearchRequests, o.DeduplicateSearchRequests);
            Assert.Equal(autoAcknowledgePrivateMessages, o.AutoAcknowledgePrivateMessages);
            Assert.Equal(autoAcknowledgePrivilegeNotifications, o.AutoAcknowledgePrivilegeNotifications);
            Assert.Equal(acceptPrivateRoomInvitations, o.AcceptPrivateRoomInvitations);
            Assert.Equal(peerConnectionOptions, o.PeerConnectionOptions);
            Assert.Equal(incomingConnectionOptions, o.IncomingConnectionOptions);
            Assert.Equal(distributedConnectionOptions, o.DistributedConnectionOptions);

            Assert.Equal(serverConnectionOptions.ReadBufferSize, o.ServerConnectionOptions.ReadBufferSize);
            Assert.Equal(serverConnectionOptions.WriteBufferSize, o.ServerConnectionOptions.WriteBufferSize);
            Assert.Equal(serverConnectionOptions.ConnectTimeout, o.ServerConnectionOptions.ConnectTimeout);
            Assert.Equal(-1, o.ServerConnectionOptions.InactivityTimeout);

            Assert.Equal(transferConnectionOptions.ReadBufferSize, o.TransferConnectionOptions.ReadBufferSize);
            Assert.Equal(transferConnectionOptions.WriteBufferSize, o.TransferConnectionOptions.WriteBufferSize);
            Assert.Equal(transferConnectionOptions.ConnectTimeout, o.TransferConnectionOptions.ConnectTimeout);
            Assert.Equal(-1, o.TransferConnectionOptions.InactivityTimeout);

            Assert.Equal(userEndPointCache.Object, o.UserEndPointCache);
            Assert.Equal(searchResponseResolver, o.SearchResponseResolver);
            Assert.Equal(searchResponseCache.Object, o.SearchResponseCache);
            Assert.Equal(browseResponseResolver, o.BrowseResponseResolver);
            Assert.Equal(directoryContentsResponseResolver, o.DirectoryContentsResolver);
            Assert.Equal(userInfoResponseResolver, o.UserInfoResolver);
            Assert.Equal(enqueueDownloadAction, o.EnqueueDownload);
            Assert.Equal(placeInQueueResponseResolver, o.PlaceInQueueResolver);
        }
Ejemplo n.º 24
0
        public async Task Updates_Options()
        {
            var(client, mocks) = GetFixture(new SoulseekClientOptions(
                                                enableListener: false,
                                                listenPort: Mocks.Port,
                                                enableDistributedNetwork: false,
                                                acceptDistributedChildren: false,
                                                distributedChildLimit: 5,
                                                deduplicateSearchRequests: true,
                                                autoAcknowledgePrivateMessages: false,
                                                autoAcknowledgePrivilegeNotifications: false,
                                                acceptPrivateRoomInvitations: false,
                                                serverConnectionOptions: new ConnectionOptions(readBufferSize: 10),
                                                peerConnectionOptions: new ConnectionOptions(),
                                                transferConnectionOptions: new ConnectionOptions(readBufferSize: 20),
                                                incomingConnectionOptions: new ConnectionOptions(),
                                                distributedConnectionOptions: new ConnectionOptions()));

            var userEndPointCache   = new Mock <IUserEndPointCache>();
            var searchResponseCache = new Mock <ISearchResponseCache>();

            var searchResponseResolver            = new Func <string, int, SearchQuery, Task <SearchResponse> >((s, i, q) => Task.FromResult <SearchResponse>(null));
            var browseResponseResolver            = new Func <string, IPEndPoint, Task <BrowseResponse> >((s, i) => Task.FromResult <BrowseResponse>(null));
            var directoryContentsResponseResolver = new Func <string, IPEndPoint, int, string, Task <Directory> >((s, i, ii, ss) => Task.FromResult <Directory>(null));
            var userInfoResponseResolver          = new Func <string, IPEndPoint, Task <UserInfo> >((s, i) => Task.FromResult <UserInfo>(null));
            var enqueueDownloadAction             = new Func <string, IPEndPoint, string, Task>((s, i, ss) => Task.CompletedTask);
            var placeInQueueResponseResolver      = new Func <string, IPEndPoint, string, Task <int?> >((s, i, ss) => Task.FromResult <int?>(0));

            var patch = new SoulseekClientOptionsPatch(
                enableListener: true,
                listenPort: Mocks.Port,
                enableDistributedNetwork: true,
                acceptDistributedChildren: true,
                distributedChildLimit: 10,
                deduplicateSearchRequests: false,
                autoAcknowledgePrivateMessages: true,
                autoAcknowledgePrivilegeNotifications: true,
                acceptPrivateRoomInvitations: true,
                serverConnectionOptions: new ConnectionOptions(readBufferSize: 100),
                peerConnectionOptions: new ConnectionOptions(),
                transferConnectionOptions: new ConnectionOptions(readBufferSize: 200),
                incomingConnectionOptions: new ConnectionOptions(),
                distributedConnectionOptions: new ConnectionOptions(),
                userEndPointCache: userEndPointCache.Object,
                searchResponseResolver: searchResponseResolver,
                searchResponseCache: searchResponseCache.Object,
                browseResponseResolver: browseResponseResolver,
                directoryContentsResolver: directoryContentsResponseResolver,
                userInfoResolver: userInfoResponseResolver,
                enqueueDownload: enqueueDownloadAction,
                placeInQueueResolver: placeInQueueResponseResolver);

            using (client)
            {
                client.SetProperty("State", SoulseekClientStates.Disconnected);

                await client.ReconfigureOptionsAsync(patch);

                Assert.Equal(patch.EnableListener, client.Options.EnableListener);
                Assert.Equal(patch.ListenPort, client.Options.ListenPort);
                Assert.Equal(patch.EnableDistributedNetwork, client.Options.EnableDistributedNetwork);
                Assert.Equal(patch.AcceptDistributedChildren, client.Options.AcceptDistributedChildren);
                Assert.Equal(patch.DistributedChildLimit, client.Options.DistributedChildLimit);
                Assert.Equal(patch.DeduplicateSearchRequests, client.Options.DeduplicateSearchRequests);
                Assert.Equal(patch.AutoAcknowledgePrivateMessages, client.Options.AutoAcknowledgePrivateMessages);
                Assert.Equal(patch.AutoAcknowledgePrivilegeNotifications, client.Options.AutoAcknowledgePrivilegeNotifications);
                Assert.Equal(patch.AcceptPrivateRoomInvitations, client.Options.AcceptPrivateRoomInvitations);
                Assert.Equal(patch.PeerConnectionOptions, client.Options.PeerConnectionOptions);
                Assert.Equal(patch.IncomingConnectionOptions, client.Options.IncomingConnectionOptions);
                Assert.Equal(patch.DistributedConnectionOptions, client.Options.DistributedConnectionOptions);

                Assert.Equal(patch.ServerConnectionOptions.ReadBufferSize, client.Options.ServerConnectionOptions.ReadBufferSize);
                Assert.Equal(patch.TransferConnectionOptions.ReadBufferSize, client.Options.TransferConnectionOptions.ReadBufferSize);

                Assert.Equal(patch.UserEndPointCache, client.Options.UserEndPointCache);
                Assert.Equal(patch.SearchResponseCache, client.Options.SearchResponseCache);
                Assert.Equal(patch.SearchResponseResolver, client.Options.SearchResponseResolver);
                Assert.Equal(patch.BrowseResponseResolver, client.Options.BrowseResponseResolver);
                Assert.Equal(patch.DirectoryContentsResolver, client.Options.DirectoryContentsResolver);
                Assert.Equal(patch.UserInfoResolver, client.Options.UserInfoResolver);
                Assert.Equal(patch.EnqueueDownload, client.Options.EnqueueDownload);
                Assert.Equal(patch.PlaceInQueueResolver, client.Options.PlaceInQueueResolver);
            }
        }