From c8b38d6bca01b15270ae08247ba4b41b79131ab2 Mon Sep 17 00:00:00 2001 From: Hamid Musavi Date: Tue, 12 Mar 2019 15:06:34 -0400 Subject: [PATCH] ODE-1158 Added more unit tests coverage --- .../dot/its/jpo/ode/model/OdeLogMetadata.java | 28 +++++ .../us/dot/its/jpo/ode/model/RxSource.java | 3 +- .../plugin/j2735/builders/HeadingBuilder.java | 3 +- .../ode/importer/parser/LogFileParser.java | 31 +---- .../ode/importer/parser/RxMsgFileParser.java | 6 +- .../importer/parser/LogFileParserTest.java | 108 +++++++++++++++++- .../importer/parser/RxMsgFileParserTest.java | 19 +++ 7 files changed, 163 insertions(+), 35 deletions(-) diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeLogMetadata.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeLogMetadata.java index 7aabb1215..af452c529 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeLogMetadata.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeLogMetadata.java @@ -83,6 +83,34 @@ public OdeLogMetadata(String payloadType, SerialId serialId, String receivedAt) super(payloadType, serialId, receivedAt); } + public void calculateGeneratedBy() { + ReceivedMessageDetails receivedMessageDetails = getReceivedMessageDetails(); + if (receivedMessageDetails != null) { + if (receivedMessageDetails.getRxSource() != null) { + switch (receivedMessageDetails.getRxSource()) { + case RSU: + setRecordGeneratedBy(GeneratedBy.RSU); + break; + case RV: + case NA: + setRecordGeneratedBy(GeneratedBy.OBU); + break; + case SAT: + setRecordGeneratedBy(GeneratedBy.TMC_VIA_SAT); + break; + case SNMP: + setRecordGeneratedBy(GeneratedBy.TMC_VIA_SNMP); + break; + default: + setRecordGeneratedBy(GeneratedBy.UNKNOWN); + break; + } + } + } else { + setRecordGeneratedBy(GeneratedBy.OBU); + } + } + public String getLogFileName() { return logFileName; } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/RxSource.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/RxSource.java index 9e8ab2f7b..fede10008 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/RxSource.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/RxSource.java @@ -20,5 +20,6 @@ public enum RxSource { SAT, // XM satelite RV, // for BSM rx SNMP,// for SRM payload from backend/ODE - NA, UNKNOWN + NA, // Not applicable (for example, Distress Notification or Driver Allert + UNKNOWN } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/HeadingBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/HeadingBuilder.java index 1ad028fb3..8ab998b22 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/HeadingBuilder.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/HeadingBuilder.java @@ -32,7 +32,8 @@ public static BigDecimal genericHeading(JsonNode heading) { } public static BigDecimal genericHeading(long heading) { - return AngleBuilder.longToDecimal(heading).setScale(4, RoundingMode.HALF_DOWN); + BigDecimal angle = AngleBuilder.longToDecimal(heading); + return (angle == null ? null : angle.setScale(4, RoundingMode.HALF_DOWN)); } public static BigDecimal genericCoarseHeading(JsonNode coarseHeading) { diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/LogFileParser.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/LogFileParser.java index 916de7972..52d327f87 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/LogFileParser.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/LogFileParser.java @@ -28,7 +28,6 @@ import us.dot.its.jpo.ode.model.OdeLogMetadata; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; import us.dot.its.jpo.ode.model.OdeLogMsgMetadataLocation; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; import us.dot.its.jpo.ode.model.ReceivedMessageDetails; import us.dot.its.jpo.ode.model.RxSource; import us.dot.its.jpo.ode.plugin.j2735.builders.ElevationBuilder; @@ -227,35 +226,9 @@ public void updateMetadata(OdeLogMetadata metadata) { odeBsmMetadata.setBsmSource(bsmSource); } - ReceivedMessageDetails receivedMessageDetails = metadata.getReceivedMessageDetails(); - if (receivedMessageDetails != null) { - if (receivedMessageDetails.getRxSource() != null) { - switch (receivedMessageDetails.getRxSource()) { - case RSU: - metadata.setRecordGeneratedBy(GeneratedBy.RSU); - break; - case RV: - case NA: - metadata.setRecordGeneratedBy(GeneratedBy.OBU); - break; - case SAT: - metadata.setRecordGeneratedBy(GeneratedBy.TMC_VIA_SAT); - break; - case SNMP: - metadata.setRecordGeneratedBy(GeneratedBy.TMC_VIA_SNMP); - break; - default: - metadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); - break; - } - } else { - receivedMessageDetails.setRxSource(RxSource.UNKNOWN); - } - } else { - metadata.setRecordGeneratedBy(GeneratedBy.OBU); - } + metadata.calculateGeneratedBy(); } - + private static ReceivedMessageDetails buildReceivedMessageDetails(LogFileParser parser) { LocationParser locationParser = parser.getLocationParser(); ReceivedMessageDetails rxMsgDetails = null; diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParser.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParser.java index 4aeace429..5eeaf41c3 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParser.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParser.java @@ -54,7 +54,11 @@ public ParserStatus parseFile(BufferedInputStream bis, String fileName) throws F status = parseStep(bis, RX_SOURCE_LENGTH); if (status != ParserStatus.COMPLETE) return status; - setRxSource(RxSource.values()[readBuffer[0]]); + try { + setRxSource(RxSource.values()[readBuffer[0]]); + } catch (Exception e) { + setRxSource(RxSource.UNKNOWN); + } } if (getStep() == 2) { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/LogFileParserTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/LogFileParserTest.java index 7651161ff..29149c650 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/LogFileParserTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/LogFileParserTest.java @@ -1,6 +1,7 @@ package us.dot.its.jpo.ode.importer.parser; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -236,6 +237,38 @@ public void testUpdateMetadata_rxMsgBsm() throws FileParserException { assertEquals(BsmSource.RV, metadata.getBsmSource()); } + @Test + public void testUpdateMetadata_rxMsgTimRSU() throws FileParserException { + byte[] buf = new byte[] { + (byte)0x00, //1. RxSource = RSU + (byte)0x6f, (byte)0x75, (byte)0x4d, (byte)0x19, //2.0 latitude + (byte)0xa4, (byte)0xa1, (byte)0x5c, (byte)0xce, //2.1 longitude + (byte)0x67, (byte)0x06, (byte)0x00, (byte)0x00, //2.3 elevation + (byte)0x04, (byte)0x00, //2.3 speed + (byte)0x09, (byte)0x27, //2.4 heading + (byte)0xa9, (byte)0x2c, (byte)0xe2, (byte)0x5a, //3. utcTimeInSec + (byte)0x8f, (byte)0x01, //4. mSec + (byte)0x00, //5. securityResultCode + (byte)0x06, (byte)0x00, //6.0 payloadLength + //6.1 payload + (byte)0x03, (byte)0x81, (byte)0x00, (byte)0x40, (byte)0x03, (byte)0x80 + }; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + RecordType recordType = RecordType.rxMsg; + String filename = recordType.name() + GZ; + RxMsgFileParser parser = (RxMsgFileParser) LogFileParser.factory(filename); + ParserStatus status = parser.parseFile(bis, filename); + + OdeLogMetadata metadata = new OdeLogMetadata(); + parser.updateMetadata(metadata); + + assertEquals(ParserStatus.COMPLETE, status); + assertEquals(GeneratedBy.RSU, metadata.getRecordGeneratedBy()); + assertEquals(RxSource.RSU, metadata.getReceivedMessageDetails().getRxSource()); + } + @Test public void testUpdateMetadata_rxMsgTimSAT() throws FileParserException { byte[] buf = new byte[] { @@ -303,7 +336,7 @@ public void testUpdateMetadata_rxMsgTimSNMP() throws FileParserException { @Test public void testUpdateMetadata_rxMsgTimUnknownRxSource() throws FileParserException { byte[] buf = new byte[] { - (byte)0x04, //1. RxSource = unknown value + (byte)0x09, //1. RxSource = unknown value (byte)0x6f, (byte)0x75, (byte)0x4d, (byte)0x19, //2.0 latitude (byte)0xa4, (byte)0xa1, (byte)0x5c, (byte)0xce, //2.1 longitude (byte)0x67, (byte)0x06, (byte)0x00, (byte)0x00, //2.3 elevation @@ -328,8 +361,77 @@ public void testUpdateMetadata_rxMsgTimUnknownRxSource() throws FileParserExcept parser.updateMetadata(metadata); assertEquals(ParserStatus.COMPLETE, status); - assertEquals(GeneratedBy.OBU, metadata.getRecordGeneratedBy()); - assertEquals(RxSource.NA, metadata.getReceivedMessageDetails().getRxSource()); + assertEquals(GeneratedBy.UNKNOWN, metadata.getRecordGeneratedBy()); + assertEquals(RxSource.UNKNOWN, metadata.getReceivedMessageDetails().getRxSource()); + } + + @Test + public void testUpdateMetadata_rxMsgTimNullLocations() throws FileParserException { + byte[] buf = new byte[] { + (byte)0x09, //1. RxSource = unknown value + (byte)0x01, (byte)0xE9, (byte)0xA4, (byte)0x35, //2.0 latitude unavailable + (byte)0x01, (byte)0xD2, (byte)0x49, (byte)0x6B, //2.1 longitude unavailable + (byte)0x00, (byte)0xF0, (byte)0xFF, (byte)0xFF, //2.3 elevation unavailable + (byte)0xFF, (byte)0x1F, //2.3 speed unavailable + (byte)0x80, (byte)0x70, //2.4 heading unavailable + (byte)0xa9, (byte)0x2c, (byte)0xe2, (byte)0x5a, //3. utcTimeInSec + (byte)0x8f, (byte)0x01, //4. mSec + (byte)0x00, //5. securityResultCode + (byte)0x06, (byte)0x00, //6.0 payloadLength + //6.1 payload + (byte)0x03, (byte)0x81, (byte)0x00, (byte)0x40, (byte)0x03, (byte)0x80 + }; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + RecordType recordType = RecordType.rxMsg; + String filename = recordType.name() + GZ; + RxMsgFileParser parser = (RxMsgFileParser) LogFileParser.factory(filename); + ParserStatus status = parser.parseFile(bis, filename); + + OdeLogMetadata metadata = new OdeLogMetadata(); + parser.updateMetadata(metadata); + + assertEquals(ParserStatus.COMPLETE, status); + assertEquals(GeneratedBy.UNKNOWN, metadata.getRecordGeneratedBy()); + assertEquals(RxSource.UNKNOWN, metadata.getReceivedMessageDetails().getRxSource()); + assertNull(metadata.getReceivedMessageDetails().getLocationData().getElevation()); + assertNull(metadata.getReceivedMessageDetails().getLocationData().getHeading()); + assertNull(metadata.getReceivedMessageDetails().getLocationData().getLatitude()); + assertNull(metadata.getReceivedMessageDetails().getLocationData().getLongitude()); + assertNull(metadata.getReceivedMessageDetails().getLocationData().getSpeed()); } + @Test + public void testUpdateMetadata_rxMsgNullReceivedMessageDetails() throws FileParserException { + byte[] buf = new byte[] { + (byte)0x09, //1. RxSource = unknown value + (byte)0x01, (byte)0xE9, (byte)0xA4, (byte)0x35, //2.0 latitude unavailable + (byte)0x01, (byte)0xD2, (byte)0x49, (byte)0x6B, //2.1 longitude unavailable + (byte)0x00, (byte)0xF0, (byte)0xFF, (byte)0xFF, //2.3 elevation unavailable + (byte)0xFF, (byte)0x1F, //2.3 speed unavailable + (byte)0x80, (byte)0x70, //2.4 heading unavailable + (byte)0xa9, (byte)0x2c, (byte)0xe2, (byte)0x5a, //3. utcTimeInSec + (byte)0x8f, (byte)0x01, //4. mSec + (byte)0x00, //5. securityResultCode + (byte)0x06, (byte)0x00, //6.0 payloadLength + //6.1 payload + (byte)0x03, (byte)0x81, (byte)0x00, (byte)0x40, (byte)0x03, (byte)0x80 + }; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + RecordType recordType = RecordType.rxMsg; + String filename = recordType.name() + GZ; + RxMsgFileParser parser = (RxMsgFileParser) LogFileParser.factory(filename); + ParserStatus status = parser.parseFile(bis, filename); + parser.setLocationParser(null); + + OdeLogMetadata metadata = new OdeLogMetadata(); + parser.updateMetadata(metadata); + + assertEquals(ParserStatus.COMPLETE, status); + assertEquals(GeneratedBy.OBU, metadata.getRecordGeneratedBy()); + assertNull(metadata.getReceivedMessageDetails()); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParserTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParserTest.java index 639620c42..b3a67ce4a 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParserTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/parser/RxMsgFileParserTest.java @@ -136,4 +136,23 @@ public void testStep0() { } } + @Test + public void testSetRxSource() { + RxMsgFileParser parser = new RxMsgFileParser(); + + parser.setRxSource(0); + assertEquals(RxSource.RSU, parser.getRxSource()); + parser.setRxSource(1); + assertEquals(RxSource.SAT, parser.getRxSource()); + parser.setRxSource(2); + assertEquals(RxSource.RV, parser.getRxSource()); + parser.setRxSource(3); + assertEquals(RxSource.SNMP, parser.getRxSource()); + parser.setRxSource(4); + assertEquals(RxSource.NA, parser.getRxSource()); + parser.setRxSource(5); + assertEquals(RxSource.UNKNOWN, parser.getRxSource()); + parser.setRxSource(6); + assertEquals(RxSource.UNKNOWN, parser.getRxSource()); + } }