public void when_message_receivedthen_calls_process_message() { var waiter = new ManualResetEventSlim(); var sender = new TopicSender(this.Settings, this.Topic); var processor = new FakeProcessor( waiter, new SubscriptionReceiver(this.Settings, this.Topic, this.Subscription), new JsonTextSerializer()); processor.Start(); var stream = new MemoryStream(); new JsonTextSerializer().Serialize(new StreamWriter(stream), "Foo"); stream.Position = 0; sender.SendAsync(() => new BrokeredMessage(stream, true)); waiter.Wait(5000); Assert.NotNull(processor.Payload); }
public void when_message_fails_to_deserialize_then_dead_letters_message() { var waiter = new ManualResetEventSlim(); var sender = new TopicSender(this.Settings, this.Topic); var processor = new FakeProcessor( waiter, new SubscriptionReceiver(this.Settings, this.Topic, this.Subscription), new JsonTextSerializer()); processor.Start(); var data = new JsonTextSerializer().Serialize(new Data()); data = data.Replace(typeof(Data).FullName, "Some.TypeName.Cannot.Resolve"); var stream = new MemoryStream(Encoding.UTF8.GetBytes(data)); stream.Position = 0; sender.SendAsync(() => new BrokeredMessage(stream, true)); waiter.Wait(5000); var deadReceiver = this.Settings.CreateMessageReceiver(this.Topic, this.Subscription); var deadMessage = deadReceiver.Receive(TimeSpan.FromSeconds(5)); processor.Dispose(); Assert.NotNull(deadMessage); var payload = new StreamReader(deadMessage.GetBody<Stream>()).ReadToEnd(); Assert.Contains("Some.TypeName.Cannot.Resolve", payload); }