示例#1
0
        public void Raises_DiagnosticGenerated_On_Exception()
        {
            var mocks   = new Mocks();
            var handler = new DistributedMessageHandler(
                mocks.Client.Object);

            mocks.Diagnostic.Setup(m => m.Debug(It.IsAny <string>()));

            var conn = new Mock <IMessageConnection>();

            conn.Setup(m => m.WriteAsync(It.IsAny <IOutgoingMessage>(), It.IsAny <CancellationToken?>()))
            .Throws(new Exception());

            var msg = new MessageBuilder()
                      .WriteCode(MessageCode.Distributed.Ping)
                      .Build();

            var diagnostics = new List <DiagnosticEventArgs>();

            handler.DiagnosticGenerated += (_, e) => diagnostics.Add(e);
            handler.HandleMessageRead(conn.Object, msg);

            diagnostics = diagnostics
                          .Where(d => d.Level == DiagnosticLevel.Warning)
                          .Where(d => d.Message.IndexOf("Error handling distributed message", StringComparison.InvariantCultureIgnoreCase) > -1)
                          .ToList();

            Assert.Single(diagnostics);
        }
示例#2
0
        public void Raises_DiagnosticGenerated_On_SearchResponseResolver_Exception(string username, int token, string query)
        {
            var mocks   = new Mocks();
            var handler = new DistributedMessageHandler(
                mocks.Client.Object);

            mocks.Client.Setup(m => m.Options)
            .Returns(new SoulseekClientOptions(searchResponseResolver: (a, b, c) => { throw new Exception(); }));

            mocks.Diagnostic.Setup(m => m.Debug(It.IsAny <string>()));

            var conn = new Mock <IMessageConnection>();

            var message = new DistributedSearchRequest(username, token, query).ToByteArray();

            var diagnostics = new List <DiagnosticEventArgs>();

            handler.DiagnosticGenerated += (_, e) => diagnostics.Add(e);
            handler.HandleMessageRead(conn.Object, message);

            diagnostics = diagnostics
                          .Where(d => d.Level == DiagnosticLevel.Warning)
                          .Where(d => d.Message.IndexOf("Error resolving search response", StringComparison.InvariantCultureIgnoreCase) > -1)
                          .ToList();

            Assert.Single(diagnostics);
        }
示例#3
0
        private (DistributedMessageHandler Handler, Mocks Mocks) GetFixture(SoulseekClientOptions clientOptions = null)
        {
            var mocks = new Mocks(clientOptions);

            var handler = new DistributedMessageHandler(
                mocks.Client.Object,
                mocks.Diagnostic.Object);

            return(handler, mocks);
        }
示例#4
0
        public void Does_Not_Throw_Raising_DiagnosticGenerated_If_No_Handlers_Bound(string message)
        {
            using (var client = new SoulseekClient(options: null))
            {
                DistributedMessageHandler l = new DistributedMessageHandler(client);

                var diagnostic = l.GetProperty <IDiagnosticFactory>("Diagnostic");

                var ex = Record.Exception(() => diagnostic.Info(message));

                Assert.Null(ex);
            }
        }
示例#5
0
        public void Raises_DiagnosticGenerated_On_Diagnostic(string message)
        {
            using (var client = new SoulseekClient(options: null))
            {
                DiagnosticEventArgs args = default;

                DistributedMessageHandler l = new DistributedMessageHandler(client);
                l.DiagnosticGenerated += (sender, e) => args = e;

                var diagnostic = l.GetProperty <IDiagnosticFactory>("Diagnostic");
                diagnostic.Info(message);

                Assert.Equal(message, args.Message);
            }
        }