MessageUnitTest.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. using Edge.Core.Parser.BinaryParser.Util;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using ZheJiangLanfeng_Pump;
  6. using ZheJiangLanfeng_Pump.MessageEntity;
  7. using static ZheJiangLanfeng_Pump.MessageBase;
  8. namespace ZheJiangLanfeng_Pump_Test
  9. {
  10. [TestClass]
  11. public class MessageUnitTest
  12. {
  13. public static bool ValueEquals(IEnumerable<byte> array1, IEnumerable<byte> array2)
  14. {
  15. if (array1 == null && array2 == null)
  16. {
  17. return true;
  18. }
  19. if ((array1 == null) || (array2 == null))
  20. {
  21. return false;
  22. }
  23. if (array1.Count() != array2.Count())
  24. {
  25. return false;
  26. }
  27. if (array1.Equals(array2))
  28. {
  29. return true;
  30. }
  31. else
  32. {
  33. for (int Index = 0; Index < array1.Count(); Index++)
  34. {
  35. if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index)))
  36. {
  37. return false;
  38. }
  39. }
  40. }
  41. return true;
  42. }
  43. [TestMethod]
  44. public void QueryStateRequestTestMethod1()
  45. {
  46. var request = new QueryStateRequest(1);
  47. var parser = new Parser();
  48. var actual = parser.Serialize(request);
  49. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  50. var expect = "A5 00 B8 00 00 00 00 00 00 00 00 48".ToBytes();
  51. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  52. }
  53. [TestMethod]
  54. public void QueryStateRequestTestMethod2()
  55. {
  56. var request = new QueryStateRequest(0xA5);
  57. var parser = new Parser();
  58. var actual = parser.Serialize(request);
  59. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  60. var expect = "A5 00 B8 00 00 00 00 00 00 00 00 48".ToBytes();
  61. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  62. }
  63. [TestMethod]
  64. public void ControlDispenserRequestTestMethod1()
  65. {
  66. var request = new ControlDispenserRequest(3);
  67. var parser = new Parser();
  68. var actual = parser.Serialize(request);
  69. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  70. var expect = "A5 00 A0 00 00 00 00 00 00 00 00 60".ToBytes();
  71. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  72. }
  73. [TestMethod]
  74. public void UncontrolDispenserRequestTestMethod1()
  75. {
  76. var request = new UncontrolDispenserRequest(5);
  77. var parser = new Parser();
  78. var actual = parser.Serialize(request);
  79. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  80. var expect = "A5 00 B0 00 00 00 00 00 00 00 00 50".ToBytes();
  81. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  82. }
  83. [TestMethod]
  84. public void FuelingRequestTestMethod1()
  85. {
  86. var request = new FuelingRequest(5);
  87. var parser = new Parser();
  88. var actual = parser.Serialize(request);
  89. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  90. var expect = "A5 00 A1 00 00 00 00 00 00 00 00 5F".ToBytes();
  91. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  92. }
  93. [TestMethod]
  94. public void StopRequestTestMethod1()
  95. {
  96. var request = new StopRequest(10);
  97. var parser = new Parser();
  98. var actual = parser.Serialize(request);
  99. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  100. var expect = "A5 00 B1 00 00 00 00 00 00 00 00 4F".ToBytes();
  101. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  102. }
  103. [TestMethod]
  104. public void FuelingWithFixedCashRequestTestMethod1()
  105. {
  106. var request = new FuelingWithFixedCashRequest(10, 12.21m);
  107. var parser = new Parser();
  108. var actual = parser.Serialize(request);
  109. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  110. var expect = "A5 00 A2 00 12 21 00 00 00 00 00 2B".ToBytes();
  111. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  112. }
  113. [TestMethod]
  114. public void FuelingWithFixedCashRequestTestMethod2()
  115. {
  116. var request = new FuelingWithFixedCashRequest(10, 1234.56m);
  117. var parser = new Parser();
  118. var actual = parser.Serialize(request);
  119. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  120. var expect = "A5 00 A2 12 34 56 00 00 00 00 00 C2".ToBytes();
  121. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  122. }
  123. [TestMethod]
  124. public void FuelingWithFixedCashRequestTestMethod3()
  125. {
  126. var request = new FuelingWithFixedCashRequest(10, 1234m);
  127. var parser = new Parser();
  128. var actual = parser.Serialize(request);
  129. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  130. var expect = "A5 00 A2 12 34 00 00 00 00 00 00 18".ToBytes();
  131. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  132. }
  133. [TestMethod]
  134. public void FuelingWithFixedCashRequestTestMethod4()
  135. {
  136. var request = new FuelingWithFixedCashRequest(10, 12m);
  137. var parser = new Parser();
  138. var actual = parser.Serialize(request);
  139. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  140. var expect = "A5 00 A2 00 12 00 00 00 00 00 00 4C".ToBytes();
  141. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  142. }
  143. [TestMethod]
  144. public void SettingPriceRequestTestMethod1()
  145. {
  146. var request = new SettingPriceRequest(10, 12m);
  147. var parser = new Parser();
  148. var actual = parser.Serialize(request);
  149. // 0x01 00 B8 00 00 00 00 00 00 00 00 48
  150. var expect = "A5 00 A4 12 00 00 00 00 00 00 00 4A".ToBytes();
  151. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  152. }
  153. [TestMethod]
  154. public void SettingPriceRequestTestMethod2()
  155. {
  156. var request = new SettingPriceRequest(10, 12.21m);
  157. var parser = new Parser();
  158. var actual = parser.Serialize(request);
  159. var expect = "A5 00 A4 12 21 00 00 00 00 00 00 29".ToBytes();
  160. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  161. }
  162. [TestMethod]
  163. public void SettingPriceRequestTestMethod3()
  164. {
  165. var request = new SettingPriceRequest(10, 7.89m);
  166. var parser = new Parser();
  167. var actual = parser.Serialize(request);
  168. var expect = "A5 00 A4 07 89 00 00 00 00 00 00 CC".ToBytes();
  169. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  170. }
  171. [TestMethod]
  172. public void SettingPreValveRequestTestMethod1()
  173. {
  174. var request = new SettingPreValveRequest(10, 0.98m);
  175. var parser = new Parser();
  176. var actual = parser.Serialize(request);
  177. var expect = "A5 00 A6 98 00 00 00 00 00 00 00 C2".ToBytes();
  178. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  179. }
  180. [TestMethod]
  181. public void SettingPreValveRequestTestMethod2()
  182. {
  183. var request = new SettingPreValveRequest(10, 0.9m);
  184. var parser = new Parser();
  185. var actual = parser.Serialize(request);
  186. var expect = "A5 00 A6 90 00 00 00 00 00 00 00 CA".ToBytes();
  187. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  188. }
  189. [TestMethod]
  190. public void SettingPreValveRequestTestMethod3()
  191. {
  192. var request = new SettingPreValveRequest(10, 0.09m);
  193. var parser = new Parser();
  194. var actual = parser.Serialize(request);
  195. var expect = "A5 00 A6 09 00 00 00 00 00 00 00 51".ToBytes();
  196. Assert.AreEqual(true, ValueEquals(actual, expect), "0x" + actual.ToHexLogString());
  197. }
  198. [TestMethod]
  199. public void QueryStateResponseTestMethod1()
  200. {
  201. var raw = "0A 00 12 34 56 78 90 11 22 33 61 CC".ToBytes();
  202. var parser = new Parser();
  203. var actual = parser.Deserialize(raw) as QueryStateResponse;
  204. Assert.AreEqual(true, actual != null);
  205. Assert.AreEqual(0x5A, actual.NzlNo);
  206. Assert.AreEqual(12.34m, actual.GetPrice());
  207. Assert.AreEqual(5678.90m, actual.GetCash());
  208. Assert.AreEqual(1122.33m, actual.GetLiter());
  209. var states = actual.GetStates();
  210. Assert.AreEqual(true, states.Contains(QueryStateResponse.StateEnum.StopFuelingAndStandBy));
  211. }
  212. [TestMethod]
  213. public void QueryStateResponseTestMethod2()
  214. {
  215. var raw = "0A 00 12 34 56 78 90 11 22 33 E1 CC".ToBytes();
  216. var parser = new Parser();
  217. var actual = parser.Deserialize(raw) as QueryStateResponse;
  218. Assert.AreEqual(true, actual != null);
  219. Assert.AreEqual(0x5A, actual.NzlNo);
  220. Assert.AreEqual(12.34m, actual.GetPrice());
  221. Assert.AreEqual(5678.90m, actual.GetCash());
  222. Assert.AreEqual(1122.33m, actual.GetLiter());
  223. var states = actual.GetStates();
  224. Assert.AreEqual(true, states.Contains(QueryStateResponse.StateEnum.LiftedNzl));
  225. }
  226. [TestMethod]
  227. public void QueryStateResponseTestMethod3()
  228. {
  229. var raw = "5A 00 07 34 03 00 00 11 22 33 E2 CC".ToBytes();
  230. var parser = new Parser();
  231. var actual = parser.Deserialize(raw) as QueryStateResponse;
  232. Assert.AreEqual(true, actual != null);
  233. Assert.AreEqual(0x5A, actual.NzlNo);
  234. Assert.AreEqual(7.34m, actual.GetPrice());
  235. Assert.AreEqual(300, actual.GetCash());
  236. Assert.AreEqual(1122.33m, actual.GetLiter());
  237. var states = actual.GetStates();
  238. Assert.AreEqual(true, states.Contains(QueryStateResponse.StateEnum.Fueling));
  239. }
  240. [TestMethod]
  241. public void QueryStateResponseTestMethod4()
  242. {
  243. var raw = "5A 00 01 00 00 00 00 00 00 00 41 BE".ToBytes();
  244. var parser = new Parser();
  245. var actual = parser.Deserialize(raw) as QueryStateResponse;
  246. Assert.AreEqual(true, actual != null);
  247. Assert.AreEqual(0x5A, actual.NzlNo);
  248. }
  249. [TestMethod]
  250. public void QueryShiftSumResponseTestMethod1()
  251. {
  252. var raw = "0A 00 A9 12 34 56 78 90 87 65 43 CC".ToBytes();
  253. var parser = new Parser();
  254. var actual = parser.Deserialize(raw) as QueryShiftSumResponse;
  255. Assert.AreEqual(true, actual != null);
  256. Assert.AreEqual(0x5A, actual.NzlNo);
  257. Assert.AreEqual(12345678m, actual.RawLiterSum);
  258. Assert.AreEqual(90876543m, actual.RawMoneySum);
  259. Assert.AreEqual(123456.78m, actual.GetLiterSum());
  260. Assert.AreEqual(908765.43m, actual.GetMoneySum());
  261. }
  262. [TestMethod]
  263. public void QueryShiftSumResponseTestMethod2()
  264. {
  265. var raw = "0A 00 A9 12 34 56 00 00 87 65 43 CC".ToBytes();
  266. var parser = new Parser();
  267. var actual = parser.Deserialize(raw) as QueryShiftSumResponse;
  268. Assert.AreEqual(true, actual != null);
  269. Assert.AreEqual(0x5A, actual.NzlNo);
  270. Assert.AreEqual(12345600m, actual.RawLiterSum);
  271. Assert.AreEqual(876543m, actual.RawMoneySum);
  272. Assert.AreEqual(123456m, actual.GetLiterSum());
  273. Assert.AreEqual(8765.43m, actual.GetMoneySum());
  274. }
  275. [TestMethod]
  276. public void QueryTotalCashResponseTestMethod1()
  277. {
  278. var raw = "0A 00 AC 12 34 56 78 90 87 65 43 CC".ToBytes();
  279. var parser = new Parser();
  280. var actual = parser.Deserialize(raw) as QueryTotalCashResponse;
  281. Assert.AreEqual(true, actual != null);
  282. Assert.AreEqual(0x5A, actual.NzlNo);
  283. Assert.AreEqual(1234567890876543m, actual.RawMoneySum);
  284. Assert.AreEqual(12345678908765.43m, actual.GetMoneySum());
  285. }
  286. [TestMethod]
  287. public void QueryTotalCashResponseTestMethod2()
  288. {
  289. var raw = "0A 00 AC 00 00 56 78 00 87 65 43 CC".ToBytes();
  290. var parser = new Parser();
  291. var actual = parser.Deserialize(raw) as QueryTotalCashResponse;
  292. Assert.AreEqual(true, actual != null);
  293. Assert.AreEqual(0x5A, actual.NzlNo);
  294. Assert.AreEqual(567800876543m, actual.RawMoneySum);
  295. Assert.AreEqual(5678008765.43m, actual.GetMoneySum());
  296. }
  297. [TestMethod]
  298. public void QueryTotalCashResponseTestMethod3()
  299. {
  300. var raw = "0A 00 AC 00 00 56 78 00 87 00 00 CC".ToBytes();
  301. var parser = new Parser();
  302. var actual = parser.Deserialize(raw) as QueryTotalCashResponse;
  303. Assert.AreEqual(true, actual != null);
  304. Assert.AreEqual(0x5A, actual.NzlNo);
  305. Assert.AreEqual(567800870000m, actual.RawMoneySum);
  306. Assert.AreEqual(5678008700m, actual.GetMoneySum());
  307. }
  308. [TestMethod]
  309. public void QueryTotalLiterResponseTestMethod1()
  310. {
  311. var raw = "0A 00 AD 12 34 56 78 90 87 65 43 CC".ToBytes();
  312. var parser = new Parser();
  313. var actual = parser.Deserialize(raw) as QueryTotalLiterResponse;
  314. Assert.AreEqual(true, actual != null);
  315. Assert.AreEqual(0x5A, actual.NzlNo);
  316. Assert.AreEqual(1234567890876543m, actual.RawLiterSum);
  317. Assert.AreEqual(12345678908765.43m, actual.GetLiterSum());
  318. }
  319. [TestMethod]
  320. public void QueryTotalLiterResponseTestMethod2()
  321. {
  322. var raw = "0A 00 AD 00 00 56 78 00 87 65 43 CC".ToBytes();
  323. var parser = new Parser();
  324. var actual = parser.Deserialize(raw) as QueryTotalLiterResponse;
  325. Assert.AreEqual(true, actual != null);
  326. Assert.AreEqual(0x5A, actual.NzlNo);
  327. Assert.AreEqual(567800876543m, actual.RawLiterSum);
  328. Assert.AreEqual(5678008765.43m, actual.GetLiterSum());
  329. }
  330. [TestMethod]
  331. public void QueryTotalLiterResponseTestMethod3()
  332. {
  333. var raw = "0A 00 AD 00 00 56 78 00 87 00 00 CC".ToBytes();
  334. var parser = new Parser();
  335. var actual = parser.Deserialize(raw) as QueryTotalLiterResponse;
  336. Assert.AreEqual(true, actual != null);
  337. Assert.AreEqual(0x5A, actual.NzlNo);
  338. Assert.AreEqual(567800870000m, actual.RawLiterSum);
  339. Assert.AreEqual(5678008700m, actual.GetLiterSum());
  340. }
  341. [TestMethod]
  342. public void SimpleGenericResponseTestMethod3()
  343. {
  344. var raw = "5A 00 A2 00 00 00 00 00 00 00 E1 7D".ToBytes();
  345. var parser = new Parser();
  346. var actual = parser.Deserialize(raw) as SimpleGenericResponse;
  347. Assert.AreEqual(true, actual != null);
  348. Assert.AreEqual(0x5A, actual.NzlNo);
  349. Assert.AreEqual(CommandEnum.FuelingWithFixedCash, actual.Command);
  350. }
  351. [TestMethod]
  352. public void ShouldCutTest1()
  353. {
  354. var cutter = new ZhongSheng_NonIC_Pump.MessageCutter();
  355. int onMsgCutCalledTimes = 0;
  356. int onInvalidMsgCalledTimes = 0;
  357. List<byte[]> messages = new List<byte[]>();
  358. cutter.OnMessageCut += (s, a) =>
  359. {
  360. onMsgCutCalledTimes++;
  361. messages.Add(cutter.Message);
  362. };
  363. cutter.OnInvalidMessageRead += (e, f) =>
  364. {
  365. onInvalidMsgCalledTimes++;
  366. };
  367. var rawValid = "5A 00 01 00 00 00 00 00 00 00 61 9E".ToBytes();
  368. cutter.Feed(rawValid);
  369. Assert.AreEqual(true, onMsgCutCalledTimes == 1);
  370. Assert.AreEqual(true, messages.Count == 1);
  371. Assert.AreEqual(true, ValueEquals(messages[0], rawValid));
  372. Assert.AreEqual(true, onInvalidMsgCalledTimes == 0);
  373. }
  374. [TestMethod]
  375. public void ShouldCutTest2()
  376. {
  377. var cutter = new ZhongSheng_NonIC_Pump.MessageCutter();
  378. int onMsgCutCalledTimes = 0;
  379. int onInvalidMsgCalledTimes = 0;
  380. List<byte[]> messages = new List<byte[]>();
  381. cutter.OnMessageCut += (s, a) =>
  382. {
  383. onMsgCutCalledTimes++;
  384. messages.Add(cutter.Message);
  385. };
  386. cutter.OnInvalidMessageRead += (e, f) =>
  387. {
  388. onInvalidMsgCalledTimes++;
  389. };
  390. var rawValid = "5A 00 A2 00 00 00 00 00 00 00 e1 7d 5A 00 01 00 00 00 00 00 00 00 61 9E".ToBytes();
  391. cutter.Feed(rawValid);
  392. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  393. Assert.AreEqual(true, messages.Count == 2);
  394. Assert.AreEqual(true, ValueEquals(messages[0], rawValid.Take(12)));
  395. Assert.AreEqual(true, ValueEquals(messages[1], rawValid.Skip(12).Take(12)));
  396. Assert.AreEqual(true, onInvalidMsgCalledTimes == 0);
  397. }
  398. [TestMethod]
  399. public void ShouldCutTest3()
  400. {
  401. var cutter = new ZhongSheng_NonIC_Pump.MessageCutter();
  402. int onMsgCutCalledTimes = 0;
  403. int onInvalidMsgCalledTimes = 0;
  404. List<byte[]> messages = new List<byte[]>();
  405. cutter.OnMessageCut += (s, a) =>
  406. {
  407. onMsgCutCalledTimes++;
  408. messages.Add(cutter.Message);
  409. };
  410. cutter.OnInvalidMessageRead += (e, f) =>
  411. {
  412. onInvalidMsgCalledTimes++;
  413. };
  414. var rawValid = "5A 00 A2 00 00 00 00 00 00 00 e1 7d FF 5A 00 01 00 00 00 00 00 00 00 61 9E".ToBytes();
  415. cutter.Feed(rawValid);
  416. Assert.AreEqual(true, onMsgCutCalledTimes == 2);
  417. Assert.AreEqual(true, messages.Count == 2);
  418. Assert.AreEqual(true, ValueEquals(messages[0], rawValid.Take(12)));
  419. Assert.AreEqual(true, ValueEquals(messages[1], rawValid.Skip(13).Take(12)));
  420. Assert.AreEqual(true, onInvalidMsgCalledTimes == 1);
  421. }
  422. [TestMethod]
  423. public void ShouldCutTest4()
  424. {
  425. var cutter = new ZhongSheng_NonIC_Pump.MessageCutter();
  426. int onMsgCutCalledTimes = 0;
  427. int onInvalidMsgCalledTimes = 0;
  428. List<byte[]> bytesMessages = new List<byte[]>();
  429. List<MessageBase> messages = new List<MessageBase>();
  430. cutter.OnMessageCut += (s, a) =>
  431. {
  432. onMsgCutCalledTimes++;
  433. bytesMessages.Add(cutter.Message);
  434. var parser = new Parser();
  435. var message = parser.Deserialize(cutter.Message) as MessageBase;
  436. messages.Add(message);
  437. };
  438. cutter.OnInvalidMessageRead += (e, f) =>
  439. {
  440. onInvalidMsgCalledTimes++;
  441. };
  442. var rawValid = "5A 00 A2 00 00 00 00 00 00 00 e1 7d FF 5A 00 01 00 00 00 00 00 00 00 61 9E".ToBytes();
  443. cutter.Feed(rawValid);
  444. }
  445. }
  446. }