VCloudTestItem.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System;
  2. using System.Threading;
  3. using Vinno.IUS.Common.Log;
  4. namespace Vinno.vCloud.Common.FIS.Test
  5. {
  6. public enum VCloudTestItemStatus
  7. {
  8. None,
  9. TestBeginned,
  10. TestDone,
  11. TestFailed,
  12. CanSkipped,
  13. Skipped,
  14. TestTimeout
  15. }
  16. public enum VCloudSubItemTestStatus
  17. {
  18. Failed,
  19. Successful,
  20. Timeout,
  21. }
  22. public abstract class VCloudTestItem
  23. {
  24. protected readonly string TimeoutError = "VCloudTestTimeoutError";
  25. protected VCloudServiceTest VCloudServiceTest;
  26. /// <summary>
  27. /// Item test status
  28. /// </summary>
  29. public VCloudTestItemStatus Status { get; set; }
  30. /// <summary>
  31. /// Name for test item
  32. /// </summary>
  33. public string Id { get; }
  34. /// <summary>
  35. /// Indicate this service is enabled
  36. /// </summary>
  37. public bool IsEnabled { get; }
  38. protected VCloudTestItem(string id, VCloudServiceTest vCloudServiceTest)
  39. {
  40. VCloudServiceTest = vCloudServiceTest;
  41. Id = id;
  42. IsEnabled = true;
  43. }
  44. /// <summary>
  45. /// Execute this item test
  46. /// </summary>
  47. public abstract VCloudServiceTestResult Execute();
  48. protected VCloudSubItemTestStatus TimeoutExecute(Func<VCloudSubItemTestStatus> func, int timeout = 5000)
  49. {
  50. VCloudSubItemTestStatus result = VCloudSubItemTestStatus.Failed;
  51. var thread = new Thread(() =>
  52. {
  53. try
  54. {
  55. result = func();
  56. }
  57. catch (Exception e)
  58. {
  59. Logger.WriteLineError($"VCloudServiceTest - Exetute test [{Id}] ex:{e}");
  60. }
  61. });
  62. thread.Start();
  63. if (!thread.Join(timeout))
  64. {
  65. try
  66. {
  67. thread.Abort();
  68. }
  69. catch (Exception ex)
  70. {
  71. Logger.WriteLineError($"VCloudServiceTest - Exetute test [{Id}] - Abort thread failed.{ex}");
  72. }
  73. Logger.WriteLineError($"VCloudServiceTest - Exetute test [{Id}] timeout.");
  74. result = VCloudSubItemTestStatus.Timeout;
  75. }
  76. return result;
  77. }
  78. protected VCloudSubItemTestStatus TimeoutExecute(Func<string, VCloudSubItemTestStatus> func, string parameter, int timeout = 5000)
  79. {
  80. VCloudSubItemTestStatus result = VCloudSubItemTestStatus.Failed;
  81. var thread = new Thread(() =>
  82. {
  83. try
  84. {
  85. result = func(parameter);
  86. }
  87. catch (Exception e)
  88. {
  89. Logger.WriteLineError($"VCloudServiceTest - Exetute test [{Id}] ex:{e}");
  90. }
  91. });
  92. thread.Start();
  93. if (!thread.Join(timeout))
  94. {
  95. try
  96. {
  97. thread.Abort();
  98. }
  99. catch (Exception ex)
  100. {
  101. Logger.WriteLineError($"VCloudServiceTest - Exetute test [{Id}] - Abort thread failed.{ex}");
  102. }
  103. Logger.WriteLineError($"VCloudServiceTest - Exetute test [{Id}] timeout.");
  104. result = VCloudSubItemTestStatus.Timeout;
  105. }
  106. return result;
  107. }
  108. }
  109. }