PsProcessProviderBaseTest.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using Newtonsoft.Json.Linq;
  2. using NUnit.Framework.Interfaces;
  3. using qdr.fnd.core.pqueue.Enums;
  4. using qdr.fnd.core.pqueue.Process;
  5. using qdr.fnd.core.pqueue.test.Mocks;
  6. using qdr.fnd.core.pqueue.test.Process.Mock;
  7. using Quadarax.Foundation.Core.Data;
  8. using System.Collections.Concurrent;
  9. namespace qdr.fnd.core.pqueue.test.Process
  10. {
  11. internal class PsProcessProviderBaseTest
  12. {
  13. private IDictionary<string, List<string>> _stdOutPool;
  14. private IDictionary<string, List<Tuple<PsStatusEnum, string>>> _statusDonePool;
  15. [SetUp]
  16. public void Setup()
  17. {
  18. _stdOutPool = new ConcurrentDictionary<string, List<string>>();
  19. _statusDonePool = new ConcurrentDictionary<string, List<Tuple<PsStatusEnum, string>>>();
  20. }
  21. [Test(TestOf=typeof(PsProcessProviderBase))]
  22. public void ConstructorOk()
  23. {
  24. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  25. var process = CreateProcess(args);
  26. Assert.IsFalse(process.IsRunning);
  27. Assert.That(args, Is.EquivalentTo(process.Arguments.Values));
  28. }
  29. [Test(TestOf=typeof(PsProcessProviderBase))]
  30. public void ConstructorFail()
  31. {
  32. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  33. var itemId = "a";
  34. Assert.Throws<ArgumentNullException>(() => new PsProcessProviderBaseMock(null!, OnProcessStdOut,itemId, args, new LoggerMock()));
  35. Assert.Throws<ArgumentNullException>(() => new PsProcessProviderBaseMock(OnProcessDone, null!,itemId, args, new LoggerMock()));
  36. Assert.Throws<ArgumentNullException>(() => new PsProcessProviderBaseMock(OnProcessDone, OnProcessStdOut,null!, args, new LoggerMock()));
  37. Assert.Throws<ArgumentNullException>(() => new PsProcessProviderBaseMock(OnProcessDone, OnProcessStdOut,string.Empty, args, new LoggerMock()));
  38. Assert.Throws<ArgumentNullException>(() => new PsProcessProviderBaseMock(OnProcessDone, OnProcessStdOut,itemId, null!, new LoggerMock()));
  39. }
  40. [Test(TestOf=typeof(PsProcessProviderBase))]
  41. public void OnProcessErrorOk()
  42. {
  43. var testMessage = "Test";
  44. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  45. var process = CreateProcess(args);
  46. process.TestOnProcessError(new Exception(testMessage));
  47. Assert.That(_stdOutPool.ContainsKey(process.ItemId), Is.True);
  48. Assert.That(_stdOutPool[process.ItemId].Contains(testMessage), Is.True);
  49. }
  50. [Test(TestOf=typeof(PsProcessProviderBase))]
  51. public void OnProcessErrorFail()
  52. {
  53. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  54. var process = CreateProcess(args);
  55. var ex = Assert.Throws<AggregateException>(()=>process.TestOnProcessError(null!));
  56. Assert.That(ex.InnerExceptions.Any(e => e is ArgumentNullException), Is.True);
  57. }
  58. [Test(TestOf=typeof(PsProcessProviderBase))]
  59. public void GetArgumentValueOk()
  60. {
  61. var value = "a";
  62. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  63. args.Where(x=>x.Name == PsProcessProviderBase.CS_ARG_RESULT_TEXT).First().Value = value;
  64. var process = CreateProcess(args);
  65. Assert.That(process.TestGetArgumentValue<string>(PsProcessProviderBase.CS_ARG_RESULT_TEXT), Is.EqualTo(value));
  66. }
  67. [Test(TestOf=typeof(PsProcessProviderBase))]
  68. public void GetArgumentValueFail()
  69. {
  70. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  71. var process = CreateProcess(args);
  72. Assert.Throws<ArgumentNullException>(() => process.TestGetArgumentValue<string>(null!));
  73. Assert.Throws<ArgumentNullException>(() => process.TestGetArgumentValue<string>(string.Empty));
  74. Assert.That(process.TestGetArgumentValue<string>("a"), Is.Null);
  75. }
  76. [Test(TestOf=typeof(PsProcessProviderBase))]
  77. public void ContainsArgumentOk()
  78. {
  79. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  80. var process = CreateProcess(args);
  81. Assert.That(process.TestContainsArgument(PsProcessProviderBase.CS_ARG_RESULT_TEXT), Is.True);
  82. Assert.That(process.TestContainsArgument("a"), Is.False);
  83. }
  84. [Test(TestOf=typeof(PsProcessProviderBase))]
  85. public void ContainsArgumentFail()
  86. {
  87. var args = PsProcessProviderBaseMock.CreateArguments().ToArray();
  88. var process = CreateProcess(args);
  89. Assert.Throws<ArgumentNullException>(() => process.TestContainsArgument(string.Empty));
  90. Assert.Throws<ArgumentNullException>(() => process.TestContainsArgument(null!));
  91. }
  92. private PsProcessProviderBaseMock CreateProcess(TypedArgument[] args)
  93. {
  94. var itemId = "a";
  95. return new PsProcessProviderBaseMock(OnProcessDone, OnProcessStdOut, itemId, args, new LoggerMock());
  96. }
  97. private void OnProcessStdOut(string itemId, string message)
  98. {
  99. TestContext.WriteLine($"#StdOut: ItemId={itemId}; message='{message}'");
  100. _stdOutPool.TryAdd(itemId, new List<string>());
  101. _stdOutPool[itemId].Add(message);
  102. }
  103. private void OnProcessDone(string itemId, PsStatusEnum newStatus, string message)
  104. {
  105. TestContext.WriteLine($"#StaChg: ItemId={itemId}; newStatus={newStatus}; message='{message}'");
  106. _statusDonePool.TryAdd(itemId, new List<Tuple<PsStatusEnum, string>>());
  107. _statusDonePool[itemId].Add(new Tuple<PsStatusEnum, string>(newStatus, message));
  108. }
  109. }
  110. }