using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using VeederRoot_ATG_Console.MessageEntity.DispenserInterface.Outgoing; namespace VeederRoot_Test.DispenserInterface { [TestClass] public class Message { 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; } #region StartEventReportRequest [TestMethod] public void StartEventReportRequest_TestMethod1() { byte eventId = 4; byte errorFlag = 12; int secondsDelay = 0; // say Pump with fp id 6 get authorized. byte fpId = 6; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'B' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))); //.Concat(new byte[] { 0x04 }); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StartEventReportRequest(eventId, errorFlag, secondsDelay, fpId); var actual = p.Serialize(request); var asciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, ValueEquals(expect, actual)); } [TestMethod] public void StartEventReportRequest_TestMethod2() { //Example Report 1: B000000012FE0A // Event ID = 0 // Transmission delay = 0 seconds // Selected Fueling Position = 12 string expectAsciiStr = "\u0001B000000012FE0A\u0004"; byte eventId = 0; byte errorFlag = 0; int secondsDelay = 0; byte fpId = 12; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'B' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))); //.Concat(new byte[] { 0x04 }); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StartEventReportRequest(eventId, errorFlag, secondsDelay, fpId); var actual = p.Serialize(request); var actualAsciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, ValueEquals(expect, actual)); Assert.AreEqual(true, actualAsciiStr == expectAsciiStr); } [TestMethod] public void StartEventReportRequest_TestMethod3() { //Example Report 1: B100000501FE06 // Event ID = 1 // Transmission delay = 5 seconds // Selected Fueling Position = 1 string expectAsciiStr = "\u0001B100000501FE06\u0004"; byte eventId = 1; byte errorFlag = 0; int secondsDelay = 5; byte fpId = 1; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'B' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))); //.Concat(new byte[] { 0x04 }); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StartEventReportRequest(eventId, errorFlag, secondsDelay, fpId); var actual = p.Serialize(request); var actualAsciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, ValueEquals(expect, actual)); Assert.AreEqual(true, actualAsciiStr == expectAsciiStr); } #endregion [TestMethod] public void StopEventReportRequest_TestMethod1() { /* * I copied sample data from Global FC logs *22/01/2019-15:23:17.097-0x0000133C-SSF.FC-SSFTankMonitorVeeder::sendBIRMessageNewTransaction-[DEBUG] * -Reporting FP [11] Meter [1] Sale [52.005] Total [796120.09] *22/01/2019-15:23:17.098-0x0000133C-SSF.FC-SSFTankMonitorVeeder::sendBIRMessageNewTransaction-[DEBUG] * -BIR with message [C10000001111796120.090052.005] */ byte eventId = 1; byte errorFlag = 0; int secondsDelay = 0; byte fpId = 11; var fuelInfo = StopEventReportRequest.FuelingInfo.SingleProductDispensed; byte meterId = 1; double cumulativeTotal = 796120.09; double trxTotalVol = 52.005; string expectSubAsciiStr = "C10000001111796120.090052.005"; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'C' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(((int)fuelInfo).ToString())) .Concat(Encoding.ASCII.GetBytes(meterId.ToString())) .Concat(Encoding.ASCII.GetBytes(cumulativeTotal.ToString("0.00").PadLeft(9, '0'))) .Concat(Encoding.ASCII.GetBytes(trxTotalVol.ToString("0.000").PadLeft(8, '0'))); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StopEventReportRequest(eventId, errorFlag, secondsDelay, fpId, fuelInfo, new List>() { new Tuple(meterId, cumulativeTotal, trxTotalVol) }); var actual = p.Serialize(request); var actualAsciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, actualAsciiStr.Contains(expectSubAsciiStr)); Assert.AreEqual(true, ValueEquals(expect, actual)); } [TestMethod] public void StopEventReportRequest_TestMethod2() { /* * I copied sample data from Global FC logs * 22/01/2019-16:06:18.485-0x0000133C-SSF.FC-SSFTankMonitorVeeder::sendBIRMessageNewTransaction- * [DEBUG]-Reporting FP [8] Meter [1] Sale [3.005] Total [157348.08] * 22/01/2019-16:06:18.486-0x0000133C-SSF.FC-SSFTankMonitorVeeder::sendBIRMessageNewTransaction- * [DEBUG]-BIR with message [C60000000811157348.080003.005] */ byte eventId = 6; byte errorFlag = 0; int secondsDelay = 0; byte fpId = 8; var fuelInfo = StopEventReportRequest.FuelingInfo.SingleProductDispensed; byte meterId = 1; double cumulativeTotal = 157348.08; double trxTotalVol = 3.005; string expectSubAsciiStr = "C60000000811157348.080003.005"; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'C' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(((int)fuelInfo).ToString())) .Concat(Encoding.ASCII.GetBytes(meterId.ToString())) .Concat(Encoding.ASCII.GetBytes(cumulativeTotal.ToString("0.00").PadLeft(9, '0'))) .Concat(Encoding.ASCII.GetBytes(trxTotalVol.ToString("0.000").PadLeft(8, '0'))); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StopEventReportRequest(eventId, errorFlag, secondsDelay, fpId, fuelInfo, new List>() { new Tuple(meterId, cumulativeTotal, trxTotalVol) }); var actual = p.Serialize(request); var actualAsciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, actualAsciiStr.Contains(expectSubAsciiStr)); Assert.AreEqual(true, ValueEquals(expect, actual)); } [TestMethod] public void StopEventReportRequest_TestMethod3() { /* * I copied sample data from Global FC logs * 22/01/2019-15:43:39.118-0x0000133C-SSF.FC-SSFTankMonitorVeeder::sendBIRMessageNewTransaction-[DEBUG] * -Reporting FP [9] Meter [1] Sale [51.042] Total [417334.86] * 22/01/2019-15:43:39.119-0x0000133C-SSF.FC-SSFTankMonitorVeeder::sendBIRMessageNewTransaction-[DEBUG] * -BIR with message [C90000000911417334.860051.042] */ byte eventId = 9; byte errorFlag = 0; int secondsDelay = 0; byte fpId = 9; var fuelInfo = StopEventReportRequest.FuelingInfo.SingleProductDispensed; byte meterId = 1; double cumulativeTotal = 417334.86; double trxTotalVol = 51.042; string expectSubAsciiStr = "C90000000911417334.860051.042"; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'C' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(((int)fuelInfo).ToString())) .Concat(Encoding.ASCII.GetBytes(meterId.ToString())) .Concat(Encoding.ASCII.GetBytes(cumulativeTotal.ToString("0.00").PadLeft(9, '0'))) .Concat(Encoding.ASCII.GetBytes(trxTotalVol.ToString("0.000").PadLeft(8, '0'))); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StopEventReportRequest(eventId, errorFlag, secondsDelay, fpId, fuelInfo, new List>() { new Tuple(meterId, cumulativeTotal, trxTotalVol) }); var actual = p.Serialize(request); var actualAsciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, actualAsciiStr.Contains(expectSubAsciiStr)); Assert.AreEqual(true, ValueEquals(expect, actual)); } [TestMethod] public void StopEventReportRequest_TestMethod4() { byte eventId = 9; byte errorFlag = 0; int secondsDelay = 0; byte fpId = 9; byte meterId = 1; double cumulativeTotal = 417334; double trxTotalVol = 51; string expectSubAsciiStr = "C90000000911417334.000051.000"; var p = new VeederRoot_ATG_Console.Parser(); var expectWithoutCheckSum = new byte[] { 0x01 } .Concat(new byte[] { (byte)'C' }) .Concat(Encoding.ASCII.GetBytes(eventId.ToString().PadLeft(1, '0'))) .Concat(Encoding.ASCII.GetBytes(errorFlag.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes(secondsDelay.ToString().PadLeft(4, '0'))) .Concat(Encoding.ASCII.GetBytes(fpId.ToString().PadLeft(2, '0'))) .Concat(Encoding.ASCII.GetBytes("1")) .Concat(Encoding.ASCII.GetBytes(meterId.ToString())) .Concat(Encoding.ASCII.GetBytes(cumulativeTotal.ToString("0.00").PadLeft(9, '0'))) .Concat(Encoding.ASCII.GetBytes(trxTotalVol.ToString("0.000").PadLeft(8, '0'))); var checkSum = p.CaculateCheckSum(expectWithoutCheckSum.ToArray()); var expect = expectWithoutCheckSum .Concat(Encoding.ASCII.GetBytes(checkSum.ToString("X4"))) .Concat(new byte[] { 0x04 }); var request = new StopEventReportRequest(eventId, errorFlag, secondsDelay, fpId, StopEventReportRequest.FuelingInfo.SingleProductDispensed, new List>() { new Tuple(meterId, cumulativeTotal, trxTotalVol) }); var actual = p.Serialize(request); var actualAsciiStr = Encoding.ASCII.GetString(actual); Assert.AreEqual(true, actualAsciiStr.Contains(expectSubAsciiStr)); Assert.AreEqual(true, ValueEquals(expect, actual)); } } }