MemoryStorageProviderTest.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. using qdr.fnd.core.pqueue.Enums;
  2. using qdr.fnd.core.pqueue.Exceptions;
  3. using qdr.fnd.core.pqueue.Storages;
  4. using qdr.fnd.core.pqueue.test.Mocks;
  5. using Quadarax.Foundation.Core.Data;
  6. using Quadarax.Foundation.Core.Thread;
  7. using Quadarax.Foundation.Core.Value.Extensions;
  8. using Quadarax.Foundation.Core.Value.Generators;
  9. namespace qdr.fnd.core.pqueue.test.Storages
  10. {
  11. public class MemoryStorageProviderTest
  12. {
  13. private LoggerMock _logger;
  14. private string _owner = "owner";
  15. private string _ownerRef = "ownerRef";
  16. private string _providerClass = "providerClass";
  17. private int _initialAttempts = 10;
  18. private DateTime _created = DateTime.Now;
  19. [SetUp]
  20. public void Setup()
  21. {
  22. _logger = new LoggerMock();
  23. }
  24. [Test(TestOf=typeof(MemoryStorageProvider))]
  25. public void ConstructorOk()
  26. {
  27. var provider = new MemoryStorageProvider(_logger);
  28. }
  29. [Test(TestOf=typeof(MemoryStorageProvider))]
  30. public void CreateItemOk()
  31. {
  32. var provider = new MemoryStorageProvider(_logger);
  33. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  34. Assert.That(string.IsNullOrEmpty(itemId), Is.False);
  35. }
  36. [Test(TestOf=typeof(MemoryStorageProvider))]
  37. public void ContainsItemOk()
  38. {
  39. var provider = new MemoryStorageProvider(_logger);
  40. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  41. Assert.That(provider.ContainsItem(itemId), Is.True);
  42. Assert.That(provider.ContainsItem("not-exist"), Is.False);
  43. }
  44. [Test(TestOf=typeof(MemoryStorageProvider))]
  45. public void DeleteItemOk()
  46. {
  47. var provider = new MemoryStorageProvider(_logger);
  48. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  49. provider.DeleteItem(itemId);
  50. Assert.That(provider.ContainsItem(itemId), Is.False);
  51. }
  52. [Test(TestOf = typeof(MemoryStorageProvider))]
  53. public void DeleteItemFail()
  54. {
  55. var provider = new MemoryStorageProvider(_logger);
  56. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  57. provider.DeleteItem(itemId);
  58. Assert.Throws<ArgumentNullException>(() => provider.DeleteItem(string.Empty));
  59. var psEx = Assert.Throws<PSStorageException>(() => provider.DeleteItem(itemId));
  60. Assert.That(psEx, Is.Not.Null);
  61. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  62. }
  63. [Test(TestOf=typeof(MemoryStorageProvider))]
  64. public void UpdateItemPriorityOk()
  65. {
  66. var provider = new MemoryStorageProvider(_logger);
  67. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  68. var priority = 99;
  69. var item = provider.GetItem(itemId);
  70. Assert.That(item.Priority, Is.Not.EqualTo(priority));
  71. provider.UpdateItemPriority(itemId, priority);
  72. item = provider.GetItem(itemId);
  73. Assert.That(item.Priority, Is.EqualTo(priority));
  74. }
  75. [Test(TestOf = typeof(MemoryStorageProvider))]
  76. public void UpdateItemPriorityFail()
  77. {
  78. var provider = new MemoryStorageProvider(_logger);
  79. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemPriority(string.Empty,0));
  80. var psEx = Assert.Throws<PSStorageException>(() => provider.DeleteItem("not-exists"));
  81. Assert.That(psEx, Is.Not.Null);
  82. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  83. }
  84. [Test(TestOf=typeof(MemoryStorageProvider))]
  85. public void UpdateItemValidityOk()
  86. {
  87. var provider = new MemoryStorageProvider(_logger);
  88. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  89. var validFrom = DateTime.Now;
  90. var validTo = validFrom.AddHours(1);
  91. var item = provider.GetItem(itemId);
  92. Assert.That(item.ValidFrom, Is.Not.EqualTo(validFrom));
  93. Assert.That(item.ValidTo, Is.Not.EqualTo(validTo));
  94. provider.UpdateItemValidity(itemId, validFrom, validTo);
  95. item = provider.GetItem(itemId);
  96. Assert.That(item.ValidFrom, Is.EqualTo(validFrom));
  97. Assert.That(item.ValidTo, Is.EqualTo(validTo));
  98. provider.UpdateItemValidity(itemId, validFrom, null);
  99. Assert.That(item.ValidTo, Is.Null);
  100. }
  101. [Test(TestOf = typeof(MemoryStorageProvider))]
  102. public void UpdateItemValidityFail()
  103. {
  104. var provider = new MemoryStorageProvider(_logger);
  105. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemValidity(string.Empty,DateTime.Now, DateTime.Now));
  106. var psEx = Assert.Throws<PSStorageException>(() => provider.UpdateItemValidity("not-exists",DateTime.Now, DateTime.Now));
  107. Assert.That(psEx, Is.Not.Null);
  108. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  109. }
  110. [Test(TestOf = typeof(MemoryStorageProvider))]
  111. public void GetItemFail()
  112. {
  113. var provider = new MemoryStorageProvider(_logger);
  114. Assert.Throws<ArgumentNullException>(() => provider.GetItem(string.Empty));
  115. var psEx = Assert.Throws<PSStorageException>(() => provider.GetItem("not-exists"));
  116. Assert.That(psEx, Is.Not.Null);
  117. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  118. }
  119. [Test(TestOf=typeof(MemoryStorageProvider))]
  120. public void UpdateItemStatusOk()
  121. {
  122. var provider = new MemoryStorageProvider(_logger);
  123. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  124. var status = PsStatusEnum.DoneOk;
  125. var transient = true;
  126. var item = provider.GetItem(itemId);
  127. Assert.That(item.Status, Is.Not.EqualTo(status));
  128. Assert.That(item.IsStatusTransient, Is.Not.EqualTo(transient));
  129. provider.UpdateItemStatus(itemId, status, transient);
  130. item = provider.GetItem(itemId);
  131. Assert.That(item.Status, Is.EqualTo(status));
  132. Assert.That(item.IsStatusTransient, Is.EqualTo(transient));
  133. provider.UpdateItemStatus(itemId, null, !transient);
  134. item = provider.GetItem(itemId);
  135. Assert.That(item.Status, Is.EqualTo(status));
  136. Assert.That(item.IsStatusTransient, Is.EqualTo(!transient));
  137. }
  138. [Test(TestOf = typeof(MemoryStorageProvider))]
  139. public void UpdateItemStatusFail()
  140. {
  141. var provider = new MemoryStorageProvider(_logger);
  142. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemStatus(string.Empty,null, true));
  143. var psEx = Assert.Throws<PSStorageException>(() => provider.UpdateItemStatus("not-exists",null, true));
  144. Assert.That(psEx, Is.Not.Null);
  145. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  146. }
  147. [Test(TestOf=typeof(MemoryStorageProvider))]
  148. public void UpdateItemStartedOk()
  149. {
  150. var provider = new MemoryStorageProvider(_logger);
  151. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  152. var started = DateTime.Now;
  153. var item = provider.GetItem(itemId);
  154. Assert.That(item.Started, Is.Not.EqualTo(started));
  155. provider.UpdateItemStarted(itemId, started);
  156. item = provider.GetItem(itemId);
  157. Assert.That(item.Started, Is.EqualTo(started));
  158. provider.UpdateItemStarted(itemId, null);
  159. item = provider.GetItem(itemId);
  160. Assert.That(item.Started, Is.Null);
  161. }
  162. [Test(TestOf = typeof(MemoryStorageProvider))]
  163. public void UpdateItemStartedFail()
  164. {
  165. var provider = new MemoryStorageProvider(_logger);
  166. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemStarted(string.Empty,null));
  167. var psEx = Assert.Throws<PSStorageException>(() => provider.UpdateItemStarted("not-exists",null));
  168. Assert.That(psEx, Is.Not.Null);
  169. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  170. }
  171. [Test(TestOf=typeof(MemoryStorageProvider))]
  172. public void UpdateItemFinishedOk()
  173. {
  174. var provider = new MemoryStorageProvider(_logger);
  175. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  176. var finished = DateTime.Now;
  177. var item = provider.GetItem(itemId);
  178. Assert.That(item.Finished, Is.Not.EqualTo(finished));
  179. provider.UpdateItemFinished(itemId, finished);
  180. item = provider.GetItem(itemId);
  181. Assert.That(item.Finished, Is.EqualTo(finished));
  182. provider.UpdateItemFinished(itemId, null);
  183. item = provider.GetItem(itemId);
  184. Assert.That(item.Finished, Is.Null);
  185. }
  186. [Test(TestOf = typeof(MemoryStorageProvider))]
  187. public void UpdateItemFinishedFail()
  188. {
  189. var provider = new MemoryStorageProvider(_logger);
  190. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemFinished(string.Empty,null));
  191. var psEx = Assert.Throws<PSStorageException>(() => provider.UpdateItemFinished("not-exists",null));
  192. Assert.That(psEx, Is.Not.Null);
  193. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  194. }
  195. [Test(TestOf=typeof(MemoryStorageProvider))]
  196. public void CreateItemAttributeOk()
  197. {
  198. var provider = new MemoryStorageProvider(_logger);
  199. var typeClass = "System.String";
  200. var value = "valueXXX";
  201. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  202. var item = provider.GetItem(itemId);
  203. Assert.That(item.Arguments.Count(), Is.EqualTo(0));
  204. provider.CreateItemAttribute(itemId, _owner, value,typeClass,true);
  205. item = provider.GetItem(itemId);
  206. Assert.That(item.Arguments.FirstOrDefault(x=>x.Name == _owner), Is.Not.Null);
  207. var attr = item.Arguments.First(x=>x.Name == _owner);
  208. Assert.That(attr.ValueType.FullName, Is.EqualTo(Type.GetType(typeClass)?.FullName));
  209. Assert.That(attr.IsOutput, Is.EqualTo(true));
  210. }
  211. [Test(TestOf = typeof(MemoryStorageProvider))]
  212. public void CreateItemAttributeFail()
  213. {
  214. var provider = new MemoryStorageProvider(_logger);
  215. var typeClass = "System.String";
  216. var value = "valueXXX";
  217. Assert.Throws<ArgumentNullException>(() => provider.CreateItemAttribute(string.Empty,_owner,typeClass, value, true));
  218. var psEx = Assert.Throws<PSStorageException>(() => provider.CreateItemAttribute("non=exists",_owner,typeClass, value, true));
  219. Assert.That(psEx, Is.Not.Null);
  220. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemNotFound));
  221. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  222. provider.CreateItemAttribute(itemId, _owner, value,typeClass,true);
  223. psEx = Assert.Throws<PSStorageException>(() => provider.CreateItemAttribute(itemId,_owner,typeClass, value, true));
  224. Assert.That(psEx, Is.Not.Null);
  225. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemArgumentAlreadyExists));
  226. Assert.Throws<ArgumentNullException>(() => provider.CreateItemAttribute(itemId,string.Empty,typeClass, value, true));
  227. Assert.Throws<ArgumentNullException>(() => provider.CreateItemAttribute(itemId, null!, typeClass, value, true));
  228. Assert.Throws<ArgumentNullException>(() => provider.CreateItemAttribute(itemId,"non-exists",string.Empty, value, true));
  229. Assert.Throws<ArgumentNullException>(() => provider.CreateItemAttribute(itemId, "non-exists", null!, value, true));
  230. }
  231. [Test(TestOf=typeof(MemoryStorageProvider))]
  232. public void UpdateItemAttributeOk()
  233. {
  234. var provider = new MemoryStorageProvider(_logger);
  235. var typeClass = "System.String";
  236. var value = "valueXXX";
  237. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  238. var item = provider.GetItem(itemId);
  239. Assert.That(item.Arguments.Count(), Is.EqualTo(0));
  240. provider.CreateItemAttribute(itemId, _owner, value,typeClass,true);
  241. item = provider.GetItem(itemId);
  242. var attr = item.Arguments.FirstOrDefault(x=>x.Name == _owner);
  243. Assert.That(attr, Is.Not.Null);
  244. provider.UpdateItemAttribute(itemId, _owner, value + "1");
  245. item = provider.GetItem(itemId);
  246. attr = item.Arguments.FirstOrDefault(x=>x.Name == _owner);
  247. Assert.That(attr, Is.Not.Null);
  248. Assert.That(attr.Value, Is.EqualTo(value + "1"));
  249. }
  250. [Test(TestOf = typeof(MemoryStorageProvider))]
  251. public void UpdateItemAttributeFail()
  252. {
  253. var provider = new MemoryStorageProvider(_logger);
  254. var typeClass = "System.String";
  255. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  256. var psEx = Assert.Throws<PSStorageException>(() => provider.UpdateItemAttribute(itemId,_owner,typeClass));
  257. Assert.That(psEx, Is.Not.Null);
  258. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemArgumentNotFound));
  259. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemAttribute(itemId,string.Empty,typeClass));
  260. Assert.Throws<ArgumentNullException>(() => provider.UpdateItemAttribute(itemId, null!, typeClass));
  261. }
  262. [Test(TestOf=typeof(MemoryStorageProvider))]
  263. public void DeleteItemAttributeOk()
  264. {
  265. var provider = new MemoryStorageProvider(_logger);
  266. var typeClass = "System.String";
  267. var value = "valueXXX";
  268. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  269. var item = provider.GetItem(itemId);
  270. Assert.That(item.Arguments.Count(), Is.EqualTo(0));
  271. provider.CreateItemAttribute(itemId, _owner, value,typeClass,true);
  272. item = provider.GetItem(itemId);
  273. var attr = item.Arguments.FirstOrDefault(x=>x.Name == _owner);
  274. Assert.That(attr, Is.Not.Null);
  275. provider.DeleteItemAttribute(itemId, _owner);
  276. item = provider.GetItem(itemId);
  277. Assert.That(item.Arguments.Count(), Is.EqualTo(0));
  278. }
  279. [Test(TestOf = typeof(MemoryStorageProvider))]
  280. public void DeleteItemAttributeFail()
  281. {
  282. var provider = new MemoryStorageProvider(_logger);
  283. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  284. var psEx = Assert.Throws<PSStorageException>(() => provider.DeleteItemAttribute(itemId,_owner));
  285. Assert.That(psEx, Is.Not.Null);
  286. Assert.That(psEx.Code, Is.EqualTo(PSStorageException.ErrorCodes.PsStorageItemArgumentNotFound));
  287. Assert.Throws<ArgumentNullException>(() => provider.DeleteItemAttribute(itemId,string.Empty));
  288. Assert.Throws<ArgumentNullException>(() => provider.DeleteItemAttribute(itemId, null!));
  289. }
  290. [Test(TestOf=typeof(MemoryStorageProvider))]
  291. public void AppendLogOk()
  292. {
  293. var provider = new MemoryStorageProvider(_logger);
  294. var value = "valueXXX";
  295. var code = -1;
  296. ErrorLevelEnum level = ErrorLevelEnum.Error;
  297. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  298. var item = provider.GetItem(itemId);
  299. Assert.That(item.Log.Count(), Is.EqualTo(0));
  300. provider.AppendLog(itemId, value, code, level);
  301. item = provider.GetItem(itemId);
  302. var logItem = item.Log.FirstOrDefault(x=>x.Message == value);
  303. Assert.That(logItem, Is.Not.Null);
  304. Assert.That(logItem.Code, Is.EqualTo(code));
  305. Assert.That(logItem.Level, Is.EqualTo(level));
  306. }
  307. [Test(TestOf = typeof(MemoryStorageProvider))]
  308. public void AppendLogFail()
  309. {
  310. var provider = new MemoryStorageProvider(_logger);
  311. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  312. Assert.Throws<ArgumentNullException>(() => provider.AppendLog(itemId,string.Empty, 0,ErrorLevelEnum.Error));
  313. Assert.Throws<ArgumentNullException>(() => provider.AppendLog(itemId,null!, 0,ErrorLevelEnum.Error));
  314. }
  315. [Test(TestOf=typeof(MemoryStorageProvider))]
  316. public void AppendStatusJournalOk()
  317. {
  318. var provider = new MemoryStorageProvider(_logger);
  319. var value = "valueXXX";
  320. PsStatusEnum status = PsStatusEnum.DoneOk;
  321. var isTransient = true;
  322. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  323. var item = provider.GetItem(itemId);
  324. Assert.That(item.StatusJournal.Count(), Is.EqualTo(0));
  325. provider.AppendStatusJournal(itemId, status, isTransient, value);
  326. item = provider.GetItem(itemId);
  327. var journal = item.StatusJournal.FirstOrDefault(x=>x.Description == value);
  328. Assert.That(journal, Is.Not.Null);
  329. Assert.That(journal.PreviousStatus, Is.EqualTo(status));
  330. Assert.That(journal.PreviousIsStatusTransient, Is.EqualTo(isTransient));
  331. }
  332. [Test(TestOf = typeof(MemoryStorageProvider))]
  333. public void AppendStatusJournalFail()
  334. {
  335. var provider = new MemoryStorageProvider(_logger);
  336. var itemId = provider.CreateItem(_owner, _ownerRef, _providerClass, _initialAttempts, _created);
  337. // no further tests needed
  338. }
  339. [Test(TestOf=typeof(MemoryStorageProvider))]
  340. public void QueryOk()
  341. {
  342. var provider = new MemoryStorageProvider(_logger);
  343. var status1 = PsStatusEnum.DoneOk;
  344. var status2 = PsStatusEnum.DoneFailed;
  345. var itemId1 = provider.CreateItem(_owner+"1", _ownerRef+"1", _providerClass, _initialAttempts, _created);
  346. var itemId2 = provider.CreateItem(_owner+"2", _ownerRef+"2", _providerClass, _initialAttempts, _created);
  347. var itemId3 = provider.CreateItem(_owner+"2", _ownerRef+"3", _providerClass, _initialAttempts, _created);
  348. provider.UpdateItemStatus(itemId1, status1, true);
  349. provider.UpdateItemStatus(itemId2, status2, true);
  350. provider.UpdateItemStatus(itemId3, status2, false);
  351. var result = provider.Query(_owner+"1", null).ToList();
  352. Assert.That(result.Count, Is.EqualTo(1));
  353. result = provider.Query(_owner+"2", null).ToList();
  354. Assert.That(result.Count, Is.EqualTo(2));
  355. result = provider.Query(null, _ownerRef+"3").ToList();
  356. Assert.That(result.Count, Is.EqualTo(1));
  357. result = provider.Query(null, null, new Tuple<bool, PsStatusEnum>(true,status1), new Tuple<bool, PsStatusEnum>(true, status2)).ToList();
  358. Assert.That(result.Count, Is.EqualTo(2));
  359. }
  360. [Test(TestOf=typeof(MemoryStorageProvider))]
  361. public void DurabilityTest()
  362. {
  363. var provider = new MemoryStorageProvider(_logger);
  364. var moshpit = new MoshPit<MoshPitContext>(new MoshPitContext(provider));
  365. moshpit.AddAction((ctx) =>
  366. {
  367. var itemId = ctx.Provider.CreateItem(ctx.HashGenerator.NewId(), ctx.HashGenerator.NewId(), ctx.HashGenerator.NewId(), 10, DateTime.Now);
  368. ctx.Provider.AppendLog(itemId, "log", 0, ErrorLevelEnum.Error);
  369. ctx.Provider.AppendStatusJournal(itemId, PsStatusEnum.DoneOk, true, "journal");
  370. ctx.Identities.Add(itemId);
  371. });
  372. moshpit.AddAction((ctx) =>
  373. {
  374. if (ctx.Identities.Count==0)
  375. return;
  376. var itemId = ctx.Identities.GetRandom();
  377. ctx.Identities.Remove(itemId);
  378. ctx.Provider.DeleteItem(itemId);
  379. });
  380. moshpit.AddAction((ctx) =>
  381. {
  382. if (ctx.Identities.Count==0)
  383. return;
  384. var itemId = ctx.Identities.GetRandom();
  385. ctx.Identities.Remove(itemId);
  386. ctx.Provider.DeleteItem(itemId);
  387. });
  388. moshpit.AddAction((ctx) =>
  389. {
  390. if (ctx.Identities.Count==0)
  391. return;
  392. var itemId = ctx.Identities.GetRandom();
  393. ctx.Provider.UpdateItemStatus(itemId, PsStatusEnum.DoneOk,false);
  394. });
  395. moshpit.Start(100, 10000);
  396. TestContext.WriteLine($"Total duration: {moshpit.TotalDuration}");
  397. TestContext.WriteLine($"Total iterations: {moshpit.Iterations}");
  398. TestContext.WriteLine($"AVG iteration duration: {moshpit.AvgIterationDuration}");
  399. TestContext.WriteLine($"AVG iterations per second: {moshpit.AvgIterationPerSecond}");
  400. }
  401. private class MoshPitContext
  402. {
  403. public MemoryStorageProvider Provider { get;}
  404. public List<string> Identities { get; }
  405. public TinyHash HashGenerator { get; }
  406. public MoshPitContext(MemoryStorageProvider provider)
  407. {
  408. Provider = provider;
  409. Identities = new List<string>();
  410. HashGenerator = new TinyHash(5);
  411. }
  412. }
  413. }
  414. }