public void TestReceiverCleanup() { // Create sender and receiver var sender = new SenderViewModel(); var receiver = new ReceiverViewModel(); // Register receiver to get messages receiver.Subscribe(MessageTokens.Test + "_TestReceiverCleanup"); // Set message content sender.SentMessage = "hello"; // Listen for response var wait = new AutoResetEvent(false); receiver.SimpleMessageReceived += (o, args) => wait.Set(); // Send message sender.SendSimpleMessageAsync(MessageTokens.Test + "_TestReceiverCleanup"); // Wait for response if (!wait.WaitOne(TimeSpan.FromSeconds(15))) Assert.Fail("Message not received in timeout"); // Assert message was received Assert.AreEqual<string>(sender.SentMessage, receiver.ReceivedMessage); // Try to GC reciever var weakReceiver = new WeakReference(receiver); receiver = null; GC.Collect(); #if NETFX_CORE Task.Delay(1000).Wait(); #else Thread.Sleep(1000); #endif // Assert the receiver was allowed to be GC'd Assert.IsFalse(weakReceiver.IsAlive, "Receiver has not been GC'd"); // Send another message sender.SentMessage = "hello again"; sender.SendSimpleMessage(MessageTokens.Test + "_TestReceiverCleanup"); // Assert the receiver is still not alive Assert.IsFalse(weakReceiver.IsAlive, "Receiver has not been GC'd after sending message"); }
public void TestSimpleMessage() { // Create sender and receiver var sender = new SenderViewModel(); var receiver = new ReceiverViewModel(); // Register receiver to get messages receiver.Subscribe(MessageTokens.Test + "_TestSimpleMessage"); // Set message content sender.SentMessage = "hello"; // Capture orig values int origReceiverData = receiver.ReceivedData; bool origSenderData = sender.ReceivedData; // Listen for response var wait = new AutoResetEvent(false); receiver.SimpleMessageReceived += (o, args) => wait.Set(); // Send message sender.SendSimpleMessageAsync(MessageTokens.Test + "_TestSimpleMessage"); // Wait for response if (!wait.WaitOne(TimeSpan.FromSeconds(15))) Assert.Fail("Message not received in timeout"); // Unregister to receive messages receiver.Unsubscribe(MessageTokens.Test + "_TestSimpleMessage"); // Assert message was received Assert.AreEqual<string>(sender.SentMessage, receiver.ReceivedMessage); // Assert receiver and sender data have not changed Assert.AreEqual<int>(origReceiverData, receiver.ReceivedData); Assert.AreEqual<bool>(origSenderData, sender.ReceivedData); }