UnitTest1.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using Edge.Core.Parser.BinaryParser.Util;
  7. using Wayne_Pump_Dart.MessageEntity;
  8. using Wayne_Pump_Dart.MessageEntity.Incoming;
  9. using Wayne_Pump_Dart.MessageEntity.Outgoing;
  10. namespace Test_Wayne_Pump_Dart
  11. {
  12. [TestClass]
  13. public class UnitTest1
  14. {
  15. public static bool ValueEquals(IEnumerable<byte> array1, IEnumerable<byte> array2)
  16. {
  17. if (array1 == null && array2 == null)
  18. {
  19. return true;
  20. }
  21. if ((array1 == null) || (array2 == null))
  22. {
  23. return false;
  24. }
  25. if (array1.Count() != array2.Count())
  26. {
  27. return false;
  28. }
  29. if (array1.Equals(array2))
  30. {
  31. return true;
  32. }
  33. else
  34. {
  35. for (int Index = 0; Index < array1.Count(); Index++)
  36. {
  37. if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index)))
  38. {
  39. return false;
  40. }
  41. }
  42. }
  43. return true;
  44. }
  45. [TestMethod]
  46. public void Poll_TestMethod1()
  47. {
  48. var expected = new byte[] { 0x50, 0x29, 0xFA };
  49. Poll pollRequest = new Poll(0x50, 9);
  50. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  51. var actual = p.Serialize(pollRequest);
  52. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  53. }
  54. [TestMethod]
  55. public void Poll_TestMethod2()
  56. {
  57. var expected = new byte[] { 0x60, 0x29, 0xFA };
  58. Poll pollRequest = new Poll(0x60, 9);
  59. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  60. var actual = p.Serialize(pollRequest);
  61. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  62. }
  63. [TestMethod]
  64. public void Poll_TestMethod3()
  65. {
  66. var expected = new byte[] { 0x6F, 0x2A, 0xFA };
  67. Poll pollRequest = new Poll(0x6F, 10);
  68. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  69. var actual = p.Serialize(pollRequest);
  70. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  71. }
  72. [TestMethod]
  73. public void ACK_TestMethod1()
  74. {
  75. var expected = new byte[] { 0x50, 0xC9, 0xFA };
  76. var request = new ACK(0x50, 9);
  77. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  78. var actual = p.Serialize(request);
  79. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  80. }
  81. [TestMethod]
  82. public void ACK_TestMethod2()
  83. {
  84. var expected = new byte[] { 0x61, 0xCB, 0xFA };
  85. var request = new ACK(0x61, 11);
  86. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  87. var actual = p.Serialize(request);
  88. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  89. }
  90. [TestMethod]
  91. public void Mixed_Serialize_and_Deserial_TestMethod0()
  92. {
  93. bool exceptionHit = false;
  94. int executionCount = 0;
  95. int concurrentMax = 5000;
  96. int maxTimeWaitTestToFinish = 15000;// ms
  97. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  98. var raw = new byte[] { 0x60, 0x70, 0xFA };
  99. var expected = new byte[] { 0x50, 0x39, 0x01, 0x01, 0x00, 0x9C, 0xC0, 0x03, 0xFA };
  100. for (int i = 0; i < concurrentMax; i++)
  101. {
  102. ThreadPool.QueueUserWorkItem(_ =>
  103. {
  104. Interlocked.Increment(ref executionCount);
  105. try
  106. {
  107. lock (raw)
  108. {
  109. var actual = p.Deserialize(raw) as MessageBase;
  110. Assert.AreEqual(true, actual.Adrs == 0x60);
  111. Assert.AreEqual(true, actual.BlockSeqNumber == 0);
  112. }
  113. }
  114. catch (Exception exx) { exceptionHit = true; }
  115. });
  116. ThreadPool.QueueUserWorkItem(_ =>
  117. {
  118. Interlocked.Increment(ref executionCount);
  119. try
  120. {
  121. lock (expected)
  122. {
  123. var request = new ReturnStatusRequest(0x50, 9);
  124. var actual = p.Serialize(request);
  125. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  126. }
  127. }
  128. catch (Exception exx) { exceptionHit = true; }
  129. });
  130. }
  131. int waitedTime = 0;
  132. while (executionCount < concurrentMax * 2)
  133. {
  134. Thread.Sleep(100);
  135. waitedTime += 100;
  136. if (waitedTime > maxTimeWaitTestToFinish)
  137. break;
  138. }
  139. Assert.AreEqual(true, executionCount >= concurrentMax * 2, "test did not finished correctly");
  140. Assert.AreEqual(true, exceptionHit == false, "should never have exception when concurrent serial and deserailzie messages");
  141. }
  142. [TestMethod]
  143. public void EOT_TestMethod1()
  144. {
  145. var raw = new byte[] { 0x61, 0x70, 0xFA };
  146. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  147. var actual = p.Deserialize(raw) as MessageBase;
  148. Assert.AreEqual(true, actual != null);
  149. Assert.AreEqual(true, actual.ControlCharacter == ControlCharacter.EOT);
  150. }
  151. [TestMethod]
  152. public void Scratch_TestMethod1()
  153. {
  154. var raw = new byte[] { 0x50, 0x36, 0x02, 0x08, 0x00, 0x09, 0x99, 0x00, 0x00, 0x38, 0x86, 0x11, 0x03, 0x04, 0x00, 0x38, 0x90, 0x11, 0x01, 0x01, 0x05, 0xF7, 0x6D, 0x03, 0xFA };
  155. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  156. var actual = p.Deserialize(raw) as MessageBase;
  157. Assert.AreEqual(true, actual != null);
  158. Assert.AreEqual(true, actual.ControlCharacter == ControlCharacter.DATA);
  159. }
  160. [TestMethod]
  161. public void Scratch_TestMethod2()
  162. {
  163. var raw = new byte[] { 0x55, 0x34, 0x02, 0x08, 0x03, 0x22, 0x41, 0x27, 0x11, 0x44, 0x56, 0x50, 0xE3, 0x42, 0x03, 0xFA };
  164. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  165. var actual = p.Deserialize(raw) as MessageBase;
  166. Assert.AreEqual(true, actual != null);
  167. Assert.AreEqual(true, actual.ControlCharacter == ControlCharacter.DATA);
  168. }
  169. //[TestMethod]
  170. //public void Escape0xFA_TestMethod0()
  171. //{
  172. // var raw = new byte[] { 0x50, 0x39, 0x01, 0x01, 0x00, 0x10, 0xFA, 0xC0, 0x03, 0xFA };
  173. // Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  174. // var request = p.Deserialize(raw) as ReturnStatusRequest;
  175. // Assert.AreEqual(true, request != null);
  176. // Assert.AreEqual(true, request.BlockSeqNumber == 9);
  177. //}
  178. [TestMethod]
  179. public void ReturnStatusRequest_TestMethod1()
  180. {
  181. var expected = new byte[] { 0x50, 0x39, 0x01, 0x01, 0x00, 0x9C, 0xC0, 0x03, 0xFA };
  182. var request = new ReturnStatusRequest(0x50, 9);
  183. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  184. var actual = p.Serialize(request);
  185. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  186. }
  187. [TestMethod]
  188. public void ReturnStatusRequest_TestMethod2()
  189. {
  190. var expected = new byte[] { 0x58, 0x3A, 0x01, 0x01, 0x00, 0x7D, 0x45, 0x03, 0xFA };
  191. var request = new ReturnStatusRequest(0x58, 0x0A);
  192. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  193. var actual = p.Serialize(request);
  194. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  195. }
  196. [TestMethod]
  197. public void AllowedNozzleNumbersRequest_TestMethod1()
  198. {
  199. var expected = new byte[] { 0x50, 0x39, 0x02, 0x02, 0x01, 0x02, 0xB0, 0x7C, 0x03, 0xFA };
  200. var request = new AllowedNozzleNumbersRequest(0x50, 9, new byte[] { 1, 2 });
  201. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  202. var actual = p.Serialize(request);
  203. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  204. }
  205. [TestMethod]
  206. public void AllowedNozzleNumbersRequest_TestMethod2()
  207. {
  208. var expected = new byte[] { 0x59, 0x39, 0x02, 0x03, 0x01, 0x02, 0x04, 0xE4, 0x8B, 0x03, 0xFA };
  209. var request = new AllowedNozzleNumbersRequest(0x59, 9, new byte[] { 1, 2, 4 });
  210. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  211. var actual = p.Serialize(request);
  212. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  213. }
  214. [TestMethod]
  215. public void AuthorizeRequest_TestMethod1()
  216. {
  217. var expected = new byte[] { 0x50, 0x39, 0x01, 0x01, 0x06, 0x1C, 0xC2, 0x03, 0xFA };
  218. var request = new AuthorizeRequest(0x50, 9);
  219. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  220. var actual = p.Serialize(request);
  221. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  222. }
  223. [TestMethod]
  224. public void AuthorizeRequest_TestMethod2()
  225. {
  226. var expected = new byte[] { 0x50, 0x3B, 0x01, 0x01, 0x06, 0x1D, 0x7A, 0x03, 0xFA };
  227. var request = new AuthorizeRequest(0x50, 0x0B);
  228. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  229. var actual = p.Serialize(request);
  230. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  231. }
  232. [TestMethod]
  233. public void PresetAmountRequestTestMethod1()
  234. {
  235. var expected = new byte[] { 0x50, 0x39, 0x04, 0x04,
  236. 0x00, 0x00, 0x11, 0x22,
  237. 0xD0, 0x32, 0x03, 0xFA };
  238. var request = new PresetAmountRequest(0x50, 9, 1122);
  239. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  240. var actual = p.Serialize(request);
  241. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  242. }
  243. [TestMethod]
  244. public void PresetAmountRequest_TestMethod2()
  245. {
  246. var expected = new byte[] { 0x50, 0x39, 0x04, 0x04,
  247. 0x12, 0x34, 0x56, 0x78,
  248. 0x27, 0x4F, 0x03, 0xFA };
  249. var request = new PresetAmountRequest(0x50, 9, 12345678);
  250. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  251. var actual = p.Serialize(request);
  252. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  253. }
  254. [TestMethod]
  255. public void PresetAmountRequest_TestMethod3()
  256. {
  257. var expected = new byte[] { 0x50, 0x39, 0x04, 0x04,
  258. 0x12, 0x00, 0x06, 0x70,
  259. 0x5B, 0x47, 0x03, 0xFA };
  260. var request = new PresetAmountRequest(0x50, 9, 12000670);
  261. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  262. var actual = p.Serialize(request);
  263. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  264. }
  265. [TestMethod]
  266. public void PriceUpdateRequest_TestMethod1()
  267. {
  268. var expected = new byte[] { 0x50, 0x39, 0x05, 0x09,
  269. 0x00, 0x00, 0x01,
  270. 0x00, 0x00, 0x02,
  271. 0x00, 0x00, 0x03,
  272. 0x0C, 0x96, 0x03, 0xFA };
  273. var request = new PriceUpdateRequest(0x50, 9, new int[] { 1, 2, 3 });
  274. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  275. var actual = p.Serialize(request);
  276. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  277. }
  278. [TestMethod]
  279. public void PriceUpdateRequest_TestMethod2()
  280. {
  281. var expected = new byte[] { 0x50, 0x39, 0x05, 0x09,
  282. 0x00, 0x00, 0x21,
  283. 0x00, 0x00, 0x22,
  284. 0x00, 0x00, 0x23,
  285. 0x27, 0x4C, 0x03, 0xFA };
  286. var request = new PriceUpdateRequest(0x50, 9, new int[] { 21, 22, 23 });
  287. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  288. var actual = p.Serialize(request);
  289. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  290. }
  291. [TestMethod]
  292. public void PriceUpdateRequest_TestMethod3()
  293. {
  294. var expected = new byte[] { 0x50, 0x39, 0x05, 0x03,
  295. 0x00, 0x98, 0x93,
  296. 0xB2, 0x85, 0x03, 0xFA };
  297. var request = new PriceUpdateRequest(0x50, 9, new int[] { 09893 });
  298. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  299. var actual = p.Serialize(request);
  300. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  301. }
  302. [TestMethod]
  303. public void PriceUpdateRequest_TestMethod4()
  304. {
  305. var expected = new byte[] { 0x50, 0x39, 0x05, 0x06,
  306. 0x12, 0x34, 0x56,
  307. 0x23, 0x45, 0x67,
  308. 0xBA, 0xA1, 0x03, 0xFA };
  309. var request = new PriceUpdateRequest(0x50, 9, new int[] { 123456, 234567 });
  310. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  311. var actual = p.Serialize(request);
  312. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  313. }
  314. [TestMethod]
  315. public void PriceUpdateRequest_TestMethod5()
  316. {
  317. var expected = new byte[] { 0x50, 0x39, 0x05, 0x0C,
  318. 0x12, 0x34, 0x56,
  319. 0x23, 0x45, 0x67,
  320. 0x34, 0x56, 0x78,
  321. 0x45, 0x67, 0x89,
  322. 0x11, 0xD2, 0x03, 0xFA };
  323. var request = new PriceUpdateRequest(0x50, 9, new int[] { 123456, 234567, 345678, 456789 });
  324. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  325. var actual = p.Serialize(request);
  326. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  327. }
  328. [TestMethod]
  329. public void ReadTotalizerRequest_TestMethod0()
  330. {
  331. var expected = new byte[] { 0x50, 0x32,
  332. 0x65,0x01,0x02,
  333. 0x5E,0x10,0xFA,
  334. 0x03,0xFA};
  335. var request = new RequestTotalVolumeCountersRequest(0x50, 2, 2);
  336. Wayne_Pump_Dart.Parser p = new Wayne_Pump_Dart.Parser();
  337. var actual = p.Serialize(request);
  338. Assert.AreEqual(true, ValueEquals(expected, actual), actual.ToHexLogString());
  339. }
  340. [TestMethod]
  341. public void NozzleStatusAndFillingPrice_TransactionData_TestMethod1()
  342. {
  343. var transactionData
  344. = new NozzleStatusAndFillingPrice_TransactionData(new TransactionData()
  345. {
  346. TransactionNumber = 0x03,
  347. RawData = new List<byte>() { 0x00, 0x22, 0x22, 0x02 }
  348. });
  349. Assert.AreEqual(true, transactionData.FillingPrice == 2222);
  350. Assert.AreEqual(true, transactionData.Status.Key == 2);
  351. Assert.AreEqual(true, transactionData.Status.Value == NozzleStatusAndFillingPrice_TransactionData.NozzleStatus.IN);
  352. }
  353. [TestMethod]
  354. public void NozzleStatusAndFillingPrice_TransactionData_TestMethod2()
  355. {
  356. var transactionData
  357. = new NozzleStatusAndFillingPrice_TransactionData(new TransactionData()
  358. {
  359. TransactionNumber = 0x03,
  360. RawData = new List<byte>() { 0x00, 0x22, 0x22, 0x12 }
  361. });
  362. Assert.AreEqual(true, transactionData.FillingPrice == 2222);
  363. Assert.AreEqual(true, transactionData.Status.Key == 2);
  364. Assert.AreEqual(true, transactionData.Status.Value
  365. == NozzleStatusAndFillingPrice_TransactionData.NozzleStatus.OUT);
  366. }
  367. [TestMethod]
  368. public void TotalCounters_TransactionData_TransactionData_TestMethod1()
  369. {
  370. var transactionData
  371. = new TotalCounters_TransactionData(new TransactionData()
  372. {
  373. TransactionNumber = 0x65,
  374. Length = 0x10,
  375. RawData = new List<byte>() { 0x01, 0x00, 0x00, 0x23, 0x56, 0x43, 0x00, 0x00, 0x23, 0x56, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00 }
  376. });
  377. Assert.AreEqual(true, transactionData.LogicalNozzleNumber == 1);
  378. Assert.AreEqual(true, transactionData.TotalValue == 235643);
  379. Assert.AreEqual(true, transactionData.Meter1_TotalValue_Or_NumberOfFill == 235643);
  380. Assert.AreEqual(true, transactionData.Meter2_TotalValue == 0);
  381. }
  382. [TestMethod]
  383. public void TotalCounters_TransactionData_TransactionData_TestMethod2()
  384. {
  385. var transactionData
  386. = new TotalCounters_TransactionData(new TransactionData()
  387. {
  388. TransactionNumber = 0x65,
  389. Length = 0x10,
  390. RawData = new List<byte>() { 0x09, 0x12, 0x34, 0x23, 0x56, 0x43, 0x00, 0x00, 0x23, 0x56, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00 }
  391. });
  392. Assert.AreEqual(true, transactionData.LogicalNozzleNumber == 9);
  393. Assert.AreEqual(true, transactionData.TotalValue == 1234235643);
  394. Assert.AreEqual(true, transactionData.Meter1_TotalValue_Or_NumberOfFill == 235643);
  395. Assert.AreEqual(true, transactionData.Meter2_TotalValue == 0);
  396. }
  397. }
  398. }