Beispiel #1
0
        public void Should_send_entire_body()
        {
            var data1        = Encoding.ASCII.GetBytes("Some content");
            var data2        = Encoding.ASCII.GetBytes("Some more content");
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents   = s =>
                {
                    s.Write(data1, 0, data1.Length);
                    s.Write(data2, 0, data2.Length);
                }
            };
            var fakeContext = new NancyContext()
            {
                Response = fakeResponse
            };

            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer          = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            fakeConsumer.ConsumedData.SequenceEqual(data1.Concat(data2)).ShouldBeTrue();
        }
Beispiel #2
0
        public void InitializationOfAmqpStuff()
        {
            const String queueName = "queue_name";
            const String exchangeName = "exchange_name";
            const String routingKey = "routing_key";

            var configuration = new EnvironmentConfiguration();
            configuration.Endpoint(new Uri("amqp://localhost:5672"));
            configuration.GeneratesMessageIdBy(new Mock<INewId>().Object);
            configuration.ResolveMessageTypeBy(new Mock<IMessageTypeResolver>().Object);

            var model = new Mock<IModel>();
            var connectionBuilder = StubConnectionBuilder(model);
            var broker = new BrokerWrapper(connectionBuilder.Object, model.Object, configuration);
            var consumer = new FakeConsumer(_ => Task.Factory.StartNew(() => { }));
            var queue = broker.DeclareQueue(queueName);
            var exchange = broker.DeclareDirectExchange(exchangeName);
            broker.DeclareExchangeBinding(exchange, queue, routingKey);
            broker.SubscribeByAtLeastOnce(queue, _ => { _.Consumes(consumer); });
            broker.Connect();
            model.Verify(_ => _.QueueDeclare(queueName,
                                             false,
                                             false,
                                             false,
                                             It.IsAny<IDictionary<String, Object>>()));
            model.Verify(_ => _.ExchangeDeclare(exchangeName,
                                                "direct",
                                                false,
                                                false,
                                                It.IsAny<IDictionary<String, Object>>()));
            model.Verify(_ => _.QueueBind(queueName,
                                          exchangeName,
                                          routingKey,
                                          It.IsAny<IDictionary<String, Object>>()));
        }
        public void WhenSendingMessages()
        {
            var consumer = new FakeConsumer<TestMessages.ADerivedTestMessage> (msg => HandleReceived(msg));
            _bus = new Bus.Bus ();
            _bus.Subscribe (consumer);

            RunAsync ();
        }
        public void CanHandleContravariantMessages()
        {
            var handledMessages = new List<IMessage> ();
            IConsume<IMessage> consumer = new FakeConsumer<IMessage> (msg => handledMessages.Add (msg));
            var wideningConsumer = new WideningConsumer<TestMessages.ADerivedTestMessage, IMessage>(consumer);

            var message = new TestMessages.ADerivedTestMessage ();
            wideningConsumer.Handle (message);

            Assert.AreEqual (1, handledMessages.Count);
            Assert.IsInstanceOf<TestMessages.ADerivedTestMessage>(handledMessages[0]);
        }
        public async Task LogAsync()
        {
            var options = ErrorReportingOptions.Create(
                EventTarget.ForLogging("pid", loggingClient: new ThrowingLoggingClient()));
            var consumer = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, _service, _version, options, null);
            await logger.LogAsync(CreateException(), new FakeContextWrapper());

            ValidateSingleEntry(consumer, _method, _uri, _userAgent, options);
        }
Beispiel #6
0
        public async Task LogAsync()
        {
            var eventTarget = EventTarget.ForProject("pid");
            var options     = ErrorReportingOptions.CreateInstance();
            var consumer    = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, eventTarget, _serviceContext, options, null);
            await logger.LogAsync(CreateException(), new FakeContextWrapper());

            ValidateSingleEntry(consumer, _method, _uri, _userAgent, options, eventTarget);
        }
        public void NonWideningFails()
        {
            var handledMessages = new List<IMessage> ();
            FakeConsumer<TestMessages.ADerivedTestMessage> consumer =
                new FakeConsumer<TestMessages.ADerivedTestMessage> (msg => handledMessages.Add (msg));

            IMessage message = new TestMessages.ADerivedTestMessage ();
            //comment this line back in to see that the code will not compile
            //consumer.Handle (message);

            Assert.AreEqual (1, handledMessages.Count);
        }
        public async Task SerializerExtensionsSucceedWithMockedImplementations()
        {
            var jobs = new[]
            {
                new Job(1, Encoding.Unicode.GetBytes(@"{ 'Int': 1, 'String': 'hello' }")),
                new Job(2, Encoding.Unicode.GetBytes(@"{ 'Int': 2, 'String': 'world' }")),
            };
            var fake = new FakeConsumer(jobs);

            var job = await fake.ReserveAsync <Jobject>();

            Assert.Equal(1, job.Id);
        }
Beispiel #9
0
        public void Log_Compat()
        {
            var eventTarget = EventTarget.ForLogging("pid", loggingClient: new ThrowingLoggingClient());
            var options     = ErrorReportingOptions.Create(eventTarget);
            var consumer    = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, eventTarget, _serviceContext, options, null);

            logger.Log(CreateException(), new FakeContextWrapper());

            ValidateSingleEntry(consumer, _method, _uri, _userAgent, options, eventTarget);
        }
Beispiel #10
0
        public void Log_Simple()
        {
            var eventTarget = EventTarget.ForProject("pid");
            var options     = ErrorReportingOptions.CreateInstance();
            var consumer    = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, eventTarget, _serviceContext, options, null);

            logger.Log(CreateException(), new EmptyContextWrapper());

            ValidateSingleEntry(consumer, "", "", "", options, eventTarget);
        }
        public void WhenSendingMessages()
        {
            var c1 = new FakeConsumer<TestMessages.ADerivedTestMessage> (msg => Consumer1(msg));
            var c2 = new FakeConsumer<TestMessages.TestMessage> (msg => Consumer2(msg));
            var c3 = new FakeConsumer<IMessage> (msg => Consumer3(msg));

            _bus = new Bus ();
            _bus.Subscribe (c1);
            _bus.Subscribe (c2);
            _bus.Subscribe (c3);

            RunAsync ();
        }
        public void Log_Simple()
        {
            var options = ErrorReportingOptions.Create(
                EventTarget.ForLogging("pid", loggingClient: new ThrowingLoggingClient()));
            var consumer = new FakeConsumer();

            IContextExceptionLogger logger = new ErrorReportingContextExceptionLogger(
                consumer, _service, _version, options, null);

            logger.Log(CreateException(), new EmptyContextWrapper());

            ValidateSingleEntry(consumer, "", "", "", options);
        }
        public void WhenSendingMessages()
        {
            var c1 = new FakeConsumer<TestMessages.ADerivedTestMessage> (msg => Consumer1(msg));
            var c2 = new FakeConsumer<TestMessages.TestMessage> (msg => Consumer2(msg));
            var c3 = new FakeConsumer<IMessage> (msg => Consumer3(msg));

            _bus = new Bus.Bus ();
            _bus.Subscribe (c1);
            _bus.Subscribe (c2);
            _bus.Subscribe (c3);

            for (int i = 0; i < _numberOfMessagesToSend; i++) {
                _bus.Send (new TestMessages.ADerivedTestMessage{ Id = "P1-" + i });
            }
        }
        private void ValidateSingleEntry(FakeConsumer consumer, string method, string uri, string userAgent, ErrorReportingOptions options)
        {
            var entries = consumer.Entries.ToList();

            if (entries.Count != 1)
            {
                Assert.True(false, $"Expected single matching entry. Received:\n{string.Join("\n", entries)}");
            }
            var entry       = entries[0];
            var json        = entry.JsonPayload?.Fields;
            var eventTarget = options.EventTarget;

            Assert.Equal(eventTarget.LogTarget.GetFullLogName(eventTarget.LogName), entry.LogName);
            var currentSeconds = Timestamp.FromDateTime(DateTime.UtcNow).Seconds;

            Assert.InRange(entry.Timestamp.Seconds, currentSeconds - 10, currentSeconds);
            Assert.Equal(eventTarget.MonitoredResource, entry.Resource);
            Assert.Equal(LogSeverity.Error, entry.Severity);
            Assert.Contains(_exceptionMessage, json["message"].StringValue);

            var context     = json["context"]?.StructValue?.Fields;
            var httpRequest = context["httpRequest"]?.StructValue?.Fields;

            Assert.Equal(method, httpRequest["method"].StringValue);
            Assert.Equal(uri, httpRequest["url"].StringValue);
            Assert.Equal(userAgent, httpRequest["userAgent"].StringValue);

            var reportLocation = context["reportLocation"]?.StructValue?.Fields;

            if (_isWindows)
            {
                Assert.InRange(reportLocation["lineNumber"].NumberValue, 1, 5000); // Longer than this file should ever be...
                Assert.NotEqual("", reportLocation["filePath"].StringValue);
            }
            Assert.Equal(nameof(CreateException), reportLocation["functionName"].StringValue);

            var serviceContext = json["serviceContext"]?.StructValue?.Fields;

            Assert.Equal(_service, serviceContext["service"].StringValue);
            Assert.Equal(_version, serviceContext["version"].StringValue);

            Assert.Contains(_traceId, entry.Trace);
            Assert.Equal($"{_spanId:x16}", entry.SpanId);
            Assert.True(entry.TraceSampled);
        }
Beispiel #15
0
        public void Should_dispose_context_if_body_delegate_throws()
        {
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents = s => { throw new InvalidOperationException(); }
            };
            var fakeContext = new NancyContext() { Response = fakeResponse };
            var mockDisposable = A.Fake<IDisposable>();
            fakeContext.Items.Add("Test", mockDisposable);
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            A.CallTo(() => mockDisposable.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
Beispiel #16
0
        public void Should_send_null_continuation()
        {
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents   = s => s.WriteByte(12)
            };
            var fakeContext = new NancyContext()
            {
                Response = fakeResponse
            };

            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer          = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            fakeConsumer.ContinuationSent.ShouldBeFalse();
        }
Beispiel #17
0
        public void Should_invoke_view_delegate_to_get_response()
        {
            var called       = false;
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents   = s => called = true
            };
            var fakeContext = new NancyContext()
            {
                Response = fakeResponse
            };

            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer          = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            called.ShouldBeTrue();
        }
Beispiel #18
0
        public void Should_dispose_context_if_body_delegate_throws()
        {
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents   = s => { throw new InvalidOperationException(); }
            };
            var fakeContext = new NancyContext()
            {
                Response = fakeResponse
            };
            var mockDisposable = A.Fake <IDisposable>();

            fakeContext.Items.Add("Test", mockDisposable);
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer          = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            A.CallTo(() => mockDisposable.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
Beispiel #19
0
        public void Should_dispose_context_on_completion_of_body_delegate()
        {
            var data1        = Encoding.ASCII.GetBytes("Some content");
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents   = s => s.Write(data1, 0, data1.Length)
            };
            var fakeContext = new NancyContext()
            {
                Response = fakeResponse
            };
            var mockDisposable = A.Fake <IDisposable>();

            fakeContext.Items.Add("Test", mockDisposable);
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer          = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            A.CallTo(() => mockDisposable.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
Beispiel #20
0
        public void Should_invoke_view_delegate_to_get_response()
        {
            var called = false;
            var fakeResponse = new Response()
                                   {
                                       StatusCode = HttpStatusCode.OK,
                                       Contents = s => called = true
                                   };
            var fakeContext = new NancyContext() { Response = fakeResponse };
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            called.ShouldBeTrue();
        }
Beispiel #21
0
 public ConsumerBuilder(string environment)
 {
     _consumer = new FakeConsumer(environment);
 }
Beispiel #22
0
        public void Should_send_null_continuation()
        {
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents = s => s.WriteByte(12)
            };
            var fakeContext = new NancyContext() { Response = fakeResponse };
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            fakeConsumer.ContinuationSent.ShouldBeFalse();
        }
Beispiel #23
0
        public void Should_send_entire_body()
        {
            var data1 = Encoding.ASCII.GetBytes("Some content");
            var data2 = Encoding.ASCII.GetBytes("Some more content");
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents = s =>
                    {
                        s.Write(data1, 0, data1.Length);
                        s.Write(data2, 0, data2.Length);
                    }
            };
            var fakeContext = new NancyContext() { Response = fakeResponse };
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            fakeConsumer.ConsumedData.SequenceEqual(data1.Concat(data2)).ShouldBeTrue();
        }
Beispiel #24
0
        public void Should_dispose_context_on_completion_of_body_delegate()
        {
            var data1 = Encoding.ASCII.GetBytes("Some content");
            var fakeResponse = new Response()
            {
                StatusCode = HttpStatusCode.OK,
                Contents = s => s.Write(data1, 0, data1.Length)
            };
            var fakeContext = new NancyContext() { Response = fakeResponse };
            var mockDisposable = A.Fake<IDisposable>();
            fakeContext.Items.Add("Test",  mockDisposable);
            this.SetupFakeNancyCompleteCallback(fakeContext);
            var fakeConsumer = new FakeConsumer(false);
            ResponseCallBack callback = (r, h, b) => fakeConsumer.InvokeBodyDelegate(b);

            this.host.ProcessRequest(environment, callback, fakeErrorCallback);

            A.CallTo(() => mockDisposable.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }