using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.VisualStudio.TestTools.UnitTesting; using Edge.Core.Parser.BinaryParser.Util; using WayneChina_IcCardReader_SinoChem; using WayneChina_IcCardReader_SinoChem.MessageEntity; using WayneChina_IcCardReader_SinoChem.MessageEntity.Incoming; using WayneChina_IcCardReader_SinoChem.MessageEntity.Outgoing; namespace Test_WayneChina_IcCardReader_SinoChem { [TestClass] public class ParserTest { public static bool ValueEquals(IEnumerable array1, IEnumerable array2) { if (array1 == null && array2 == null) { return true; } if ((array1 == null) || (array2 == null)) { return false; } if (array1.Count() != array2.Count()) { return false; } if (array1.Equals(array2)) { return true; } else { for (int Index = 0; Index < array1.Count(); Index++) { if (!Equals(array1.ElementAt(Index), array2.ElementAt(Index))) { return false; } } } return true; } WayneChina_IcCardReader_SinoChem.Parser p = new WayneChina_IcCardReader_SinoChem.Parser(1); [TestMethod] public void HeartBeat_Deserialize_TestMethod1() { var fullRaw = new byte[] { 0xFA, 0x15, 0, 1, 0x00, 0x33, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as HeartBeat; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 1); Assert.AreEqual(true, result.SourceAddress == 5); Assert.AreEqual(true, result.MessageLength == 1); } [TestMethod] public void HeartBeat_Deserialize_TestMethod2() { var fullRaw = new byte[] { 0xFA, 0x48, 0, 1, 0x00, 0x33, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as HeartBeat; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 4); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 1); } [TestMethod] public void HeartBeat_Deserialize_TestMethod3() { var fullRaw = new byte[] { 0xFA, 0x48, 0, 1, 0x00, 0x33, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as HeartBeat; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 4); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 1); } [TestMethod] public void HeartBeat_Deserialize_TestMethod4() { var fullRaw = new byte[] { 0xFA, 0x48, 0, 1, 0x00, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as HeartBeat; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 4); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 1); } [TestMethod] public void ACK_Deserialize_TestMethod1() { var fullRaw = new byte[] { 0xFA, 0x48, 0, 1, 0x01, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as ACK; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 4); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 1); } [TestMethod] public void ACK_Deserialize_TestMethod2() { var fullRaw = new byte[] { 0xFA, 0xF8, 0, 1, 0x01, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as ACK; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 0x0F); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 1); } [TestMethod] public void CardReaderStateEvent_Deserialize_TestMethod1() { var fullRaw = new byte[] { 0xFA, 0xF8, 0, 2, 0x02, 0x80, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as CardReaderStateEvent; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 0x0F); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 2); Assert.AreEqual(true, result.State == CardReaderState.PsamError); } [TestMethod] public void CardReaderStateEvent_Deserialize_TestMethod2() { var fullRaw = new byte[] { 0xFA, 0xF8, 0, 2, 0x02, 0x81, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as CardReaderStateEvent; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 0x0F); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 2); Assert.AreEqual(true, result.State == CardReaderState.ReaderError); } [TestMethod] public void CardReaderStateEvent_Deserialize_TestMethod3() { var fullRaw = new byte[] { 0xFA, 0xF8, 0, 2, 0x02, 0x01, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); //var p = new Parser(); var result = p.Deserialize(fullRaw) as CardReaderStateEvent; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 0x0F); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 2); Assert.AreEqual(true, result.State == CardReaderState.CardInserted); } [TestMethod] public void ICCardExternalCheckError_Deserialize_TestMethod1() { var fullRaw = new byte[] { 0xFA, 0xF8, 0, 2, 0x05, 0x03, 0x00, 0x44 }; var crc16 = fullRaw.ComputeChecksumBytesCrc16(); var result = p.Deserialize(fullRaw) as CardExternalCheckErrorRequest; Assert.AreEqual(true, result != null); Assert.AreEqual(true, result.MessageSeqNumber == 0x0F); Assert.AreEqual(true, result.SourceAddress == 8); Assert.AreEqual(true, result.MessageLength == 2); Assert.AreEqual(true, result.ErrorType == ErrorType.ReadCardError); } //[TestMethod] //public void SignDataResponse_Deserialize_TestMethod3() //{ // var fullRaw = new byte[] { 0xFA, 0xF8, 0x00, 0x12, 0x03, 0x01, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x00, 0x44, 0x11, 0x22 }; // var crc16 = fullRaw.ComputeChecksumBytesCrc16(); // //var p = new Parser(); // var result = p.Deserialize(fullRaw) as SignDataResponse; // Assert.AreEqual(true, result != null); // Assert.AreEqual(true, result.MessageSeqNumber == 0x0F); // Assert.AreEqual(true, result.SourceAddress == 8); // Assert.AreEqual(true, result.MessageLength == 12); // Assert.AreEqual(true, result.State == SignDataState.FinishedSuccess); // Assert.AreEqual(true, ValueEquals(new byte[] { 0x00, 0x44, 0x00, 0x44 }, result.MacValue)); // Assert.AreEqual(true, ValueEquals(new byte[] { 0x00, 0x44, 0x00, 0x44, 0x00, 0x44 }, result.TidValue)); //} [TestMethod] public void CloseCardReaderRequest_Serialize_TestMethod1() { var expected = new byte[] { 0xFA, 0x51, 0x00, 0x02, 0x02, 0x00, 0x5D, 0x6C }; var crc16 = expected.ComputeChecksumBytesCrc16(); //var p = new Parser(); var actual = p.Serialize(new CloseCardReaderRequest() { MessageSeqNumber = 5, SourceAddress = 1 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } [TestMethod] public void CloseCardReaderRequest_Serialize_TestMethod2() { var expected = new byte[] { 0xFA, 0xD2, 0x00, 0x02, 0x02, 0x00, 0x18, 0xB2, }; var crc16 = expected.ComputeChecksumBytesCrc16(); //var p = new Parser(); var actual = p.Serialize(new CloseCardReaderRequest() { MessageSeqNumber = 13, SourceAddress = 2 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } [TestMethod] public void OpenCardReaderRequest_Serialize_TestMethod1() { var expected = new byte[] { 0xFA, 0xD2, 0x00, 0x02, 0x02, 0x01, 0xd9, 0x72, }; var crc16 = expected.ComputeChecksumBytesCrc16(); //var p = new Parser(); var actual = p.Serialize(new OpenCardReaderRequest() { MessageSeqNumber = 13, SourceAddress = 2 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } [TestMethod] public void OpenCardReaderRequest_Serialize_TestMethod2() { var expected = new byte[] { 0xFA, 0xFF, 0x00, 0x02, 0x02, 0x01, 0x75, 0x74, }; var crc16 = expected.ComputeChecksumBytesCrc16(); //var p = new Parser(); var actual = p.Serialize(new OpenCardReaderRequest() { MessageSeqNumber = 15, SourceAddress = 15 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } //[TestMethod] //public void DisplayRequest_Serialize_TestMethod1() //{ // var displayStr = "abc"; // var displayStrBytes = ASCIIEncoding.ASCII.GetBytes(displayStr.PadRight(64, ' ')); // var expected = new byte[] { 0xFA, 0xD2, 0x00, 0x67, 0x03, 0x00, 0x09 } // .Concat(displayStrBytes).Concat(new byte[] { 0x3c, 0xb4, }); // var actual = p.Serialize(new DisplayRequest(displayStr, 9) { MessageSeqNumber = 13, SourceAddress = 2 }); // Assert.AreEqual(true, actual != null && actual.Length > 0); // Assert.AreEqual(true, ValueEquals(expected, actual)); //} //[TestMethod] //public void DisplayRequest_Serialize_TestMethod2() //{ // var displayStr = "abcabcabcabcabcabcabcabc"; // var displayStrBytes = ASCIIEncoding.ASCII.GetBytes(displayStr.PadRight(64, ' ')); // var expected = new byte[] { 0xFA, 0xD2, 0x00, 0x67, 0x03, 0x00, 0x09 } // .Concat(displayStrBytes).Concat(new byte[] { 0xfb, 0xe7, }); // var actual = p.Serialize(new DisplayRequest(displayStr, 9) { MessageSeqNumber = 13, SourceAddress = 2 }); // Assert.AreEqual(true, actual != null && actual.Length > 0); // Assert.AreEqual(true, ValueEquals(expected, actual)); //} [TestMethod] public void StartFuelPresetProcessRequest_Serialize_TestMethod1() { var expected = new byte[] { 0xFA, 0xD2, 0x00, 0x02, 0x04, 0x1, 0xda, 0xd2, }; var actual = p.Serialize( new StartFuelPresetProcessRequest(StartFuelPresetProcessReason.CarPlatePaymentIsInProcessing) { MessageSeqNumber = 13, SourceAddress = 2 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } [TestMethod] public void StartFuelPresetProcessRequest_Serialize_TestMethod2() { var expected = new byte[] { 0xFA, 0xD2, 0x00, 0x02, 0x04, 0x02, 0x9a, 0xd3, }; var actual = p.Serialize( new StartFuelPresetProcessRequest(StartFuelPresetProcessReason.PreviousTrxIsDoneAndNeedRevertReaderToIdle) { MessageSeqNumber = 13, SourceAddress = 2 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } [TestMethod] public void SignDataRequest_Serialize_TestMethod1() { string cardNumber = "12345678901234567890"; string carPlate = "浙A98787"; DateTime fuelingTime = DateTime.Parse("2018-10-1 13:22:13"); int fuelAmount = 119; int fuelVolume = 120; int nozzleNumber = 4; var targetSignBytes = cardNumber.PadRight(20, ' ').ToBCD() .Concat(Encoding.GetEncoding("gbk").GetBytes(carPlate)) .Concat(ASCIIEncoding.ASCII.GetBytes(fuelingTime.ToString("yyyyMMddHHmmss")) .Concat(fuelAmount.GetBinBytes(4)) .Concat(fuelVolume.GetBinBytes(4)) .Concat(nozzleNumber.GetBCDBytes(2))); var expected = new byte[] { 0xFA, 0xD2, }.Concat((targetSignBytes.Count() + 1).GetBCDBytes(2)) .Concat(new byte[] { 0x05 }) .Concat(targetSignBytes) .Concat(new byte[] { 0x84, 0xb0 }); var actual = p.Serialize(new SignDataRequest(targetSignBytes.ToArray()) { MessageSeqNumber = 13, SourceAddress = 2 }); Assert.AreEqual(true, actual != null && actual.Length > 0); Assert.AreEqual(true, ValueEquals(expected, actual)); } } }