You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

173 lines
5.3 KiB

  1. using System;
  2. using System.Threading.Tasks;
  3. using DotNetCore.CAP.Abstractions;
  4. using DotNetCore.CAP.Internal;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Xunit;
  7. namespace DotNetCore.CAP.Test
  8. {
  9. public class ConsumerServiceSelectorTest
  10. {
  11. private IServiceProvider _provider;
  12. public ConsumerServiceSelectorTest()
  13. {
  14. var services = new ServiceCollection();
  15. //services.AddSingleton<IConsumerServiceSelector, DefaultConsumerServiceSelector>();
  16. services.AddScoped<IFooTest, CandidatesFooTest>();
  17. services.AddScoped<IBarTest, CandidatesBarTest>();
  18. services.AddLogging();
  19. services.AddCap(x => { });
  20. _provider = services.BuildServiceProvider();
  21. }
  22. [Fact]
  23. public void CanFindAllConsumerService()
  24. {
  25. var selector = _provider.GetRequiredService<IConsumerServiceSelector>();
  26. var candidates = selector.SelectCandidates();
  27. Assert.Equal(6, candidates.Count);
  28. }
  29. [Fact]
  30. public void CanFindSpecifiedTopic()
  31. {
  32. var selector = _provider.GetRequiredService<IConsumerServiceSelector>();
  33. var candidates = selector.SelectCandidates();
  34. var bestCandidates = selector.SelectBestCandidate("Candidates.Foo", candidates);
  35. Assert.NotNull(bestCandidates);
  36. Assert.NotNull(bestCandidates.MethodInfo);
  37. Assert.Equal(typeof(Task), bestCandidates.MethodInfo.ReturnType);
  38. }
  39. [Theory]
  40. [InlineData("Candidates.Asterisk")]
  41. [InlineData("candidates.Asterisk")]
  42. [InlineData("AAA.BBB.Asterisk")]
  43. [InlineData("aaa.bbb.Asterisk")]
  44. public void CanFindAsteriskTopic(string topic)
  45. {
  46. var selector = _provider.GetRequiredService<IConsumerServiceSelector>();
  47. var candidates = selector.SelectCandidates();
  48. var bestCandidates = selector.SelectBestCandidate(topic, candidates);
  49. Assert.NotNull(bestCandidates);
  50. }
  51. [Theory]
  52. [InlineData("Candidates.Asterisk.AAA")]
  53. [InlineData("AAA.BBB.CCC.Asterisk")]
  54. [InlineData("aaa.BBB.ccc.Asterisk")]
  55. [InlineData("Asterisk.aaa.bbb")]
  56. public void CanNotFindAsteriskTopic(string topic)
  57. {
  58. var selector = _provider.GetRequiredService<IConsumerServiceSelector>();
  59. var candidates = selector.SelectCandidates();
  60. var bestCandidates = selector.SelectBestCandidate(topic, candidates);
  61. Assert.Null(bestCandidates);
  62. }
  63. [Theory]
  64. [InlineData("Candidates.Pound.AAA")]
  65. [InlineData("Candidates.Pound.AAA.BBB")]
  66. [InlineData("AAA.Pound")]
  67. [InlineData("aaa.Pound")]
  68. [InlineData("aaa.bbb.Pound")]
  69. [InlineData("aaa.BBB.Pound")]
  70. public void CanFindPoundTopic(string topic)
  71. {
  72. var selector = _provider.GetRequiredService<IConsumerServiceSelector>();
  73. var candidates = selector.SelectCandidates();
  74. var bestCandidates = selector.SelectBestCandidate(topic, candidates);
  75. Assert.NotNull(bestCandidates);
  76. }
  77. [Theory]
  78. [InlineData("Pound")]
  79. [InlineData("aaa.Pound.AAA.BBB")]
  80. [InlineData("Pound.AAA")]
  81. [InlineData("Pound.aaa")]
  82. [InlineData("AAA.Pound.aaa")]
  83. public void CanNotFindPoundTopic(string topic)
  84. {
  85. var selector = _provider.GetRequiredService<IConsumerServiceSelector>();
  86. var candidates = selector.SelectCandidates();
  87. var bestCandidates = selector.SelectBestCandidate(topic, candidates);
  88. Assert.Null(bestCandidates);
  89. }
  90. }
  91. public class CandidatesTopic : TopicAttribute
  92. {
  93. public CandidatesTopic(string topicName) : base(topicName)
  94. {
  95. }
  96. }
  97. public interface IFooTest
  98. {
  99. }
  100. public interface IBarTest
  101. {
  102. }
  103. public class CandidatesFooTest : IFooTest, ICapSubscribe
  104. {
  105. [CandidatesTopic("Candidates.Foo")]
  106. public Task GetFoo()
  107. {
  108. Console.WriteLine("GetFoo() method has bee excuted.");
  109. return Task.CompletedTask;
  110. }
  111. [CandidatesTopic("Candidates.Foo2")]
  112. public void GetFoo2()
  113. {
  114. Console.WriteLine("GetFoo2() method has bee excuted.");
  115. }
  116. [CandidatesTopic("*.*.Asterisk")]
  117. [CandidatesTopic("*.Asterisk")]
  118. public void GetFooAsterisk()
  119. {
  120. Console.WriteLine("GetFoo2Asterisk() method has bee excuted.");
  121. }
  122. [CandidatesTopic("Candidates.Pound.#")]
  123. [CandidatesTopic("#.Pound")]
  124. public void GetFooPound()
  125. {
  126. Console.WriteLine("GetFoo2Pound() method has bee excuted.");
  127. }
  128. }
  129. public class CandidatesBarTest : IBarTest
  130. {
  131. [CandidatesTopic("Candidates.Bar")]
  132. public Task GetBar()
  133. {
  134. Console.WriteLine("GetBar() method has bee excuted.");
  135. return Task.CompletedTask;
  136. }
  137. [CandidatesTopic("Candidates.Bar2")]
  138. public void GetBar2()
  139. {
  140. Console.WriteLine("GetBar2() method has bee excuted.");
  141. }
  142. public void GetBar3()
  143. {
  144. Console.WriteLine("GetBar3() method has bee excuted.");
  145. }
  146. }
  147. }