123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- using HengShan_Pump_TQC_IFSF.MessageEntity.Incoming;
- using Microsoft.CodeAnalysis.CSharp.Syntax;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using Edge.Core.Parser.BinaryParser.Util;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using HengShan_Pump_TQC_IFSF.MessageEntity;
- using System.Text;
- using Edge.Core.Parser.BinaryParser.MessageEntity;
- using HengShan_Pump_TQC_IFSF;
- using static HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingTrxDb_TransactionBufferStatus_Event;
- namespace HengShan_Pump_TQC_IFSF_Test
- {
- [TestClass]
- public class UnitTest1
- {
- [TestMethod]
- public void DeserializeTestMethod1()
- {
- List<MessageTemplateBase> continueParseStack = new List<MessageTemplateBase>();
- HengShan_Pump_TQC_IFSF.Parser p = new HengShan_Pump_TQC_IFSF.Parser();
- p.Deserialized += (s, a) =>
- {
- if (a.Extra != null && a.Extra.Length > 0)
- {
- continueParseStack.Add(a.To);
- p.Deserialize(a.Extra);
- }
- else
- {
- continueParseStack.Add(a.To);
- }
- };
- var m = p.Deserialize("02 01 01 05 00 23 00 11 01 01 02 01 01 03 01 01 04 01 01 05 01 01 0B 01 00".ToBytes());
- Assert.AreEqual(true, continueParseStack.Count > 1);
- }
- [TestMethod]
- public void PetroChinaMessageTemplateLookupTestMethod1()
- {
- HengShan_Pump_TQC_IFSF.Parser p = new HengShan_Pump_TQC_IFSF.Parser();
- //加油点状态数据
- var fp_state_raw_msg = "02 01 01 01 00 80 00 18 01 21 64 00 14 01 04 15 01 01 16 02 00 00 50 08 00 00 00 00 00 00 00 00".ToBytes();
- var fp_state_msg = p.Deserialize(fp_state_raw_msg) as HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpStatus_Event;
- Assert.IsNotNull(fp_state_msg);
- var fp_state = fp_state_msg.FuelPointState;
- var removed_nozzle_indexes = fp_state_msg.RemovedNozzleIndexes;
- //实时加油数据
- List<MessageTemplateBase> continueParseStack = new List<MessageTemplateBase>();
- p = new HengShan_Pump_TQC_IFSF.Parser();
- p.Deserialized += (s, a) =>
- {
- if (a.Extra != null && a.Extra.Length > 0)
- {
- continueParseStack.Add(a.To);
- p.Deserialize(a.Extra);
- }
- else
- {
- continueParseStack.Add(a.To);
- }
- };
- var trx_running_raw_msg = "02 01 01 01 00 80 00 18 01 21 64 00 14 01 06 15 01 01 16 02 00 00 50 08 00 00 00 00 00 00 00 00 02 01 01 01 00 80 00 18 01 21 64 00 14 01 08 15 01 01 16 02 00 00 50 08 00 00 00 00 00 00 00 0002 01 01 01 00 80 00 12 01 21 66 00 22 05 06 00 00 09 29 23 05 06 00 00 01 43".ToBytes();
- _ = p.Deserialize(trx_running_raw_msg);
- Assert.AreEqual(3, continueParseStack.Count);
- Assert.IsTrue(continueParseStack[0] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpStatus_Event);
- Assert.IsTrue(continueParseStack[1] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpStatus_Event);
- Assert.IsTrue(continueParseStack[2] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpRunningTransaction_Event);
- //油机主动上传包含交易号0855 加油量 加油金额等数据
- continueParseStack = new List<MessageTemplateBase>();
- p = new HengShan_Pump_TQC_IFSF.Parser();
- p.Deserialized += (s, a) =>
- {
- if (a.Extra != null && a.Extra.Length > 0)
- {
- continueParseStack.Add(a.To);
- p.Deserialize(a.Extra);
- }
- else
- {
- continueParseStack.Add(a.To);
- }
- };
- var trx_done_event_raw_msg = "02 01 01 01 00 80 00 12 01 21 66 00 22 05 06 00 00 23 40 23 05 06 00 00 03 60 02 01 01 01 00 80 00 12 01 21 66 00 22 05 06 00 00 37 57 23 05 06 00 00 05 7802 01 01 01 00 80 00 18 01 21 64 00 14 01 03 15 01 00 16 02 00 00 50 08 00 00 00 00 00 00 00 0002 01 01 01 00 80 00 20 04 21 21 08 55 64 00 01 02 08 55 15 01 02 14 02 00 00 05 05 06 00 00 40 62 06 05 06 00 00 06 25".ToBytes();
- _ = p.Deserialize(trx_done_event_raw_msg);
- Assert.AreEqual(4, continueParseStack.Count);
- Assert.IsTrue(continueParseStack[0] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpRunningTransaction_Event);
- Assert.IsTrue(continueParseStack[1] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpRunningTransaction_Event);
- Assert.IsTrue(continueParseStack[2] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingPointDb_FpStatus_Event);
- Assert.IsTrue(continueParseStack[3] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingTrxDb_TransactionBufferStatus_Event);
- //油机对FCC主动查询交易的回复
- var trx_done_response_raw_msg = "02 01 01 01 00 3D 00 34 04 21 21 08 55 05 05 06 00 00 40 62 06 05 06 00 00 06 25 07 04 04 00 06 50 08 01 01 0A 04 00 00 00 32 CC 07 0A 00 00 38 58 43 39 CD 07 0A 00 00 38 58 49 64".ToBytes();
- continueParseStack = new List<MessageTemplateBase>();
- p = new HengShan_Pump_TQC_IFSF.Parser();
- p.Deserialized += (s, a) =>
- {
- if (a.Extra != null && a.Extra.Length > 0)
- {
- continueParseStack.Add(a.To);
- p.Deserialize(a.Extra);
- }
- else
- {
- continueParseStack.Add(a.To);
- }
- };
- _ = p.Deserialize(trx_done_response_raw_msg);
- Assert.AreEqual(1, continueParseStack.Count);
- Assert.IsTrue(continueParseStack[0] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingTrxDb_TransactionBufferStatus_Answer);
- var answer = continueParseStack[0] as HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingTrxDb_TransactionBufferStatus_Answer;
- Assert.IsNotNull(answer.Price);
- Assert.AreEqual(1, answer.LogicalNozzleId);
- Assert.AreEqual(null, answer.State);
- Assert.AreEqual(385843.39, answer.VolumeTotalizerBeforeTrx);
- Assert.AreEqual(385849.64, answer.VolumeTotalizerAfterTrx);
- //0x02 01 01 01 00 60 00 47 04 21 51 00 20 64 00 04 01 02 05 05 06 00 00 09 13 06 05 06 00 00 00 83 07 04 04 00 11 01 08 01 03 09 09 00 00 00 00 00 00 00 00 00 0A 04 00 00 00 01 CC 07 0A 00 01 24 20 83 64 CD 07 0A 00 01 24 20 84 47 0E 01 03
- //油机对FCC主动查询交易的回复
- var unknown_raw_msg = "02 01 01 01 00 60 00 47 04 21 51 00 20 64 00 04 01 02 05 05 06 00 00 09 13 06 05 06 00 00 00 83 07 04 04 00 11 01 08 01 03 09 09 00 00 00 00 00 00 00 00 00 0A 04 00 00 00 01 CC 07 0A 00 01 24 20 83 64 CD 07 0A 00 01 24 20 84 47 0E 01 03".ToBytes();
- continueParseStack = new List<MessageTemplateBase>();
- p = new HengShan_Pump_TQC_IFSF.Parser();
- p.Deserialized += (s, a) =>
- {
- if (a.Extra != null && a.Extra.Length > 0)
- {
- continueParseStack.Add(a.To);
- p.Deserialize(a.Extra);
- }
- else
- {
- continueParseStack.Add(a.To);
- }
- };
- _ = p.Deserialize(unknown_raw_msg);
- Assert.AreEqual(1, continueParseStack.Count);
- Assert.IsTrue(continueParseStack[0] is HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingTrxDb_TransactionBufferStatus_Answer);
- var __ = continueParseStack[0] as HengShan_Pump_TQC_IFSF.MessageEntity.Incoming.FuellingTrxDb_TransactionBufferStatus_Answer;
- Assert.IsNotNull(answer.Price);
- Assert.AreEqual(1, answer.LogicalNozzleId);
- Assert.AreEqual(TransactionState.PAYABLE, answer.State);
- Assert.AreEqual(385843.39, answer.VolumeTotalizerBeforeTrx);
- Assert.AreEqual(385849.64, answer.VolumeTotalizerAfterTrx);
- }
- [TestMethod]
- public void TotalizerRoundingTestMethod0()
- {
- var amountElementRaw = new byte[] { 0x00, 0x00, 0x13, 0x60, 0x28, 0x52, };
- var convInt = amountElementRaw.Skip(1).GetBCD();
- var convFloat = (double)convInt;
- var convFinal = convFloat / 100;
- double exp = 136028.52;
- Assert.AreEqual(exp, convFinal);
- }
- [TestMethod]
- public void TotalizerRoundingTestMethod1()
- {
- var amountElementRaw = new byte[] { 0x00, 0x00, 0x13, 0x60, 0x28, 0x54, };
- var convInt = amountElementRaw.Skip(1).GetBCD();
- var convFloat = (double)convInt;
- var convFinal = convFloat / 100;
- double exp = 136028.54;
- Assert.AreEqual(exp, convFinal);
- }
- [TestMethod]
- public void TotalizerRoundingTestMethod2()
- {
- var amountElementRaw = new byte[] { 0x00, 0x00, 0x13, 0x60, 0x28, 0x55, };
- var convInt = amountElementRaw.Skip(1).GetBCD();
- var convFloat = (double)convInt;
- var convFinal = convFloat / 100;
- double exp = 136028.55;
- Assert.AreEqual(exp, convFinal);
- }
- [TestMethod]
- public void TotalizerRoundingTestMethod3()
- {
- var amountElementRaw = new byte[] { 0x00, 0x00, 0x13, 0x60, 0x28, 0x56, };
- var convInt = amountElementRaw.Skip(1).GetBCD();
- var convFloat = (double)convInt;
- var convFinal = convFloat / 100;
- double exp = 136028.56;
- Assert.AreEqual(exp, convFinal);
- }
- [TestMethod]
- public void TotalizerRoundingTestMethod4()
- {
- var amountElementRaw = new byte[] { 0x00, 0x00, 0x13, 0x60, 0x28, 0x59, };
- var convInt = amountElementRaw.Skip(1).GetBCD();
- var convFloat = (double)convInt;
- var convFinal = convFloat / 100;
- double exp = 136028.59;
- Assert.AreEqual(exp, convFinal);
- }
- [TestMethod]
- public void TotalizerRoundingTestMethod5()
- {
- var amountElementRaw = new byte[] { 0x00, 0x00, 0x13, 0x60, 0x28, 0x50, };
- var convInt = amountElementRaw.Skip(1).GetBCD();
- var convFloat = (double)convInt;
- var convFinal = convFloat / 100;
- double exp = 136028.5;
- Assert.AreEqual(exp, convFinal);
- }
- [TestMethod]
- public void TotalizerRoundingInPumpHandlerTestMethod1()
- {
- double rawDeviceData = 552897.95;
- var beforeFixConvertedValue = (int)(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289794, beforeFixConvertedValue);
- var convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289795, convertedValue);
- rawDeviceData = 552897.96;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289796, convertedValue);
- rawDeviceData = 552897.97;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289797, convertedValue);
- rawDeviceData = 552897.98;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289798, convertedValue);
- rawDeviceData = 552897.99;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289799, convertedValue);
- rawDeviceData = 552897.19;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- beforeFixConvertedValue = (int)(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289718, beforeFixConvertedValue);
- Assert.AreEqual(55289719, convertedValue);
- rawDeviceData = 552897.14;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- beforeFixConvertedValue = (int)(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289714, beforeFixConvertedValue);
- Assert.AreEqual(55289714, convertedValue);
- rawDeviceData = 552897.44;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- beforeFixConvertedValue = (int)(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289744, beforeFixConvertedValue);
- Assert.AreEqual(55289744, convertedValue);
- rawDeviceData = 552897.9;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289790, convertedValue);
- rawDeviceData = 552897.90;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289790, convertedValue);
- rawDeviceData = 552897.91;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289791, convertedValue);
- rawDeviceData = 552897.92;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289792, convertedValue);
- rawDeviceData = 552897.93;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289793, convertedValue);
- rawDeviceData = 552897.94;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 2));
- Assert.AreEqual(55289794, convertedValue);
- rawDeviceData = 552897.961;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897961, convertedValue);
- rawDeviceData = 552897.962;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897962, convertedValue);
- rawDeviceData = 552897.964;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897964, convertedValue);
- rawDeviceData = 552897.965;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897965, convertedValue);
- rawDeviceData = 552897.966;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897966, convertedValue);
- rawDeviceData = 552897.968;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897968, convertedValue);
- rawDeviceData = 552897.969;
- convertedValue = Convert.ToInt32(rawDeviceData * Math.Pow(10, 3));
- Assert.AreEqual(552897969, convertedValue);
- }
- [TestMethod]
- public void DeserializeHaoShengIncompatibleIfsfDispenserMessage()
- {
- List<MessageTemplateBase> continueParseStack = new List<MessageTemplateBase>();
- HengShan_Pump_TQC_IFSF.Parser p = new HengShan_Pump_TQC_IFSF.Parser();
- p.Deserialized += (s, a) =>
- {
- if (a.Extra != null && a.Extra.Length > 0)
- {
- continueParseStack.Add(a.To);
- p.Deserialize(a.Extra);
- }
- else
- {
- continueParseStack.Add(a.To);
- }
- };
- // first msg is the furen dit dispenser of not fully valid ifsf message,
- // second msg is the hengshan tqc dispenser fully valid ifsf message.
- var raw = "02 01 01 09 00 23 00 0B 02 21 11 01 01 42 05 00 07 01 00 " +
- " 02 01 01 09 00 23 00 0C 02 21 11 01 01 03 05 01 04 07 01 01";
- var m = p.Deserialize(raw.ToBytes());
- Assert.AreEqual(true, continueParseStack.Count == 2);
- var msg = continueParseStack.First() as LogicalNozzleDb_Nozzle_ProductInfo_PhyId_Answer;
- Assert.AreEqual(true, msg != null);
- Assert.AreEqual(true, msg.LinkedProductSlotId_InProductDbProdcutNoSlot == 0x42);
- Assert.AreEqual(true, msg.PhyscialNozzleId == 0);
- Assert.AreEqual(true, msg.Meter_1_Id == 0);
- msg = continueParseStack.Last() as LogicalNozzleDb_Nozzle_ProductInfo_PhyId_Answer;
- Assert.AreEqual(true, msg != null);
- Assert.AreEqual(true, msg.LinkedProductSlotId_InProductDbProdcutNoSlot == 0x43);
- Assert.AreEqual(true, msg.PhyscialNozzleId == 4);
- Assert.AreEqual(true, msg.Meter_1_Id == 1);
- }
- }
- }
|