PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/Release/02.00/src/Tests/RockBus.SubscriptionRepository.Tests/SubscriptionReposTransformationsTests.cs

#
C# | 217 lines | 179 code | 28 blank | 10 comment | 2 complexity | 551426a62c659e02e145cbf7faec8a01 MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using System.Transactions;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5. using RockBus.DataContracts;
  6. using RockBus.Logging.Trace;
  7. using RockBus.SubscriptionRepository.Db;
  8. using RockBus.SubscriptionRepository.Interfaces;
  9. namespace RockBus.SubscriptionRepository.Tests
  10. {
  11. /// <summary>
  12. /// This class contains unit tests for the persistence of transformation data.
  13. /// </summary>
  14. [TestClass]
  15. public class SubscriptionReposTransformationsTests
  16. {
  17. private static Db.SubscriptionRepository Repository { get; set; }
  18. [ClassInitialize]
  19. public static void ClassInitialize(TestContext tc)
  20. {
  21. DbSubscriptionRepositoryConfiguration config = new DbSubscriptionRepositoryConfiguration();
  22. Repository = new Db.SubscriptionRepository(new TraceLogger(), config);
  23. }
  24. [TestMethod]
  25. [TestCategory("SqlServerDbSubscriptionPersistence")]
  26. public void TestAddSubscriptionTransformation()
  27. {
  28. string id = Guid.NewGuid().ToString();
  29. AddOrUpdateSubscribersRequest request = this.CreateAddOrUpdateSubscribersRequest(id);
  30. Repository.ClearAllClients();
  31. Repository.AddOrUpdateSubscriberConfiguration(request.CreateSubscriberConfiguration());
  32. SubscriberConfiguration sc = Repository.GetSubscriberConfiguration();
  33. SubscriberInfo si = sc.EvaluationElementDictionary[id];
  34. Assert.AreEqual(3, si.PipelineInfoDictionary.Count);
  35. foreach (var sr in si.InfoDictionary.Values)
  36. {
  37. Assert.AreEqual(2, sr.Detail.RequestTransformationIds.Count);
  38. Assert.AreEqual(1, sr.Detail.ResponseTransformationIds.Count);
  39. }
  40. }
  41. [TestMethod]
  42. [TestCategory("SqlServerDbSubscriptionPersistence")]
  43. public void TestAddAdvertisedTransformation()
  44. {
  45. string id = Guid.NewGuid().ToString();
  46. AddOrUpdatePublishersRequest request = this.CreateAddOrUpdatePublishersRequest(id);
  47. Repository.ClearAllClients();
  48. Repository.AddOrUpdatePublisherConfiguration(request.CreatePublisherConfiguration());
  49. PublisherConfiguration pc = Repository.GetPublisherConfiguration();
  50. PublisherInfo pi = pc.EvaluationElementDictionary[id];
  51. Assert.AreEqual(3, pi.TransformationInfoDictionary.Count);
  52. foreach (var ai in pi.InfoDictionary.Values)
  53. {
  54. Assert.AreEqual(2, ai.Detail.RequestTransformationIds.Count);
  55. Assert.AreEqual(1, ai.Detail.ResponseTransformationIds.Count);
  56. }
  57. }
  58. private AddOrUpdateSubscribersRequest CreateAddOrUpdateSubscribersRequest(string id)
  59. {
  60. // Namespaces
  61. var nis = new[]
  62. {
  63. new NamespaceInfo("ns1", "http://somenamespace/"),
  64. };
  65. // Filters
  66. var fis = new[]
  67. {
  68. new FilterInfo("ActionFilter1", FilterTypeEnum.Action, "http://someaction/"),
  69. new FilterInfo("XPathFilter1", FilterTypeEnum.XPath, "//ns1:elem1/ns1:elem2/@ns1:attr1=3"),
  70. new FilterInfo("AndFilter1", "ActionFilter1", "XPathFilter1"),
  71. new FilterInfo("TopicFilter1", FilterTypeEnum.Topic, "sometopic"),
  72. };
  73. // Endpoint
  74. var ei = new EndpointInfo("Endpoint1", "http://someaddress/", EndpointNameEnum.BasicHttpEndpoint);
  75. SubscriberInfo si = new SubscriberInfo(id, nis, fis, new[] { ei });
  76. // Transformations
  77. si.PipelineInfoDictionary.Add(
  78. "RequestTransformation1",
  79. new TransformationInfo()
  80. {
  81. Id = "RequestTransformation1",
  82. TransformationType = TransformationTypeEnum.Xslt,
  83. TransformationData = "ReqTransformation1.xslt",
  84. });
  85. si.PipelineInfoDictionary.Add(
  86. "RequestTransformation2",
  87. new TransformationInfo()
  88. {
  89. Id = "RequestTransformation2",
  90. TransformationType = TransformationTypeEnum.Custom,
  91. TransformationData = "RockBus.Tests.Transformations.Test",
  92. CustomTypeName = "TestTransformation"
  93. });
  94. si.PipelineInfoDictionary.Add(
  95. "ResponseTransformation1",
  96. new TransformationInfo()
  97. {
  98. Id = "ResponseTransformation1",
  99. TransformationType = TransformationTypeEnum.Xslt,
  100. TransformationData = "RespTransformation.xslt",
  101. });
  102. // Subscriptions
  103. SubscriptionDetail sd = new SubscriptionDetail(Guid.NewGuid().ToString(), true, 1000, null, null);
  104. SubscriptionInfo sci = new SubscriptionInfo(si, sd, ei, fis);
  105. foreach (TransformationInfo ti in si.PipelineInfoDictionary.Values)
  106. {
  107. if (ti.Id.StartsWith("Request"))
  108. sci.Detail.RequestTransformationIds.Add(ti.Id);
  109. else
  110. sci.Detail.ResponseTransformationIds.Add(ti.Id);
  111. }
  112. si.InfoDictionary.TryAdd(sci.Detail.Id, sci);
  113. // SubscriptionConfiguration
  114. SubscriberConfiguration sc = new SubscriberConfiguration();
  115. sc.EvaluationElementDictionary.TryAdd(si.Id, si);
  116. // Request
  117. AddOrUpdateSubscribersRequest request = new AddOrUpdateSubscribersRequest(sc);
  118. return request;
  119. }
  120. private AddOrUpdatePublishersRequest CreateAddOrUpdatePublishersRequest(string id)
  121. {
  122. var tis = new[]
  123. {
  124. new TopicInfo()
  125. {
  126. Name = "Topic1",
  127. }
  128. };
  129. var nis = new[]
  130. {
  131. new NamespaceInfo("ns1", "http://somenamespace/"),
  132. };
  133. var fis = new[]
  134. {
  135. new FilterInfo("ActionFilter1", FilterTypeEnum.Action, "http://someaction/"),
  136. new FilterInfo("XPathFilter1", FilterTypeEnum.XPath, "//ns1:elem1/ns1:elem2/@ns1:attr1=3"),
  137. new FilterInfo("AndFilter1", "ActionFilter1", "XPathFilter1"),
  138. new FilterInfo("TopicFilter1", FilterTypeEnum.Topic, "sometopic"),
  139. };
  140. var ris = new[]
  141. {
  142. new ResponseInfo("Response1", "http://SomeAction", "<someOperation xmlns=\"http://somenamespace/\" />"),
  143. };
  144. PublisherInfo pi = new PublisherInfo(id, nis, fis, tis, ris);
  145. pi.TransformationInfoDictionary.Add(
  146. "RequestTransformation1",
  147. new TransformationInfo()
  148. {
  149. Id = "RequestTransformation1",
  150. TransformationType = TransformationTypeEnum.Xslt,
  151. TransformationData = "PubRequestTransformation.xslt"
  152. });
  153. pi.TransformationInfoDictionary.Add(
  154. "RequestTransformation2",
  155. new TransformationInfo()
  156. {
  157. Id = "RequestTransformation2",
  158. TransformationType = TransformationTypeEnum.Custom,
  159. TransformationData = "RockBus.Tests.Transformations.Test",
  160. CustomTypeName = "TestTransformation"
  161. });
  162. pi.TransformationInfoDictionary.Add(
  163. "ResponseTransformation1",
  164. new TransformationInfo()
  165. {
  166. Id = "ResponseTransformation1",
  167. TransformationType = TransformationTypeEnum.Xslt,
  168. TransformationData = "PubRespTransformation.xslt",
  169. });
  170. AdvertisementDetail pd = new AdvertisementDetail(Guid.NewGuid().ToString(), expiryDateTimeUtc: DateTime.MaxValue);
  171. AdvertisementInfo pci = new AdvertisementInfo(pi, pd);
  172. foreach (TransformationInfo ti in pi.TransformationInfoDictionary.Values)
  173. {
  174. if (ti.Id.StartsWith("Request"))
  175. pci.Detail.RequestTransformationIds.Add(ti.Id);
  176. else
  177. pci.Detail.ResponseTransformationIds.Add(ti.Id);
  178. }
  179. pci.TopicNames.Add("Topic1");
  180. pi.InfoDictionary.TryAdd(
  181. "Advertisement1",
  182. pci);
  183. PublisherConfiguration pc = new PublisherConfiguration();
  184. pc.EvaluationElementDictionary.TryAdd(pi.Id, pi);
  185. AddOrUpdatePublishersRequest request = new AddOrUpdatePublishersRequest(pc);
  186. return request;
  187. }
  188. }
  189. }