PageRenderTime 791ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Microsoft.AspNet.SignalR.Tests/Server/MessageBusFacts.cs

https://github.com/mip1983/SignalR
C# | 193 lines | 164 code | 29 blank | 0 comment | 12 complexity | 1d73b0d29804a3e545013866613388ac MD5 | raw file
Possible License(s): Apache-2.0, CC-BY-SA-3.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5. using Microsoft.AspNet.SignalR.Tests.Infrastructure;
  6. using Xunit;
  7. namespace Microsoft.AspNet.SignalR.Tests.Server
  8. {
  9. public class MessageBusFacts
  10. {
  11. [Fact]
  12. public void NewSubscriptionGetsAllMessages()
  13. {
  14. var dr = new DefaultDependencyResolver();
  15. var bus = new MessageBus(dr);
  16. var subscriber = new TestSubscriber(new[] { "key" });
  17. var wh = new ManualResetEventSlim(initialState: false);
  18. IDisposable subscription = null;
  19. try
  20. {
  21. bus.Publish("test", "key", "1").Wait();
  22. subscription = bus.Subscribe(subscriber, null, result =>
  23. {
  24. if (!result.Terminal)
  25. {
  26. var m = result.GetMessages().Single();
  27. Assert.Equal("key", m.Key);
  28. Assert.Equal("value", m.Value);
  29. wh.Set();
  30. return TaskAsyncHelper.True;
  31. }
  32. return TaskAsyncHelper.False;
  33. }, 10);
  34. bus.Publish("test", "key", "value").Wait();
  35. Assert.True(wh.Wait(TimeSpan.FromSeconds(5)));
  36. }
  37. finally
  38. {
  39. if (subscription != null)
  40. {
  41. subscription.Dispose();
  42. }
  43. }
  44. }
  45. [Fact]
  46. public void SubscriptionWithExistingCursor()
  47. {
  48. var dr = new DefaultDependencyResolver();
  49. var bus = new MessageBus(dr);
  50. var subscriber = new TestSubscriber(new[] { "key" });
  51. var cd = new CountDownRange<int>(Enumerable.Range(2, 4));
  52. IDisposable subscription = null;
  53. bus.Publish("test", "key", "1").Wait();
  54. bus.Publish("test", "key", "2").Wait();
  55. bus.Publish("test", "key", "3").Wait();
  56. bus.Publish("test", "key", "4").Wait();
  57. try
  58. {
  59. subscription = bus.Subscribe(subscriber, "key,00000001", result =>
  60. {
  61. foreach (var m in result.GetMessages())
  62. {
  63. int n = Int32.Parse(m.Value);
  64. Assert.True(cd.Mark(n));
  65. }
  66. return TaskAsyncHelper.True;
  67. }, 10);
  68. bus.Publish("test", "key", "5");
  69. Assert.True(cd.Wait(TimeSpan.FromSeconds(5)));
  70. }
  71. finally
  72. {
  73. if (subscription != null)
  74. {
  75. subscription.Dispose();
  76. }
  77. }
  78. }
  79. [Fact]
  80. public void SubscriptionWithMultipleExistingCursors()
  81. {
  82. var dr = new DefaultDependencyResolver();
  83. var bus = new MessageBus(dr);
  84. var subscriber = new TestSubscriber(new[] { "key", "key2" });
  85. var cdKey = new CountDownRange<int>(Enumerable.Range(2, 4));
  86. var cdKey2 = new CountDownRange<int>(new[] { 1, 2, 10 });
  87. IDisposable subscription = null;
  88. bus.Publish("test", "key", "1").Wait();
  89. bus.Publish("test", "key", "2").Wait();
  90. bus.Publish("test", "key", "3").Wait();
  91. bus.Publish("test", "key", "4").Wait();
  92. bus.Publish("test", "key2", "1").Wait();
  93. bus.Publish("test", "key2", "2").Wait();
  94. try
  95. {
  96. subscription = bus.Subscribe(subscriber, "key,00000001|key2,00000000", result =>
  97. {
  98. foreach (var m in result.GetMessages())
  99. {
  100. int n = Int32.Parse(m.Value);
  101. if (m.Key == "key")
  102. {
  103. Assert.True(cdKey.Mark(n));
  104. }
  105. else
  106. {
  107. Assert.True(cdKey2.Mark(n));
  108. }
  109. }
  110. return TaskAsyncHelper.True;
  111. }, 10);
  112. bus.Publish("test", "key", "5");
  113. bus.Publish("test", "key2", "10");
  114. Assert.True(cdKey.Wait(TimeSpan.FromSeconds(5)));
  115. Assert.True(cdKey2.Wait(TimeSpan.FromSeconds(5)));
  116. }
  117. finally
  118. {
  119. if (subscription != null)
  120. {
  121. subscription.Dispose();
  122. }
  123. }
  124. }
  125. [Fact]
  126. public void AddingEventAndSendingMessages()
  127. {
  128. var dr = new DefaultDependencyResolver();
  129. var bus = new MessageBus(dr);
  130. var subscriber = new TestSubscriber(new[] { "a" });
  131. int max = 100;
  132. var cd = new CountDownRange<int>(Enumerable.Range(0, max));
  133. int prev = -1;
  134. IDisposable subscription = null;
  135. try
  136. {
  137. subscription = bus.Subscribe(subscriber, null, result =>
  138. {
  139. foreach (var m in result.GetMessages())
  140. {
  141. int n = Int32.Parse(m.Value);
  142. Assert.True(prev < n, "out of order");
  143. prev = n;
  144. Assert.True(cd.Mark(n));
  145. }
  146. return TaskAsyncHelper.True;
  147. }, 10);
  148. for (int i = 0; i < max; i++)
  149. {
  150. subscriber.AddEvent("b");
  151. bus.Publish("test", "b", i.ToString()).Wait();
  152. }
  153. Assert.True(cd.Wait(TimeSpan.FromSeconds(10)));
  154. }
  155. finally
  156. {
  157. if (subscription != null)
  158. {
  159. subscription.Dispose();
  160. }
  161. }
  162. }
  163. }
  164. }