From 0a994a80f1b3f856320454fe0504eeea436a9d17 Mon Sep 17 00:00:00 2001 From: Marc Wodahl Date: Wed, 29 May 2024 10:00:03 -0600 Subject: [PATCH 01/62] Remove stale websocket code --- .../us/dot/its/jpo/ode/dds/CASClient.java | 243 ------------------ .../us/dot/its/jpo/ode/dds/DdsClient.java | 136 ---------- .../us/dot/its/jpo/ode/dds/DdsDecoder.java | 46 ---- .../us/dot/its/jpo/ode/dds/DdsDepRequest.java | 106 -------- .../jpo/ode/dds/DdsStatusMessageDecoder.java | 145 ----------- .../jpo/ode/dds/DepositResponseDecoder.java | 47 ---- .../its/jpo/ode/dds/StatusMessageHandler.java | 99 ------- .../us/dot/its/jpo/ode/OdeProperties.java | 53 ---- .../jpo/ode/dds/DdsDepositRequestManager.java | 55 ---- .../us/dot/its/jpo/ode/dds/DdsDepositor.java | 119 --------- .../its/jpo/ode/dds/DdsRequestManager.java | 217 ---------------- .../ode/services/asn1/Asn1CommandManager.java | 33 +-- .../services/asn1/Asn1EncodedDataRouter.java | 15 +- 13 files changed, 10 insertions(+), 1304 deletions(-) delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/CASClient.java delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsClient.java delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDecoder.java delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDepRequest.java delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoder.java delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DepositResponseDecoder.java delete mode 100644 jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/StatusMessageHandler.java delete mode 100644 jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManager.java delete mode 100644 jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositor.java delete mode 100644 jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsRequestManager.java diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/CASClient.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/CASClient.java deleted file mode 100644 index 2e5789647..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/CASClient.java +++ /dev/null @@ -1,243 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import java.net.URI; -import java.util.Collections; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.net.ssl.SSLContext; -import javax.ws.rs.core.Response.Status; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.wrapper.HttpClientFactory; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory.HttpClient; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory.HttpException; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory.HttpResponse; - -public class CASClient { - - public static final String JSESSIONID_KEY = "JSESSIONID"; - private static final Logger logger = LoggerFactory - .getLogger(CASClient.class); - - private String ddsCasUrl; - private String ddsCasUsername; - private String ddsCasPassword; - private String body = " body: "; - private String http = "Error closing HTTP client"; - - private HttpClientFactory httpClientFactory; - private String sessionID; - - public String getSessionID() { - return sessionID; - } - - public String getDdsCasUrl() { - return ddsCasUrl; - } - - public String getDdsCasUsername() { - return ddsCasUsername; - } - - public static CASClient configure(SSLContext sslContext, - String ddsCasUrl, - String ddsCasUsername, - String ddsCasPassword - ) throws CASException { - - CASClient casClient = new CASClient(); - try { - - casClient.ddsCasUrl = ddsCasUrl; - casClient.ddsCasUsername = ddsCasUsername; - casClient.ddsCasPassword = ddsCasPassword; - casClient.httpClientFactory = HttpClientFactory.build(sslContext); - } catch (Exception e) { - throw casClient.new CASException(e); - } - return casClient; - } - - public String login(String websocketURL) throws CASException { - - try { - String ticketGrantingTicket = getTicketGrantingTicket(ddsCasUrl, - ddsCasUsername, - ddsCasPassword); - logger.info("Got ticketGrantingTicket {}", ticketGrantingTicket); - - String httpWebsocketURL = - "https" + websocketURL.substring(websocketURL.indexOf(':')); - String ddsHttpWebSocketUrl = - new URI(httpWebsocketURL).toString(); - String serviceTicket = getServiceTicket( - ddsCasUrl, - ticketGrantingTicket, - ddsHttpWebSocketUrl); - logger.info("Got serviceTicket {}", serviceTicket); - - sessionID = getServiceCall(ddsHttpWebSocketUrl, serviceTicket); - logger.info("Successful CAS login with sessionID {}", sessionID); - - return sessionID; - } catch (Exception e) { - throw new CASException(e); - } - } - - private String getTicketGrantingTicket(String server, String username, - String password) throws CASException { - - HttpClient httpClient = httpClientFactory.createHttpClient(); - try { - - ConcurrentHashMap params = new ConcurrentHashMap<>(); - params.put("username", username); - params.put("password", password); - HttpResponse response = httpClient.post(server, null, params, null); - - Status statusCode = response.getStatusCode(); - String responseBody = response.getBody(); - - if (statusCode == Status.CREATED) { // 201 - Matcher matcher = Pattern.compile(".*action=\".*/(.*?)\".*") - .matcher(responseBody); - if (matcher.matches()) { - return matcher.group(1); - } else { - throw new CASException( - "CAS getTicketGrantingTicket failed. No ticket found in body: " - + responseBody); - } - } else { - throw new CASException( - "CAS getTicketGrantingTicket failed. Response code: " - + statusCode + body + responseBody); - } - - } catch (Exception e) { - throw new CASException(e); - } finally { - try { - httpClient.close(); - } catch (HttpException e) { - logger.error(http, e); - } - } - } - - private String getServiceTicket(String server, String ticketGrantingTicket, - String service) throws CASException { - - HttpClient httpClient = httpClientFactory.createHttpClient(); - - try { - - HttpResponse response = httpClient.post( - server + "/" + ticketGrantingTicket, null, - Collections.singletonMap("service", service), null); - - Status statusCode = response.getStatusCode(); - String responseBody = response.getBody(); - - if (statusCode == Status.OK) { // 200 - return responseBody; - } else { - throw new CASException( - "CAS getServiceTicket failed. Response code: " + statusCode - + body + responseBody); - } - - } catch (HttpException e) { - throw new CASException(e); - } finally { - try { - httpClient.close(); - } catch (HttpException e) { - logger.error(http, e); - } - } - } - - private String getServiceCall(String service, String serviceTicket) - throws CASException { - - HttpClient httpClient = httpClientFactory.createHttpClient(); - - try { - - HttpResponse response = httpClient.get(service, null, - Collections.singletonMap("ticket", serviceTicket)); - - Status statusCode = response.getStatusCode(); - String responseBody = response.getBody(); - - if (statusCode == Status.OK || statusCode == Status.NOT_FOUND) { // 200 - // or - // 404 - return getSessionID(httpClient.getCookies()); - } else { - throw new CASException("CAS getServiceCall failed. Response code: " - + statusCode + body + responseBody); - } - - } catch (HttpException e) { - throw new CASException(e); - } finally { - try { - httpClient.close(); - } catch (HttpException e) { - logger.error(http, e); - } - } - } - - private String getSessionID(Map cookies) { - sessionID = ""; - for (Map.Entry c : cookies.entrySet()) { - if (c.getKey().equals(JSESSIONID_KEY)) { - sessionID = c.getValue(); - break; - } - } - return sessionID; - } - - public class CASException extends Exception { - - private static final long serialVersionUID = 3103235434315019560L; - - public CASException(String message) { - super(message); - } - - public CASException(Throwable cause) { - super(cause); - } - - public CASException(String message, Throwable cause) { - super(message, cause); - } - } -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsClient.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsClient.java deleted file mode 100644 index c9250885c..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsClient.java +++ /dev/null @@ -1,136 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import java.io.InputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.net.ssl.SSLContext; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.wrapper.SSLBuilder; -import us.dot.its.jpo.ode.wrapper.SSLBuilder.SSLException; -import us.dot.its.jpo.ode.wrapper.WebSocketEndpoint; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageDecoder; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageHandler; - -public class DdsClient { //NOSONAR - - private static final Logger logger = LoggerFactory - .getLogger(DdsClient.class); - - private URI uri = null; - private InputStream keystoreStream = null; - private SSLContext sslContext = null; - - private CASClient casClient; - - - public DdsClient( - String ddsCasUrl, - String ddsCasUsername, - String ddsCasPassword, - String websocketURL, - String keystoreFile, - String keystorePass) - throws DdsClientException { - - try { - - init(websocketURL, - keystoreFile, - keystorePass); - - casClient = CASClient.configure( - sslContext, - ddsCasUrl, - ddsCasUsername, - ddsCasPassword); - - logger.info("CAS Client created."); - - } catch (Exception e) { - throw new DdsClientException(e); - } - } - - private void init( - String websocketURL, - String keystoreFile, - String keystorePass - ) throws URISyntaxException, SSLException { - if (uri == null) { - uri = new URI(websocketURL); - } - - if (keystoreStream == null && keystoreFile != null) { - keystoreStream = CASClient.class.getClassLoader().getResourceAsStream(keystoreFile ); - } - - if (sslContext == null) { - sslContext = SSLBuilder.buildSSLContext(keystoreStream, keystorePass); - } - - } - - public WebSocketEndpoint login ( - Class> decoderClass, - WebSocketMessageHandler messageHandler) - throws DdsClientException { - - WebSocketEndpoint ddsClient = null; - try { - - casClient.login(uri.toString()); - - Map> cookieHeader = Collections - .singletonMap("Cookie", Collections.singletonMap( - CASClient.JSESSIONID_KEY, casClient.getSessionID())); - - List>> decoders = - new ArrayList<>(); - decoders.add(decoderClass); - - ddsClient = new WebSocketEndpoint<>( - uri, sslContext, null, - cookieHeader, messageHandler, - decoders); - - logger.info("DDS Client created."); - - } catch (Exception e) { - throw new DdsClientException(e); - } - return ddsClient; - } - - public static class DdsClientException extends Exception { - - private static final long serialVersionUID = 1L; - - public DdsClientException(Throwable cause) { - super(cause); - } - - } -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDecoder.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDecoder.java deleted file mode 100644 index 3a28b45fd..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDecoder.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import javax.websocket.DecodeException; -import javax.websocket.EndpointConfig; - -import us.dot.its.jpo.ode.wrapper.WebSocketMessageDecoder; - -public abstract class DdsDecoder implements WebSocketMessageDecoder { - - public static class DdsDecoderException extends Exception { - - private static final long serialVersionUID = -4474047515873708804L; - - public DdsDecoderException(String string) { - super(string); - } - - } - - @Override - public void init(EndpointConfig endpointConfig) { - } - - @Override - public void destroy() { - } - - @Override - public abstract DdsMessage decode(String message) throws DecodeException; - -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDepRequest.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDepRequest.java deleted file mode 100644 index 8eeb712ed..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsDepRequest.java +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import com.fasterxml.jackson.annotation.JsonPropertyOrder; - -/** - * "DEPOSIT: { \"systemDepositName\": \"%s\", \"encodeType\": \"%s\", - * \"encodedMsg\": \"%s\" }" - * - */ -@JsonPropertyOrder({ "systemDepositName", "encodeType", "encodedMsg" }) -public class DdsDepRequest extends DdsRequest { - - private static final long serialVersionUID = 6066887685895268828L; - - private String systemDepositName; - private String encodeType; - private String encodedMsg; - - public String getSystemDepositName() { - return systemDepositName; - } - - public DdsDepRequest setSystemDepositName(String systemDepositName) { - this.systemDepositName = systemDepositName; - return this; - } - - public String getEncodeType() { - return encodeType; - } - - public DdsDepRequest setEncodeType(String encodeType) { - this.encodeType = encodeType; - return this; - } - - public String getEncodedMsg() { - return encodedMsg; - } - - public DdsDepRequest setEncodedMsg(String encodedMsg) { - this.encodedMsg = encodedMsg; - return this; - } - - @Override - public String toString() { - return "DEPOSIT:" + this.toJson(false); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result - + ((encodeType == null) ? 0 : encodeType.hashCode()); - result = prime * result - + ((encodedMsg == null) ? 0 : encodedMsg.hashCode()); - result = prime * result - + ((systemDepositName == null) ? 0 : systemDepositName.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - DdsDepRequest other = (DdsDepRequest) obj; - if (encodeType == null) { - if (other.encodeType != null) - return false; - } else if (!encodeType.equals(other.encodeType)) - return false; - if (encodedMsg == null) { - if (other.encodedMsg != null) - return false; - } else if (!encodedMsg.equals(other.encodedMsg)) - return false; - if (systemDepositName == null) { - if (other.systemDepositName != null) - return false; - } else if (!systemDepositName.equals(other.systemDepositName)) - return false; - return true; - } - -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoder.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoder.java deleted file mode 100644 index 347b9bdda..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoder.java +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import javax.websocket.DecodeException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.node.ObjectNode; - -import us.dot.its.jpo.ode.model.StatusTag; -import us.dot.its.jpo.ode.util.JsonUtils; - -public class DdsStatusMessageDecoder extends DdsDecoder { - - private static final Logger logger = LoggerFactory - .getLogger(DdsStatusMessageDecoder.class); - - private static final int MSG_COMPONENT_TAG_INDEX = 0; - private static final int MSG_COMPONENT_VALUE_INDEX = 1; - private static final int RECORD_COUNT_VALUE_INDEX = 1; - - protected static StatusTag getResponseTag(String tagName) { - StatusTag[] tags = StatusTag.values(); - - for (StatusTag tag : tags) { - if (tagName.equals(tag.name())) { - return tag; - } - } - - return null; - } - - @Override - public DdsMessage decode(String message) throws DecodeException { - logger.debug("Received from DDS: {}", message); - DdsStatusMessage statusMsg = null; - try { - String[] msgComponents = parseFullMsg(message); - StatusTag tag = getResponseTag(msgComponents[MSG_COMPONENT_TAG_INDEX]); - if (tag != null) { - statusMsg = new DdsStatusMessage().setTag(tag); - switch(tag) { - case CONNECTED: - evaluateConnected(statusMsg, msgComponents); - break; - case START: - evaluateStart(statusMsg, msgComponents); - break; - case STOP: - evaluateStop(statusMsg, msgComponents); - break; - case DEPOSITED: - evaluateDeposited(statusMsg, msgComponents); - break; - case ERROR: - logger.error("Received Error message from DDS: {}", message); - break; - default: - logger.error("Received {} message: {}", tag, message); - } - } - } catch (Exception e) { - logger.error("Error decoding ", e); - } - - return statusMsg; - } - - private void evaluateConnected(DdsStatusMessage statusMsg, String[] msgComponents){ - String connectionDetails = msgComponents[MSG_COMPONENT_VALUE_INDEX]; - statusMsg.setConnectionDetails(connectionDetails); - } - - private void evaluateStart(DdsStatusMessage statusMsg, String[] msgComponents){ - String jsonMessage = msgComponents[MSG_COMPONENT_VALUE_INDEX]; - try { - ObjectNode rootNode = JsonUtils.toObjectNode(jsonMessage); - - statusMsg - .setDialog(DdsRequest.Dialog.getById(rootNode.get("dialogID").asInt())) - .setEncoding(rootNode.get("resultEncoding").textValue()); - - } catch (Exception e) { - logger.error("Error processing START tag", e); - } - } - - private void evaluateStop(DdsStatusMessage statusMsg, String[] msgComponents){ - String recordCount = msgComponents[MSG_COMPONENT_VALUE_INDEX]; - String[] rcArray = patseRecordCount(recordCount); - if (rcArray.length == 2) { - try { - if (statusMsg != null) { - statusMsg.setRecordCount(Integer.valueOf(rcArray[RECORD_COUNT_VALUE_INDEX])); - } - } catch (Exception e) { - logger.error("Error processing STOP tag", e); - } - } else { - logger.error("Invalid format for recordCount. " - + "Expecting \"recordCount=n\" but received \"{}\"", - recordCount); - } - } - - private void evaluateDeposited(DdsStatusMessage statusMsg, String[] msgComponents){ - String depositCount = msgComponents[MSG_COMPONENT_VALUE_INDEX]; - try { - if (statusMsg != null) { - statusMsg.setRecordCount(Integer.valueOf(depositCount)); - } - } catch (Exception e) { - logger.error("Error processing DEPOSITED tag", e); - } - } - - public String[] patseRecordCount(String recordCount) { - return recordCount.split("\\s*=\\s*"); - } - - public String[] parseFullMsg(String message) { - return message.split("\\s*:\\s*", 2); - } - - @Override - public boolean willDecode(String message) { - return getResponseTag(parseFullMsg(message)[MSG_COMPONENT_TAG_INDEX]) == StatusTag.START; - } -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DepositResponseDecoder.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DepositResponseDecoder.java deleted file mode 100644 index b78e7789c..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/DepositResponseDecoder.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import javax.websocket.DecodeException; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.eventlog.EventLogger; - -public class DepositResponseDecoder extends DdsStatusMessageDecoder { - - private static final Logger logger = LoggerFactory - .getLogger(DepositResponseDecoder.class); - - @Override - public DdsMessage decode(String message) throws DecodeException { - DdsMessage statusMsg; - statusMsg = super.decode(message); - logger.info("Deposit Response Received"); - logger.debug("Message: {}", message); - EventLogger.logger.info("Deposit Response Received"); - EventLogger.logger.debug("Message: {}", message); - - return statusMsg; - } - - @Override - public boolean willDecode(String message) { - return true; - } - -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/StatusMessageHandler.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/StatusMessageHandler.java deleted file mode 100644 index 51b363aa9..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/dds/StatusMessageHandler.java +++ /dev/null @@ -1,99 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import javax.websocket.CloseReason; -import javax.websocket.EndpointConfig; -import javax.websocket.Session; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.eventlog.EventLogger; -import us.dot.its.jpo.ode.model.OdeControlData; -import us.dot.its.jpo.ode.model.OdeMessage; -import us.dot.its.jpo.ode.model.OdeStatus; -import us.dot.its.jpo.ode.model.OdeStatus.Code; -import us.dot.its.jpo.ode.model.StatusTag; -import us.dot.its.jpo.ode.wrapper.AbstractWebsocketMessageHandler; -import us.dot.its.jpo.ode.wrapper.WebSocketClient; - -public class StatusMessageHandler extends AbstractWebsocketMessageHandler { - - private static final Logger logger = LoggerFactory.getLogger(StatusMessageHandler.class); - - public StatusMessageHandler(WebSocketClient client) { - super(client); - } - - @Override - public void onMessage(DdsStatusMessage statusMsg) { - super.onMessage(statusMsg); - - try { - if (statusMsg != null) { - OdeControlData controlData = new OdeControlData(statusMsg); - handleControlMessage(controlData); - } - } catch (Exception e) { - logger.error("Error handling ControlMessage. ", e); - } - } - - private void handleControlMessage(OdeControlData controlData) { - String infoMsg = controlData.toJson(false); - logger.info(infoMsg); - EventLogger.logger.info(infoMsg); - } - - @Override - public void onOpen(Session session, EndpointConfig config) { - this.getClient().onOpen(session); - OdeControlData controlData = new OdeControlData(StatusTag.OPENED); - controlData.setMessage("WebSocket Connection to DDS Opened."); - - handleControlMessage(controlData); - } - - @Override - public void onClose(Session session, CloseReason reason) { - this.getClient().onClose(reason); - OdeControlData controlData = new OdeControlData(StatusTag.CLOSED); - controlData.setMessage("WebSocket Connection to DDS Closed. Reason: " + reason.getReasonPhrase()); - - handleControlMessage(controlData); - } - - @Override - public void onError(Session session, Throwable t) { - this.getClient().onError(t); - OdeControlData controlData = new OdeControlData(StatusTag.ERROR); - controlData.setMessage("WebSocket Connection to DDS Errored. Message: " + t.getMessage()); - - handleControlMessage(controlData); - } - - @Override - public OdeMessage buildOdeMessage(DdsStatusMessage message) { - OdeStatus status = new OdeStatus(); - - status.setCode(Code.SUCCESS); - status.setMessage(message.toString()); - - return status; - } - -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java index 71066332a..b937646c4 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java @@ -87,20 +87,6 @@ public class OdeProperties implements EnvironmentAware { private String uploadLocationObuLogLog = "bsmlog"; private Integer fileWatcherPeriod = 5; // time to wait between processing inbox directory for new files - /* - * USDOT Situation Data Clearinghouse (SDC)/ Situation Data Warehouse (SDW), - * a.k.a Data Distribution System (DDS) Properties - */ - // DDS WebSocket Properties - private String ddsCasUrl = "https://cas.cvmvp.com/accounts/v1/tickets"; - private String ddsCasUsername = ""; - private String ddsCasPass = ""; - private String ddsWebsocketUrl = "wss://webapp.cvmvp.com/whtools/websocket"; - - // Enable/disable depositing SDW messages over Websocket(true) or REST(false) - @Value("${ode.depositSdwMessagesOverWebsocket:false}") - private boolean depositSdwMessagesOverWebsocket = false; - /* * UDP Properties */ @@ -331,14 +317,6 @@ public String getUploadLocationRoot() { return uploadLocationRoot; } - public String getDdsCasPassword() { - return ddsCasPass; - } - - public void setDdsCasPassword(String ddsCasPass) { - this.ddsCasPass = ddsCasPass; - } - public int getMessagesUntilTrustReestablished() { return messagesUntilTrustReestablished; } @@ -527,30 +505,6 @@ public void setPsmBufferSize(int psmBufferSize) { this.psmBufferSize = psmBufferSize; } - public String getDdsCasUrl() { - return ddsCasUrl; - } - - public void setDdsCasUrl(String ddsCasUrl) { - this.ddsCasUrl = ddsCasUrl; - } - - public String getDdsCasUsername() { - return ddsCasUsername; - } - - public void setDdsCasUsername(String ddsCasUsername) { - this.ddsCasUsername = ddsCasUsername; - } - - public String getDdsWebsocketUrl() { - return ddsWebsocketUrl; - } - - public void setDdsWebsocketUrl(String ddsWebsocketUrl) { - this.ddsWebsocketUrl = ddsWebsocketUrl; - } - public void setUploadLocationRoot(String uploadLocationRoot) { this.uploadLocationRoot = uploadLocationRoot; } @@ -791,13 +745,6 @@ public void setKafkaTopicSdwDepositorInput(String kafkaTopicSdwDepositorInput) { this.kafkaTopicSdwDepositorInput = kafkaTopicSdwDepositorInput; } - public boolean shouldDepositSdwMessagesOverWebsocket() { - return depositSdwMessagesOverWebsocket; - } - - public void setDepositSdwMessagesOverWebsocket(boolean depositSdwMessagesOverWebsocket) { - this.depositSdwMessagesOverWebsocket = depositSdwMessagesOverWebsocket; - } public String getKafkaTopicSignedOdeTimJsonExpiration() { return kafkaTopicSignedOdeTimJsonExpiration; } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManager.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManager.java deleted file mode 100644 index db2400f95..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManager.java +++ /dev/null @@ -1,55 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import java.util.Arrays; - -import org.apache.commons.lang3.StringUtils; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequest.EncodeType; -import us.dot.its.jpo.ode.model.OdeDepRequest; -import us.dot.its.jpo.ode.model.OdeRequest; - -public class DdsDepositRequestManager extends DdsRequestManager { - - public DdsDepositRequestManager(OdeProperties odeProperties) - throws us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException { - super(odeProperties); - } - - @Override - protected DdsRequest buildDdsRequest(OdeRequest odeRequest) throws DdsRequestManagerException { - - DdsDepRequest ddsDepReq = new DdsDepRequest(); - - if (odeRequest instanceof OdeDepRequest) { - OdeDepRequest odeDepReq = (OdeDepRequest) odeRequest; - String sEncodeType = StringUtils.upperCase(odeDepReq.getEncodeType()); - if (sEncodeType != null) { - EncodeType encodeType = DdsRequest.EncodeType.valueOf(sEncodeType); - ddsDepReq.setSystemDepositName(DdsDepositRequestManager.systemName(odeDepReq).getName()) - .setEncodeType(encodeType.name()).setEncodedMsg(odeDepReq.getData()); - } else { - throw new DdsRequestManagerException("Invalid or unsupported EncodeType Deposit: " + sEncodeType - + ". Supported encode types are: " + Arrays.asList(DdsRequest.EncodeType.values())); - } - } else { - throw new DdsRequestManagerException("Invalid Request: " + odeRequest.toJson(odeProperties.getVerboseJson())); - } - return ddsDepReq; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositor.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositor.java deleted file mode 100644 index 0ab521f22..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsDepositor.java +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import javax.websocket.CloseReason; -import javax.websocket.Session; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException; -import us.dot.its.jpo.ode.model.AbstractWebSocketClient; -import us.dot.its.jpo.ode.model.OdeDataType; -import us.dot.its.jpo.ode.model.OdeDepRequest; -import us.dot.its.jpo.ode.model.OdeMessage; -import us.dot.its.jpo.ode.model.OdeRequest.DataSource; -import us.dot.its.jpo.ode.model.OdeRequestType; -import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageHandler; - -public class DdsDepositor extends AbstractWebSocketClient { // NOSONAR - - private Logger logger = LoggerFactory.getLogger(this.getClass()); - - private OdeProperties odeProperties; - private DdsRequestManager requestManager; - private OdeDepRequest depRequest; - - public DdsDepositor(OdeProperties odeProperties) { - super(); - this.odeProperties = odeProperties; - - depRequest = new OdeDepRequest(); - depRequest.setDataSource(DataSource.SDW); - depRequest.setDataType(OdeDataType.AsnHex); - depRequest.setEncodeType("hex"); - depRequest.setRequestType(OdeRequestType.Deposit); - } - - public void deposit(DdsAdvisorySituationData asdMsg) throws DdsRequestManagerException { - deposit(asdMsg.getAsdmDetails().getAdvisoryMessageBytes()); - } - - public void deposit(String encodedAsdMsg) throws DdsRequestManagerException { - - setUpReqMgr(); - - depRequest.setData(encodedAsdMsg); - - this.requestManager.sendRequest(depRequest); - } - - private void setUpReqMgr() throws DdsRequestManagerException { - if (this.requestManager == null) { - this.requestManager = new DdsDepositRequestManager(odeProperties); - } - - if (!this.requestManager.isConnected()) { - this.requestManager.connect((WebSocketMessageHandler) new StatusMessageHandler(this), - DepositResponseDecoder.class); - } - } - - @Override - public void onClose(CloseReason reason) { - try { - this.requestManager.close(); - } catch (DdsRequestManagerException e) { - logger.error("Error closing DDS Request Manager", e); - } - } - - @Override - public void onMessage(OdeMessage message) { - logger.info("Deposit Response: {}", message); - } - - @Override - public void onOpen(Session session) { - logger.info("DDS Message Handler Opened Session {} ", session.getId()); - } - - @Override - public void onError(Throwable t) { - logger.error("Error reported by DDS Message Handler", t); - } - - public OdeDepRequest getDepRequest() { - return depRequest; - } - - @SuppressWarnings("unchecked") - public void setRequestManager(DdsRequestManager requestManager) { - this.requestManager = (DdsRequestManager) requestManager; - } - - public OdeProperties getOdeProperties() { - return odeProperties; - } - - public void setLogger(Logger logger) { - this.logger = logger; - } - -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsRequestManager.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsRequestManager.java deleted file mode 100644 index 74e34f1d9..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/dds/DdsRequestManager.java +++ /dev/null @@ -1,217 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import javax.websocket.Session; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequest.SystemName; -import us.dot.its.jpo.ode.eventlog.EventLogger; -import us.dot.its.jpo.ode.model.OdeRequest; -import us.dot.its.jpo.ode.model.OdeRequest.DataSource; -import us.dot.its.jpo.ode.model.OdeRequestType; -import us.dot.its.jpo.ode.wrapper.WebSocketEndpoint; -import us.dot.its.jpo.ode.wrapper.WebSocketEndpoint.WebSocketException; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageDecoder; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageHandler; - -public abstract class DdsRequestManager { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - - private DdsClient ddsClient; - private Session session; - - private boolean connected = false; - - protected OdeProperties odeProperties; - - private WebSocketEndpoint wsClient; - - public DdsRequestManager(OdeProperties odeProperties) throws DdsRequestManagerException { - - this.odeProperties = odeProperties; - - try { - ddsClient = new DdsClient<>(this.odeProperties.getDdsCasUrl(), this.odeProperties.getDdsCasUsername(), - this.odeProperties.getDdsCasPassword(), this.odeProperties.getDdsWebsocketUrl(), null, null); - - } catch (Exception e) { - throw new DdsRequestManagerException("Error initializing DdsRequestManager", e); - } - } - - @SuppressWarnings("unchecked") - public Session connect(WebSocketMessageHandler messageHandler, Class decoder) - throws DdsRequestManagerException { - - try { - wsClient = ddsClient.login((Class>) decoder, messageHandler); - - session = wsClient.connect(); - - connected = session != null; - - return session; - } catch (Exception e) { - throw new DdsRequestManagerException("Error connecting to DDS", e); - } - } - - public void sendRequest(OdeRequest odeRequest) throws DdsRequestManagerException { - try { - if (session == null) { - logger.info("Connecting to DDS"); - session = wsClient.connect(); - connected = session != null; - } - - if (session != null) { - // Send the new request - DdsRequest ddsRequest = buildDdsRequest(odeRequest); - if (ddsRequest != null) { - String sDdsRequest = ddsRequest.toString(); - - String logMsg = "Sending request to DDS: " + sDdsRequest; - logger.info(logMsg); - EventLogger.logger.info(logMsg); - wsClient.send(sDdsRequest); - } - } else { - throw new DdsRequestManagerException("DDS Client Session is null, probably NOT CONNECTED."); - } - } catch (Exception e) { - try { - wsClient.close(); - connected = false; - } catch (WebSocketException e1) { - logger.error("Error Closing DDS Client.", e1); - } - throw new DdsRequestManagerException("Error sending Data Request: " + e); - } - } - - protected abstract DdsRequest buildDdsRequest(OdeRequest odeRequest) throws DdsRequestManagerException; - - public static SystemName systemName(OdeRequest odeRequest) { - SystemName sysName; - - OdeRequest.DataSource dataSource; - - if (odeRequest.getDataSource() != null) { - dataSource = odeRequest.getDataSource(); - } else { - dataSource = defaultDataSource(odeRequest); - } - - switch (dataSource) { - case SDC: - case DEPOSIT_SDC: - sysName = SystemName.SDC; - break; - case SDW: - case DEPOSIT_SDW: - sysName = SystemName.SDW; - break; - case SDPC: - sysName = SystemName.SDPC; - break; - default: - sysName = defaultSystemName(odeRequest); - } - - return sysName; - } - - public static DataSource defaultDataSource(OdeRequest odeRequest) { - DataSource dataSource; - if (odeRequest.getRequestType() == OdeRequestType.Subscription) - dataSource = DataSource.SDC; - else - dataSource = DataSource.SDW; - return dataSource; - } - - public static SystemName defaultSystemName(OdeRequest odeRequest) { - SystemName sysName; - if (odeRequest.getRequestType() == OdeRequestType.Subscription) - sysName = SystemName.SDC; - else - sysName = SystemName.SDW; - return sysName; - } - - public DdsClient getDdsClient() { - return ddsClient; - } - - public void close() throws DdsRequestManagerException { - connected = false; - session = null; - - if (wsClient != null) { - try { - logger.info("Closing WebSocket Client."); - wsClient.close(); - wsClient = null; - } catch (WebSocketException e) { - throw new DdsRequestManagerException("Error closing DDS Client: ", e); - } - } - } - - public Session getSession() { - return session; - } - - public boolean isConnected() { - return connected; - } - - public WebSocketEndpoint getWsClient() { - return wsClient; - } - - public static class DdsRequestManagerException extends Exception { - private static final long serialVersionUID = 1L; - - public DdsRequestManagerException(String message, Exception e) { - super(message, e); - } - - public DdsRequestManagerException(String message) { - super(message); - } - } - - public OdeProperties getOdeProperties() { - return odeProperties; - } - - public void setDdsClient(DdsClient pDdsClient) { - this.ddsClient = pDdsClient; - } - - public void setWsClient(WebSocketEndpoint pWsClient) { - this.wsClient = pWsClient; - } - - public void setLogger(Logger newLogger) { - this.logger = newLogger; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java index 98ec02c81..1072b87e7 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java @@ -15,14 +15,12 @@ ******************************************************************************/ package us.dot.its.jpo.ode.services.asn1; -import java.io.IOException; import java.text.ParseException; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.snmp4j.event.ResponseEvent; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -34,9 +32,6 @@ import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.context.AppContext; -import us.dot.its.jpo.ode.dds.DdsDepositor; -import us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException; -import us.dot.its.jpo.ode.dds.DdsStatusMessage; import us.dot.its.jpo.ode.eventlog.EventLogger; import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; import us.dot.its.jpo.ode.model.OdeAsdPayload; @@ -80,7 +75,6 @@ public Asn1CommandManagerException(String msg, Exception e) { private MessageProducer stringMessageProducer; private String depositTopic; - private DdsDepositor depositor; private RsuDepositor rsuDepositor; public Asn1CommandManager(OdeProperties odeProperties) { @@ -90,7 +84,6 @@ public Asn1CommandManager(OdeProperties odeProperties) { this.signatureUri = odeProperties.getSecuritySvcsSignatureUri(); try { - this.depositor = new DdsDepositor<>(odeProperties); this.rsuDepositor = new RsuDepositor(odeProperties); this.rsuDepositor.start(); this.stringMessageProducer = MessageProducer.defaultStringMessageProducer(odeProperties.getKafkaBrokers(), @@ -105,27 +98,11 @@ public Asn1CommandManager(OdeProperties odeProperties) { } public void depositToSdw(String depositObj) throws Asn1CommandManagerException { - - if (this.odeProperties.shouldDepositSdwMessagesOverWebsocket()) { - try { - depositor.deposit(depositObj); - - logger.info("Deposited message to SDW directly via websocket"); - logger.debug("Message deposited: {}", depositObj); - EventLogger.logger.info("Deposited message to SDW directly via websocket"); - EventLogger.logger.debug("Message deposited: {}", depositObj); - } catch (DdsRequestManagerException e) { - String msg = "Failed to deposit message to SDW"; - throw new Asn1CommandManagerException(msg, e); - } - } else { - stringMessageProducer.send(this.getDepositTopic(), null, depositObj); - - logger.info("Published message to SDW deposit topic"); - EventLogger.logger.info("Published message to SDW deposit topic"); - logger.debug("Message deposited: {}", depositObj); - EventLogger.logger.debug("Message deposited: {}", depositObj); - } + stringMessageProducer.send(this.getDepositTopic(), null, depositObj); + logger.info("Published message to SDW deposit topic"); + EventLogger.logger.info("Published message to SDW deposit topic"); + logger.debug("Message deposited: {}", depositObj); + EventLogger.logger.debug("Message deposited: {}", depositObj); } public void sendToRsus(ServiceRequest request, String encodedMsg) { diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java index 7b9905393..adc05fedc 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java @@ -44,7 +44,7 @@ public class Asn1EncodedDataRouter extends AbstractSubscriberProcessor Date: Wed, 29 May 2024 10:00:34 -0600 Subject: [PATCH 02/62] Testing update --- .../us/dot/its/jpo/ode/dds/CASClientTest.java | 538 ------------------ .../us/dot/its/jpo/ode/dds/DdsClientTest.java | 146 ----- .../its/jpo/ode/dds/DdsDepRequestTest.java | 130 ----- .../ode/dds/DdsStatusMessageDecoderTest.java | 80 --- .../its/jpo/ode/dds/DdsStatusMessageTest.java | 88 --- .../ode/dds/DepositResponseDecoderTest.java | 62 -- .../jpo/ode/dds/StatusMessageHandlerTest.java | 130 ----- .../us/dot/its/jpo/ode/OdePropertiesTest.java | 8 - .../ode/dds/DdsDepositRequestManagerTest.java | 425 -------------- .../dot/its/jpo/ode/dds/DdsDepositorTest.java | 283 --------- .../jpo/ode/dds/DdsRequestManagerTest.java | 153 ----- .../dot/its/jpo/ode/rsu/RsuDepositorTest.java | 3 +- .../services/asn1/Asn1CommandManagerTest.java | 5 +- 13 files changed, 3 insertions(+), 2048 deletions(-) delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/CASClientTest.java delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsClientTest.java delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsDepRequestTest.java delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoderTest.java delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageTest.java delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DepositResponseDecoderTest.java delete mode 100644 jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/StatusMessageHandlerTest.java delete mode 100644 jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManagerTest.java delete mode 100644 jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositorTest.java delete mode 100644 jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsRequestManagerTest.java diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/CASClientTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/CASClientTest.java deleted file mode 100644 index 5ad45488e..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/CASClientTest.java +++ /dev/null @@ -1,538 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.fail; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.regex.Pattern; - -import javax.net.ssl.SSLContext; -import javax.ws.rs.core.Response.Status; - -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; - -import mockit.Expectations; -import mockit.Mocked; -import mockit.Verifications; -//import mockit.integration.junit4.JMockit; -import us.dot.its.jpo.ode.dds.CASClient.CASException; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory.HttpClient; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory.HttpException; -import us.dot.its.jpo.ode.wrapper.HttpClientFactory.HttpResponse; - -//@RunWith(JMockit.class) -public class CASClientTest { - @Mocked HttpClientFactory mockHttpClientFactory; - @Mocked SSLContext sslContext; - @Mocked private HttpResponse mockResponse; - - /* - * For some very odd reason, just having mocked objects of Pattern and Matcher causes - * surefire plug-in to report the following very odd and strange errors on all - * subsequent test cases. Hence, we have to use real values so we don't have to mock - * which is a better approach anyway. - * -------------------------------------------------------- - T E S T S -------------------------------------------------------- -Running us.dot.its.jpo.ode.asn1.j2735.CVMessageTest -Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.673 sec - in us.dot.its.jpo.ode.asn1.j2735.CVMessageTest -Running us.dot.its.jpo.ode.asn1.j2735.J2735UtilTest -01:20:03.199 [main] INFO us.dot.its.jpo.ode.asn1.j2735.J2735UtilTest - Decoded file VehicleSituationDataServiceRequest.uper into object ServiceRequest -01:20:03.227 [main] INFO us.dot.its.jpo.ode.asn1.j2735.J2735UtilTest - Decoded file VehSitDataMessage.uper into object VehSitDataMessage -2017-05-29 05:20:03.239 UTC -2017-05-29 05:21:03.000 UTC -Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.25 sec - in us.dot.its.jpo.ode.asn1.j2735.J2735UtilTest -Running us.dot.its.jpo.ode.asn1.j2735.msg.ids.ConnectedVehicleMessageLookupTest -Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 sec - in us.dot.its.jpo.ode.asn1.j2735.msg.ids.ConnectedVehicleMessageLookupTest -Running us.dot.its.jpo.ode.dds.CASClientTest -Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.521 sec - in us.dot.its.jpo.ode.dds.CASClientTest -Running us.dot.its.jpo.ode.dds.DdsClientTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.01 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.DdsClientTest -us.dot.its.jpo.ode.dds.DdsClientTest Time elapsed: 0.01 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.dds.DdsDepRequestTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.DdsDepRequestTest -us.dot.its.jpo.ode.dds.DdsDepRequestTest Time elapsed: 0.013 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.dds.DdsRequestTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.002 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.DdsRequestTest -us.dot.its.jpo.ode.dds.DdsRequestTest Time elapsed: 0.002 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.dds.DdsStatusMessageDecoderTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.016 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.DdsStatusMessageDecoderTest -us.dot.its.jpo.ode.dds.DdsStatusMessageDecoderTest Time elapsed: 0.016 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.dds.DdsStatusMessageTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.004 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.DdsStatusMessageTest -us.dot.its.jpo.ode.dds.DdsStatusMessageTest Time elapsed: 0.003 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.dds.DepositResponseDecoderTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.DepositResponseDecoderTest -us.dot.its.jpo.ode.dds.DepositResponseDecoderTest Time elapsed: 0.013 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.dds.StatusMessageHandlerTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.011 sec <<< FAILURE! - in us.dot.its.jpo.ode.dds.StatusMessageHandlerTest -us.dot.its.jpo.ode.dds.StatusMessageHandlerTest Time elapsed: 0.011 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.model.J2735GeoRegionTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.001 sec <<< FAILURE! - in us.dot.its.jpo.ode.model.J2735GeoRegionTest -us.dot.its.jpo.ode.model.J2735GeoRegionTest Time elapsed: 0.001 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.snmp.SNMPTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.01 sec <<< FAILURE! - in us.dot.its.jpo.ode.snmp.SNMPTest -us.dot.its.jpo.ode.snmp.SNMPTest Time elapsed: 0.01 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.util.DateTimeUtilsTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 sec <<< FAILURE! - in us.dot.its.jpo.ode.util.DateTimeUtilsTest -us.dot.its.jpo.ode.util.DateTimeUtilsTest Time elapsed: 0.013 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.util.GeoUtilsTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.004 sec <<< FAILURE! - in us.dot.its.jpo.ode.util.GeoUtilsTest -us.dot.its.jpo.ode.util.GeoUtilsTest Time elapsed: 0.004 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.util.JsonUtilsTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.003 sec <<< FAILURE! - in us.dot.its.jpo.ode.util.JsonUtilsTest -us.dot.its.jpo.ode.util.JsonUtilsTest Time elapsed: 0.003 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.util.OdeGeoUtilsTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.005 sec <<< FAILURE! - in us.dot.its.jpo.ode.util.OdeGeoUtilsTest -us.dot.its.jpo.ode.util.OdeGeoUtilsTest Time elapsed: 0.004 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.wrapper.HttpClientFactoryTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.005 sec <<< FAILURE! - in us.dot.its.jpo.ode.wrapper.HttpClientFactoryTest -us.dot.its.jpo.ode.wrapper.HttpClientFactoryTest Time elapsed: 0.005 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.wrapper.HttpClientTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 sec <<< FAILURE! - in us.dot.its.jpo.ode.wrapper.HttpClientTest -us.dot.its.jpo.ode.wrapper.HttpClientTest Time elapsed: 0.013 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.wrapper.SSLBuilderTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.015 sec <<< FAILURE! - in us.dot.its.jpo.ode.wrapper.SSLBuilderTest -us.dot.its.jpo.ode.wrapper.SSLBuilderTest Time elapsed: 0.015 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Running us.dot.its.jpo.ode.wrapper.WebSocketEndpointTest -Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.013 sec <<< FAILURE! - in us.dot.its.jpo.ode.wrapper.WebSocketEndpointTest -us.dot.its.jpo.ode.wrapper.WebSocketEndpointTest Time elapsed: 0.013 sec <<< ERROR! -java.lang.NullPointerException - at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) - at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) - at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) - -Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 - -Results : - -Tests in error: - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - JUnit4Provider.invoke:161->executeTestSet:238->executeWithRerun:274->execute:365 ╗ NullPointer - -Tests run: 26, Failures: 0, Errors: 17, Skipped: 0 - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD FAILURE -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 7.387 s -[INFO] Finished at: 2017-05-29T01:20:05-04:00 -[INFO] Final Memory: 19M/227M -[INFO] ------------------------------------------------------------------------ -[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project jpo-ode-core: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test failed: There was an error in the forked process -[ERROR] org.apache.maven.surefire.testset.TestSetFailedException: java.lang.NullPointerException -[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.rethrowAnyTestMechanismFailures(JUnit4RunListener.java:209) -[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:169) -[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290) -[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242) -[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121) -[ERROR] Caused by: java.lang.NullPointerException -[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.extractClassName(JUnit4RunListener.java:188) -[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.getClassName(JUnit4RunListener.java:157) -[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.createReportEntry(JUnit4RunListener.java:181) -[ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.testFinished(JUnit4RunListener.java:143) -[ERROR] at org.junit.runner.notification.SynchronizedRunListener.testFinished(SynchronizedRunListener.java:56) -[ERROR] at org.junit.runner.notification.RunNotifier$7.notifyListener(RunNotifier.java:190) -[ERROR] at org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:72) -[ERROR] at org.junit.runner.notification.RunNotifier.fireTestFinished(RunNotifier.java:187) -[ERROR] at org.junit.internal.runners.model.EachTestNotifier.fireTestFinished(EachTestNotifier.java:38) -[ERROR] at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:331) -[ERROR] at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) -[ERROR] at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) -[ERROR] at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) -[ERROR] at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) -[ERROR] at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) -[ERROR] at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) -[ERROR] at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) -[ERROR] at org.junit.runners.ParentRunner.run(ParentRunner.java:363) -[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367) -[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274) -[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) -[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161) -[ERROR] ... 3 more -[ERROR] -[ERROR] -> [Help 1] -[ERROR] -[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. -[ERROR] Re-run Maven using the -X switch to enable full debug logging. -[ERROR] -[ERROR] For more information about the errors and possible solutions, please read the following articles: -[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException - * - */ -// @Mocked private Pattern mockPattern; -// @Mocked private Matcher mockMatcher; - - String casUser = "testUser"; - String casPass = "testPass"; - String casUrl = "testUrl"; - - @Test - public void testConfigure() { - CASClient casClient = null; - try { - casClient = CASClient.configure(sslContext, casUrl, casUser, casPass); - } catch (CASException e) { - fail("Unexpected exception: " + e.toString()); - } - assertEquals(casClient.getDdsCasUrl(), casUrl); - assertEquals(casClient.getDdsCasUsername(), casUser); - } - - @Test - public void testConfigureException() - throws CASException, HttpException { - assertThrows(CASException.class, () -> { - new Expectations() { - { - HttpClientFactory.build((SSLContext) any); - result = new Exception(); - } - }; - CASClient.configure(sslContext, casUrl, casUser, casPass); - }); - } - - @SuppressWarnings("unchecked") - @Test - public void testLogin() throws HttpException { - String websocketURL = "wss://url.websocket.com"; - Map cookies = new ConcurrentHashMap(); - cookies.put("JSESSIONID", "1bif45f-testSessionId"); - new Expectations() { - { - mockResponse.getStatusCode(); - result = Status.CREATED; - result = Status.OK; - result = Status.OK; - - /* - * For some very odd reason, just having mocked objects of Pattern and Matcher causes - * surefire plug-in to report the following very odd and strange errors on all - * subsequent test cases. Hence, we have to use real values so we don't have to mock - * which is a better approach anyway. - */ -// Pattern.compile(anyString); -// result = mockPattern; -// -// mockPattern.matcher(anyString); -// result = mockMatcher; -// -// mockMatcher.matches(); -// result = true; -// mockMatcher.group(1); -// result = "TGT-1234-11112222333334444-cas01"; - - mockResponse.getBody(); - result = "action=\"x/TGT-1234-11112222333334444-cas01\""; - result = "ST-1234-1111222233334444-cas01"; - - mockHttpClientFactory.createHttpClient().getCookies(); - result = cookies; - } - }; - - CASClient casClient; - String sessionId = ""; - try { - casClient = CASClient.configure(sslContext, casUrl, casUser, casPass); - sessionId = casClient.login(websocketURL); - assertEquals(casClient.getSessionID(), sessionId); - assertEquals("1bif45f-testSessionId", sessionId); - } catch (CASException e) { - fail("Unexpected exception: " + e.toString()); - } - - new Verifications() { - { - HttpClient httpClient = mockHttpClientFactory.createHttpClient(); - minTimes = 3; - - httpClient.post(anyString, null, (Map) any, anyString); - minTimes = 2; - - httpClient.get(anyString, null, (Map) any); - minTimes = 1; - - httpClient.close(); - minTimes = 3; - - Pattern.compile(anyString); - } - }; - } - - @Test - public void testLoginExceptionInGetTicket1() throws HttpException, CASException { - assertThrows(CASException.class, () -> { - String websocketURL = "wss://url.websocket.com"; - Map cookies = new ConcurrentHashMap(); - cookies.put("JSESSIONID", "1bif45f-testSessionId"); - new Expectations() { - { - mockResponse.getStatusCode(); - result = Status.BAD_REQUEST; - } - }; - - CASClient casClient; - - casClient = CASClient.configure(sslContext, casUrl, casUser, casPass); - casClient.login(websocketURL); - }); - } - - @Test - public void testLoginExceptionInGetTicket2() throws HttpException, CASException { - assertThrows(CASException.class, () -> { - String websocketURL = "wss://url.websocket.com"; - Map cookies = new ConcurrentHashMap(); - cookies.put("JSESSIONID", "1bif45f-testSessionId"); - new Expectations() { - { - mockResponse.getStatusCode(); - result = Status.CREATED; - - /* - * For some very odd reason, just having mocked objects of Pattern and Matcher causes - * surefire plug-in to report the following very odd and strange errors on all - * subsequent test cases. Hence, we have to use real values so we don't have to mock - * which is a better approach anyway. - */ - // Pattern.compile(anyString); - // result = mockPattern; - // - // mockPattern.matcher(anyString); - // result = mockMatcher; - // - // mockMatcher.matches(); - // result = false; - } - }; - - CASClient casClient; - - casClient = CASClient.configure(sslContext, casUrl, casUser, casPass); - casClient.login(websocketURL); - }); - } - - @Test - public void testLoginExceptionInGetServiceTicket() - throws HttpException, CASException { - assertThrows(CASException.class, () -> { - String websocketURL = "wss://url.websocket.com"; - Map cookies = new ConcurrentHashMap(); - cookies.put("JSESSIONID", "1bif45f-testSessionId"); - new Expectations() { - { - mockResponse.getStatusCode(); - result = Status.CREATED; - result = Status.BAD_REQUEST; - - /* - * For some very odd reason, just having mocked objects of Pattern and Matcher causes - * surefire plug-in to report the following very odd and strange errors on all - * subsequent test cases. Hence, we have to use real values so we don't have to mock - * which is a better approach anyway. - */ - // Pattern.compile(anyString); - // result = mockPattern; - // - // mockPattern.matcher(anyString); - // result = mockMatcher; - // - // mockMatcher.matches(); - // result = true; - // mockMatcher.group(1); - // result = "TGT-1234-11112222333334444-cas01"; - - mockResponse.getBody(); - result = "action=\"x/TGT-1234-11112222333334444-cas01\""; - result = "ST-1234-1111222233334444-cas01"; - } - }; - - CASClient casClient; - - casClient = CASClient.configure(sslContext, casUrl, casUser, casPass); - casClient.login(websocketURL); - }); - } - - - @Test - public void testLoginExceptionInGetServiceCall() - throws HttpException, CASException { - assertThrows(CASException.class, () -> { - String websocketURL = "wss://url.websocket.com"; - Map cookies = new ConcurrentHashMap(); - cookies.put("JSESSIONID", "1bif45f-testSessionId"); - new Expectations() { - { - mockResponse.getStatusCode(); - result = Status.CREATED; - result = Status.OK; - result = Status.BAD_REQUEST; - - /* - * For some very odd reason, just having mocked objects of Pattern and Matcher causes - * surefire plug-in to report the following very odd and strange errors on all - * subsequent test cases. Hence, we have to use real values so we don't have to mock - * which is a better approach anyway. - */ - // Pattern.compile(anyString); - // result = mockPattern; - // - // mockPattern.matcher(anyString); - // result = mockMatcher; - // - // mockMatcher.matches(); - // result = true; - // mockMatcher.group(1); - // result = "TGT-1234-11112222333334444-cas01"; - - mockResponse.getBody(); - result = "action=\"x/TGT-1234-11112222333334444-cas01\""; - result = "ST-1234-1111222233334444-cas01"; - - } - }; - - CASClient casClient = CASClient.configure(sslContext, casUrl, casUser, casPass); - casClient.login(websocketURL); - }); - } -} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsClientTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsClientTest.java deleted file mode 100644 index 066046140..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsClientTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.assertThrows; - -import java.io.InputStream; -import java.net.URI; -import java.util.List; -import java.util.Map; - -import javax.net.ssl.SSLContext; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; - -import mockit.Expectations; -import mockit.Mocked; -import mockit.Verifications; -//import mockit.integration.junit4.JMockit; -import us.dot.its.jpo.ode.dds.CASClient.CASException; -import us.dot.its.jpo.ode.dds.DdsClient.DdsClientException; -import us.dot.its.jpo.ode.wrapper.SSLBuilder; -import us.dot.its.jpo.ode.wrapper.WebSocketEndpoint; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageDecoder; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageHandler; - -//@RunWith(JMockit.class) -public class DdsClientTest { - @Mocked private WebSocketMessageHandler mockMessageHandler; - @Mocked private CASClient mockCasClient; - - String ddsCasUrl = "ddsCasUrl"; - String ddsCasUsername = "ddsCasUsername"; - String ddsCasPassword = "ddsCasPassword"; - String websocketURL = "ws://websocket.org"; - String keystoreFile = "keystoreFile"; - String keystorePass = "keystorePass"; - - @Disabled - @Test - public void testConstructor() { - try { - new Expectations() { - { - CASClient.configure((SSLContext) any, anyString, anyString, anyString); - } - }; - } catch (CASException e1) { - e1.printStackTrace(); - } - - try { - new DdsClient(ddsCasUrl, ddsCasUsername, ddsCasPassword, websocketURL, keystoreFile, keystorePass); - } catch (DdsClientException e) { - e.printStackTrace(); - } - - try { - new Verifications() { - { - new URI("websocketURL"); - minTimes = 1; - CASClient.class.getClassLoader().getResourceAsStream("keystoreFile"); - SSLBuilder.buildSSLContext((InputStream) any, "keystorePass"); - } - }; - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Disabled - @Test - public void testConstructorException() - throws DdsClientException, CASException { - assertThrows(DdsClientException.class, () -> { - new Expectations() { - { - CASClient.configure((SSLContext) any, anyString, anyString, anyString); - result = new Exception(); - } - }; - - new DdsClient(ddsCasUrl, ddsCasUsername, ddsCasPassword, websocketURL, keystoreFile, keystorePass); - }); - } - - @SuppressWarnings("unchecked") - @Disabled - @Test - public void testLogin() { - try { - DdsClient ddsClient = new DdsClient(ddsCasUrl, ddsCasUsername, ddsCasPassword, websocketURL, - keystoreFile, keystorePass); - ddsClient.login(null, mockMessageHandler); - - new Verifications() { - { - mockCasClient.login(anyString); - new WebSocketEndpoint((URI) any, (SSLContext) any, null, - (Map>) any, (WebSocketMessageHandler) any, - (List>>) any); - } - }; - - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Disabled - @SuppressWarnings("unchecked") - @Test - public void testLoginException() - throws DdsClientException, CASException { - assertThrows(DdsClientException.class, () -> { - new Expectations() { - { - mockCasClient.login(anyString); - new WebSocketEndpoint((URI) any, (SSLContext) any, null, (Map>) any, - (WebSocketMessageHandler) any, (List>>) any); - result = new DdsClientException(null); - } - }; - - DdsClient ddsClient = new DdsClient(ddsCasUrl, ddsCasUsername, ddsCasPassword, websocketURL, - keystoreFile, keystorePass); - ddsClient.login(null, mockMessageHandler); - }); - } -} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsDepRequestTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsDepRequestTest.java deleted file mode 100644 index d2d7d3ff5..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsDepRequestTest.java +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.*; -import org.junit.jupiter.api.Test; - -public class DdsDepRequestTest { - - @Test - public void testSystemDepositName() { - DdsDepRequest ddsDepRequest = new DdsDepRequest(); - String depositName = "test deposit name"; - ddsDepRequest.setSystemDepositName(depositName); - assertEquals(depositName, ddsDepRequest.getSystemDepositName()); - } - - @Test - public void testEncodeType() { - DdsDepRequest ddsDepRequest = new DdsDepRequest(); - String encodeType = "hex"; - ddsDepRequest.setEncodeType(encodeType); - assertEquals(encodeType, ddsDepRequest.getEncodeType()); - assertNotEquals("base64", ddsDepRequest.getEncodeType()); - } - - @Test - public void testEncodedMsg() { - DdsDepRequest ddsDepRequest = new DdsDepRequest(); - String encodedMsg = "Sample Encode Msg"; - ddsDepRequest.setEncodedMsg(encodedMsg); - assertEquals(encodedMsg, ddsDepRequest.getEncodedMsg()); - assertNotEquals("invalid encoded msg", ddsDepRequest.getEncodedMsg()); - } - - @Test - public void testToString() { - DdsDepRequest ddsDepRequest = new DdsDepRequest(); - String encodedMsg = "testEncodeMsg"; - String encodeType = "hex"; - String depositName = "testDepositName"; - - ddsDepRequest.setEncodeType(encodedMsg); - ddsDepRequest.setEncodeType(encodeType); - ddsDepRequest.setSystemDepositName(depositName); - String expectedStr = "DEPOSIT:{\"systemDepositName\":\"testDepositName\",\"encodeType\":\"hex\",\"dialogID\":0}"; - assertEquals(expectedStr, ddsDepRequest.toString()); - } - - @Test - public void testHashCode() { - DdsDepRequest ddsDepRequest1 = new DdsDepRequest(); - DdsDepRequest ddsDepRequest2 = new DdsDepRequest(); - assertEquals(ddsDepRequest1.hashCode(), ddsDepRequest2.hashCode()); - - String encodeType = "hex"; - ddsDepRequest1.setEncodeType(encodeType); - assertNotEquals(ddsDepRequest1.hashCode(), ddsDepRequest2.hashCode()); - - ddsDepRequest2.setEncodeType(encodeType); - assertEquals(ddsDepRequest1.hashCode(), ddsDepRequest2.hashCode()); - - String encodedMsg = "testEncodeMsg"; - ddsDepRequest1.setEncodedMsg(encodedMsg); - ddsDepRequest2.setEncodedMsg(encodedMsg); - - String depositName = "testDepositName"; - ddsDepRequest1.setSystemDepositName(depositName); - ddsDepRequest2.setSystemDepositName(depositName); - - assertEquals(ddsDepRequest1.hashCode(), ddsDepRequest2.hashCode()); - } - - @Test - public void testEquals() { - DdsDepRequest ddsDepRequest1 = new DdsDepRequest(); - DdsDepRequest ddsDepRequest2 = new DdsDepRequest(); - Object randomObject = new Object(); - assertTrue(ddsDepRequest1.equals(ddsDepRequest2)); - assertTrue(ddsDepRequest1.equals(ddsDepRequest1)); - assertFalse(ddsDepRequest1.equals(randomObject)); - assertFalse(ddsDepRequest1.equals(null)); - - ddsDepRequest2.setEncodeType("NotNull"); - assertFalse(ddsDepRequest1.equals(ddsDepRequest2)); - - String encodeType = "hex"; - ddsDepRequest1.setEncodeType(encodeType); - assertFalse(ddsDepRequest1.equals(ddsDepRequest2)); - - ddsDepRequest2.setEncodeType(encodeType); - assertTrue(ddsDepRequest1.equals(ddsDepRequest2)); - - ddsDepRequest2.setEncodedMsg("NotNull"); - assertFalse(ddsDepRequest1.equals(ddsDepRequest2)); - - String encodedMsg = "testEncodeMsg"; - ddsDepRequest1.setEncodedMsg(encodedMsg); - assertFalse(ddsDepRequest1.equals(ddsDepRequest2)); - - ddsDepRequest2.setEncodedMsg(encodedMsg); - assertTrue(ddsDepRequest1.equals(ddsDepRequest2)); - - ddsDepRequest2.setSystemDepositName("NotNull"); - assertFalse(ddsDepRequest1.equals(ddsDepRequest2)); - - String depositName = "testDepositName"; - ddsDepRequest1.setSystemDepositName(depositName); - assertFalse(ddsDepRequest1.equals(ddsDepRequest2)); - - ddsDepRequest2.setSystemDepositName(depositName); - assertTrue(ddsDepRequest1.equals(ddsDepRequest2)); - } - - - -} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoderTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoderTest.java deleted file mode 100644 index 7bead5cd4..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageDecoderTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.*; - -import javax.websocket.DecodeException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.model.StatusTag; - -public class DdsStatusMessageDecoderTest { - - @Test - public void testGetResponseTag() { - assertEquals(StatusTag.CLOSED, DdsStatusMessageDecoder.getResponseTag("CLOSED")); - assertEquals(StatusTag.DEPOSITED, DdsStatusMessageDecoder.getResponseTag("DEPOSITED")); - assertNotEquals(StatusTag.DEPOSITED, DdsStatusMessageDecoder.getResponseTag("OPENED")); - assertNull(DdsStatusMessageDecoder.getResponseTag("WRONT_TAG")); - } - - @Test - public void testParseFullMsg() { - DdsStatusMessageDecoder ddsStatusMessageDecoder = new DdsStatusMessageDecoder(); - String msg = "DEPOSITED:1"; - String[] msgs = ddsStatusMessageDecoder.parseFullMsg(msg); - assertEquals("DEPOSITED", msgs[0]); - assertEquals("1", msgs[1]); - } - - @Test - public void testWillDecode() { - DdsStatusMessageDecoder ddsStatusMessageDecoder = new DdsStatusMessageDecoder(); - assertFalse(ddsStatusMessageDecoder.willDecode("DEPOSITED:1")); - assertTrue(ddsStatusMessageDecoder.willDecode("START:1")); - } - - @Test - public void testDecode() { - DdsStatusMessageDecoder ddsStatusMessageDecoder = new DdsStatusMessageDecoder(); - DdsMessage ddsMessage; - try { - ddsMessage = ddsStatusMessageDecoder.decode("DEPOSITED:1"); - String expectedDdsMessage = "DdsStatusMessage [tag=DEPOSITED, encoding=null, dialog=null, recordCount=1, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = ddsStatusMessageDecoder.decode("CONNECTED:testConnectionDetail"); - expectedDdsMessage = "DdsStatusMessage [tag=CONNECTED, encoding=null, dialog=null, recordCount=0, connectionDetails=testConnectionDetail]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = ddsStatusMessageDecoder.decode("START:{\"dialogID\":156, \"resultEncoding\":\"hex\"}"); - expectedDdsMessage = "DdsStatusMessage [tag=START, encoding=hex, dialog=ASD, recordCount=0, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = ddsStatusMessageDecoder.decode("STOP:recordCount=2"); - expectedDdsMessage = "DdsStatusMessage [tag=STOP, encoding=null, dialog=null, recordCount=2, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = ddsStatusMessageDecoder.decode("ERROR:sampleError"); - expectedDdsMessage = "DdsStatusMessage [tag=ERROR, encoding=null, dialog=null, recordCount=0, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - } catch (DecodeException e) { - e.printStackTrace(); - } - } -} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageTest.java deleted file mode 100644 index af62c8cfe..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DdsStatusMessageTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import org.junit.jupiter.api.Test; - -import mockit.Mocked; -import us.dot.its.jpo.ode.dds.DdsRequest.Dialog; -import us.dot.its.jpo.ode.model.StatusTag; - -public class DdsStatusMessageTest { - - private static final String UPER = "UPER"; - - @Test - public void testConstructor1() { - DdsStatusMessage ddsStatusMessage = new DdsStatusMessage(); - - assertNull(ddsStatusMessage.getTag()); - assertNull(ddsStatusMessage.getEncoding()); - assertNull(ddsStatusMessage.getDialog()); - } - - @Test - public void testConstructor2(@Mocked StatusTag tag, @Mocked Dialog dialog) { - DdsStatusMessage ddsStatusMessage = new DdsStatusMessage(tag, UPER, dialog); - assertEquals(ddsStatusMessage.getTag(), tag); - assertEquals(UPER, ddsStatusMessage.getEncoding()); - assertEquals(ddsStatusMessage.getDialog(), dialog); - - ddsStatusMessage.setTag(null); - ddsStatusMessage.setDialog(null); - ddsStatusMessage.setEncoding(null); - - assertNull(ddsStatusMessage.getTag()); - assertNull(ddsStatusMessage.getEncoding()); - assertNull(ddsStatusMessage.getDialog()); - } - - - @Test - public void testRecordCount() { - DdsStatusMessage ddsStatusMessage = new DdsStatusMessage(); - assertEquals(0, ddsStatusMessage.getRecordCount()); - ddsStatusMessage.setRecordCount(5); - assertEquals(5, ddsStatusMessage.getRecordCount()); - } - - @Test - public void testConnectionDetails() { - DdsStatusMessage ddsStatusMessage = new DdsStatusMessage(); - assertEquals(null, ddsStatusMessage.getConnectionDetails()); - ddsStatusMessage.setConnectionDetails("testConnectionString"); - assertEquals("testConnectionString", ddsStatusMessage.getConnectionDetails()); - } - - @Test - public void testToString() { - StatusTag tag = StatusTag.CONNECTED; - String encoding = "hex"; - Dialog dialog = Dialog.ASD; - long recordCount = 3; - String connectionDetails = "testConnectionString"; - DdsStatusMessage ddsStatusMessage = new DdsStatusMessage(tag, encoding, dialog); - ddsStatusMessage.setConnectionDetails(connectionDetails); - ddsStatusMessage.setRecordCount(recordCount); - String ddsStatusMessageString = "DdsStatusMessage [tag=" + tag + ", encoding=" + encoding + ", dialog=" + dialog + ", recordCount=" - + recordCount + ", connectionDetails=" + connectionDetails + "]"; - assertEquals(ddsStatusMessageString, ddsStatusMessage.toString()); - } - -} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DepositResponseDecoderTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DepositResponseDecoderTest.java deleted file mode 100644 index 59229c8de..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/DepositResponseDecoderTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.*; - -import javax.websocket.DecodeException; -import org.junit.jupiter.api.Test; - -public class DepositResponseDecoderTest { - - @Test - public void testWillDecode() { - DepositResponseDecoder depositResponseDecoder = new DepositResponseDecoder(); - assertTrue(depositResponseDecoder.willDecode("Any String")); - assertTrue(depositResponseDecoder.willDecode("Always returns true")); - } - - @Test - public void testDecode() { - DepositResponseDecoder depositResponseDecoder = new DepositResponseDecoder(); - DdsMessage ddsMessage; - try { - ddsMessage = depositResponseDecoder.decode("DEPOSITED:1"); - String expectedDdsMessage = "DdsStatusMessage [tag=DEPOSITED, encoding=null, dialog=null, recordCount=1, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = depositResponseDecoder.decode("CONNECTED:testConnectionDetail"); - expectedDdsMessage = "DdsStatusMessage [tag=CONNECTED, encoding=null, dialog=null, recordCount=0, connectionDetails=testConnectionDetail]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = depositResponseDecoder.decode("START:{\"dialogID\":156, \"resultEncoding\":\"hex\"}"); - expectedDdsMessage = "DdsStatusMessage [tag=START, encoding=hex, dialog=ASD, recordCount=0, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = depositResponseDecoder.decode("STOP:recordCount=2"); - expectedDdsMessage = "DdsStatusMessage [tag=STOP, encoding=null, dialog=null, recordCount=2, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - ddsMessage = depositResponseDecoder.decode("ERROR:sampleError"); - expectedDdsMessage = "DdsStatusMessage [tag=ERROR, encoding=null, dialog=null, recordCount=0, connectionDetails=null]"; - assertEquals(ddsMessage.toString(), expectedDdsMessage); - - } catch (DecodeException e) { - e.printStackTrace(); - } - } - -} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/StatusMessageHandlerTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/StatusMessageHandlerTest.java deleted file mode 100644 index a01f4be61..000000000 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/dds/StatusMessageHandlerTest.java +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.*; - -import javax.websocket.CloseReason; -import javax.websocket.Session; - -import org.junit.jupiter.api.Test; - -import ch.qos.logback.classic.Logger; -import mockit.Expectations; -import mockit.Mocked; -import mockit.Verifications; -import us.dot.its.jpo.ode.model.OdeControlData; -import us.dot.its.jpo.ode.model.OdeStatus; -import us.dot.its.jpo.ode.model.StatusTag; -import us.dot.its.jpo.ode.wrapper.WebSocketClient; - -public class StatusMessageHandlerTest { - - @Mocked - WebSocketClient mockWebSocketClient; - - @Test - public void testOnMessage(@Mocked DdsStatusMessage statusMsg, @Mocked OdeControlData controlData, - @Mocked final Logger logger) { - StatusMessageHandler statusMessageHandler = new StatusMessageHandler(mockWebSocketClient); - statusMessageHandler.onMessage(statusMsg); - - new Verifications() { - { - new OdeControlData(statusMsg); - logger.info(controlData.toJson(false)); - } - }; - } - - @Test - public void testOnMessageException(@Mocked DdsStatusMessage statusMsg, @Mocked OdeControlData controlData, - @Mocked final Logger logger) { - Exception e = new Exception(); - new Expectations() { - { - new OdeControlData(statusMsg); - result = e; - } - }; - - StatusMessageHandler statusMessageHandler = new StatusMessageHandler(mockWebSocketClient); - statusMessageHandler.onMessage(statusMsg); - - new Verifications() { - { - logger.error("Error handling ControlMessage. ", e); - } - }; - } - - @Test - public void testOnClose(@Mocked DdsStatusMessage statusMsg, @Mocked OdeControlData controlData, - @Mocked final Logger logger, @Mocked Session session, @Mocked CloseReason reason) { - - StatusMessageHandler statusMessageHandler = new StatusMessageHandler(mockWebSocketClient); - statusMessageHandler.onClose(session, reason); - - new Verifications() { - { - new OdeControlData(StatusTag.CLOSED); - controlData.setMessage(anyString); - logger.info(controlData.toJson(false)); - } - }; - } - - @Test - public void testOnOpen(@Mocked DdsStatusMessage statusMsg, @Mocked OdeControlData controlData, - @Mocked final Logger logger, @Mocked Session session, @Mocked CloseReason reason) { - - StatusMessageHandler statusMessageHandler = new StatusMessageHandler(mockWebSocketClient); - statusMessageHandler.onOpen(session, null); - - new Verifications() { - { - new OdeControlData(StatusTag.OPENED); - controlData.setMessage("WebSocket Connection to DDS Opened."); - logger.info(controlData.toJson(false)); - } - }; - } - - @Test - public void testOnError(@Mocked DdsStatusMessage statusMsg, @Mocked OdeControlData controlData, - @Mocked final Logger logger, @Mocked Session session, @Mocked CloseReason reason) { - - StatusMessageHandler statusMessageHandler = new StatusMessageHandler(mockWebSocketClient); - statusMessageHandler.onError(session, new Throwable()); - - new Verifications() { - { - new OdeControlData(StatusTag.ERROR); - controlData.setMessage(anyString); - logger.info(controlData.toJson(false)); - } - }; - } - - @Test - public void buildOdeMessage(@Mocked DdsStatusMessage message) { - StatusMessageHandler statusMessageHandler = new StatusMessageHandler(mockWebSocketClient); - OdeStatus status = (OdeStatus) statusMessageHandler.buildOdeMessage(message); - - assertEquals(status.getMessage(), message.toString()); - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java index 430a71a32..49fc2125c 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java @@ -108,10 +108,6 @@ public void testSettersAndGetters() { String testRsuUsername = "testRsuUsername"; String testRsuPassword = "testRsuPassword"; - testOdeProperties.setDdsCasPassword(testDdsCasPassword); - testOdeProperties.setDdsCasUrl(testDdsCasUrl); - testOdeProperties.setDdsCasUsername(testDdsCasUsername); - testOdeProperties.setDdsWebsocketUrl(testDdsWebsocketUrl); testOdeProperties.setEnv(mockEnv); testOdeProperties.setEnvironment(mockEnv); testOdeProperties.setKafkaBrokers(testKafkaBrokers); @@ -156,10 +152,6 @@ public void testSettersAndGetters() { testOdeProperties.setRsuUsername(testRsuUsername); testOdeProperties.setRsuPassword(testRsuPassword); - assertEquals("Incorrect testDdsCasPassword", testDdsCasPassword, testOdeProperties.getDdsCasPassword()); - assertEquals("Incorrect testDdsCasUrl", testDdsCasUrl, testOdeProperties.getDdsCasUrl()); - assertEquals("Incorrect testDdsCasUsername", testDdsCasUsername, testOdeProperties.getDdsCasUsername()); - assertEquals("Incorrect testDdsWebsocketUrl", testDdsWebsocketUrl, testOdeProperties.getDdsWebsocketUrl()); assertEquals("Incorrect testEnv", mockEnv, testOdeProperties.getEnv()); assertEquals("Incorrect testKafkaBrokers", testKafkaBrokers, testOdeProperties.getKafkaBrokers()); assertEquals("Incorrect testKafkaProducerType", testKafkaProducerType, diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManagerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManagerTest.java deleted file mode 100644 index 44788e469..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositRequestManagerTest.java +++ /dev/null @@ -1,425 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import javax.websocket.Session; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.slf4j.Logger; - -import mockit.Expectations; -import mockit.Mocked; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException; -import us.dot.its.jpo.ode.model.OdeDepRequest; -import us.dot.its.jpo.ode.model.OdeRequest; -import us.dot.its.jpo.ode.model.OdeRequest.DataSource; -import us.dot.its.jpo.ode.wrapper.WebSocketEndpoint; -import us.dot.its.jpo.ode.wrapper.WebSocketEndpoint.WebSocketException; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageDecoder; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageHandler; - - -public class DdsDepositRequestManagerTest { - - DdsDepositRequestManager testDdsDepositRequestManager; - - @Mocked OdeProperties mockOdeProperties; - @Mocked Logger mockLogger; - - @BeforeEach - public void setup() { - new Expectations() { - { - mockOdeProperties.getDdsCasUrl(); - result = anyString; - minTimes = 0; - mockOdeProperties.getDdsCasUsername(); - result = anyString; - minTimes = 0; - mockOdeProperties.getDdsCasPassword(); - result = anyString; - minTimes = 0; - mockOdeProperties.getDdsWebsocketUrl(); - result = anyString; - minTimes = 0; - } - }; - - try { - testDdsDepositRequestManager = new DdsDepositRequestManager(mockOdeProperties); - testDdsDepositRequestManager.setLogger(mockLogger); - } catch (DdsRequestManagerException e) { - e.printStackTrace(); - fail("Unexpected exception: " + e); - } - - } - - /** - * Verify the constructor populates odeProperties and ddsClient - */ - @Test - public void shouldConstruct() { - - assertNotNull(testDdsDepositRequestManager.getOdeProperties()); - assertNotNull(testDdsDepositRequestManager.getDdsClient()); - } - - /** - * Verify DdsRequestManagerException thrown when .getRequestType() returns - * null - */ - @Test - public void shouldFailToBuildEncodeTypeNull(@Mocked OdeDepRequest mockOdeDepRequest) { - - new Expectations() { - { - mockOdeDepRequest.getEncodeType(); - result = null; - } - }; - - try { - OdeDepRequest odeDepRequest = new OdeDepRequest(); - odeDepRequest.setEncodeType(null); - testDdsDepositRequestManager.buildDdsRequest(odeDepRequest ); - fail("Expected DdsRequestManagerException"); - } catch (Exception e) { - assertEquals(DdsRequestManagerException.class, e.getClass()); - assertTrue(e.getMessage().startsWith("Invalid or unsupported EncodeType Deposit:")); - } - } - - @Test - public void shouldBuildSuccessfully(@Mocked OdeDepRequest mockOdeDepRequest) { - - new Expectations() { - { - mockOdeDepRequest.getEncodeType(); - result = "BASE64"; - } - }; - - DdsDepRequest actualDdsRequest = null; - try { - actualDdsRequest = (DdsDepRequest) testDdsDepositRequestManager.buildDdsRequest(mockOdeDepRequest); - assertNotNull("Failed to build actualDdsRequest", actualDdsRequest); - } catch (Exception e) { - fail("Unexpected exception: " + e); - } - - assertEquals("BASE64", actualDdsRequest.getEncodeType()); - } - - @Test - public void connectShouldTryToLoginAndConnect(@Mocked DdsClient mockDdsClient, - @Mocked WebSocketEndpoint mockWsClient, - @Mocked WebSocketMessageHandler mockWebSocketMessageHandler, - @Mocked WebSocketMessageDecoder mockWebSocketMessageDecoder, @Mocked Session mockSession) { - - try { - - new Expectations() { - { - mockDdsClient.login(withAny(DdsStatusMessageDecoder.class), (StatusMessageHandler) any); - - mockWsClient.connect(); - } - }; - } catch (Exception e) { - fail("Unexpected exception mocking expectations: " + e); - } - - testDdsDepositRequestManager.setDdsClient(mockDdsClient); - testDdsDepositRequestManager.setWsClient(mockWsClient); - - Session actualSession = null; - try { - actualSession = testDdsDepositRequestManager.connect(mockWebSocketMessageHandler, - mockWebSocketMessageDecoder.getClass()); - } catch (DdsRequestManagerException e) { - fail("Unexpected exception attempting to connect: " + e); - } - - assertEquals("Sessions do not match", mockSession, actualSession); - assertTrue("Expected isConnected() to return true", testDdsDepositRequestManager.isConnected()); - } - - @Test - public void connectShouldRethrowLoginException(@Mocked DdsClient mockDdsClient, - @Mocked WebSocketEndpoint mockWsClient, - @Mocked WebSocketMessageHandler mockWebSocketMessageHandler, - @Mocked WebSocketMessageDecoder mockWebSocketMessageDecoder, @Mocked Session mockSession) { - - try { - - new Expectations() { - { - mockDdsClient.login(withAny(DdsStatusMessageDecoder.class), (StatusMessageHandler) any); - - mockWsClient.connect(); - result = new DdsRequestManagerException("test exception"); - } - }; - } catch (Exception e) { - fail("Unexpected exception mocking expectations: " + e); - } - - testDdsDepositRequestManager.setDdsClient(mockDdsClient); - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.connect(mockWebSocketMessageHandler, - mockWebSocketMessageDecoder.getClass()); - fail("Expected DdsRequestManagerException"); - } catch (DdsRequestManagerException e) { - assertEquals(DdsRequestManagerException.class, e.getClass()); - assertTrue(e.getMessage().startsWith("Error connecting to DDS")); - } - } - - @Test - public void connectShouldSetConnectedFalseWhenSessionNull(@Mocked DdsClient mockDdsClient, - @Mocked WebSocketEndpoint mockWsClient, - @Mocked WebSocketMessageHandler mockWebSocketMessageHandler, - @Mocked WebSocketMessageDecoder mockWebSocketMessageDecoder, @Mocked Session mockSession) { - - try { - - new Expectations() { - { - mockDdsClient.login(withAny(DdsStatusMessageDecoder.class), (StatusMessageHandler) any); - - mockWsClient.connect(); result = null; - } - }; - } catch (Exception e) { - fail("Unexpected exception mocking expectations: " + e); - } - - testDdsDepositRequestManager.setDdsClient(mockDdsClient); - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.connect(mockWebSocketMessageHandler, - mockWebSocketMessageDecoder.getClass()); - } catch (DdsRequestManagerException e) { - fail("Unexpected exception attempting to connect: " + e); - } - - assertFalse(testDdsDepositRequestManager.isConnected()); - } - - @Test - public void sendRequestshouldThrowExceptionWhenSessionNull(@Mocked DdsClient mockDdsClient, - @Mocked WebSocketEndpoint mockWsClient, - @Mocked WebSocketMessageHandler mockWebSocketMessageHandler, - @Mocked WebSocketMessageDecoder mockWebSocketMessageDecoder, @Mocked Session mockSession, - @Mocked OdeRequest mockOdeRequest) { - - try { - - new Expectations() { - { - // mockDdsClient.login(withAny(DdsStatusMessageDecoder.class), - // (StatusMessageHandler) any); - // result = mockWsClient; - - mockWsClient.connect(); - result = null; - } - }; - } catch (Exception e) { - fail("Unexpected exception mocking expectations: " + e); - } - - // Verify the session is null or the next part will be skipped - assertNull(testDdsDepositRequestManager.getSession()); - - testDdsDepositRequestManager.setDdsClient(mockDdsClient); - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.sendRequest(mockOdeRequest); - fail("Expected DdsRequestManagerException"); - } catch (DdsRequestManagerException e) { - assertEquals("Incorrect exception type", DdsRequestManagerException.class, e.getClass()); - assertTrue("Unexpected exception message" + e.getMessage(), - e.getMessage().startsWith("Error sending Data Request")); - assertFalse("Expected connected to be false", testDdsDepositRequestManager.isConnected()); - } - } - - @Test - public void sendRequestShouldSendWithoutError(@Mocked DdsClient mockDdsClient, - @Mocked WebSocketEndpoint mockWsClient, - @Mocked WebSocketMessageHandler mockWebSocketMessageHandler, - @Mocked WebSocketMessageDecoder mockWebSocketMessageDecoder, @Mocked Session mockSession, - @Mocked OdeDepRequest mockOdeDepRequest) { - - try { - - new Expectations() { - { - mockWsClient.connect(); - - mockWsClient.send(anyString); - } - }; - - new Expectations() { - { - mockOdeDepRequest.getDataSource(); - result = DataSource.SDC; - mockOdeDepRequest.getEncodeType(); - result = "BASE64"; - } - }; - - } catch (Exception e) { - fail("Unexpected exception mocking expectations: " + e); - } - - // Verify the session is null or the next part will be skipped - assertNull(testDdsDepositRequestManager.getSession()); - - testDdsDepositRequestManager.setDdsClient(mockDdsClient); - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.sendRequest(mockOdeDepRequest); - } catch (DdsRequestManagerException e) { - fail("Unexpected exception in send request: " + e); - } - - } - - @Test - public void sendRequestShouldLogWhenErrorClosingClient(@Mocked DdsClient mockDdsClient, - @Mocked WebSocketEndpoint mockWsClient, - @Mocked WebSocketMessageHandler mockWebSocketMessageHandler, - @Mocked WebSocketMessageDecoder mockWebSocketMessageDecoder, @Mocked Session mockSession, - @Mocked OdeRequest mockOdeRequest) { - - try { - - new Expectations() { - { - mockWsClient.connect(); - - mockWsClient.close(); - result = new WebSocketException("test exception on .close()"); - } - }; - - new Expectations() { - { - mockLogger.error(anyString, (WebSocketException) any); - } - }; - } catch (Exception e) { - fail("Unexpected exception mocking expectations: " + e); - } - - // Verify the session is null or the next part will be skipped - assertNull(testDdsDepositRequestManager.getSession()); - - testDdsDepositRequestManager.setDdsClient(mockDdsClient); - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.sendRequest(mockOdeRequest); - fail("Expected DdsRequestManagerException"); - } catch (Exception e) { - assertEquals(DdsRequestManagerException.class, e.getClass()); - } - } - - @Test - public void closeShouldCloseSuccessfully(@Mocked WebSocketEndpoint mockWsClient) { - - try { - new Expectations() { - { - mockWsClient.close(); - } - }; - } catch (WebSocketException e1) { - fail("Unexpected exception calling close on mock websocket client: " + e1); - } - - new Expectations() { - { - mockLogger.info(anyString); - } - }; - - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.close(); - } catch (DdsRequestManagerException e) { - fail("Unexpected exception calling close: " + e); - } - - assertFalse("Expected connected to be false.", testDdsDepositRequestManager.isConnected()); - assertNull("Expected wsClient to be null.", testDdsDepositRequestManager.getWsClient()); - assertNull("Expected session to be null.", testDdsDepositRequestManager.getSession()); - - } - - @Test - public void closeShouldThrowException(@Mocked WebSocketEndpoint mockWsClient) { - - try { - new Expectations() { - { - mockWsClient.close(); - result = new WebSocketException("test WebSocketException on close method"); - } - }; - } catch (WebSocketException e1) { - fail("Unexpected exception websocket client expectations: " + e1); - } - - new Expectations() { - { - mockLogger.info(anyString); - } - }; - - testDdsDepositRequestManager.setWsClient(mockWsClient); - - try { - testDdsDepositRequestManager.close(); - fail("Expected DdsRequestManagerException to be thrown in close."); - } catch (Exception e) { - assertEquals("Incorrect exception thrown", DdsRequestManagerException.class, e.getClass()); - assertTrue("Incorrect error message: " + e.getMessage(), - e.getMessage().startsWith("Error closing DDS Client")); - } - - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositorTest.java deleted file mode 100644 index 73273415a..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsDepositorTest.java +++ /dev/null @@ -1,283 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import javax.websocket.CloseReason; -import javax.websocket.Session; - -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; - -import ch.qos.logback.classic.Logger; -import mockit.Expectations; -import mockit.Mocked; -import mockit.Verifications; -//import mockit.integration.junit4.JMockit; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException; -import us.dot.its.jpo.ode.model.OdeDataType; -import us.dot.its.jpo.ode.model.OdeDepRequest; -import us.dot.its.jpo.ode.model.OdeMessage; -import us.dot.its.jpo.ode.model.OdeRequest; -import us.dot.its.jpo.ode.model.OdeRequest.DataSource; -import us.dot.its.jpo.ode.model.OdeRequestType; -import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; -import us.dot.its.jpo.ode.wrapper.WebSocketMessageHandler; - -//@RunWith(JMockit.class) -public class DdsDepositorTest { - - /** - * Basic test to verify constructor works as expected - */ - @Test - public void shouldConstruct(@Mocked OdeProperties mockOdeProperties, @Mocked Logger mockLogger) { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - testDdsDepositor.setLogger(mockLogger); - - OdeDepRequest actualOdeDepRequest = testDdsDepositor.getDepRequest(); - - assertEquals(mockOdeProperties, testDdsDepositor.getOdeProperties()); - assertEquals(DataSource.SDW, actualOdeDepRequest.getDataSource()); - assertEquals(OdeDataType.AsnHex, actualOdeDepRequest.getDataType()); - assertEquals("hex", actualOdeDepRequest.getEncodeType()); - assertEquals(OdeRequestType.Deposit, actualOdeDepRequest.getRequestType()); - } - - /** - * When the DdsRequestManager.isConnected() returns false, should try - * connecting (Verify that DdsRequestManager.connect() is called) - */ - @SuppressWarnings("unchecked") - @Test - public void shouldTryConnectingWhenConnectedFalse(@Mocked OdeProperties mockOdeProperties, - @Mocked DdsRequestManager mockRequestManager, @Mocked Logger mockLogger, - @Mocked DdsAdvisorySituationData mockMessage) { - - new Expectations() { - { - mockRequestManager.isConnected(); - result = false; - } - }; - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - testDdsDepositor.setRequestManager(mockRequestManager); - - testDdsDepositor.setLogger(mockLogger); - - try { - testDdsDepositor.deposit(mockMessage); - - new Verifications() { - { - mockRequestManager.connect((WebSocketMessageHandler) any, - withAny(DepositResponseDecoder.class)); - times = 1; - mockRequestManager.sendRequest((OdeRequest) any); - times = 1; - } - }; - } catch (Exception e) { - fail("Unexpected exception: " + e); - } - } - - /** - * When the DdsRequestManager.isConnected() returns true, should not try - * connecting (Verify that DdsRequestManager.connect() is NOT called) - */ - @SuppressWarnings("unchecked") - @Test - public void shouldNotTryConnectingWhenConnectedTrue(@Mocked OdeProperties mockOdeProperties, - @Mocked DdsRequestManager mockRequestManager, @Mocked Logger mockLogger, - @Mocked DdsAdvisorySituationData mockAsdMessage) { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - new Expectations() { - { - mockRequestManager.isConnected(); - result = true; - } - }; - - testDdsDepositor.setRequestManager(mockRequestManager); - - testDdsDepositor.setLogger(mockLogger); - - try { - testDdsDepositor.deposit(mockAsdMessage); - - new Verifications() { - { - mockRequestManager.connect((WebSocketMessageHandler) any, - withAny(DepositResponseDecoder.class)); - times = 0; - mockRequestManager.sendRequest((OdeRequest) any); - times = 1; - } - }; - - } catch (Exception e) { - fail("Unexpected exception: " + e); - } - } - - @Test - public void shouldCloseWithoutErrorMessage(@Mocked OdeProperties mockOdeProperties, - @Mocked DdsRequestManager mockRequestManager, @Mocked Logger mockLogger, - @Mocked CloseReason mockCloseReason) throws DdsRequestManagerException { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - testDdsDepositor.setRequestManager(mockRequestManager); - - testDdsDepositor.setLogger(mockLogger); - - testDdsDepositor.onClose(mockCloseReason); - - try { - new Verifications() { - { - mockRequestManager.close(); - times = 1; - } - }; - } catch (DdsRequestManagerException e) { - fail("Unexpected exception: " + e); - } - } - - /** - * Throw a control exception WITHOUT exception argument - */ - @Test - public void shouldCatchThrownExceptionWhenErrorOnCloseWithoutExceptionParam(@Mocked OdeProperties mockOdeProperties, - @Mocked DdsRequestManager mockRequestManager, @Mocked Logger mockLogger, - @Mocked CloseReason mockCloseReason) throws DdsRequestManagerException { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - DdsRequestManagerException testException = new DdsRequestManagerException("test"); - - new Expectations() { - { - mockRequestManager.close(); - result = testException; - } - }; - - testDdsDepositor.setRequestManager(mockRequestManager); - testDdsDepositor.setLogger(mockLogger); - - testDdsDepositor.onClose(mockCloseReason); - - new Verifications() { - { - mockLogger.error(anyString, withAny(testException)); - } - }; - } - - /** - * Throw a control exception WITH exception argument - */ - @Test - public void shouldCatchThrownExceptionWhenErrorOnCloseWithExceptionParam(@Mocked OdeProperties mockOdeProperties, - @Mocked DdsRequestManager mockRequestManager, @Mocked Logger mockLogger, - @Mocked CloseReason mockCloseReason) throws DdsRequestManagerException { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - DdsRequestManagerException testException = new DdsRequestManagerException("test", new Exception("test")); - - new Expectations() { - { - mockRequestManager.close(); - result = testException; - } - }; - - testDdsDepositor.setRequestManager(mockRequestManager); - testDdsDepositor.setLogger(mockLogger); - - testDdsDepositor.onClose(mockCloseReason); - - new Verifications() { - { - mockLogger.error(anyString, withAny(testException)); - } - }; - } - - @Test - public void shouldLogOnMessage(@Mocked OdeProperties mockOdeProperties, @Mocked Logger mockLogger, - @Mocked OdeMessage mockOdeMessage) { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - testDdsDepositor.setLogger(mockLogger); - - testDdsDepositor.onMessage(mockOdeMessage); - - new Verifications() { - { - mockLogger.info(anyString, withAny(mockOdeMessage)); - } - }; - } - - @Test - public void shouldLogOnOpen(@Mocked OdeProperties mockOdeProperties, @Mocked Logger mockLogger, - @Mocked Session mockSession) { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - testDdsDepositor.setLogger(mockLogger); - - testDdsDepositor.onOpen(mockSession); - - new Verifications() { - { - mockLogger.info(anyString, anyString); - } - }; - } - - @Test - public void shouldLogOnError(@Mocked OdeProperties mockOdeProperties, @Mocked Logger mockLogger) { - - DdsDepositor testDdsDepositor = new DdsDepositor(mockOdeProperties); - - testDdsDepositor.setLogger(mockLogger); - - Exception e = new Exception(); - testDdsDepositor.onError(e); - - new Verifications() { - { - mockLogger.error(anyString, e); - } - }; - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsRequestManagerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsRequestManagerTest.java deleted file mode 100644 index 573a26ff2..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/dds/DdsRequestManagerTest.java +++ /dev/null @@ -1,153 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.dds; - -import static org.junit.Assert.assertEquals; - -import org.junit.jupiter.api.Test; - -import mockit.Expectations; -import mockit.Mocked; -import us.dot.its.jpo.ode.dds.DdsRequest.SystemName; -import us.dot.its.jpo.ode.model.OdeRequest; -import us.dot.its.jpo.ode.model.OdeRequest.DataSource; -import us.dot.its.jpo.ode.model.OdeRequestType; - -/** - * Test set for DdsRequestManager static methods - * - */ -public class DdsRequestManagerTest { - - /** - * Verify correct system name from known deposit data sources - */ - @Test - public void testExpectedSystemNames(@Mocked OdeRequest mockOdeRequest) { - - // Test 1: SDC --> SDC - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.SDC; - } - }; - - assertEquals("Expected SDC --> SDC: ", SystemName.SDC, DdsRequestManager.systemName(mockOdeRequest)); - - // Test 2: DEPOSIT_SDC --> SDC - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.DEPOSIT_SDC; - } - }; - assertEquals("Expected DEPOSIT_SDC --> SDC: ", SystemName.SDC, DdsRequestManager.systemName(mockOdeRequest)); - - // Test 3: SDW --> SDW - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.SDW; - } - }; - assertEquals("Expected SDW --> SDW: ", SystemName.SDW, DdsRequestManager.systemName(mockOdeRequest)); - - // Test 4: DEPOSIT_SDW --> SDW - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.DEPOSIT_SDW; - } - }; - assertEquals("Expected DEPOSIT_SDW --> SDW: ", SystemName.SDW, DdsRequestManager.systemName(mockOdeRequest)); - - // Test 5: SDPC --> SDPC - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.SDPC; - } - }; - assertEquals("Expected SDPC --> SDPC: ", SystemName.SDPC, DdsRequestManager.systemName(mockOdeRequest)); - } - - /** - * Verify correct defaulting behavior from unknown deposit data sources - */ - @Test - public void testUnexpectedSystemNames(@Mocked OdeRequest mockOdeRequest) { - - // Test 1: Subscription --> SDC - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.TEST_UPLOAD; - mockOdeRequest.getRequestType(); - result = OdeRequestType.Subscription; - } - }; - - assertEquals("Expected OdeRequestType.Subscription --> SDC: ", SystemName.SDC, - DdsRequestManager.systemName(mockOdeRequest)); - - // Test 2: Query --> SDW - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = DataSource.TEST_UPLOAD; - mockOdeRequest.getRequestType(); - result = OdeRequestType.Query; - } - }; - assertEquals("Expected OdeRequestType.Query --> SDW: ", SystemName.SDW, - DdsRequestManager.systemName(mockOdeRequest)); - } - - /** - * Repeat above test but test default data source method - */ - @Test - public void testSystemNameWithNullDataSource(@Mocked OdeRequest mockOdeRequest) { - - // Test 1: Subscription --> SDC - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = null; - mockOdeRequest.getRequestType(); - result = OdeRequestType.Subscription; - } - }; - - assertEquals("Expected OdeRequestType.Subscription --> SDC: ", SystemName.SDC, - DdsRequestManager.systemName(mockOdeRequest)); - - // Test 2: Query --> SDW - new Expectations() { - { - mockOdeRequest.getDataSource(); - result = null; - mockOdeRequest.getRequestType(); - result = OdeRequestType.Query; - } - }; - assertEquals("Expected OdeRequestType.Query --> SDW: ", SystemName.SDW, - DdsRequestManager.systemName(mockOdeRequest)); - - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java index f0424570e..99f53b7e5 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java @@ -30,7 +30,6 @@ import mockit.Tested; //import mockit.integration.junit4.JMockit; import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException; import us.dot.its.jpo.ode.model.OdeTravelerInputData; import us.dot.its.jpo.ode.snmp.SnmpSession; import us.dot.its.jpo.ode.wrapper.MessageProducer; @@ -72,7 +71,7 @@ public void testShutdown() { @Test public void testDeposit(@Mocked OdeTravelerInputData mockOdeTravelerInputData) - throws DdsRequestManagerException, IOException, ParseException { + throws IOException, ParseException { testRsuDepositor.deposit(mockOdeTravelerInputData.getRequest(), "message"); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java index 79861118a..47cdb0b11 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java @@ -27,7 +27,6 @@ import mockit.Mocked; import mockit.Tested; import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.dds.DdsRequestManager.DdsRequestManagerException; import us.dot.its.jpo.ode.model.OdeTravelerInputData; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; import us.dot.its.jpo.ode.plugin.ServiceRequest.OdeInternal.RequestVerb; @@ -75,14 +74,14 @@ public void depositToSDWShouldCallMessageProducer() throws Asn1CommandManagerExc @Test public void testSendToRsus(@Mocked OdeTravelerInputData mockOdeTravelerInputData) - throws DdsRequestManagerException, IOException, ParseException { + throws IOException, ParseException { testAsn1CommandManager.sendToRsus(mockOdeTravelerInputData.getRequest(), "message"); } @Test public void testSendToRsusSnmpException(@Mocked OdeTravelerInputData mockOdeTravelerInputData) - throws DdsRequestManagerException, IOException, ParseException { + throws IOException, ParseException { testAsn1CommandManager.sendToRsus(mockOdeTravelerInputData.getRequest(), "message"); } From d5a735360bbe0ca60ea83b8056e5ea0b07b57d44 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Tue, 4 Jun 2024 15:50:37 -0600 Subject: [PATCH 03/62] Updated TimDeleteController to interpret snmp error code 10 more accurately --- .../java/us/dot/its/jpo/ode/traveler/TimDeleteController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java index 57397d1a5..51445a37d 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java @@ -151,7 +151,7 @@ private String interpretErrorCode(int errorCodeReturnedByRSU, int index) { if (errorCodeReturnedByRSU == 12) { return "Message previously deleted or doesn't exist at index " + Integer.toString(index); } else if (errorCodeReturnedByRSU == 10) { - return "Invalid index " + Integer.toString(index); + return "Possible SNMP protocol mismatch, check RSU configuration"; } else { return "Unknown error"; } From 19adfb46ca771666df248348ba8446507c4b964a Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Tue, 4 Jun 2024 15:51:04 -0600 Subject: [PATCH 04/62] Updated RsuDepositor to interpret snmp error code 10 separately from miscellaneous errors --- .../src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java index d4b27a1db..0673189d0 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java @@ -104,6 +104,9 @@ public void run() { } else if (rsuResponse.getResponse().getErrorStatus() == 5) { // Error, message already exists httpResponseStatus = "Message already exists at ".concat(Integer.toString(curRsu.getRsuIndex())); + } else if (rsuResponse.getResponse().getErrorStatus() == 10) { + // Error, possible SNMP protocol mismatch + httpResponseStatus = "Possible SNMP protocol mismatch, check RSU configuration"; } else { // Misc error httpResponseStatus = "Error code " + rsuResponse.getResponse().getErrorStatus() + " " @@ -128,6 +131,10 @@ public void run() { Integer destIndex = curRsu.getRsuIndex(); logger.error("Error on RSU SNMP deposit to {}: message already exists at index {}.", curRsu.getRsuTarget(), destIndex); + } else if (rsuResponse.getResponse().getErrorStatus() == 10) { + // Error, possible SNMP protocol mismatch + logger.error("Error on RSU SNMP deposit to {}: Possible SNMP protocol mismatch, check RSU configuration.", + curRsu.getRsuTarget()); } else { // Misc error logger.error("Error on RSU SNMP deposit to {}: {}", curRsu.getRsuTarget(), "Error code '" From 041d22d5fb0ae53967b1838006bd9236ea924873 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Fri, 14 Jun 2024 11:08:43 -0600 Subject: [PATCH 05/62] Expanded project reference update documentation in `release_process.md` --- docs/release_process.md | 68 +++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/docs/release_process.md b/docs/release_process.md index f58d10b45..cedc5606a 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -146,7 +146,7 @@ After the release branches are created, preliminary testing should be conducted After preliminary testing is complete, project reference updates should be made to ensure that all projects are referencing the correct versions of other projects. Once project references are updated, the release should be created by merging the `release_(year)-(quarter)` branch into the `master` branch and tagging the release with the appropriate version number. Images should be built and pushed to DockerHub for testing. ### Steps -#### Merging release branches & updating project references +#### Merging release branches, updating project references and creating releases 1. Merge ‘release_(year)-(quarter)’ branch into ‘master/main’ branch for the following projects: - asn1_codec - jpo-cvdp @@ -154,47 +154,61 @@ After preliminary testing is complete, project reference updates should be made - jpo-sdw-depositor - jpo-s3-deposit - 1a. Tag the master/main branch of each application with a git tag that includes the version number of each app. + 1a. Create a release for the asn1_codec project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. asn1_codec-x.x.x) + 1b. Create a release for the jpo-cvdp project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-cvdp-x.x.x) + 1c. Create a release for the jpo-security-svcs project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-security-svcs-x.x.x) + 1d. Create a release for the jpo-sdw-depositor project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-sdw-depositor-x.x.x) + 1e. Create a release for the jpo-s3-deposit project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-s3-deposit-x.x.x) 2. Update git submodule references for the ‘jpo-ode’ project to point to tagged commits in projects with updated `master/main` branches. Also update the version numbers within the pom.xmls of each of the ode subprojects (jpo-ode-common, jpo-ode-plugins, jpo-ode-svcs) to be self-consistent. - 2a. (These changes will need to pass CI/CD checks & make it into the `release_(year)-(quarter)` branch before continuing.) + 2a. Open the jpo-ode project in an IDE and update the version numbers in the pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to match the version number of the release. (e.g. 1.0.0) + 2b. Navigate to the asn1_codec directory and run `git checkout tags/asn1_codec-x.x.x` to update the submodule reference. + 2c. Navigate to the jpo-cvdp directory and run `git checkout tags/jpo-cvdp-x.x.x` to update the submodule reference. + 2d. Navigate to the jpo-security-svcs directory and run `git checkout tags/jpo-security-svcs-x.x.x` to update the submodule reference. + 2e. Navigate to the jpo-sdw-depositor directory and run `git checkout tags/jpo-sdw-depositor-x.x.x` to update the submodule reference. + 2f. Navigate to the jpo-s3-deposit directory and run `git checkout tags/jpo-s3-deposit-x.x.x` to update the submodule reference. + 2g. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 2h. Ensure these changes pass CI/CD checks before continuing. -3. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-ode project, and add a git tag with the ode version number. +3. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-ode project, and create a release with the version number of the release. (e.g. jpo-ode-x.x.x) -4. Update git submodule references for the ‘jpo-geojsonconverter’ project to point to the tagged commit in jpo-ode master/main branch. +4. Update git submodule references for the ‘jpo-geojsonconverter’ project to point to the tagged commit in jpo-ode master/main branch. Also update the corresponding version number for the jpo-ode dependency in the pom.xml of the geojsonconverter project. -5. Update pom.xml references for the 'jpo-geojsonconverter' project to version used in the tagged commit in jpo-ode master/main branch. + 4a. Open the jpo-geojsonconverter project in an IDE. + 4b. Navigate to the jpo-ode directory and run `git checkout tags/jpo-ode-x.x.x` to update the submodule reference. + 4c. Update the version number in the pom.xml for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) + 4d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 4e. Ensure these changes pass CI/CD checks before continuing. - 5a. (These changes (steps 4 & 5) will need to pass CI/CD checks & make it into the `release_(year)-(quarter)` branch before continuing.) +5. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-geojsonconverter project, and create a release with the version number of the release. (e.g. jpo-geojsonconverter-x.x.x) -6. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-geojsonconverter project, and add a git tag with the geojsonconverter version number. +6. Update git submodule references for the `jpo-conflictmonitor` project to point to the tagged commit in jpo-geojsonconverter master/main branch. Also update the corresponding version number for the jpo-geojsonconverter dependency in the pom.xml files of the conflictmonitor project. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. -7. Update git submodule references for the `jpo-conflictmonitor` project to point to tagged commit in jpo-geojsonconverter master/main branch. + 6a. Open the jpo-conflictmonitor project in an IDE. + 6b. Navigate to the jpo-geojsonconverter directory and run `git checkout tags/jpo-geojsonconverter-x.x.x` to update the submodule reference. + 6c. Update the version number in the pom.xml filesfor the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) + 6d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 6e. Ensure these changes pass CI/CD checks before continuing. -8. Update pom.xml references for the 'jpo-conflictmonitor' project to version used in tagged commit in jpo-geojsonconverter master/main branch. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. +7. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictmonitor project, and create a release with the version number of the release. (e.g. jpo-conflictmonitor-x.x.x) -9. Update pom.xml references for the 'jpo-conflictmonitor' project to version used in tagged commit in jpo-ode master/main branch. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. - - 9a. (These changes (steps 7-9) will need to pass CI/CD checks & make it into the `release_(year)-(quarter)` branch before continuing.) - -10. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictmonitor project, and add a git tag with the conflictmonitor version number. - -11. Update git submodule references for the `jpo-conflictvisualizer` project to point to tagged commit in jpo-conflictmonitor master/main branch. +8. Update git submodule references for the `jpo-conflictvisualizer` project to point to the tagged commit in jpo-conflictmonitor master/main branch. Also update the corresponding version number for the jpo-conflictmonitor dependency in the pom.xml file of the conflictvisualizer project. -12. Update pom.xml references for the 'jpo-conflictvisualizer' project to version used in tagged commit in jpo-conflictmonitor master/main branch. + 8a. Open the jpo-conflictvisualizer project in an IDE. + 8b. Navigate to the jpo-conflictmonitor directory and run `git checkout tags/jpo-conflictmonitor-x.x.x` to update the submodule reference. + 8c. Update the version number in the pom.xml files for the jpo-conflictmonitor dependency to match the version number of the release. (e.g. 1.0.0) + 8d. Update the version number in the pom.xml file for the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) + 8e. Update the version number in the pom.xml file for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) + 8f. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 8g. Ensure these changes pass CI/CD checks before continuing. -13. Update pom.xml references for the 'jpo-conflictvisualizer' project to version used in tagged commit in jpo-geojsonconverter master/main branch. +9. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictvisualizer project, and create a release with the version number of the release. (e.g. jpo-conflictvisualizer-x.x.x) -14. Update pom.xml references for the 'jpo-conflictvisualizer' project to version used in tagged commit in jpo-ode master/main branch. - - 14a. (These changes (steps 11-14) will need to pass CI/CD checks & make it into the `release_(year)-(quarter)` branch before continuing.) - -15. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictvisualizer project, and add a git tag with the visualizer version number. -16. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-cvmanager project, and add a git tag with the cvmanager version number. +10. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-cvmanager project, and create a release with the version number of the release. (e.g. jpo-cvmanager-x.x.x) -#### Create Releases & Docker Images -1. Within the github CI/CD release process, use the release tags for each application to produce releases and docker images with the same tag name, containing the version number of each app. +#### Create Docker Images +1. Within the github CI/CD release process, use the releases for each application to produce docker images with the same tag name, containing the version number of each app. For example, the jpo-ode release will produce a docker image with the version number of the release (e.g. 1.0.0). 1a. The Conflict Visualizer will need two separate images to be created: one for the API and one for Keycloak. From ce5e57ddeb1a2242682ac2ce6c36ac60798992ab Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Fri, 14 Jun 2024 11:49:52 -0600 Subject: [PATCH 06/62] Updated formatting in section 3 of `release_process.md` file --- docs/release_process.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/release_process.md b/docs/release_process.md index cedc5606a..55460ae8c 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -155,20 +155,31 @@ After preliminary testing is complete, project reference updates should be made - jpo-s3-deposit 1a. Create a release for the asn1_codec project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. asn1_codec-x.x.x) + 1b. Create a release for the jpo-cvdp project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-cvdp-x.x.x) + 1c. Create a release for the jpo-security-svcs project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-security-svcs-x.x.x) + 1d. Create a release for the jpo-sdw-depositor project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-sdw-depositor-x.x.x) + 1e. Create a release for the jpo-s3-deposit project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-s3-deposit-x.x.x) 2. Update git submodule references for the ‘jpo-ode’ project to point to tagged commits in projects with updated `master/main` branches. Also update the version numbers within the pom.xmls of each of the ode subprojects (jpo-ode-common, jpo-ode-plugins, jpo-ode-svcs) to be self-consistent. 2a. Open the jpo-ode project in an IDE and update the version numbers in the pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to match the version number of the release. (e.g. 1.0.0) + 2b. Navigate to the asn1_codec directory and run `git checkout tags/asn1_codec-x.x.x` to update the submodule reference. + 2c. Navigate to the jpo-cvdp directory and run `git checkout tags/jpo-cvdp-x.x.x` to update the submodule reference. + 2d. Navigate to the jpo-security-svcs directory and run `git checkout tags/jpo-security-svcs-x.x.x` to update the submodule reference. + 2e. Navigate to the jpo-sdw-depositor directory and run `git checkout tags/jpo-sdw-depositor-x.x.x` to update the submodule reference. + 2f. Navigate to the jpo-s3-deposit directory and run `git checkout tags/jpo-s3-deposit-x.x.x` to update the submodule reference. + 2g. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 2h. Ensure these changes pass CI/CD checks before continuing. 3. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-ode project, and create a release with the version number of the release. (e.g. jpo-ode-x.x.x) @@ -176,9 +187,13 @@ After preliminary testing is complete, project reference updates should be made 4. Update git submodule references for the ‘jpo-geojsonconverter’ project to point to the tagged commit in jpo-ode master/main branch. Also update the corresponding version number for the jpo-ode dependency in the pom.xml of the geojsonconverter project. 4a. Open the jpo-geojsonconverter project in an IDE. + 4b. Navigate to the jpo-ode directory and run `git checkout tags/jpo-ode-x.x.x` to update the submodule reference. + 4c. Update the version number in the pom.xml for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) + 4d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 4e. Ensure these changes pass CI/CD checks before continuing. 5. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-geojsonconverter project, and create a release with the version number of the release. (e.g. jpo-geojsonconverter-x.x.x) @@ -186,9 +201,13 @@ After preliminary testing is complete, project reference updates should be made 6. Update git submodule references for the `jpo-conflictmonitor` project to point to the tagged commit in jpo-geojsonconverter master/main branch. Also update the corresponding version number for the jpo-geojsonconverter dependency in the pom.xml files of the conflictmonitor project. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. 6a. Open the jpo-conflictmonitor project in an IDE. + 6b. Navigate to the jpo-geojsonconverter directory and run `git checkout tags/jpo-geojsonconverter-x.x.x` to update the submodule reference. + 6c. Update the version number in the pom.xml filesfor the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) + 6d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 6e. Ensure these changes pass CI/CD checks before continuing. 7. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictmonitor project, and create a release with the version number of the release. (e.g. jpo-conflictmonitor-x.x.x) @@ -196,11 +215,17 @@ After preliminary testing is complete, project reference updates should be made 8. Update git submodule references for the `jpo-conflictvisualizer` project to point to the tagged commit in jpo-conflictmonitor master/main branch. Also update the corresponding version number for the jpo-conflictmonitor dependency in the pom.xml file of the conflictvisualizer project. 8a. Open the jpo-conflictvisualizer project in an IDE. + 8b. Navigate to the jpo-conflictmonitor directory and run `git checkout tags/jpo-conflictmonitor-x.x.x` to update the submodule reference. + 8c. Update the version number in the pom.xml files for the jpo-conflictmonitor dependency to match the version number of the release. (e.g. 1.0.0) + 8d. Update the version number in the pom.xml file for the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) + 8e. Update the version number in the pom.xml file for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) + 8f. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 8g. Ensure these changes pass CI/CD checks before continuing. 9. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictvisualizer project, and create a release with the version number of the release. (e.g. jpo-conflictvisualizer-x.x.x) From b2209b8eb08eb952c370cf66c9d3a31525a82b57 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Fri, 14 Jun 2024 13:59:49 -0600 Subject: [PATCH 07/62] Added steps to update versions of each project rather than just their dependencies to `release_process.md` --- docs/release_process.md | 100 ++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 40 deletions(-) diff --git a/docs/release_process.md b/docs/release_process.md index 55460ae8c..cb38f7f02 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -147,90 +147,110 @@ After preliminary testing is complete, project reference updates should be made ### Steps #### Merging release branches, updating project references and creating releases -1. Merge ‘release_(year)-(quarter)’ branch into ‘master/main’ branch for the following projects: + +1. Update version number in pom.xml for the following projects. + - jpo-security-svcs + - jpo-sdw-depositor + - jpo-s3-deposit + +2. Merge ‘release_(year)-(quarter)’ branch into ‘master/main’ branch for the following projects: - asn1_codec - jpo-cvdp - jpo-security-svcs - jpo-sdw-depositor - jpo-s3-deposit - 1a. Create a release for the asn1_codec project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. asn1_codec-x.x.x) + 2a. Create a release for the asn1_codec project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. asn1_codec-x.x.x) - 1b. Create a release for the jpo-cvdp project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-cvdp-x.x.x) + 2b. Create a release for the jpo-cvdp project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-cvdp-x.x.x) + + 2c. Create a release for the jpo-security-svcs project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-security-svcs-x.x.x) - 1c. Create a release for the jpo-security-svcs project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-security-svcs-x.x.x) + 2d. Create a release for the jpo-sdw-depositor project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-sdw-depositor-x.x.x) - 1d. Create a release for the jpo-sdw-depositor project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-sdw-depositor-x.x.x) + 2e. Create a release for the jpo-s3-deposit project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-s3-deposit-x.x.x) + +3. Update version number in pom.xml files for the 'jpo-ode' project. + + 3a. Open the jpo-ode project in an IDE - 1e. Create a release for the jpo-s3-deposit project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-s3-deposit-x.x.x) + 3b. Update the version number in the pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to match the version number of the release. (e.g. 1.0.0) + + 3c. Update the dependencies in pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to the version number set in the previous step. The `jpo-ode-plugins` depends on the `jpo-ode-common` project, and the `jpo-ode-svcs` project depends on the `jpo-ode-core` and `jpo-ode-plugins` projects. These should all be referencing the same version number. (e.g. 1.0.0) -2. Update git submodule references for the ‘jpo-ode’ project to point to tagged commits in projects with updated `master/main` branches. Also update the version numbers within the pom.xmls of each of the ode subprojects (jpo-ode-common, jpo-ode-plugins, jpo-ode-svcs) to be self-consistent. +4. Update git submodule references for the ‘jpo-ode’ project to point to tagged commits in projects with updated `master/main` branches. - 2a. Open the jpo-ode project in an IDE and update the version numbers in the pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to match the version number of the release. (e.g. 1.0.0) + 4a. Open the jpo-ode project in an IDE and update the version numbers in the pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to match the version number of the release. (e.g. 1.0.0) - 2b. Navigate to the asn1_codec directory and run `git checkout tags/asn1_codec-x.x.x` to update the submodule reference. + 4b. Navigate to the asn1_codec directory and run `git checkout tags/asn1_codec-x.x.x` to update the submodule reference. - 2c. Navigate to the jpo-cvdp directory and run `git checkout tags/jpo-cvdp-x.x.x` to update the submodule reference. + 4c. Navigate to the jpo-cvdp directory and run `git checkout tags/jpo-cvdp-x.x.x` to update the submodule reference. - 2d. Navigate to the jpo-security-svcs directory and run `git checkout tags/jpo-security-svcs-x.x.x` to update the submodule reference. + 4d. Navigate to the jpo-security-svcs directory and run `git checkout tags/jpo-security-svcs-x.x.x` to update the submodule reference. - 2e. Navigate to the jpo-sdw-depositor directory and run `git checkout tags/jpo-sdw-depositor-x.x.x` to update the submodule reference. + 4e. Navigate to the jpo-sdw-depositor directory and run `git checkout tags/jpo-sdw-depositor-x.x.x` to update the submodule reference. - 2f. Navigate to the jpo-s3-deposit directory and run `git checkout tags/jpo-s3-deposit-x.x.x` to update the submodule reference. + 4f. Navigate to the jpo-s3-deposit directory and run `git checkout tags/jpo-s3-deposit-x.x.x` to update the submodule reference. - 2g. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 4g. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. - 2h. Ensure these changes pass CI/CD checks before continuing. + 4h. Ensure these changes pass CI/CD checks before continuing. -3. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-ode project, and create a release with the version number of the release. (e.g. jpo-ode-x.x.x) +5. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-ode project, and create a release with the version number of the release. (e.g. jpo-ode-x.x.x) -4. Update git submodule references for the ‘jpo-geojsonconverter’ project to point to the tagged commit in jpo-ode master/main branch. Also update the corresponding version number for the jpo-ode dependency in the pom.xml of the geojsonconverter project. +6. Update version number in pom.xml file for the `jpo-geojsonconverter` project. - 4a. Open the jpo-geojsonconverter project in an IDE. +7. Update git submodule references for the ‘jpo-geojsonconverter’ project to point to the tagged commit in jpo-ode master/main branch. + + 7a. Open the jpo-geojsonconverter project in an IDE. - 4b. Navigate to the jpo-ode directory and run `git checkout tags/jpo-ode-x.x.x` to update the submodule reference. + 7b. Navigate to the jpo-ode directory and run `git checkout tags/jpo-ode-x.x.x` to update the submodule reference. - 4c. Update the version number in the pom.xml for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) + 7c. Update the version number in the pom.xml for the jpo-ode-core and jpo-ode-plugins dependencies to match the version number of the corresponding releases. (e.g. 1.0.0) - 4d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 7d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. - 4e. Ensure these changes pass CI/CD checks before continuing. + 7e. Ensure these changes pass CI/CD checks before continuing. + +8. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-geojsonconverter project, and create a release with the version number of the release. (e.g. jpo-geojsonconverter-x.x.x) -5. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-geojsonconverter project, and create a release with the version number of the release. (e.g. jpo-geojsonconverter-x.x.x) +9. Update version number in pom.xml file for the `jpo-conflictmonitor` project. -6. Update git submodule references for the `jpo-conflictmonitor` project to point to the tagged commit in jpo-geojsonconverter master/main branch. Also update the corresponding version number for the jpo-geojsonconverter dependency in the pom.xml files of the conflictmonitor project. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. +10. Update git submodule references for the `jpo-conflictmonitor` project to point to the tagged commit in jpo-geojsonconverter master/main branch. Also update the corresponding version number for the jpo-geojsonconverter and jpo-ode-* dependencies in the pom.xml files of the conflictmonitor project. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. - 6a. Open the jpo-conflictmonitor project in an IDE. + 10a. Open the jpo-conflictmonitor project in an IDE. - 6b. Navigate to the jpo-geojsonconverter directory and run `git checkout tags/jpo-geojsonconverter-x.x.x` to update the submodule reference. + 10b. Navigate to the jpo-geojsonconverter directory and run `git checkout tags/jpo-geojsonconverter-x.x.x` to update the submodule reference. - 6c. Update the version number in the pom.xml filesfor the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) + 10c. Update the version number in the pom.xml files for the jpo-geojsonconverter and jpo-ode-* dependencies to match the version number of the corresponding releases. (e.g. 1.0.0) - 6d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 10d. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. - 6e. Ensure these changes pass CI/CD checks before continuing. + 10e. Ensure these changes pass CI/CD checks before continuing. + +11. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictmonitor project, and create a release with the version number of the release. (e.g. jpo-conflictmonitor-x.x.x) -7. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictmonitor project, and create a release with the version number of the release. (e.g. jpo-conflictmonitor-x.x.x) +12. Update version number in pom.xml file for the `jpo-conflictvisualizer` project. The pom.xml can be found in the `api/jpo-conflictvisualizer-api` directory. -8. Update git submodule references for the `jpo-conflictvisualizer` project to point to the tagged commit in jpo-conflictmonitor master/main branch. Also update the corresponding version number for the jpo-conflictmonitor dependency in the pom.xml file of the conflictvisualizer project. +13. Update git submodule references for the `jpo-conflictvisualizer` project to point to the tagged commit in jpo-conflictmonitor master/main branch. Also update the corresponding version number for the jpo-conflictmonitor dependency in the pom.xml file of the conflictvisualizer project. - 8a. Open the jpo-conflictvisualizer project in an IDE. + 13a. Open the jpo-conflictvisualizer project in an IDE. - 8b. Navigate to the jpo-conflictmonitor directory and run `git checkout tags/jpo-conflictmonitor-x.x.x` to update the submodule reference. + 13b. Navigate to the jpo-conflictmonitor directory and run `git checkout tags/jpo-conflictmonitor-x.x.x` to update the submodule reference. - 8c. Update the version number in the pom.xml files for the jpo-conflictmonitor dependency to match the version number of the release. (e.g. 1.0.0) + 13c. Update the version number in the pom.xml files for the jpo-conflictmonitor dependency to match the version number of the release. (e.g. 1.0.0) - 8d. Update the version number in the pom.xml file for the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) + 13d. Update the version number in the pom.xml file for the jpo-geojsonconverter dependency to match the version number of the release. (e.g. 1.0.0) - 8e. Update the version number in the pom.xml file for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) + 13e. Update the version number in the pom.xml file for the jpo-ode dependency to match the version number of the release. (e.g. 1.0.0) - 8f. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. + 13f. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. - 8g. Ensure these changes pass CI/CD checks before continuing. + 13g. Ensure these changes pass CI/CD checks before continuing. -9. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictvisualizer project, and create a release with the version number of the release. (e.g. jpo-conflictvisualizer-x.x.x) +14. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictvisualizer project, and create a release with the version number of the release. (e.g. jpo-conflictvisualizer-x.x.x) -10. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-cvmanager project, and create a release with the version number of the release. (e.g. jpo-cvmanager-x.x.x) +15. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-cvmanager project, and create a release with the version number of the release. (e.g. jpo-cvmanager-x.x.x) #### Create Docker Images 1. Within the github CI/CD release process, use the releases for each application to produce docker images with the same tag name, containing the version number of each app. For example, the jpo-ode release will produce a docker image with the version number of the release (e.g. 1.0.0). From 02cbb8eb28c8faa6e817af099b31b190b431a2dc Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Fri, 14 Jun 2024 14:12:05 -0600 Subject: [PATCH 08/62] Removed duplicate instruction to update jpo-ode pom.xml versions in `release_process.md` --- docs/release_process.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release_process.md b/docs/release_process.md index cb38f7f02..79d1cf007 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -180,7 +180,7 @@ After preliminary testing is complete, project reference updates should be made 4. Update git submodule references for the ‘jpo-ode’ project to point to tagged commits in projects with updated `master/main` branches. - 4a. Open the jpo-ode project in an IDE and update the version numbers in the pom.xml files of the jpo-ode-common, jpo-ode-plugins, and jpo-ode-svcs projects to match the version number of the release. (e.g. 1.0.0) + 4a. Open the jpo-ode project in an IDE. 4b. Navigate to the asn1_codec directory and run `git checkout tags/asn1_codec-x.x.x` to update the submodule reference. From 16e212996c1f1d9b9271f3bf2775506de2261462 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Tue, 18 Jun 2024 07:24:09 -0600 Subject: [PATCH 09/62] Updated mapfile reference in ppm*.properties files --- ppmBsm.properties | 2 +- ppmTim.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ppmBsm.properties b/ppmBsm.properties index 2968f24ff..2ba3d62ff 100644 --- a/ppmBsm.properties +++ b/ppmBsm.properties @@ -12,7 +12,7 @@ privacy.redaction.id.included=BEA10000,BEA10001 # Configuration details for geofencing. privacy.filter.geofence=ON -privacy.filter.geofence.mapfile=../data/I_80.edges +privacy.filter.geofence.mapfile=/ppm_data/data/I_80.edges privacy.filter.geofence.sw.lat=40.997 privacy.filter.geofence.sw.lon=-111.041 privacy.filter.geofence.ne.lat=42.085 diff --git a/ppmTim.properties b/ppmTim.properties index 8c8e03e64..5afbe4a7a 100644 --- a/ppmTim.properties +++ b/ppmTim.properties @@ -12,7 +12,7 @@ privacy.redaction.id.included=BEA10000,BEA10001 # Configuration details for geofencing. privacy.filter.geofence=OFF -privacy.filter.geofence.mapfile=../data/I_80.edges +privacy.filter.geofence.mapfile=/ppm_data/data/I_80.edges privacy.filter.geofence.sw.lat=40.997 privacy.filter.geofence.sw.lon=-111.041 privacy.filter.geofence.ne.lat=42.085 From d5f2916d4d222616f545d93ce02c944ee8563a08 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Wed, 19 Jun 2024 13:41:10 -0600 Subject: [PATCH 10/62] Printed stack trace upon receiving bad encoded data from ACM only if debug logging is enabled --- .../jpo/ode/services/asn1/Asn1EncodedDataRouter.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java index 7b9905393..127f18ae7 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java @@ -134,8 +134,16 @@ public Object process(String consumedData) { } } catch (Exception e) { String msg = "Error in processing received message from ASN.1 Encoder module: " + consumedData; - EventLogger.logger.error(msg, e); - logger.error(msg, e); + if (logger.isDebugEnabled()) { + // print error message and stack trace + EventLogger.logger.error(msg, e); + logger.error(msg, e); + } + else { + // print error message only + EventLogger.logger.error(msg); + logger.error(msg); + } } return null; } From 92b00cdbe0c0e0559b0693bc737852c427dcec0f Mon Sep 17 00:00:00 2001 From: Drew Johnston <31270488+drewjj@users.noreply.github.com> Date: Fri, 21 Jun 2024 15:56:17 -0600 Subject: [PATCH 11/62] Add a startup script to the Dockerfile entry point to support a SSH/SCP server --- Dockerfile | 17 ++++++----------- startup_jpoode.sh | 13 +++++++++++++ 2 files changed, 19 insertions(+), 11 deletions(-) create mode 100644 startup_jpoode.sh diff --git a/Dockerfile b/Dockerfile index 85fd68b60..e7c750ff6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,15 +23,10 @@ WORKDIR /home COPY --from=builder /home/jpo-ode-svcs/src/main/resources/application.properties /home COPY --from=builder /home/jpo-ode-svcs/src/main/resources/logback.xml /home COPY --from=builder /home/jpo-ode-svcs/target/jpo-ode-svcs.jar /home +COPY startup_jpoode.sh /home -ENTRYPOINT ["java", \ - "-Djava.rmi.server.hostname=$DOCKER_HOST_IP", \ - "-Dcom.sun.management.jmxremote.port=9090", \ - "-Dcom.sun.management.jmxremote.rmi.port=9090", \ - "-Dcom.sun.management.jmxremote", \ - "-Dcom.sun.management.jmxremote.local.only=true", \ - "-Dcom.sun.management.jmxremote.authenticate=false", \ - "-Dcom.sun.management.jmxremote.ssl=false", \ - "-Dlogback.configurationFile=/home/logback.xml", \ - "-jar", \ - "/home/jpo-ode-svcs.jar"] +RUN apk add openssh +RUN apk add openrc +RUN rc-update add sshd + +ENTRYPOINT ["sh", "/home/startup_jpoode.sh"] diff --git a/startup_jpoode.sh b/startup_jpoode.sh new file mode 100644 index 000000000..266885aab --- /dev/null +++ b/startup_jpoode.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# NOTE: This is a bash script intended to be used by the Dockerfile and not intended to be used on its own + +# Create the necessary openrc directories on boot of the new container +sh -c rc-status +# Create the necessary file to run a service on openrc. This is necessary when using an alpine image +touch /run/openrc/softlevel +# Start the SSH/SCP server on boot of the new container +rc-service sshd start + +# Start the jpo-ode application +java -Djava.rmi.server.hostname=$DOCKER_HOST_IP -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.rmi.port=9090 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=true -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dlogback.configurationFile=/home/logging/logback.xml -jar /home/jpo-ode-svcs.jar From d25b957eaeaf82a9ee3580c98eabbd65d5d6bc92 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Mon, 24 Jun 2024 15:26:31 -0600 Subject: [PATCH 12/62] Removed 'ppm_tim' service from docker compose files --- docker-compose-confluent-cloud.yml | 14 -------------- docker-compose-ppm-nsv.yml | 20 -------------------- docker-compose.yml | 20 -------------------- sample.env | 4 ---- scripts/docker-run-ppm-env-file.bat | 2 +- 5 files changed, 1 insertion(+), 59 deletions(-) diff --git a/docker-compose-confluent-cloud.yml b/docker-compose-confluent-cloud.yml index 6d729451d..b8cad0943 100644 --- a/docker-compose-confluent-cloud.yml +++ b/docker-compose-confluent-cloud.yml @@ -86,20 +86,6 @@ services: PPM_LOG_TO_FILE: ${PPM_BSM_LOG_TO_FILE} PPM_LOG_LEVEL: ${PPM_BSM_LOG_LEVEL} - ppmtim: - build: - context: ./jpo-cvdp - dockerfile: Dockerfile.cdot - environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - KAFKA_TYPE: ${KAFKA_TYPE} - CONFLUENT_KEY: ${CONFLUENT_KEY} - CONFLUENT_SECRET: ${CONFLUENT_SECRET} - PPM_CONFIG_FILE: cdot_ppmTim.properties - PPM_LOG_TO_CONSOLE: ${PPM_TIM_LOG_TO_CONSOLE} - PPM_LOG_TO_FILE: ${PPM_TIM_LOG_TO_FILE} - PPM_LOG_LEVEL: ${PPM_TIM_LOG_LEVEL} - cvpep_bsm_depositor: build: ./jpo-s3-deposit image: jpoode_s3dep:latest diff --git a/docker-compose-ppm-nsv.yml b/docker-compose-ppm-nsv.yml index f5937b3b9..c8abe1e88 100644 --- a/docker-compose-ppm-nsv.yml +++ b/docker-compose-ppm-nsv.yml @@ -113,26 +113,6 @@ services: - kafka restart: on-failure - ppm_tim: - build: - context: ./jpo-cvdp - dockerfile: Dockerfile-nsv - args: - PPM_CONFIG_FILE: ${PPM_TIM_CONFIG_FILE} - PPM_MAP_FILE: ${PPM_MAP_FILE} - image: jpoode_ppm_tim:latest - environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - PPM_CONFIG_FILE: ${PPM_TIM_CONFIG_FILE} - PPM_MAP_FILE: ${PPM_MAP_FILE} - PPM_LOG_TO_CONSOLE: ${PPM_TIM_LOG_TO_CONSOLE} - PPM_LOG_TO_FILE: ${PPM_TIM_LOG_TO_FILE} - PPM_LOG_LEVEL: ${PPM_TIM_LOG_LEVEL} - volumes: - - ${DOCKER_SHARED_VOLUME}/ppm_tim:/ppm_data - depends_on: - - kafka - cvpep_bsm_depositor: build: ./jpo-s3-deposit image: jpoode_s3dep:latest diff --git a/docker-compose.yml b/docker-compose.yml index f61839bff..f88816da0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -127,26 +127,6 @@ services: max-size: "10m" max-file: "5" - ppm_tim: - build: - context: ./jpo-cvdp - dockerfile: Dockerfile - image: jpoode_ppm:latest - environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - PPM_CONFIG_FILE: ppmTim.properties - PPM_LOG_TO_CONSOLE: ${PPM_TIM_LOG_TO_CONSOLE} - PPM_LOG_TO_FILE: ${PPM_TIM_LOG_TO_FILE} - PPM_LOG_LEVEL: ${PPM_TIM_LOG_LEVEL} - volumes: - - ${DOCKER_SHARED_VOLUME}:/ppm_data - depends_on: - - kafka - logging: - options: - max-size: "10m" - max-file: "5" - cvpep_bsm_depositor: build: ./jpo-s3-deposit image: jpoode_s3dep:latest diff --git a/sample.env b/sample.env index a055fb9b8..6d9fecc04 100644 --- a/sample.env +++ b/sample.env @@ -138,16 +138,12 @@ ODE_SECURITY_SVCS_SIGNATURE_URI= # These are just the file names expected to be found in the ODE directory PPM_BSM_CONFIG_FILE=ppmBsm.properties -PPM_TIM_CONFIG_FILE=ppmTim.properties PPM_MAP_FILE=I_80.edges # PPM Logging PPM_BSM_LOG_TO_CONSOLE=true PPM_BSM_LOG_TO_FILE=false PPM_BSM_LOG_LEVEL=INFO -PPM_TIM_LOG_TO_FILE=false -PPM_TIM_LOG_TO_CONSOLE=true -PPM_TIM_LOG_LEVEL=INFO # ACM Logging AEM_LOG_TO_CONSOLE=true diff --git a/scripts/docker-run-ppm-env-file.bat b/scripts/docker-run-ppm-env-file.bat index 49a437c13..3a2533d2c 100644 --- a/scripts/docker-run-ppm-env-file.bat +++ b/scripts/docker-run-ppm-env-file.bat @@ -1 +1 @@ -docker run -it -v %DOCKER_SHARED_VOLUME%:/ppm_data --env-file=.env jpoode_ppm_tim:latest %1 \ No newline at end of file +docker run -it -v %DOCKER_SHARED_VOLUME%:/ppm_data --env-file=.env jpoode_ppm:latest %1 \ No newline at end of file From 471d98ac2344e447bbd6556d2ca3a0bab40a15f2 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Mon, 24 Jun 2024 15:28:42 -0600 Subject: [PATCH 13/62] Removed `ppmTim.properties` file --- ppmTim.properties | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 ppmTim.properties diff --git a/ppmTim.properties b/ppmTim.properties deleted file mode 100644 index 8c8e03e64..000000000 --- a/ppmTim.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Configuration details for the velocity filter. -# min and max velocity values are in units m/s per the J2735 specification. -privacy.filter.velocity=OFF -privacy.filter.velocity.min=2.235 -privacy.filter.velocity.max=35.763 - -# Configuration details for privacy ID redaction. -privacy.redaction.id=OFF -privacy.redaction.id.value=FFFFFFFF -privacy.redaction.id.inclusions=OFF -privacy.redaction.id.included=BEA10000,BEA10001 - -# Configuration details for geofencing. -privacy.filter.geofence=OFF -privacy.filter.geofence.mapfile=../data/I_80.edges -privacy.filter.geofence.sw.lat=40.997 -privacy.filter.geofence.sw.lon=-111.041 -privacy.filter.geofence.ne.lat=42.085 -privacy.filter.geofence.ne.lon=-104.047 - -# ODE / PPM Kafka topics. -privacy.topic.consumer=topic.OdeTimJson -privacy.topic.producer=topic.FilteredOdeTimJson - -group.id=0 - -# For testing purposes, use one partition. -privacy.kafka.partition=0 - -# The host ip address for the Broker. -metadata.broker.list=your.kafka.broker.ip:9092 - -# specify the compression codec for all data generated: none, gzip, snappy, lz4 -compression.type=none - From 87c8ff040aea3cd8d4fceec41ab0f43fb6ca0502 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Mon, 24 Jun 2024 15:31:07 -0600 Subject: [PATCH 14/62] Removed `rde_tim_depositor` service from docker compose files --- docker-compose-confluent-cloud.yml | 24 ------------------------ docker-compose-ppm-nsv.yml | 13 ------------- docker-compose.yml | 23 ----------------------- sample.env | 12 ------------ 4 files changed, 72 deletions(-) diff --git a/docker-compose-confluent-cloud.yml b/docker-compose-confluent-cloud.yml index b8cad0943..bbbaabaac 100644 --- a/docker-compose-confluent-cloud.yml +++ b/docker-compose-confluent-cloud.yml @@ -158,30 +158,6 @@ services: max-size: "10m" max-file: "5" - rde_tim_depositor: - build: ./jpo-s3-deposit - image: jpoode_s3dep:latest - environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - DEPOSIT_BUCKET_NAME: ${RDE_TIM_BUCKET_NAME} - DEPOSIT_KEY_NAME: ${RDE_TIM_DEPOSIT_KEY} - DEPOSIT_TOPIC: ${RDE_TIM_TOPIC} - K_AWS_ACCESS_KEY_ID: ${CVPEP_BSM_K_AWS_ACCESS_KEY_ID} - K_AWS_SECRET_ACCESS_SECRET: ${RDE_TIM_K_AWS_SECRET_ACCESS_SECRET} - K_AWS_SESSION_TOKEN: ${RDE_TIM_K_AWS_SESSION_TOKEN} - K_AWS_EXPIRATION: ${RDE_TIM_K_AWS_EXPIRATION} - API_ENDPOINT: ${RDE_TIM_API_ENDPOINT} - HEADER_ACCEPT: ${RDE_TIM_HEADER_ACCEPT} - HEADER_X_API_KEY: ${RDE_TIM_HEADER_X_API_KEY} - DEPOSIT_GROUP: ${RDE_TIM_GROUP} - KAFKA_TYPE: ${KAFKA_TYPE} - CONFLUENT_KEY: ${CONFLUENT_KEY} - CONFLUENT_SECRET: ${CONFLUENT_SECRET} - logging: - options: - max-size: "10m" - max-file: "5" - sdw_depositor: build: ./jpo-sdw-depositor image: jpoode_sdwdep:latest diff --git a/docker-compose-ppm-nsv.yml b/docker-compose-ppm-nsv.yml index c8abe1e88..751f8020f 100644 --- a/docker-compose-ppm-nsv.yml +++ b/docker-compose-ppm-nsv.yml @@ -152,19 +152,6 @@ services: depends_on: - kafka - rde_tim_depositor: - build: ./jpo-s3-deposit - image: jpoode_s3dep:latest - environment: - AWS_ACCESS_KEY_ID: ${RDE_TIM_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY: ${RDE_TIM_SECRET_ACCESS_KEY} - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - DEPOSIT_BUCKET_NAME: ${RDE_TIM_BUCKET_NAME} - DEPOSIT_KEY_NAME: ${RDE_TIM_DEPOSIT_KEY} - DEPOSIT_TOPIC: ${RDE_TIM_TOPIC} - depends_on: - - kafka - sdw_depositor: build: ./jpo-sdw-depositor image: jpoode_sdwdep:latest diff --git a/docker-compose.yml b/docker-compose.yml index f88816da0..0e5d69936 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -196,29 +196,6 @@ services: max-size: "10m" max-file: "5" - rde_tim_depositor: - build: ./jpo-s3-deposit - image: jpoode_s3dep:latest - environment: - DOCKER_HOST_IP: ${DOCKER_HOST_IP} - DEPOSIT_BUCKET_NAME: ${RDE_TIM_BUCKET_NAME} - DEPOSIT_KEY_NAME: ${RDE_TIM_DEPOSIT_KEY} - DEPOSIT_TOPIC: ${RDE_TIM_TOPIC} - K_AWS_ACCESS_KEY_ID: ${CVPEP_BSM_K_AWS_ACCESS_KEY_ID} - K_AWS_SECRET_ACCESS_SECRET: ${RDE_TIM_K_AWS_SECRET_ACCESS_SECRET} - K_AWS_SESSION_TOKEN: ${RDE_TIM_K_AWS_SESSION_TOKEN} - K_AWS_EXPIRATION: ${RDE_TIM_K_AWS_EXPIRATION} - API_ENDPOINT: ${RDE_TIM_API_ENDPOINT} - HEADER_ACCEPT: ${RDE_TIM_HEADER_ACCEPT} - HEADER_X_API_KEY: ${RDE_TIM_HEADER_X_API_KEY} - DEPOSIT_GROUP: ${RDE_TIM_GROUP} - depends_on: - - kafka - logging: - options: - max-size: "10m" - max-file: "5" - sdw_depositor: build: ./jpo-sdw-depositor image: jpoode_sdwdep:latest diff --git a/sample.env b/sample.env index 6d9fecc04..0e2f374a8 100644 --- a/sample.env +++ b/sample.env @@ -98,18 +98,6 @@ CVPEP_TIM_HEADER_ACCEPT=application/json CVPEP_TIM_HEADER_X_API_KEY= CVPEP_TIM_GROUP=group_cvpep_tim -RDE_TIM_BUCKET_NAME= -RDE_TIM_DEPOSIT_KEY=wydot-filtered-tim- -RDE_TIM_TOPIC=topic.FilteredOdeTimJson -RDE_TIM_K_AWS_ACCESS_KEY_ID=AccessKeyId -RDE_TIM_K_AWS_SECRET_ACCESS_SECRET=SecretAccessKey -RDE_TIM_K_AWS_SESSION_TOKEN=SessionToken -RDE_TIM_K_AWS_EXPIRATION=Expiration -RDE_TIM_API_ENDPOINT= -RDE_TIM_HEADER_ACCEPT=application/json -RDE_TIM_HEADER_X_API_KEY= -RDE_TIM_GROUP=group_rde_tim - ######################### # SDX Depositor Properties From 2940ea6ed6c7b30fb7f9af4bcbad4949391623f6 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Tue, 25 Jun 2024 10:02:43 -0600 Subject: [PATCH 15/62] Updated TIM data flow diagram to reflect removal of `ppm_tim` service --- docs/data-flow-diagrams/README.md | 53 +++++---- .../tim/TIM Data Flow.drawio | 102 ++++++++---------- .../tim/TIM Data Flow.drawio.png | Bin 273213 -> 252061 bytes 3 files changed, 67 insertions(+), 88 deletions(-) diff --git a/docs/data-flow-diagrams/README.md b/docs/data-flow-diagrams/README.md index ce5f4aadc..6a65768e6 100644 --- a/docs/data-flow-diagrams/README.md +++ b/docs/data-flow-diagrams/README.md @@ -39,12 +39,12 @@ The purpose of these diagrams is to show: 1. The FileUploadController class indirectly invokes the LogFileToAsn1CodecPublisher class, which handles the offloaded messages. 1. If the message is a DriverAlert, the LogFileToAsn1CodecPublisher class pushes it to the OdeDriverAlertJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. 1. If the message is a BSM, SPAT, TIM or MAP, the LogFileToAsn1CodecPublisher class pushes it to the corresponding OdeRawEncoded JSON topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -2. If the message is a BSM, SPAT, TIM or MAP, the Asn1CodecMessageServiceController pulls from the OdeRawEncoded JSON topics and processes the data with the corresponding Asn1Decode JSON class. This class then writes to the Asn1DecoderInput topic. -3. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from that topic and pushes decoded messages to the Asn1DecoderOutput topic. -4. The Asn1DecodeDataRouter class pulls from the Asn1DecodeOutput topic and deposits messages into the Pojo Messages group of topics and the Json Messages group of topics. -5. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the Json Messages group of topics and pushes filtered messages to the Filtered Json Messages group of topics. -6. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the Json Messages group of topics, converts the messages and pushes them to the Processed Spat/Map group of topics. -7. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the Processed Map/Spat group of topics and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. +1. If the message is a BSM, SPAT, TIM or MAP, the Asn1CodecMessageServiceController pulls from the OdeRawEncoded JSON topics and processes the data with the corresponding Asn1Decode JSON class. This class then writes to the Asn1DecoderInput topic. +1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from that topic and pushes decoded messages to the Asn1DecoderOutput topic. +1. The Asn1DecodeDataRouter class pulls from the Asn1DecodeOutput topic and deposits messages into the Pojo Messages group of topics and the Json Messages group of topics. +1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the Json Messages group of topics and pushes filtered messages to the Filtered Json Messages group of topics. +1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the Json Messages group of topics, converts the messages and pushes them to the Processed Spat/Map group of topics. +1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the Processed Map/Spat group of topics and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. ### BSM Data Flow 1 (Receiver Classes) 1. The BSM comes in through the BsmReceiver class and is pushed to the OdeRawEncodedBSMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. @@ -62,21 +62,20 @@ The purpose of these diagrams is to show: 1. The LogFileToAsn1CodecPublisher class pushes the BSM to the RawEncodedBSMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. 1. The Asn1CodecMessageServiceController pulls from the OdeRawEncodedBSMJson topic and pushes the BSM to the Asn1DecodeBSMJSON class. 1. The Asn1DecodeBSMJSON class pushes the BSM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. -3. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic and pushes the decoded BSM to the Asn1DecoderOutput topic. -4. The AsnCodecRouterServiceController pulls from the Asn1DecoderOutput topic and passes the BSM to the Asn1DecodedDataRouter class. -5. The Asn1DecodedDataRouter pushes the BSM to the OdeBsmRxPojo, OdeBsmTxPojo, OdeBsmPojo and OdeBsmDuringEventPojo topics. -6. The ToJsonServiceController class pulls from OdeBsmPojo and pushes the BSM in JSON form to the OdeBsmJson topic. -7. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeBsmJson topic and pushes the filtered BSM to the FilteredOdeBsmJson topic. +1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic and pushes the decoded BSM to the Asn1DecoderOutput topic. +1. The AsnCodecRouterServiceController pulls from the Asn1DecoderOutput topic and passes the BSM to the Asn1DecodedDataRouter class. +1. The Asn1DecodedDataRouter pushes the BSM to the OdeBsmRxPojo, OdeBsmTxPojo, OdeBsmPojo and OdeBsmDuringEventPojo topics. +1. The ToJsonServiceController class pulls from OdeBsmPojo and pushes the BSM in JSON form to the OdeBsmJson topic. +1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeBsmJson topic and pushes the filtered BSM to the FilteredOdeBsmJson topic. ### TIM Data Flow 1 (Tim Depositor Controller) -1. The TIM comes in through the TimDepositorController class and is pushed to the J2735TimBroadcastJson, OdeTimBroadcastJson, OdeTimBroadcastPojo and Asn1EncoderInput topics. +1. The TIM comes in through the TimDepositorController class and is pushed to the OdeTimJson, J2735TimBroadcastJson, OdeTimBroadcastJson, OdeTimBroadcastPojo and Asn1EncoderInput topics. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1EncoderInput topic, encodes the TIM, and pushes it to the Asn1EncoderOutput topic. 1. The Asn1EncodedDataRouter class pulls from the Asn1EncoderOutput topic and passes the TIM to the Asn1CommandManager class. 1. If the message is not signed, it is sent to the SignatureController class to be signed. 1. If the message is signed and meant for the RSU, it will be passed to the RsuDepositor class which sends the message to the RSUs. 1. If the message is signed, is meant for the SDX and the message has not been double-encoded, yet, it will be sent back to the Asn1EncoderInput topic for encoding. 1. If the message is signed, is meant for the SDX and the message has been double-encoded, it will be passed to the SDWDepositorInput, pulled into the [SDWD](https://github.com/usdot-jpo-ode/jpo-sdw-depositor) and sent to the SDX. -1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeTimJson topic, filters the TIM and pushes it to the FilteredOdeTimJson topic. ### TIM Data Flow 2 (Receiver Classes) 1. The TIM comes in through the TimReceiver class and is pushed to the OdeRawEncodedTIMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. @@ -84,7 +83,6 @@ The purpose of these diagrams is to show: 1. The Asn1DecodeTIMJSON class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the TIM, and pushes it to the Asn1DecoderOutput topic. 1. The Asn1DecodedDataRouter pulls from the Asn1DecoderOutput topic and pushes the TIM to the OdeTimJson, OdeTimRxJson and OdeDNMsgJson topics. -1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeTimJson topic, filters the TIM and pushes it to the FilteredOdeTimJson topic. ### TIM Data Flow 3 (Offloaded Files) 1. The TIM is offloaded onto a directory referenced by the FileUploadController class. @@ -92,9 +90,8 @@ The purpose of these diagrams is to show: 1. The LogFileToAsn1CodecPublisher class pushes the TIM to the RawEncodedTIMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. 1. The AsnCodecMessageServiceController pulls from the OdeRawEncodedTIMJson topic and passes the TIM to the Asn1DecodeTIMJSON class. 1. The Asn1DecodeTIMJSON class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. -2. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the TIM, and pushes it to the Asn1DecoderOutput topic. -3. The Asn1DecodedDataRouter pulls from the Asn1DecoderOutput topic and pushes the TIM to the OdeTimJson, OdeTimRxJson and OdeDNMsgJson topics. -4. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeTimJson topic, filters the TIM and pushes it to the FilteredOdeTimJson topic. +1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the TIM, and pushes it to the Asn1DecoderOutput topic. +1. The Asn1DecodedDataRouter pulls from the Asn1DecoderOutput topic and pushes the TIM to the OdeTimJson, OdeTimRxJson and OdeDNMsgJson topics. ### SPAT Data Flow 1 (Receiver Classes) 1. The SPAT comes in through the SpatReceiver class and is pushed to the OdeRawEncodedSPATJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. @@ -113,12 +110,12 @@ The purpose of these diagrams is to show: 1. The LogFileToAsn1CodecPublisher class pushes the SPAT to the OdeRawEncodedSPATJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. 1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedSPATJson topic and passes the SRM to the Asn1DecodeSPATJSON class. 1. The Asn1DecodeSPATJSON class pushes the SPAT to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. -2. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the SPAT, and pushes it to the Asn1DecoderOutput topic. -3. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the SPAT to the Asn1DecodedDataRouter class. -4. The Asn1DecodedDataRouter pushes the SPAT to the OdeSpatPojo, OdeSpatRxPojo, OdeDNMsgJson, OdeSpatRxJson, OdeSpatTxPojo and OdeSpatJson topics. -5. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeSpatJson topic, filters the SPAT, and pushes it to the FilteredOdeSpatJson topic. -6. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeSpatJson topic, converts the SPAT and pushes it to the ProcessedOdeSpatJson topic. -7. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeSpatJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. +1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the SPAT, and pushes it to the Asn1DecoderOutput topic. +1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the SPAT to the Asn1DecodedDataRouter class. +1. The Asn1DecodedDataRouter pushes the SPAT to the OdeSpatPojo, OdeSpatRxPojo, OdeDNMsgJson, OdeSpatRxJson, OdeSpatTxPojo and OdeSpatJson topics. +1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeSpatJson topic, filters the SPAT, and pushes it to the FilteredOdeSpatJson topic. +1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeSpatJson topic, converts the SPAT and pushes it to the ProcessedOdeSpatJson topic. +1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeSpatJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. ### MAP Data Flow 1 (Receiver Classes) 1. The MAP comes in through the MapReceiver class and is pushed to the OdeRawEncodedMAPJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. @@ -136,11 +133,11 @@ The purpose of these diagrams is to show: 1. The LogFileToAsn1CodecPublisher class pushes the MAP to the OdeRawEncodedMAPJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. 1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedMAPJson topic and passes the MAP to the Asn1DecodeMAPJSON class. 1. The Asn1DecodeMAPJSON class pushes the MAP to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. -2. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the MAP, and pushes it to the Asn1DecoderOutput topic. -3. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the MAP to the Asn1DecodedDataRouter class. -4. The Asn1DecodedDataRouter class pushes the MAP to the OdeMapTxPojo and OdeMapJson topics. -5. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeMapJson topic, converts the MAP and pushes it to the ProcessedOdeMapJson topic. -6. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeMapJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. +1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the MAP, and pushes it to the Asn1DecoderOutput topic. +1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the MAP to the Asn1DecodedDataRouter class. +1. The Asn1DecodedDataRouter class pushes the MAP to the OdeMapTxPojo and OdeMapJson topics. +1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeMapJson topic, converts the MAP and pushes it to the ProcessedOdeMapJson topic. +1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeMapJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. ### SRM Data Flow 1. The SRM comes in through the SrmReceiver class and is pushed to the OdeRawEncodedSRMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. diff --git a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio b/docs/data-flow-diagrams/tim/TIM Data Flow.drawio index cebd15488..7bdae6831 100644 --- a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio +++ b/docs/data-flow-diagrams/tim/TIM Data Flow.drawio @@ -1,10 +1,10 @@ - + - + - + @@ -14,7 +14,7 @@ - + @@ -59,16 +59,13 @@ - + - - - - + - + @@ -76,7 +73,7 @@ - + @@ -95,15 +92,6 @@ - - - - - - - - - @@ -162,20 +150,17 @@ - - - - + - + - + @@ -186,9 +171,6 @@ - - - @@ -209,7 +191,7 @@ - + @@ -236,82 +218,82 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -319,16 +301,16 @@ - + - + - + - + diff --git a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio.png b/docs/data-flow-diagrams/tim/TIM Data Flow.drawio.png index a1ad71aacd5193ca27c892c54b2b13a5680092f5..1c28d8e7f847d465c7a62394c1eee5ce873664ee 100644 GIT binary patch literal 252061 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

WAn=j) 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

Fv4B4n3E^oOBiSnM(*hcKd$Z%^?Owq54Vay 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

6UDCQ$jg@9p$^+6xnECd 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%0A)e&+0D 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 From 7f60880f7c070245170ccbf5230f4b04746d827e Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Tue, 25 Jun 2024 10:23:16 -0600 Subject: [PATCH 16/62] Added .gitignore for data-flow-diagrams directory --- docs/data-flow-diagrams/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/data-flow-diagrams/.gitignore diff --git a/docs/data-flow-diagrams/.gitignore b/docs/data-flow-diagrams/.gitignore new file mode 100644 index 000000000..fc29c63d5 --- /dev/null +++ b/docs/data-flow-diagrams/.gitignore @@ -0,0 +1 @@ +*/*.bkp \ No newline at end of file From 09c2fd3d5485d0474362deb02390fc0084ba9039 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Tue, 25 Jun 2024 10:27:35 -0600 Subject: [PATCH 17/62] Added `ppm_data/*` to root .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index dcf38f29c..436aa2d2d 100644 --- a/.gitignore +++ b/.gitignore @@ -129,3 +129,7 @@ settings.xml /jpo-security-svcs/*.log /qa/test-harness/*.log /qa/test-harness/.vscode + +######################### +### jpo-cvdp ### +ppm_data/* \ No newline at end of file From c415b8f48c8b7f4dc558140d0c42a16e13bd7652 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Thu, 27 Jun 2024 17:13:56 -0600 Subject: [PATCH 18/62] Adding Endpoint for Receiving All message Types --- docker-compose.yml | 1 + .../us/dot/its/jpo/ode/OdeProperties.java | 20 +++ .../stream/LogFileToAsn1CodecPublisher.java | 6 + .../ode/udp/AbstractUdpReceiverPublisher.java | 2 +- .../dot/its/jpo/ode/udp/bsm/BsmReceiver.java | 77 +++++++----- .../udp/controller/UdpServicesController.java | 4 + .../jpo/ode/udp/generic/GenericReceiver.java | 118 ++++++++++++++++++ .../dot/its/jpo/ode/udp/map/MapReceiver.java | 58 +++++---- .../dot/its/jpo/ode/udp/psm/PsmReceiver.java | 55 ++++---- .../its/jpo/ode/udp/spat/SpatReceiver.java | 54 ++++---- .../dot/its/jpo/ode/udp/srm/SrmReceiver.java | 52 ++++---- .../dot/its/jpo/ode/udp/ssm/SsmReceiver.java | 57 +++++---- .../dot/its/jpo/ode/udp/tim/TimReceiver.java | 56 +++++---- .../us/dot/its/jpo/ode/uper/UperUtil.java | 68 ++++++---- scripts/tests/udpsender_generic.py | 33 +++++ 15 files changed, 462 insertions(+), 199 deletions(-) create mode 100644 jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java create mode 100644 scripts/tests/udpsender_generic.py diff --git a/docker-compose.yml b/docker-compose.yml index f61839bff..59c6defb3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,6 +48,7 @@ services: - "44920:44920/udp" - "44930:44930/udp" - "44940:44940/udp" + - "44990:44990/udp" - "5555:5555/udp" - "6666:6666/udp" environment: diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java index 7b06ec783..e8988453b 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java @@ -179,6 +179,10 @@ public class OdeProperties implements EnvironmentAware { private String kafkaTopicOdePsmJson = "topic.OdePsmJson"; private int psmReceiverPort = 44940; private int psmBufferSize = 500; + + // Generic Receiver + private int genericReceiverPort = 44990; + private int genericBufferSize = 2000; // DriverAlerts private String kafkaTopicDriverAlertJson = "topic.OdeDriverAlertJson"; @@ -492,6 +496,22 @@ public void setPsmBufferSize(int psmBufferSize) { this.psmBufferSize = psmBufferSize; } + public int getGenericReceiverPort() { + return genericReceiverPort; + } + + public void setGenericReceiverPort(int genericReceiverPort) { + this.genericReceiverPort = genericReceiverPort; + } + + public int getGenericBufferSize() { + return genericBufferSize; + } + + public void setGenericBufferSize(int psmBufferSize) { + this.genericBufferSize = genericBufferSize; + } + public String getDdsCasUrl() { return ddsCasUrl; } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java index 17b9e42c4..0454d8ecc 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java @@ -167,9 +167,15 @@ private void publishList(XmlUtils xmlUtils, List dataList) throws JsonP if (messageType == "MAP") { publisher.publish(JsonUtils.toJson(odeData, false), publisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); + } else if(messageType == "SPAT"){ + publisher.publish(JsonUtils.toJson(odeData, false), + publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); } else if (messageType == "TIM") { publisher.publish(JsonUtils.toJson(odeData, false), publisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); + } else if (messageType == "BSM") { + publisher.publish(JsonUtils.toJson(odeData, false), + publisher.getOdeProperties().getKafkaTopicOdeBsmJson()); } else if (messageType == "SSM") { publisher.publish(JsonUtils.toJson(odeData, false), publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSSMJson()); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java index 96e373ce6..9ae73b255 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java @@ -57,7 +57,7 @@ public AbstractUdpReceiverPublisher(OdeProperties odeProps, int port, int buffer } } - public OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil.SupportedMessageTypes msgType) { + public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil.SupportedMessageTypes msgType) { String startFlag = UperUtil.getStartFlag(msgType); // extract the actual packet from the buffer byte[] payload = packet.getData(); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java index b8b252f48..7dcd35e22 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java @@ -58,45 +58,54 @@ public void run() { logger.debug("Waiting for UDP BSM packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload bsmPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.BSM); - if (bsmPayload == null) - continue; - OdeBsmMetadata bsmMetadata = new OdeBsmMetadata(bsmPayload); - - // Set BSM Metadata values that can be assumed from the UDP endpoint - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - bsmMetadata.setOdeReceivedAt(timestamp); - - ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); - OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation( - "unavailable", - "unavailable", - "unavailable", - "unavailable", - "unavailable"); - receivedMessageDetails.setRxSource(RxSource.RSU); - receivedMessageDetails.setLocationData(locationData); - bsmMetadata.setReceivedMessageDetails(receivedMessageDetails); - - bsmMetadata.setOriginIp(senderIp); - bsmMetadata.setBsmSource(BsmSource.EV); - bsmMetadata.setRecordType(RecordType.bsmTx); - bsmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - bsmMetadata.setSecurityResultCode(SecurityResultCode.success); - - // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - bsmPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(bsmMetadata, bsmPayload), false), - bsmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedBSMJson()); + String bsmJson = buildJsonBsmFromPacket(packet); + + if(bsmJson != null){ + // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic + bsmPublisher.publish(bsmJson, bsmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedBSMJson()); + } + + } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + public static String buildJsonBsmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + OdeAsn1Payload bsmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.BSM); + if (bsmPayload == null) + return null; + OdeBsmMetadata bsmMetadata = new OdeBsmMetadata(bsmPayload); + + // Set BSM Metadata values that can be assumed from the UDP endpoint + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + bsmMetadata.setOdeReceivedAt(timestamp); + + ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); + OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation( + "unavailable", + "unavailable", + "unavailable", + "unavailable", + "unavailable"); + receivedMessageDetails.setRxSource(RxSource.RSU); + receivedMessageDetails.setLocationData(locationData); + bsmMetadata.setReceivedMessageDetails(receivedMessageDetails); + + bsmMetadata.setOriginIp(senderIp); + bsmMetadata.setBsmSource(BsmSource.EV); + bsmMetadata.setRecordType(RecordType.bsmTx); + bsmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + bsmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(bsmMetadata, bsmPayload), false); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java index f16c657bd..c27352a9b 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java @@ -7,6 +7,7 @@ import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.bsm.BsmReceiver; +import us.dot.its.jpo.ode.udp.generic.GenericReceiver; import us.dot.its.jpo.ode.udp.tim.TimReceiver; import us.dot.its.jpo.ode.udp.ssm.SsmReceiver; import us.dot.its.jpo.ode.udp.srm.SrmReceiver; @@ -53,6 +54,9 @@ public UdpServicesController(OdeProperties odeProps) { // PSM internal port rm.submit(new PsmReceiver(odeProps)); + // Generic Receiver internal port + rm.submit(new GenericReceiver(odeProps)); + logger.debug("UDP receiver services started."); } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java new file mode 100644 index 000000000..6c9b8297a --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java @@ -0,0 +1,118 @@ +package us.dot.its.jpo.ode.udp.generic; + +import java.net.DatagramPacket; +import org.apache.tomcat.util.buf.HexUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.coder.StringPublisher; +import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.bsm.BsmReceiver; +import us.dot.its.jpo.ode.udp.map.MapReceiver; +import us.dot.its.jpo.ode.udp.psm.PsmReceiver; +import us.dot.its.jpo.ode.udp.spat.SpatReceiver; +import us.dot.its.jpo.ode.udp.srm.SrmReceiver; +import us.dot.its.jpo.ode.udp.ssm.SsmReceiver; +import us.dot.its.jpo.ode.udp.tim.TimReceiver; +import us.dot.its.jpo.ode.uper.UperUtil; + +public class GenericReceiver extends AbstractUdpReceiverPublisher { + + private static Logger logger = LoggerFactory.getLogger(GenericReceiver.class); + + private StringPublisher publisher; + + + + @Autowired + public GenericReceiver(OdeProperties odeProps) { + this(odeProps, odeProps.getGenericReceiverPort(), odeProps.getGenericBufferSize()); + + this.publisher = new StringPublisher(odeProps); + } + + public GenericReceiver(OdeProperties odeProps, int port, int bufferSize) { + super(odeProps, port, bufferSize); + + this.publisher = new StringPublisher(odeProps); + + } + + @Override + public void run() { + + logger.debug("Generic UDP Receiver Service started."); + + byte[] buffer = new byte[bufferSize]; + + + + do { + + // packet should be recreated on each loop to prevent latent data in buffer + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + try { + logger.debug("Waiting for Generic UDP packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + senderIp = packet.getAddress().getHostAddress(); + senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + byte[] payload = packet.getData(); + if (payload == null){ + logger.debug("Skipping Null Payload"); + continue; + } + String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); + String messageType = UperUtil.determineHexPacketType(payloadHexString); + + logger.debug("Detected Message Type {}", messageType); + + if (messageType == "MAP") { + String mapJson = MapReceiver.buildJsonMapFromPacket(packet); + if(mapJson != null){ + publisher.publish(mapJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); + } + } else if(messageType == "SPAT") { + String spatJson = SpatReceiver.buildJsonSpatFromPacket(packet); + if(spatJson != null){ + publisher.publish(spatJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); + } + } else if (messageType == "TIM") { + String timJson = TimReceiver.buildJsonTimFromPacket(packet); + if(timJson != null){ + publisher.publish(timJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); + } + } else if (messageType == "BSM") { + String bsmJson = BsmReceiver.buildJsonBsmFromPacket(packet); + if(bsmJson!=null){ + publisher.publish(bsmJson, this.odeProperties.getKafkaTopicOdeRawEncodedBSMJson()); + } + } else if (messageType == "SSM") { + String ssmJson = SsmReceiver.buildJsonSsmFromPacket(packet); + if(ssmJson!=null){ + publisher.publish(ssmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSSMJson()); + } + } else if (messageType == "SRM") { + String srmJson = SrmReceiver.buildJsonSrmFromPacket(packet); + if(srmJson!=null){ + publisher.publish(srmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSRMJson()); + } + } else if (messageType == "PSM") { + String psmJson = PsmReceiver.buildJsonPsmFromPacket(packet); + if(psmJson!=null){ + publisher.publish(psmJson, this.odeProperties.getKafkaTopicOdeRawEncodedPSMJson()); + } + }else{ + logger.debug("Unknown Message Type"); + } + } + } catch (Exception e) { + logger.error("Error receiving packet", e); + } + } while (!isStopped()); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java index d77b15cf2..05f73f98c 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java @@ -54,34 +54,44 @@ public void run() { logger.debug("Waiting for UDP Map packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload mapPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.MAP); - if (mapPayload == null) - continue; - OdeMapMetadata mapMetadata = new OdeMapMetadata(mapPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - mapMetadata.setOdeReceivedAt(timestamp); - - mapMetadata.setOriginIp(senderIp); - mapMetadata.setMapSource(MapSource.RSU); - mapMetadata.setRecordType(RecordType.mapTx); - mapMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - mapMetadata.setSecurityResultCode(SecurityResultCode.success); - - // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - mapPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(mapMetadata, mapPayload), false), - mapPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); + + String mapJson = buildJsonMapFromPacket(packet); + if(mapJson != null){ + // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic + mapPublisher.publish(mapJson, mapPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); + } + } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + + public static String buildJsonMapFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload mapPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.MAP); + if (mapPayload == null) + return null; + OdeMapMetadata mapMetadata = new OdeMapMetadata(mapPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + mapMetadata.setOdeReceivedAt(timestamp); + + mapMetadata.setOriginIp(senderIp); + mapMetadata.setMapSource(MapSource.RSU); + mapMetadata.setRecordType(RecordType.mapTx); + mapMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + mapMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(mapMetadata, mapPayload), false); + + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java index 7bd56c95c..9acd23776 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java @@ -54,34 +54,41 @@ public void run() { logger.debug("Waiting for UDP PSM packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload psmPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.PSM); - if (psmPayload == null) - continue; - OdePsmMetadata psmMetadata = new OdePsmMetadata(psmPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - psmMetadata.setOdeReceivedAt(timestamp); - - psmMetadata.setOriginIp(senderIp); - psmMetadata.setPsmSource(PsmSource.RSU); - psmMetadata.setRecordType(RecordType.psmTx); - psmMetadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); - psmMetadata.setSecurityResultCode(SecurityResultCode.success); - - // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - psmPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(psmMetadata, psmPayload), false), - psmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedPSMJson()); + String psmJson = buildJsonPsmFromPacket(packet); + if(psmJson != null){ + // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic + psmPublisher.publish(psmJson, psmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedPSMJson()); + } } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + public static String buildJsonPsmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload psmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.PSM); + if (psmPayload == null) + return null; + OdePsmMetadata psmMetadata = new OdePsmMetadata(psmPayload); + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + psmMetadata.setOdeReceivedAt(timestamp); + + psmMetadata.setOriginIp(senderIp); + psmMetadata.setPsmSource(PsmSource.RSU); + psmMetadata.setRecordType(RecordType.psmTx); + psmMetadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); + psmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(psmMetadata, psmPayload), false); + + + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java index 5bb7bd8ef..9ecb993d3 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java @@ -54,34 +54,42 @@ public void run() { logger.debug("Waiting for UDP SPaT packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload spatPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SPAT); - if (spatPayload == null) - continue; - OdeSpatMetadata spatMetadata = new OdeSpatMetadata(spatPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - spatMetadata.setOdeReceivedAt(timestamp); - - spatMetadata.setOriginIp(senderIp); - spatMetadata.setSpatSource(SpatSource.RSU); - spatMetadata.setRecordType(RecordType.spatTx); - spatMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - spatMetadata.setSecurityResultCode(SecurityResultCode.success); - + + String spatJson = buildJsonSpatFromPacket(packet); // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - spatPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(spatMetadata, spatPayload), false), - spatPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); + spatPublisher.publish(spatJson,spatPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + + public static String buildJsonSpatFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload spatPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SPAT); + if (spatPayload == null) + return null; + OdeSpatMetadata spatMetadata = new OdeSpatMetadata(spatPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + spatMetadata.setOdeReceivedAt(timestamp); + + spatMetadata.setOriginIp(senderIp); + spatMetadata.setSpatSource(SpatSource.RSU); + spatMetadata.setRecordType(RecordType.spatTx); + spatMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + spatMetadata.setSecurityResultCode(SecurityResultCode.success); + + + return JsonUtils.toJson(new OdeAsn1Data(spatMetadata, spatPayload), false); + + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java index b9d9121bd..edbbf9da5 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java @@ -54,34 +54,40 @@ public void run() { logger.debug("Waiting for UDP SRM packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload srmPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SRM); - if (srmPayload == null) - continue; - OdeSrmMetadata srmMetadata = new OdeSrmMetadata(srmPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - srmMetadata.setOdeReceivedAt(timestamp); - - srmMetadata.setOriginIp(senderIp); - srmMetadata.setSrmSource(SrmSource.RSU); - srmMetadata.setRecordType(RecordType.srmTx); - srmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - srmMetadata.setSecurityResultCode(SecurityResultCode.success); - + + String srmJson = buildJsonSrmFromPacket(packet); // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - srmPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(srmMetadata, srmPayload), false), - srmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSRMJson()); + srmPublisher.publish(srmJson, srmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSRMJson()); } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + public static String buildJsonSrmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload srmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SRM); + if (srmPayload == null) + return null; + OdeSrmMetadata srmMetadata = new OdeSrmMetadata(srmPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + srmMetadata.setOdeReceivedAt(timestamp); + + srmMetadata.setOriginIp(senderIp); + srmMetadata.setSrmSource(SrmSource.RSU); + srmMetadata.setRecordType(RecordType.srmTx); + srmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + srmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(srmMetadata, srmPayload), false); + + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java index 27108eec7..c12aeae4a 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java @@ -54,34 +54,43 @@ public void run() { logger.debug("Waiting for UDP SSM packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload ssmPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SSM); - if (ssmPayload == null) - continue; - OdeSsmMetadata ssmMetadata = new OdeSsmMetadata(ssmPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - ssmMetadata.setOdeReceivedAt(timestamp); - - ssmMetadata.setOriginIp(senderIp); - ssmMetadata.setSsmSource(SsmSource.RSU); - ssmMetadata.setRecordType(RecordType.ssmTx); - ssmMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - ssmMetadata.setSecurityResultCode(SecurityResultCode.success); - - // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - ssmPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(ssmMetadata, ssmPayload), false), - ssmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSSMJson()); + + String ssmJson = buildJsonSsmFromPacket(packet); + + if(ssmJson!=null){ + // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic + ssmPublisher.publish(ssmJson, ssmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSSMJson()); + } + } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + public static String buildJsonSsmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload ssmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SSM); + if (ssmPayload == null) + return null; + OdeSsmMetadata ssmMetadata = new OdeSsmMetadata(ssmPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + ssmMetadata.setOdeReceivedAt(timestamp); + + ssmMetadata.setOriginIp(senderIp); + ssmMetadata.setSsmSource(SsmSource.RSU); + ssmMetadata.setRecordType(RecordType.ssmTx); + ssmMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + ssmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(ssmMetadata, ssmPayload), false); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java index 5524463fe..3fb8d1cc2 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java @@ -52,33 +52,43 @@ public void run() { logger.debug("Waiting for UDP TIM packets..."); socket.receive(packet); if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload timPayload = super.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.TIM); - if (timPayload == null) - continue; - OdeTimMetadata timMetadata = new OdeTimMetadata(timPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - timMetadata.setOdeReceivedAt(timestamp); - - timMetadata.setOriginIp(senderIp); - timMetadata.setRecordType(RecordType.timMsg); - timMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - timMetadata.setSecurityResultCode(SecurityResultCode.success); - - // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic - timPublisher.publish(JsonUtils.toJson(new OdeAsn1Data(timMetadata, timPayload), false), - timPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); + + String timJson = buildJsonTimFromPacket(packet); + if(timJson != null){ + // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic + timPublisher.publish(timJson, timPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); + } + } } catch (Exception e) { logger.error("Error receiving packet", e); } } while (!isStopped()); } + + public static String buildJsonTimFromPacket(DatagramPacket packet){ + + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload timPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.TIM); + if (timPayload == null) + return null; + OdeTimMetadata timMetadata = new OdeTimMetadata(timPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + timMetadata.setOdeReceivedAt(timestamp); + + timMetadata.setOriginIp(senderIp); + timMetadata.setRecordType(RecordType.timMsg); + timMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + timMetadata.setSecurityResultCode(SecurityResultCode.success); + return JsonUtils.toJson(new OdeAsn1Data(timMetadata, timPayload), false); + + + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java index 06d0eb360..486c7b1eb 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java @@ -88,41 +88,63 @@ public static String stripDot3Header(String hexString, String payload_start_flag return headers.substring(signedDot2StartIndex, headers.length()) + payload; } - /** - * Determines the message type based off the most likely start flag - * - * @param payload The OdeMsgPayload to check the content of. - */ + /** + * Determines the message type based off the most likely start flag + * + * @param payload The OdeMsgPayload to check the content of. + */ public static String determineMessageType(OdeMsgPayload payload) { String messageType = ""; try { JSONObject payloadJson = JsonUtils.toJSONObject(payload.getData().toJson()); String hexString = payloadJson.getString("bytes").toLowerCase(); + messageType = determineHexPacketType(hexString); - HashMap flagIndexes = new HashMap(); - flagIndexes.put("MAP", hexString.indexOf(MAP_START_FLAG)); - flagIndexes.put("TIM", hexString.indexOf(TIM_START_FLAG)); - flagIndexes.put("SSM", hexString.indexOf(SSM_START_FLAG)); - flagIndexes.put("PSM", hexString.indexOf(PSM_START_FLAG)); - flagIndexes.put("SRM", hexString.indexOf(SRM_START_FLAG)); - - int lowestIndex = Integer.MAX_VALUE; - for (String key : flagIndexes.keySet()) { - if (flagIndexes.get(key) == -1) { - logger.debug("This message is not of type " + key); - continue; - } - if (flagIndexes.get(key) < lowestIndex) { - messageType = key; - lowestIndex = flagIndexes.get(key); - } - } } catch (JsonUtilsException e) { logger.error("JsonUtilsException while checking message header. Stacktrace: " + e.toString()); } return messageType; } + public static String determineHexPacketType(String hexString){ + + String messageType = ""; + HashMap flagIndexes = new HashMap(); + + flagIndexes.put("MAP", findValidStartFlagLocation(hexString, MAP_START_FLAG)); + flagIndexes.put("SPAT", findValidStartFlagLocation(hexString, SPAT_START_FLAG)); + flagIndexes.put("TIM", findValidStartFlagLocation(hexString, TIM_START_FLAG)); + flagIndexes.put("BSM", findValidStartFlagLocation(hexString, BSM_START_FLAG)); + flagIndexes.put("SSM", findValidStartFlagLocation(hexString, SSM_START_FLAG)); + flagIndexes.put("PSM", findValidStartFlagLocation(hexString, PSM_START_FLAG)); + flagIndexes.put("SRM", findValidStartFlagLocation(hexString, SRM_START_FLAG)); + + int lowestIndex = Integer.MAX_VALUE; + for (String key : flagIndexes.keySet()) { + if (flagIndexes.get(key) == -1) { + logger.debug("This message is not of type " + key); + continue; + } + if (flagIndexes.get(key) < lowestIndex) { + messageType = key; + lowestIndex = flagIndexes.get(key); + } + } + return messageType; + } + + public static int findValidStartFlagLocation(String hexString, String startFlag){ + int index = hexString.indexOf(startFlag); + + // Make sure start flag is on an even numbered byte + while(index != -1 && index %2 != 0){ + index = hexString.indexOf(startFlag, index+1); + } + return index; + } + + + // Get methods for message start flags public static String getBsmStartFlag() { return BSM_START_FLAG; diff --git a/scripts/tests/udpsender_generic.py b/scripts/tests/udpsender_generic.py new file mode 100644 index 000000000..36d02aaa4 --- /dev/null +++ b/scripts/tests/udpsender_generic.py @@ -0,0 +1,33 @@ +import socket +import time +import os + +BSM_MESSAGE = "0022e12d18466c65c1493800000e00e4616183e85a8f0100c000038081bc001480b8494c4c950cd8cde6e9651116579f22a424dd78fffff00761e4fd7eb7d07f7fff80005f11d1020214c1c0ffc7c016aff4017a0ff65403b0fd204c20ffccc04f8fe40c420ffe6404cefe60e9a10133408fcfde1438103ab4138f00e1eec1048ec160103e237410445c171104e26bc103dc4154305c2c84103b1c1c8f0a82f42103f34262d1123198103dac25fb12034ce10381c259f12038ca103574251b10e3b2210324c23ad0f23d8efffe0000209340d10000004264bf00" +MAP_MESSAGE = "001283c138003000205e9c014d3eab092ca624b5518202dc3658042800000400023622c60ca009f66d48abfaf81388d8ad18070027d9b2ffcfe9804f13667b1ffd009ec2c76e3ffc82c4e0001004b00c5000000800066c4574101813ecd8b757fae027d9b30e6ff5604ec363561fe7809ec6cd69bfec813c4d8a617fc9027d9b2147008604fb163666000016250000802580228000001000096229e1309b51a6fe4204dd361cf1fe5009f6018e1000096020a00000080004d88a57f84027d9b3827002804ec36087600a009f62c289407282c310001c0440188800000006c46dbe02813ec5816d800710052200000001b11b6fad404fb16054a0000401c8800000006c47b3d24813ec5816d801b100c4200000000af890f12c580007e87100d4200000008af4c0f12c580077e7a2c0004000160002001cb028d000000800052c160bc40b5fffd8a9409d86bfebb5b40141457fef53b76c008b467014145800080002bffcbffc82c6a0001804b024d000000800036c2213c3b013ecd80096d64027d9affd8cdfc04f635ff7983bc09f66c0082aa2014280b1b80006012c0b3400000100004b02bcf0f6d7fe065d602788b0138eb900b1240001012c083400000080009b0c2af0b804fb15fe6de171afff6c63e04ec15fe1de670060e40002581ea8000004000135da6df0180a0a6adc2c00d0143cd51897fda028c8abb25001a0b0680008012c105400000200009aedbefae005053540ee003c0a326a9cf3fed8143c5667780010582c0004009608aa00000080004d76de7ee402829aba88ffdc050f354525fff80a322bcf23fa602c690000c04b0395000000200016bb4fbd4e01414d3215800802940ab108fff2030d2000110126200000001aee5103be050a15f6f1ffc8404d8800000006bb97c18e0142857dfa800010146200000001aee89099a050a15f8720000b05dd000000800046be3743b781428d80e1b00002879b00514b4404f63600827d8c09e22c000400015ffe6007016190000402582ce8000004000135ecee1de80a146c02e54758143cd8059ad3e027b1b00613dd004f102c360000804b055d000000200046bcc7c3c781428d80108c6e02829b002b2ece050a16019a4b29b00ab5c3604f136004e410409ec018a10000960c3a00000080004d7de9878602851b003923cc05053601623b440a0a6bfb8c3a5014140b0640005012c197400000100005afe570ef2050a36003a47c80a0a6bfd2c45f014140b054000501101a8200000001b05a90edc050535ffe605800a0a101b8200000001b08a30ec0050535ffe605300a0a101c8200000005b0c6f0ea4050515ffca0568b0001000e" +SPAT_MESSAGE = "001338000817a780000089680500204642b342b34802021a15a955a940181190acd0acd20100868555c555c00104342aae2aae002821a155715570" +PSM_MESSAGE = "011d0000201a0000021bd86891de75f84da101c13f042e2214141fff00022c2000270000000163b2cc7986010000" +SSM_MESSAGE = "001e120000000005e9c04071a26614c06000040ba0" +SRM_MESSAGE = "001d2130000010090bd341080d00855c6c0c6899853000a534f7c24cb29897694759b7c0" +TIM_MESSAGE = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e" +BAD_MESSAGE = "0000badc0de0000000000000000000000000000000" + +# Currently set to oim-dev environment's ODE +UDP_IP = os.getenv('DOCKER_HOST_IP') +UDP_PORT = 44990 +print("UDP target IP:", UDP_IP) +print("UDP target port:", UDP_PORT) +#print("message:", MESSAGE) + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP + +while True: + time.sleep(5) + print("sending Messages every 5 second") + sock.sendto(bytes.fromhex(BSM_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(MAP_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(SPAT_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(PSM_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(SSM_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(SRM_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(TIM_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(JUNK_MESSAGE), (UDP_IP, UDP_PORT)) From cba44e2c1fe83dca732cb1a82da5eed0fc61b838 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Fri, 28 Jun 2024 08:56:42 -0600 Subject: [PATCH 19/62] Refactored Static methods into a single static class --- .../ode/udp/AbstractUdpReceiverPublisher.java | 24 +- .../us/dot/its/jpo/ode/udp/UdpHexDecoder.java | 245 ++++++++++++++++++ .../dot/its/jpo/ode/udp/bsm/BsmReceiver.java | 38 +-- .../jpo/ode/udp/generic/GenericReceiver.java | 22 +- .../dot/its/jpo/ode/udp/map/MapReceiver.java | 42 +-- .../dot/its/jpo/ode/udp/psm/PsmReceiver.java | 42 +-- .../its/jpo/ode/udp/spat/SpatReceiver.java | 43 +-- .../dot/its/jpo/ode/udp/srm/SrmReceiver.java | 42 +-- .../dot/its/jpo/ode/udp/ssm/SsmReceiver.java | 41 +-- .../dot/its/jpo/ode/udp/tim/TimReceiver.java | 41 +-- 10 files changed, 275 insertions(+), 305 deletions(-) create mode 100644 jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java index 9ae73b255..f4ed3b121 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java @@ -1,17 +1,13 @@ package us.dot.its.jpo.ode.udp; import java.net.DatagramSocket; -import java.net.DatagramPacket; import java.net.SocketException; -import org.apache.tomcat.util.buf.HexUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.uper.UperUtil; public abstract class AbstractUdpReceiverPublisher implements Runnable { @@ -57,24 +53,6 @@ public AbstractUdpReceiverPublisher(OdeProperties odeProps, int port, int buffer } } - public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil.SupportedMessageTypes msgType) { - String startFlag = UperUtil.getStartFlag(msgType); - // extract the actual packet from the buffer - byte[] payload = packet.getData(); - if (payload == null) - return null; - // convert bytes to hex string and verify identity - String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); - if (payloadHexString.indexOf(startFlag) == -1) - return null; - - logger.debug("Full {} packet: {}", msgType, payloadHexString); - payloadHexString = UperUtil.stripDot3Header(payloadHexString, startFlag); - logger.debug("Stripped {} packet: {}", msgType, payloadHexString); - - OdeAsn1Payload timPayload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - return timPayload; - } + } \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java new file mode 100644 index 000000000..1535f6745 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java @@ -0,0 +1,245 @@ +package us.dot.its.jpo.ode.udp; + +import java.net.DatagramPacket; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; + +import org.apache.tomcat.util.buf.HexUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import us.dot.its.jpo.ode.model.OdeAsn1Data; +import us.dot.its.jpo.ode.model.OdeAsn1Payload; +import us.dot.its.jpo.ode.model.OdeBsmMetadata; +import us.dot.its.jpo.ode.model.OdeBsmMetadata.BsmSource; +import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; +import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; +import us.dot.its.jpo.ode.model.OdeLogMsgMetadataLocation; +import us.dot.its.jpo.ode.model.OdeMapMetadata; +import us.dot.its.jpo.ode.model.OdeMapMetadata.MapSource; +import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; +import us.dot.its.jpo.ode.model.OdePsmMetadata; +import us.dot.its.jpo.ode.model.OdePsmMetadata.PsmSource; +import us.dot.its.jpo.ode.model.OdeSpatMetadata; +import us.dot.its.jpo.ode.model.OdeSpatMetadata.SpatSource; +import us.dot.its.jpo.ode.model.OdeSrmMetadata; +import us.dot.its.jpo.ode.model.OdeSrmMetadata.SrmSource; +import us.dot.its.jpo.ode.model.OdeSsmMetadata; +import us.dot.its.jpo.ode.model.OdeSsmMetadata.SsmSource; +import us.dot.its.jpo.ode.model.OdeTimMetadata; +import us.dot.its.jpo.ode.model.ReceivedMessageDetails; +import us.dot.its.jpo.ode.model.RxSource; +import us.dot.its.jpo.ode.uper.UperUtil; +import us.dot.its.jpo.ode.util.JsonUtils; + +public class UdpHexDecoder { + + private static Logger logger = LoggerFactory.getLogger(AbstractUdpReceiverPublisher.class); + + public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil.SupportedMessageTypes msgType) { + String startFlag = UperUtil.getStartFlag(msgType); + // extract the actual packet from the buffer + byte[] payload = packet.getData(); + if (payload == null) + return null; + // convert bytes to hex string and verify identity + String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); + if (payloadHexString.indexOf(startFlag) == -1) + return null; + + logger.debug("Full {} packet: {}", msgType, payloadHexString); + payloadHexString = UperUtil.stripDot3Header(payloadHexString, startFlag); + logger.debug("Stripped {} packet: {}", msgType, payloadHexString); + + OdeAsn1Payload timPayload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); + + return timPayload; + } + + public static String buildJsonMapFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload mapPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.MAP); + if (mapPayload == null) + return null; + OdeMapMetadata mapMetadata = new OdeMapMetadata(mapPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + mapMetadata.setOdeReceivedAt(timestamp); + + mapMetadata.setOriginIp(senderIp); + mapMetadata.setMapSource(MapSource.RSU); + mapMetadata.setRecordType(RecordType.mapTx); + mapMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + mapMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(mapMetadata, mapPayload), false); + } + + public static String buildJsonSpatFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload spatPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SPAT); + if (spatPayload == null) + return null; + OdeSpatMetadata spatMetadata = new OdeSpatMetadata(spatPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + spatMetadata.setOdeReceivedAt(timestamp); + + spatMetadata.setOriginIp(senderIp); + spatMetadata.setSpatSource(SpatSource.RSU); + spatMetadata.setRecordType(RecordType.spatTx); + spatMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + spatMetadata.setSecurityResultCode(SecurityResultCode.success); + + + return JsonUtils.toJson(new OdeAsn1Data(spatMetadata, spatPayload), false); + } + + public static String buildJsonTimFromPacket(DatagramPacket packet){ + + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload timPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.TIM); + if (timPayload == null) + return null; + OdeTimMetadata timMetadata = new OdeTimMetadata(timPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + timMetadata.setOdeReceivedAt(timestamp); + + timMetadata.setOriginIp(senderIp); + timMetadata.setRecordType(RecordType.timMsg); + timMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + timMetadata.setSecurityResultCode(SecurityResultCode.success); + return JsonUtils.toJson(new OdeAsn1Data(timMetadata, timPayload), false); + } + + public static String buildJsonBsmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + OdeAsn1Payload bsmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.BSM); + if (bsmPayload == null) + return null; + OdeBsmMetadata bsmMetadata = new OdeBsmMetadata(bsmPayload); + + // Set BSM Metadata values that can be assumed from the UDP endpoint + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + bsmMetadata.setOdeReceivedAt(timestamp); + + ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); + OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation( + "unavailable", + "unavailable", + "unavailable", + "unavailable", + "unavailable"); + receivedMessageDetails.setRxSource(RxSource.RSU); + receivedMessageDetails.setLocationData(locationData); + bsmMetadata.setReceivedMessageDetails(receivedMessageDetails); + + bsmMetadata.setOriginIp(senderIp); + bsmMetadata.setBsmSource(BsmSource.EV); + bsmMetadata.setRecordType(RecordType.bsmTx); + bsmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + bsmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(bsmMetadata, bsmPayload), false); + } + + public static String buildJsonSsmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload ssmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SSM); + if (ssmPayload == null) + return null; + OdeSsmMetadata ssmMetadata = new OdeSsmMetadata(ssmPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + ssmMetadata.setOdeReceivedAt(timestamp); + + ssmMetadata.setOriginIp(senderIp); + ssmMetadata.setSsmSource(SsmSource.RSU); + ssmMetadata.setRecordType(RecordType.ssmTx); + ssmMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + ssmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(ssmMetadata, ssmPayload), false); + } + + public static String buildJsonSrmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload srmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SRM); + if (srmPayload == null) + return null; + OdeSrmMetadata srmMetadata = new OdeSrmMetadata(srmPayload); + + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + srmMetadata.setOdeReceivedAt(timestamp); + + srmMetadata.setOriginIp(senderIp); + srmMetadata.setSrmSource(SrmSource.RSU); + srmMetadata.setRecordType(RecordType.srmTx); + srmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + srmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(srmMetadata, srmPayload), false); + } + + public static String buildJsonPsmFromPacket(DatagramPacket packet){ + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + logger.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload psmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.PSM); + if (psmPayload == null) + return null; + OdePsmMetadata psmMetadata = new OdePsmMetadata(psmPayload); + // Add header data for the decoding process + ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); + String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); + psmMetadata.setOdeReceivedAt(timestamp); + + psmMetadata.setOriginIp(senderIp); + psmMetadata.setPsmSource(PsmSource.RSU); + psmMetadata.setRecordType(RecordType.psmTx); + psmMetadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); + psmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(psmMetadata, psmPayload), false); + } + + +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java index 7dcd35e22..bdf4cbeeb 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java @@ -22,6 +22,7 @@ import us.dot.its.jpo.ode.model.ReceivedMessageDetails; import us.dot.its.jpo.ode.model.RxSource; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; import us.dot.its.jpo.ode.uper.UperUtil; import us.dot.its.jpo.ode.util.JsonUtils; @@ -59,7 +60,7 @@ public void run() { socket.receive(packet); if (packet.getLength() > 0) { // Create OdeMsgPayload and OdeLogMetadata objects and populate them - String bsmJson = buildJsonBsmFromPacket(packet); + String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); if(bsmJson != null){ // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic @@ -74,38 +75,5 @@ public void run() { } while (!isStopped()); } - public static String buildJsonBsmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - OdeAsn1Payload bsmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.BSM); - if (bsmPayload == null) - return null; - OdeBsmMetadata bsmMetadata = new OdeBsmMetadata(bsmPayload); - - // Set BSM Metadata values that can be assumed from the UDP endpoint - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - bsmMetadata.setOdeReceivedAt(timestamp); - - ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); - OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation( - "unavailable", - "unavailable", - "unavailable", - "unavailable", - "unavailable"); - receivedMessageDetails.setRxSource(RxSource.RSU); - receivedMessageDetails.setLocationData(locationData); - bsmMetadata.setReceivedMessageDetails(receivedMessageDetails); - - bsmMetadata.setOriginIp(senderIp); - bsmMetadata.setBsmSource(BsmSource.EV); - bsmMetadata.setRecordType(RecordType.bsmTx); - bsmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - bsmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(bsmMetadata, bsmPayload), false); - } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java index 6c9b8297a..2746a7941 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java @@ -9,13 +9,7 @@ import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.coder.StringPublisher; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.udp.bsm.BsmReceiver; -import us.dot.its.jpo.ode.udp.map.MapReceiver; -import us.dot.its.jpo.ode.udp.psm.PsmReceiver; -import us.dot.its.jpo.ode.udp.spat.SpatReceiver; -import us.dot.its.jpo.ode.udp.srm.SrmReceiver; -import us.dot.its.jpo.ode.udp.ssm.SsmReceiver; -import us.dot.its.jpo.ode.udp.tim.TimReceiver; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; import us.dot.its.jpo.ode.uper.UperUtil; public class GenericReceiver extends AbstractUdpReceiverPublisher { @@ -72,37 +66,37 @@ public void run() { logger.debug("Detected Message Type {}", messageType); if (messageType == "MAP") { - String mapJson = MapReceiver.buildJsonMapFromPacket(packet); + String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); if(mapJson != null){ publisher.publish(mapJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); } } else if(messageType == "SPAT") { - String spatJson = SpatReceiver.buildJsonSpatFromPacket(packet); + String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); if(spatJson != null){ publisher.publish(spatJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); } } else if (messageType == "TIM") { - String timJson = TimReceiver.buildJsonTimFromPacket(packet); + String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); if(timJson != null){ publisher.publish(timJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); } } else if (messageType == "BSM") { - String bsmJson = BsmReceiver.buildJsonBsmFromPacket(packet); + String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); if(bsmJson!=null){ publisher.publish(bsmJson, this.odeProperties.getKafkaTopicOdeRawEncodedBSMJson()); } } else if (messageType == "SSM") { - String ssmJson = SsmReceiver.buildJsonSsmFromPacket(packet); + String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); if(ssmJson!=null){ publisher.publish(ssmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSSMJson()); } } else if (messageType == "SRM") { - String srmJson = SrmReceiver.buildJsonSrmFromPacket(packet); + String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); if(srmJson!=null){ publisher.publish(srmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSRMJson()); } } else if (messageType == "PSM") { - String psmJson = PsmReceiver.buildJsonPsmFromPacket(packet); + String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); if(psmJson!=null){ publisher.publish(psmJson, this.odeProperties.getKafkaTopicOdeRawEncodedPSMJson()); } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java index 05f73f98c..9fb88cc11 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java @@ -1,26 +1,14 @@ package us.dot.its.jpo.ode.udp.map; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeMapMetadata.MapSource; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.OdeMapMetadata; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; public class MapReceiver extends AbstractUdpReceiverPublisher { private static Logger logger = LoggerFactory.getLogger(MapReceiver.class); @@ -55,7 +43,7 @@ public void run() { socket.receive(packet); if (packet.getLength() > 0) { - String mapJson = buildJsonMapFromPacket(packet); + String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); if(mapJson != null){ // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic mapPublisher.publish(mapJson, mapPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); @@ -69,29 +57,5 @@ public void run() { } - public static String buildJsonMapFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload mapPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.MAP); - if (mapPayload == null) - return null; - OdeMapMetadata mapMetadata = new OdeMapMetadata(mapPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - mapMetadata.setOdeReceivedAt(timestamp); - - mapMetadata.setOriginIp(senderIp); - mapMetadata.setMapSource(MapSource.RSU); - mapMetadata.setRecordType(RecordType.mapTx); - mapMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - mapMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(mapMetadata, mapPayload), false); - - } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java index 9acd23776..9e6f0d060 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java @@ -1,26 +1,14 @@ package us.dot.its.jpo.ode.udp.psm; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.OdePsmMetadata.PsmSource; -import us.dot.its.jpo.ode.model.OdePsmMetadata; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; public class PsmReceiver extends AbstractUdpReceiverPublisher { private static Logger logger = LoggerFactory.getLogger(PsmReceiver.class); @@ -54,7 +42,7 @@ public void run() { logger.debug("Waiting for UDP PSM packets..."); socket.receive(packet); if (packet.getLength() > 0) { - String psmJson = buildJsonPsmFromPacket(packet); + String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); if(psmJson != null){ // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic psmPublisher.publish(psmJson, psmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedPSMJson()); @@ -66,29 +54,5 @@ public void run() { } while (!isStopped()); } - public static String buildJsonPsmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload psmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.PSM); - if (psmPayload == null) - return null; - OdePsmMetadata psmMetadata = new OdePsmMetadata(psmPayload); - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - psmMetadata.setOdeReceivedAt(timestamp); - - psmMetadata.setOriginIp(senderIp); - psmMetadata.setPsmSource(PsmSource.RSU); - psmMetadata.setRecordType(RecordType.psmTx); - psmMetadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); - psmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(psmMetadata, psmPayload), false); - - - } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java index 9ecb993d3..44ccdba29 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java @@ -1,26 +1,14 @@ package us.dot.its.jpo.ode.udp.spat; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.OdeSpatMetadata; -import us.dot.its.jpo.ode.model.OdeSpatMetadata.SpatSource; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; public class SpatReceiver extends AbstractUdpReceiverPublisher { private static Logger logger = LoggerFactory.getLogger(SpatReceiver.class); @@ -55,7 +43,7 @@ public void run() { socket.receive(packet); if (packet.getLength() > 0) { - String spatJson = buildJsonSpatFromPacket(packet); + String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic spatPublisher.publish(spatJson,spatPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); } @@ -66,30 +54,5 @@ public void run() { } - public static String buildJsonSpatFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload spatPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SPAT); - if (spatPayload == null) - return null; - OdeSpatMetadata spatMetadata = new OdeSpatMetadata(spatPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - spatMetadata.setOdeReceivedAt(timestamp); - - spatMetadata.setOriginIp(senderIp); - spatMetadata.setSpatSource(SpatSource.RSU); - spatMetadata.setRecordType(RecordType.spatTx); - spatMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - spatMetadata.setSecurityResultCode(SecurityResultCode.success); - - - return JsonUtils.toJson(new OdeAsn1Data(spatMetadata, spatPayload), false); - - } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java index edbbf9da5..89091fad2 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java @@ -1,26 +1,14 @@ package us.dot.its.jpo.ode.udp.srm; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.OdeSrmMetadata; -import us.dot.its.jpo.ode.model.OdeSrmMetadata.SrmSource; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; public class SrmReceiver extends AbstractUdpReceiverPublisher { private static Logger logger = LoggerFactory.getLogger(SrmReceiver.class); @@ -55,7 +43,7 @@ public void run() { socket.receive(packet); if (packet.getLength() > 0) { - String srmJson = buildJsonSrmFromPacket(packet); + String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic srmPublisher.publish(srmJson, srmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSRMJson()); } @@ -65,29 +53,5 @@ public void run() { } while (!isStopped()); } - public static String buildJsonSrmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload srmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SRM); - if (srmPayload == null) - return null; - OdeSrmMetadata srmMetadata = new OdeSrmMetadata(srmPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - srmMetadata.setOdeReceivedAt(timestamp); - - srmMetadata.setOriginIp(senderIp); - srmMetadata.setSrmSource(SrmSource.RSU); - srmMetadata.setRecordType(RecordType.srmTx); - srmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - srmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(srmMetadata, srmPayload), false); - - } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java index c12aeae4a..ddb789f85 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java @@ -1,26 +1,14 @@ package us.dot.its.jpo.ode.udp.ssm; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.OdeSsmMetadata; -import us.dot.its.jpo.ode.model.OdeSsmMetadata.SsmSource; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; public class SsmReceiver extends AbstractUdpReceiverPublisher { private static Logger logger = LoggerFactory.getLogger(SsmReceiver.class); @@ -55,7 +43,7 @@ public void run() { socket.receive(packet); if (packet.getLength() > 0) { - String ssmJson = buildJsonSsmFromPacket(packet); + String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); if(ssmJson!=null){ // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic @@ -69,28 +57,5 @@ public void run() { } while (!isStopped()); } - public static String buildJsonSsmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload ssmPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SSM); - if (ssmPayload == null) - return null; - OdeSsmMetadata ssmMetadata = new OdeSsmMetadata(ssmPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - ssmMetadata.setOdeReceivedAt(timestamp); - - ssmMetadata.setOriginIp(senderIp); - ssmMetadata.setSsmSource(SsmSource.RSU); - ssmMetadata.setRecordType(RecordType.ssmTx); - ssmMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - ssmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(ssmMetadata, ssmPayload), false); - } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java index 3fb8d1cc2..14a8518a8 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java @@ -1,25 +1,14 @@ package us.dot.its.jpo.ode.udp.tim; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; -import us.dot.its.jpo.ode.model.OdeTimMetadata; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.udp.UdpHexDecoder; public class TimReceiver extends AbstractUdpReceiverPublisher { private static Logger logger = LoggerFactory.getLogger(TimReceiver.class); @@ -53,7 +42,7 @@ public void run() { socket.receive(packet); if (packet.getLength() > 0) { - String timJson = buildJsonTimFromPacket(packet); + String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); if(timJson != null){ // Submit JSON to the OdeRawEncodedMessageJson Kafka Topic timPublisher.publish(timJson, timPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); @@ -66,29 +55,5 @@ public void run() { } while (!isStopped()); } - public static String buildJsonTimFromPacket(DatagramPacket packet){ - - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload timPayload = AbstractUdpReceiverPublisher.getPayloadHexString(packet, UperUtil.SupportedMessageTypes.TIM); - if (timPayload == null) - return null; - OdeTimMetadata timMetadata = new OdeTimMetadata(timPayload); - - // Add header data for the decoding process - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - timMetadata.setOdeReceivedAt(timestamp); - - timMetadata.setOriginIp(senderIp); - timMetadata.setRecordType(RecordType.timMsg); - timMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - timMetadata.setSecurityResultCode(SecurityResultCode.success); - return JsonUtils.toJson(new OdeAsn1Data(timMetadata, timPayload), false); - - - } + } From 0ceaa6bb0e9f5be761393e46fb87da395a69b1bd Mon Sep 17 00:00:00 2001 From: john-wiens Date: Fri, 28 Jun 2024 08:57:08 -0600 Subject: [PATCH 20/62] Fixed bug in generic receiver script --- scripts/tests/udpsender_generic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tests/udpsender_generic.py b/scripts/tests/udpsender_generic.py index 36d02aaa4..80dd0a823 100644 --- a/scripts/tests/udpsender_generic.py +++ b/scripts/tests/udpsender_generic.py @@ -30,4 +30,4 @@ sock.sendto(bytes.fromhex(SSM_MESSAGE), (UDP_IP, UDP_PORT)) sock.sendto(bytes.fromhex(SRM_MESSAGE), (UDP_IP, UDP_PORT)) sock.sendto(bytes.fromhex(TIM_MESSAGE), (UDP_IP, UDP_PORT)) - sock.sendto(bytes.fromhex(JUNK_MESSAGE), (UDP_IP, UDP_PORT)) + sock.sendto(bytes.fromhex(BAD_MESSAGE), (UDP_IP, UDP_PORT)) From 478c836e9f8cfa85804cf1279dbf48eca8666781 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Fri, 28 Jun 2024 09:17:07 -0600 Subject: [PATCH 21/62] Removing Unused imports from BSM Receiver --- .../us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java index bdf4cbeeb..baf7d1126 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java @@ -1,30 +1,14 @@ package us.dot.its.jpo.ode.udp.bsm; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeBsmMetadata; -import us.dot.its.jpo.ode.model.OdeBsmMetadata.BsmSource; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeLogMetadata.SecurityResultCode; -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.udp.AbstractUdpReceiverPublisher; import us.dot.its.jpo.ode.udp.UdpHexDecoder; -import us.dot.its.jpo.ode.uper.UperUtil; -import us.dot.its.jpo.ode.util.JsonUtils; public class BsmReceiver extends AbstractUdpReceiverPublisher { From 54f8a7ea2bf872af6d9d0905e3ab584138d8fbe3 Mon Sep 17 00:00:00 2001 From: Daniel McCoy Stephenson Date: Wed, 10 Jul 2024 14:04:56 -0600 Subject: [PATCH 22/62] Update .github/workflows/dockerhub.yml Co-authored-by: Brandon Payne --- .github/workflows/dockerhub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 5db9c2cd2..7b7b1079b 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -21,7 +21,7 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Replcae Docker tag + - name: Replace Docker tag id: set_tag run: echo "TAG=$(echo ${GITHUB_REF##*/} | sed 's/\//-/g')" >> $GITHUB_ENV From 88251dd76ea2f2590864f327017fa8b5b5c37d1a Mon Sep 17 00:00:00 2001 From: Drew Johnston <31270488+drewjj@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:10:16 -0600 Subject: [PATCH 23/62] Added documentation on when to use the SSH server and how to. --- README.md | 2 +- docs/k8s-demo/templates/jpoode_ode.yaml | 63 +++++++++++++++++++++---- startup_jpoode.sh | 1 + 3 files changed, 55 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 45731e912..63a6064b0 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Once the ODE is deployed and running locally, you may access the ODE's demonstra Upload records within the files can be embedding BSM, MAP and/or TIM messages wrapped in J2735 MessageFrame and ASN.1 UPER encoded, wrapped in IEEE 1609.2 envelope and ASN.1 COER encoded binary format. Log processing of files that contain messages with WSMP headers within the ASN.1 UPER encoded messages is supported but the header will be removed before processing. Please review the files in the [data](data) folder for samples of each supported type. By uploading a valid data file, you will be able to observe the decoded messages contained within the file appear in the web UI page while connected to the WebSocket interface. -Another way data can be uploaded to the ODE is through copying the file to the location specified by the `ode.uploadLocationRoot/ode.uploadLocationObuLog`property. If not specified, Default locations would be `uploads/bsmlog`sub-directory off of the location where ODE is launched. +Another way data can be uploaded to the ODE is through copying the file to the location specified by the `ode.uploadLocationRoot/ode.uploadLocationObuLog`property. If not specified, Default locations would be `uploads/bsmlog`sub-directory off of the location where ODE is launched. In a standard Docker deployment, it is recommended to attach a storage directory from the machine that the ODE launched on as a volume. This way OBUs can log offload to a standard machine and the machine can handle the authorized_keys for SSH connections. This is how this repository's docker-compose is setup with using the uploads directory as the mounted volume. In a Kubernetes deployment this is not possible, so the ODE has been equipped with an SSH server of its own that can be exposed through port 22. The authorized_keys can be attached as a volume and it is recommended to attach some form of NFS persistent volume as a substitute for the pod's '/home/uploads/backup' directory. (See the [Kubernetes documentation](/docs/k8s-demo/templates/jpoode_ode.yaml) on an example on how to do this) However, it is not recommended to use this SSH server in a local Docker environment and thereby the port 22 will be disabled by default. The result of uploading and decoding of messages will be displayed on the UI screen. diff --git a/docs/k8s-demo/templates/jpoode_ode.yaml b/docs/k8s-demo/templates/jpoode_ode.yaml index a9ea758fa..0808d6923 100644 --- a/docs/k8s-demo/templates/jpoode_ode.yaml +++ b/docs/k8s-demo/templates/jpoode_ode.yaml @@ -8,8 +8,12 @@ metadata: spec: type: LoadBalancer ports: - - port: 8080 - name: ode-webserver + - name: ode-scp + protocol: TCP + port: 22 + - name: ode-webserver + protocol: TCP + port: 8080 loadBalancerSourceRanges: {{- range .Values.config.ode.sourceRanges }} - {{ . | title }} @@ -35,11 +39,19 @@ spec: - name: ode-rsu-tim protocol: UDP port: 47900 + - name: ode-rsu-ssm + protocol: UDP + port: 44900 + - name: ode-rsu-spat + protocol: UDP + port: 44910 + - name: ode-rsu-map + protocol: UDP + port: 44920 + - name: ode-rsu-srm + protocol: UDP + port: 44930 externalTrafficPolicy: Local - loadBalancerSourceRanges: - {{- range .Values.config.ode.sourceRanges }} - - {{ . | title }} - {{- end }} selector: app: jpoode-ode --- @@ -66,8 +78,22 @@ spec: {{- end }} selector: app: jpoode-ode ---- {{- end }} +--- +# ConfigMap for OpenSSH configuration +apiVersion: v1 +kind: ConfigMap +metadata: + name: ssh-config +data: + sshd_config: | + PasswordAuthentication no + ChallengeResponseAuthentication no + authorized_keys: | + ssh-keys-goes-here + each-key-goes-on-a-new-lines + another-key +--- apiVersion: "apps/v1" kind: "Deployment" metadata: @@ -94,6 +120,7 @@ spec: tty: true stdin: true ports: + - containerPort: 22 - containerPort: 8080 - containerPort: 9090 - containerPort: 46800 @@ -128,7 +155,23 @@ spec: name: jpoode-secrets key: ode_rsu_password volumeMounts: - - mountPath: /jpo-ode - name: jpoode-ode-storage + - name: config-volume + mountPath: /home/logging + - name: ssh-volume + subPath: sshd_config + mountPath: /etc/ssh/sshd_config + - name: ssh-volume + subPath: authorized_keys + mountPath: /root/.ssh/authorized_keys + - name: obulog-volume + mountPath: /home/uploads/backup volumes: - - name: jpoode-ode-storage + - name: config-volume + configMap: + name: logback-conf + - name: ssh-volume + configMap: + name: ssh-config + - name: obulog-volume + persistentVolumeClaim: + claimName: filestore-pvc diff --git a/startup_jpoode.sh b/startup_jpoode.sh index 266885aab..9f668e296 100644 --- a/startup_jpoode.sh +++ b/startup_jpoode.sh @@ -7,6 +7,7 @@ sh -c rc-status # Create the necessary file to run a service on openrc. This is necessary when using an alpine image touch /run/openrc/softlevel # Start the SSH/SCP server on boot of the new container +# This will utilize the /root/.ssh/authorized_keys file for determining authorized users - this is intended to be Onboard Units rc-service sshd start # Start the jpo-ode application From 3d4f10386050b46511890be9941bf5321ad0e091 Mon Sep 17 00:00:00 2001 From: Drew Johnston <31270488+drewjj@users.noreply.github.com> Date: Fri, 12 Jul 2024 12:11:56 -0600 Subject: [PATCH 24/62] Moved the script to the scripts directory --- Dockerfile | 2 +- startup_jpoode.sh => scripts/startup_jpoode.sh | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename startup_jpoode.sh => scripts/startup_jpoode.sh (100%) diff --git a/Dockerfile b/Dockerfile index e7c750ff6..61a6a2e4e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,7 @@ WORKDIR /home COPY --from=builder /home/jpo-ode-svcs/src/main/resources/application.properties /home COPY --from=builder /home/jpo-ode-svcs/src/main/resources/logback.xml /home COPY --from=builder /home/jpo-ode-svcs/target/jpo-ode-svcs.jar /home -COPY startup_jpoode.sh /home +COPY ./scripts/startup_jpoode.sh /home RUN apk add openssh RUN apk add openrc diff --git a/startup_jpoode.sh b/scripts/startup_jpoode.sh similarity index 100% rename from startup_jpoode.sh rename to scripts/startup_jpoode.sh From 6917a0f67e5f60744ba4e6732b083b3dff7d2766 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 15 Jul 2024 13:11:39 -0600 Subject: [PATCH 25/62] test artifact publishing --- .github/workflows/artifact-publish.yml | 32 ++++++++++++++++++++++++++ pom.xml | 10 +++++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/artifact-publish.yml diff --git a/.github/workflows/artifact-publish.yml b/.github/workflows/artifact-publish.yml new file mode 100644 index 000000000..a3a4d658f --- /dev/null +++ b/.github/workflows/artifact-publish.yml @@ -0,0 +1,32 @@ +name: Publish Java Package + +# on: +# push: +# tags: +# - 'jpo-ode-*' +on: [pull_request, push] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'adopt' + + - name: Remove snapshot from version + run: mvn versions:set -DremoveSnapshot + + - name: Build with Maven + run: mvn -B package --file pom.xml + + - name: Publish to GitHub Packages + run: mvn --batch-mode -Dgithub_organization=${{ github.repository_owner }} deploy + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9399cbd82..08976af53 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,8 @@ ${project.basedir}/target/site/jacoco/jacoco.xml java 1.49 + + usdot-jpo-ode @@ -161,5 +163,11 @@ - + + + github + GitHub Packages + https://maven.pkg.github.com/${github_organization}/jpo-s3-deposit + + From d26a23e642905f4fc59a721005d36ad8fe78fbd5 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 15 Jul 2024 13:24:58 -0600 Subject: [PATCH 26/62] fixed the upload endpoint --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 08976af53..d152910d2 100644 --- a/pom.xml +++ b/pom.xml @@ -167,7 +167,7 @@ github GitHub Packages - https://maven.pkg.github.com/${github_organization}/jpo-s3-deposit + https://maven.pkg.github.com/${github_organization}/jpo-ode From 531172b67b6981318a618ee2bf5fb7b1eba00c64 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 15 Jul 2024 13:54:10 -0600 Subject: [PATCH 27/62] changing trigger to only run "publish java package" on tag creation --- .github/workflows/artifact-publish.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/artifact-publish.yml b/.github/workflows/artifact-publish.yml index a3a4d658f..cb4b8e259 100644 --- a/.github/workflows/artifact-publish.yml +++ b/.github/workflows/artifact-publish.yml @@ -1,10 +1,9 @@ name: Publish Java Package -# on: -# push: -# tags: -# - 'jpo-ode-*' -on: [pull_request, push] +on: + push: + tags: + - 'jpo-ode-*' jobs: build: From f6cf582e558235fbdb5c943aa675734e1443d117 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Wed, 24 Jul 2024 17:17:32 -0600 Subject: [PATCH 28/62] Changed Tim Variable Name --- .../src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java index 1535f6745..8530e6652 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java @@ -52,9 +52,9 @@ public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil payloadHexString = UperUtil.stripDot3Header(payloadHexString, startFlag); logger.debug("Stripped {} packet: {}", msgType, payloadHexString); - OdeAsn1Payload timPayload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); + OdeAsn1Payload odePayload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - return timPayload; + return odePayload; } public static String buildJsonMapFromPacket(DatagramPacket packet){ From aac46af6b8f48e22d078fbe2a2f01774d01c7ccb Mon Sep 17 00:00:00 2001 From: john-wiens Date: Wed, 24 Jul 2024 17:17:52 -0600 Subject: [PATCH 29/62] Added Port definition to confluent cloud docker-compose --- docker-compose-confluent-cloud.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose-confluent-cloud.yml b/docker-compose-confluent-cloud.yml index 6d729451d..2b354c5f5 100644 --- a/docker-compose-confluent-cloud.yml +++ b/docker-compose-confluent-cloud.yml @@ -13,6 +13,7 @@ services: - "44910:44910/udp" - "44920:44920/udp" - "44930:44930/udp" + - "44990:44990/udp" - "5555:5555/udp" - "6666:6666/udp" environment: From 92e7aecb18ae26651672d3dd7c1d2bdb5caa5e4a Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 29 Jul 2024 13:12:38 -0600 Subject: [PATCH 30/62] adding documentation for github artifacts usage --- README.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/README.md b/README.md index 45731e912..28c4dfb87 100644 --- a/README.md +++ b/README.md @@ -724,4 +724,79 @@ This can be changed by setting the value of the DEFAULT_SNMP_PROTOCOL environmen Additionally, the ODE supports the execution of PDM operations on RSUs. PDM operations are not defined in NTCIP1218, but are defined DSRC 4.1. +## 13. GitHub Artifact Usage + +To use this library in another application, add the GitHub package URLs to the `repositories` section in `pom.xml` of the consumer application or in your local `~/.m2/settings.xml` file. Here is an example implementation of using the GitHub artifact in a consumer application: + +```xml + + + + github + + + + + github + + + central + https://repo1.maven.org/maven2 + + + github + https://maven.pkg.github.com/usdot-jpo-ode/jpo-ode + + + + + + + + github + ${env.PACKAGE_READ_USERNAME} + ${env.PACKAGE_READ_TOKEN} + + + + +``` + +And add the following line to the `dependencies` element in `build.gradle` + +```xml + + + usdot.jpo.ode + jpo-ode-core + 1.0.0 + + + usdot.jpo.ode + jpo-ode-plugins + 1.0.0 + + + usdot.jpo.ode + jpo-ode-common + 1.0.0 + + + usdot.jpo.ode + jpo-ode-svcs + 1.0.0 + + +``` + +Finally, set the environment variables: + +* PACKAGE_READ_USERNAME - User name with read access to the repositories containing the packages. +* PACKAGE_READ_TOKEN - Personal access token with `read:packages` scope. + + + [Back to top](#toc) From 9fc1a3037d0538320a9f7039e34f62c04435e636 Mon Sep 17 00:00:00 2001 From: dmccoystephenson Date: Wed, 31 Jul 2024 10:39:22 -0600 Subject: [PATCH 31/62] Changed USER_UID argument in dev container dockerfile to fix build failure --- .devcontainer/Dockerfile | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 9a7d9df3e..e5b121f1b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -10,25 +10,25 @@ FROM eclipse-temurin:21-jdk # will be updated to match your local UID/GID (when using the dockerFile property). # See https://aka.ms/vscode-remote/containers/non-root-user for details. ARG USERNAME=vscode -ARG USER_UID=1000 +ARG USER_UID=1234 ARG USER_GID=$USER_UID # Configure apt ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update \ - && apt-get upgrade -y \ - && apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \ - # - # Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user. - && groupadd --gid $USER_GID $USERNAME \ - && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ - # [Optional] Add sudo support for the non-root user - && apt-get install -y sudo \ - && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME\ - && chmod 0440 /etc/sudoers.d/$USERNAME \ - # - # Verify git, needed tools installed - && apt-get -y install git openssh-client less iproute2 procps curl lsb-release zip unzip sed kafkacat telnet +RUN apt-get update +RUN apt-get upgrade -y +RUN apt-get -y install --no-install-recommends apt-utils dialog 2>&1 + +# Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user. +RUN groupadd --gid $USER_GID $USERNAME +RUN useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME +# [Optional] Add sudo support for the non-root user +RUN apt-get install -y sudo +RUN echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME +RUN chmod 0440 /etc/sudoers.d/$USERNAME + +# Verify git, needed tools installed +RUN apt-get -y install git openssh-client less iproute2 procps curl lsb-release zip unzip sed kafkacat telnet #-------------------Install SDKMan---------------------------------- RUN curl -s https://get.sdkman.io | bash From 74f3b2ea881ca430badde5ecaf484a2d82204c4b Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:10:36 -0600 Subject: [PATCH 32/62] fixes to readme --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 28c4dfb87..b82c52017 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,7 @@ The current version and release history of the JPO-ODE: [ODE Release Notes]( + +## 14. GitHub Artifact Usage To use this library in another application, add the GitHub package URLs to the `repositories` section in `pom.xml` of the consumer application or in your local `~/.m2/settings.xml` file. Here is an example implementation of using the GitHub artifact in a consumer application: From 240b1f0c308543758d8cf3440190dfd656dd6953 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:04:07 -0600 Subject: [PATCH 33/62] initial commit - trimmed ASN1 bytes to remove extra 00 bytes - including ASN1 bytes in metadata - updated unit tests to pass with these changes --- .../dot/its/jpo/ode/model/OdeMsgMetadata.java | 26 ++++++++++++++- .../us/dot/its/jpo/ode/OdeProperties.java | 2 +- .../us/dot/its/jpo/ode/uper/UperUtil.java | 32 ++++++++++++++++--- .../LogFileToAsn1CodecPublisherTest.java | 19 +++++++---- .../asn1/message/Asn1DecodeBSMJSONTest.java | 2 +- .../asn1/message/Asn1DecodeMAPJSONTest.java | 2 +- .../asn1/message/Asn1DecodePSMJSONTest.java | 2 +- .../asn1/message/Asn1DecodeSPATJSONTest.java | 2 +- .../asn1/message/Asn1DecodeSRMJSONTest.java | 2 +- .../asn1/message/Asn1DecodeSSMJSONTest.java | 2 +- .../asn1/message/Asn1DecodeTIMJSONTest.java | 2 +- .../ode/traveler/TimTransmogrifierTest.java | 18 ++++++++--- .../us/dot/its/jpo/ode/uper/UperUtilTest.java | 6 ++-- 13 files changed, 90 insertions(+), 27 deletions(-) diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java index 4590491e9..f1ae8d359 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java @@ -18,9 +18,10 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder; import us.dot.its.jpo.ode.util.DateTimeUtils; +import us.dot.its.jpo.ode.util.JsonUtils; @JsonPropertyOrder({ "logFileName", "recordType", "receivedMessageDetails", "payloadType", "serialId", - "odeReceivedAt", "schemaVersion", "maxDurationTime", "recordGeneratedAt", "recordGeneratedBy", "sanitized" }) + "odeReceivedAt", "schemaVersion", "maxDurationTime", "recordGeneratedAt", "recordGeneratedBy", "sanitized", "asn1" }) public class OdeMsgMetadata extends OdeObject { public enum GeneratedBy { @@ -40,6 +41,7 @@ public enum GeneratedBy { private String odeTimStartDateTime; private String recordGeneratedAt; private GeneratedBy recordGeneratedBy; + private String asn1 = ""; private boolean sanitized = false; public OdeMsgMetadata() { @@ -52,6 +54,7 @@ public OdeMsgMetadata(OdeMsgPayload payload) { private OdeMsgMetadata(OdeMsgPayload payload, SerialId serialId, String receivedAt) { this(payload.getClass().getName(), serialId, receivedAt); + setAsn1(payload); } public OdeMsgMetadata(String payloadType, SerialId serialId, String receivedAt) { @@ -156,6 +159,21 @@ public static void setStaticSchemaVersion(int aSchemaVersion) { staticSchemaVersion = aSchemaVersion; } + public String getAsn1() { + return asn1; + } + + public void setAsn1(String asn1) { + this.asn1 = asn1; + } + + public void setAsn1(OdeMsgPayload payload) { + if (payload != null && payload.getData() != null ) { + if (JsonUtils.getJsonNode(payload.getData().toString(), "bytes") != null) + this.asn1 = JsonUtils.getJsonNode(payload.getData().toString(), "bytes").asText(); + } + } + @Override public int hashCode() { final int prime = 31; @@ -167,6 +185,7 @@ public int hashCode() { result = prime * result + (sanitized ? 1231 : 1237); result = prime * result + schemaVersion; result = prime * result + ((serialId == null) ? 0 : serialId.hashCode()); + result = prime * result + ((asn1 == null) ? 0 : asn1.hashCode()); return result; } @@ -205,6 +224,11 @@ public boolean equals(Object obj) { return false; } else if (!serialId.equals(other.serialId)) return false; + if (asn1 == null) { + if (other.asn1 != null) + return false; + } else if (!asn1.equals(other.asn1)) + return false; return true; } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java index cf3423903..de04905da 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java @@ -58,7 +58,7 @@ public class OdeProperties implements EnvironmentAware { * General Properties */ private String version; - public static final int OUTPUT_SCHEMA_VERSION = 6; + public static final int OUTPUT_SCHEMA_VERSION = 7; private String pluginsLocations = "plugins"; private String kafkaBrokers = null; private static final String DEFAULT_KAFKA_PORT = "9092"; diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java index 06d0eb360..b72fe4c08 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java @@ -33,7 +33,8 @@ public static String stripDot2Header(String hexString, String payload_start_flag int startIndex = hexString.indexOf(payload_start_flag); if (startIndex == -1) return "BAD DATA"; - return hexString.substring(startIndex, hexString.length()); + String strippedPayload = stripTrailingZeros(hexString.substring(startIndex, hexString.length())); + return strippedPayload; } /* @@ -66,8 +67,11 @@ public static byte[] stripDot3Header(byte[] packet, HashMap msgS if (hexPacketParsed.equals("")) { hexPacketParsed = hexString; logger.debug("Packet is not a BSM, TIM or Map message: " + hexPacketParsed); + } else { + logger.debug("Base packet: " + hexPacketParsed); + hexPacketParsed = stripTrailingZeros(hexPacketParsed); + logger.debug("Stripped packet: " + hexPacketParsed); } - return HexUtils.fromHexString(hexPacketParsed); } @@ -80,12 +84,15 @@ public static String stripDot3Header(String hexString, String payload_start_flag int payloadStartIndex = hexString.indexOf(payload_start_flag); String headers = hexString.substring(0, payloadStartIndex); String payload = hexString.substring(payloadStartIndex, hexString.length()); + logger.debug("Base payload: " + payload); + String strippedPayload = stripTrailingZeros(payload); + logger.debug("Stripped payload: " + strippedPayload); // Look for the index of the start flag of a signed 1609.2 header int signedDot2StartIndex = headers.indexOf("038100"); if (signedDot2StartIndex == -1) - return payload; + return strippedPayload; else - return headers.substring(signedDot2StartIndex, headers.length()) + payload; + return headers.substring(signedDot2StartIndex, headers.length()) + strippedPayload; } /** @@ -123,6 +130,23 @@ public static String determineMessageType(OdeMsgPayload payload) { return messageType; } + private static String stripTrailingZeros(String payload) { + // Remove trailing '0's + while (payload.endsWith("0")) { + payload = payload.substring(0, payload.length() - 1); + } + + // Ensure the payload length is even + if (payload.length() % 2 != 0) { + payload += "0"; + } + + // Append '00' to ensure one remaining byte of '00's + payload += "00"; + + return payload; + } + // Get methods for message start flags public static String getBsmStartFlag() { return BSM_START_FLAG; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java index d82457bcf..af30908cf 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java @@ -48,6 +48,7 @@ public class LogFileToAsn1CodecPublisherTest { private static final String GZ = ".gz"; + private static String schemaVersion = "6"; @Tested LogFileToAsn1CodecPublisher testLogFileToAsn1CodecPublisher; @@ -58,6 +59,7 @@ public class LogFileToAsn1CodecPublisherTest { @BeforeAll public static void setupClass() { OdeMsgMetadata.setStaticSchemaVersion(OdeProperties.OUTPUT_SCHEMA_VERSION); + schemaVersion = Integer.toString(OdeProperties.OUTPUT_SCHEMA_VERSION); } @Test @@ -186,7 +188,8 @@ public void testPublishBsmTxLogFile() throws Exception { DateTimeUtils.nowZDT()) > 0); data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = "{\"metadata\":{\"bsmSource\":\"EV\",\"logFileName\":\"bsmTx.gz\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"00140380\"}}}"; + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format("{\"metadata\":{\"bsmSource\":\"EV\",\"logFileName\":\"bsmTx.gz\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); assertEquals(expected, data.toJson()); } } @@ -219,7 +222,7 @@ public void testPublishDistressNotificationLogFile() throws Exception { DateTimeUtils.nowZDT()) > 0); data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = "{\"metadata\":{\"logFileName\":\"dnMsg.gz\",\"recordType\":\"dnMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"encodings\":[{\"elementName\":\"root\",\"elementType\":\"Ieee1609Dot2Data\",\"encodingRule\":\"COER\"},{\"elementName\":\"unsecuredData\",\"elementType\":\"MessageFrame\",\"encodingRule\":\"UPER\"}],\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"038100400380\"}}}"; + var expected = String.format("{\"metadata\":{\"logFileName\":\"dnMsg.gz\",\"recordType\":\"dnMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"encodings\":[{\"elementName\":\"root\",\"elementType\":\"Ieee1609Dot2Data\",\"encodingRule\":\"COER\"},{\"elementName\":\"unsecuredData\",\"elementType\":\"MessageFrame\",\"encodingRule\":\"UPER\"}],\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"038100400380\"}}}", schemaVersion); } } @@ -251,7 +254,8 @@ public void testPublishDriverAlertLogFile() throws Exception { DateTimeUtils.nowZDT()) > 0); data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = "{\"metadata\":{\"logFileName\":\"driverAlert.gz\",\"recordType\":\"driverAlert\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeDriverAlertPayload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"alert\":\"Test Driver Alert\"}}"; + String asn1String = ""; + var expected = String.format("{\"metadata\":{\"logFileName\":\"driverAlert.gz\",\"recordType\":\"driverAlert\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeDriverAlertPayload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"alert\":\"Test Driver Alert\"}}", schemaVersion, asn1String); assertEquals(expected, data.toJson()); } } @@ -285,7 +289,8 @@ public void testPublishRxMsgTIMLogFile() throws Exception { DateTimeUtils.nowZDT()) > 0); data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = "{\"metadata\":{\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"SAT\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"TMC_VIA_SAT\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"00140380\"}}}"; + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format("{\"metadata\":{\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"SAT\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"TMC_VIA_SAT\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); assertEquals(expected, data.toJson()); } } @@ -319,7 +324,8 @@ public void testPublishRxMsgBSMLogFile() throws Exception { DateTimeUtils.nowZDT()) > 0); data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"00140380\"}}}"; + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); assertEquals(expected, data.toJson()); } } @@ -374,7 +380,8 @@ public void testPublishRxMsgBSMLogFileNewLine() throws Exception { DateTimeUtils.nowZDT()) > 0); data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"00140380\"}}}"; + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); assertEquals(expected, data.toJson()); } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java index 3552ecaca..af86ea450 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java @@ -38,7 +38,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"001480AD4644A9EA5442BC26E97C7496576E052569B214000070007050FD7D0FA1007FFF8000681250020214C1C0FF64BFFA0FB84F720FF71BFF9500DFFFC0FF564006D001FFFC0FF5BBFE5B031FFFC0FF573FF73075FFFC0FF973FFB708FFFFC0FFEFC00B50B5FFFC0FFF0401150BBFFFC0FFDF4015D0C1FFFC0FFB9C01690C7FFFC0FFC0401550C9FFFC0FFBAC014F0C9FFFC0FFBBC01530CBFFFC0FFBB400B30E7FFFC100383FFCD0E3FFFCFFFEC800400120000243450D45B978805B073A8672E91E9D80824A65C65F85E35B61502149263F000FE804E6B84AF66507D51690DE76F30D1468A68F8986B58E6AECB2C5FC4766C223F0B977E87678DDF714FE123C483622CC7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"001480AD4644A9EA5442BC26E97C7496576E052569B214000070007050FD7D0FA1007FFF8000681250020214C1C0FF64BFFA0FB84F720FF71BFF9500DFFFC0FF564006D001FFFC0FF5BBFE5B031FFFC0FF573FF73075FFFC0FF973FFB708FFFFC0FFEFC00B50B5FFFC0FFF0401150BBFFFC0FFDF4015D0C1FFFC0FFB9C01690C7FFFC0FFC0401550C9FFFC0FFBAC014F0C9FFFC0FFBBC01530CBFFFC0FFBB400B30E7FFFC100383FFCD0E3FFFCFFFEC800400120000243450D45B978805B073A8672E91E9D80824A65C65F85E35B61502149263F000FE804E6B84AF66507D51690DE76F30D1468A68F8986B58E6AECB2C5FC4766C223F0B977E87678DDF714FE123C483622CC7500\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java index 54dc107df..02c6a0c7f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java @@ -38,7 +38,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"0012839338023000205E96094D40DF4C2CA626C8516E02DC3C2010640000000289E01C009F603F42E88039900000000A41107B027D80FD0A4200C6400000002973021C09F603DE0C16029200000080002A8A008D027D98FEE805404FB0E1085F60588200028096021200000080002AA0007D027D98FE9802E04FB1200C214456228000A02B1240005022C03240000020000D56B40BC04FB35FF655E2C09F623FB81C835FEC0DB240A0A2BFF4AEBF82C660000804B0089000000800025670034013ECD7FB9578E027D9AFF883C4E050515FFA567A41635000040258024800000400012B8F81F409F663FAC094013ECD7FC83DDB02829AFFA480BC04FB02C6E0000804B09C5000000200035EA98A9604F60DA6C7C113D505C35FFE941D409F65C05034C050500C9880004409BC800000006D2BD3CEC813C40CDE062C1FD400000200008791EA3DB3CF380A009F666F05005813D80FFE0A0588C00040092106A00000000BC75CAC009F66DB54C04A813D80A100801241ED40000000078EBAE3B6DA7A008809E2050904008811F100000000BC72389009F60ECA8002049C400000002F1B2CA3027D93A71FA813EC204BC400000002F1B2B34027B0397608880CD10000000039B8E1A51036820505080D51000000003A7461ED1036760505080DD1000000003B2F62311006260505160BCA00000080002B785E2A80A0A6C028DE728145037F1F9E456488000202B2540001022C1894000001000057058C5B81414D806DBCD4028A18F4DF23A050502C8D0000404B05A5000000800035B6471BC05053602431F380A2864087BDB0141458064AB0D6C00053FC013EC0B0680006012C15940000020000D6C06C6581414D807FB972028A1901D78DC050536020EC1800A0A6C039D639813D80B0780006012C1494000002000096AB8C6581414D8062BE32028A1B01417E04050A360172D77009E2058440003009409C200000040006B3486A480A0A1CAB7134C8117DCC02879B018FAE2C050F3601CED54809E21012720000000067FBAD0007E7E84045C80000000100661580958004041C8000000019F3658401CDFA2C0D64000002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B0000802E8000802000035FDB1D84C09EC6C003BA14814140B0540003012C187400040080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C900008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"0012839338023000205E96094D40DF4C2CA626C8516E02DC3C2010640000000289E01C009F603F42E88039900000000A41107B027D80FD0A4200C6400000002973021C09F603DE0C16029200000080002A8A008D027D98FEE805404FB0E1085F60588200028096021200000080002AA0007D027D98FE9802E04FB1200C214456228000A02B1240005022C03240000020000D56B40BC04FB35FF655E2C09F623FB81C835FEC0DB240A0A2BFF4AEBF82C660000804B0089000000800025670034013ECD7FB9578E027D9AFF883C4E050515FFA567A41635000040258024800000400012B8F81F409F663FAC094013ECD7FC83DDB02829AFFA480BC04FB02C6E0000804B09C5000000200035EA98A9604F60DA6C7C113D505C35FFE941D409F65C05034C050500C9880004409BC800000006D2BD3CEC813C40CDE062C1FD400000200008791EA3DB3CF380A009F666F05005813D80FFE0A0588C00040092106A00000000BC75CAC009F66DB54C04A813D80A100801241ED40000000078EBAE3B6DA7A008809E2050904008811F100000000BC72389009F60ECA8002049C400000002F1B2CA3027D93A71FA813EC204BC400000002F1B2B34027B0397608880CD10000000039B8E1A51036820505080D51000000003A7461ED1036760505080DD1000000003B2F62311006260505160BCA00000080002B785E2A80A0A6C028DE728145037F1F9E456488000202B2540001022C1894000001000057058C5B81414D806DBCD4028A18F4DF23A050502C8D0000404B05A5000000800035B6471BC05053602431F380A2864087BDB0141458064AB0D6C00053FC013EC0B0680006012C15940000020000D6C06C6581414D807FB972028A1901D78DC050536020EC1800A0A6C039D639813D80B0780006012C1494000002000096AB8C6581414D8062BE32028A1B01417E04050A360172D77009E2058440003009409C200000040006B3486A480A0A1CAB7134C8117DCC02879B018FAE2C050F3601CED54809E21012720000000067FBAD0007E7E84045C80000000100661580958004041C8000000019F3658401CDFA2C0D64000002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B0000802E8000802000035FDB1D84C09EC6C003BA14814140B0540003012C187400040080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java index 07372aa98..5c7ed84f8 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java @@ -38,7 +38,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC798601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC79860100\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java index 6098d70a5..47c6bb773 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java @@ -38,7 +38,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"00134700081132000000E437070010434257925790010232119A11CE800C10D095E495E400808684AF24AF20050434257925790030232119A11CE801C10D095E495E401008684AF24AF20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"00134700081132000000E437070010434257925790010232119A11CE800C10D095E495E400808684AF24AF20050434257925790030232119A11CE801C10D095E495E401008684AF24AF200\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java index d675e865f..3a0944d2e 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java @@ -38,7 +38,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java index 03f7d21ed..84bb81734 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java @@ -38,7 +38,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"001E120000000005E9C04071A26614C06000040BA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"001E120000000005E9C04071A26614C06000040BA000\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java index 8bf04a0a0..4df22112f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java @@ -39,7 +39,7 @@ public void testProcess() throws XmlUtilsException, JSONException { assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); // Validate the payload - String expectedPayload = "{\"bytes\":\"001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}"; + String expectedPayload = "{\"bytes\":\"001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D300\"}"; OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java index 6b8def1cb..e44efe084 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java @@ -12,6 +12,7 @@ import java.lang.reflect.Modifier; import org.json.JSONObject; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import com.fasterxml.jackson.databind.JsonNode; @@ -46,6 +47,13 @@ public class TimTransmogrifierTest { @Mocked OdeProperties mockOdeProperties; + private static String schemaVersion = "7"; + + @BeforeAll + public static void setupClass() { + schemaVersion = Integer.toString(OdeProperties.OUTPUT_SCHEMA_VERSION); + } + @Test public void testGetRsu() throws IOException { new Expectations() { @@ -219,10 +227,11 @@ public DdsGeoRegion ddsGeoRegion(OdeGeoRegion serviceRegion) { staticSerialId.setStreamId("6c33f802-418d-4b67-89d1-326b4fc8b1e3"); OdeMsgMetadata staticOdeMsgMetadata = new OdeMsgMetadata(); - staticOdeMsgMetadata.setSchemaVersion(6); + + staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); String actualXML = TimTransmogrifier.convertToXml(actualASD, encodableTID, staticOdeMsgMetadata, staticSerialId); - String expected = "us.dot.its.jpo.ode.model.OdeAsdPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000timeTime60falsethirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERIeee1609Dot2DataIeee1609Dot2DataCOERAdvisorySituationDataAdvisorySituationDataUPERus.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData1565000000007876BA7F0000000017876BA7F2030000000000331"; + String expected = String.format("us.dot.its.jpo.ode.model.OdeAsdPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000timeTime%s0falsethirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERIeee1609Dot2DataIeee1609Dot2DataCOERAdvisorySituationDataAdvisorySituationDataUPERus.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData1565000000007876BA7F0000000017876BA7F2030000000000331", schemaVersion); assertEquals(expected, actualXML); } @@ -259,11 +268,10 @@ public void testConvertToXMLMessageFrame(@Capturing DateTimeUtils capturingDateT staticSerialId.setStreamId("6c33f802-418d-4b67-89d1-326b4fc8b1e3"); OdeMsgMetadata staticOdeMsgMetadata = new OdeMsgMetadata(); - staticOdeMsgMetadata.setSchemaVersion(6); + staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); String actualXML = TimTransmogrifier.convertToXml(null, encodableTID, staticOdeMsgMetadata, staticSerialId); - var expected = "us.dot.its.jpo.ode.model.OdeTimPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000timeTime60falsethirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERMessageFrame31"; - + var expected = String.format("us.dot.its.jpo.ode.model.OdeTimPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000timeTime%s0falsethirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERMessageFrame31", schemaVersion); assertEquals(expected,actualXML); } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java index c75a08dd2..8eac3ebdc 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java @@ -18,7 +18,7 @@ public class UperUtilTest { public void testStripDot2Header() { String testHexString = "10110014000000"; String testPayloadStartFlag = "0014"; - String expectedValue = "0014000000"; + String expectedValue = "001400"; assertEquals(expectedValue, UperUtil.stripDot2Header(testHexString, testPayloadStartFlag)); } @@ -33,7 +33,7 @@ public void testStripDot2HeaderBadData() { @Test public void testStripDot3Header() { byte[] testPacket = { 0x10, 0x20, 0x00, 0x1f, 0x00, 0x00 }; - byte[] testExpected = { 0x00, 0x1f, 0x00, 0x00 }; + byte[] testExpected = { 0x00, 0x1f, 0x00 }; HashMap testMsgStartFlag = new HashMap<>(); testMsgStartFlag.put("TIM", "001f"); byte[] testResult = UperUtil.stripDot3Header(testPacket, testMsgStartFlag); @@ -53,7 +53,7 @@ public void testStripDot3HeaderWithDot2StartIndex() { @Test public void testStripDot3HeaderString() { String testPacketString = "0102001f0000"; - String testExpectedString = "001f0000"; + String testExpectedString = "001f00"; String testMsgStartFlag = "001f"; assertEquals(testExpectedString, UperUtil.stripDot3Header(testPacketString, testMsgStartFlag)); } From 82f27a86952c3c5429a21b3a70a517b49ebd2ae9 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:12:15 -0600 Subject: [PATCH 34/62] adding javadoc of strip method and a unit test --- .../main/java/us/dot/its/jpo/ode/uper/UperUtil.java | 9 +++++++-- .../java/us/dot/its/jpo/ode/uper/UperUtilTest.java | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java index b72fe4c08..f229175eb 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java @@ -130,7 +130,12 @@ public static String determineMessageType(OdeMsgPayload payload) { return messageType; } - private static String stripTrailingZeros(String payload) { + /** + * Trims extra `00` bytes off of the end of an ASN1 payload string + * + * @param payload The OdeMsgPayload as a string to trim. + */ + public static String stripTrailingZeros(String payload) { // Remove trailing '0's while (payload.endsWith("0")) { payload = payload.substring(0, payload.length() - 1); @@ -141,7 +146,7 @@ private static String stripTrailingZeros(String payload) { payload += "0"; } - // Append '00' to ensure one remaining byte of '00's + // Append '00' to ensure one remaining byte of '00's for decoding payload += "00"; return payload; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java index 8eac3ebdc..0b4479516 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java @@ -77,4 +77,17 @@ public void testDetermineMessageType() throws JsonUtilsException { assertEquals(UperUtil.determineMessageType(timPayload), "TIM"); } + @Test + public void testStripTrailingZeros() { + // Test case: String with trailing zeros + String input1 = "12340000"; + String expected1 = "123400"; + assertEquals(expected1, UperUtil.stripTrailingZeros(input1)); + + // Test case: String without extra zero at end of payload + String input2 = "123450000"; + String expected2 = "123456000"; + assertEquals(expected2, UperUtil.stripTrailingZeros(input2)); + } + } From 23737659fe2cc5180442bbbd76af6c4305a92a8c Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 12 Aug 2024 17:50:39 -0600 Subject: [PATCH 35/62] fixing documentation with updated schema --- docs/ODE_Output_Schema_Reference.docx | Bin 3005522 -> 3006770 bytes .../main/resources/schemas/schema-bsm.json | 11 +++++++++-- .../main/resources/schemas/schema-map.json | 6 +++++- .../main/resources/schemas/schema-psm.json | 9 ++++++++- .../main/resources/schemas/schema-spat.json | 9 ++++++++- .../main/resources/schemas/schema-srm.json | 9 ++++++++- .../main/resources/schemas/schema-ssm.json | 9 ++++++++- .../main/resources/schemas/schema-tim.json | 9 ++++++++- 8 files changed, 54 insertions(+), 8 deletions(-) diff --git a/docs/ODE_Output_Schema_Reference.docx b/docs/ODE_Output_Schema_Reference.docx index 5a4c1787747c2acc58dc1dd8e3058f9847392bf2..6b59555da727d45f17d882061dc8eaeebe056d24 100644 GIT binary patch delta 256343 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

_28K88Pu*{xoj) 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%0DB*}(osT^Cs~G=TMB>-6 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

6c(Io~jB871;#6!juhxA|8lM$i2(fOG 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
(Y(Z&Lm6aa%KN?-(GkM4HjuvpaA)LUfHE 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 z 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 I^q^G!AHXPdWdHyG diff --git a/jpo-ode-core/src/main/resources/schemas/schema-bsm.json b/jpo-ode-core/src/main/resources/schemas/schema-bsm.json index 82f5c9497..d4b12e89d 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-bsm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-bsm.json @@ -155,7 +155,7 @@ "type": "boolean" }, "schemaVersion": { - "const": 6, + "const": 7, "type": "integer" }, "securityResultCode": { @@ -225,6 +225,12 @@ "serialNumber" ], "type": "object" + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -238,7 +244,8 @@ "odeReceivedAt", "schemaVersion", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ], "type": "object" }, diff --git a/jpo-ode-core/src/main/resources/schemas/schema-map.json b/jpo-ode-core/src/main/resources/schemas/schema-map.json index 04b11ca14..4e9c8eeb2 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-map.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-map.json @@ -94,6 +94,9 @@ "serialNumber" ], "type": "object" + }, + "asn1": { + "type": "string" } }, "required": [ @@ -111,7 +114,8 @@ "odePacketID", "odeTimStartDateTime", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ], "type": "object" }, diff --git a/jpo-ode-core/src/main/resources/schemas/schema-psm.json b/jpo-ode-core/src/main/resources/schemas/schema-psm.json index 44b51058e..012455cf1 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-psm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-psm.json @@ -104,6 +104,12 @@ }, "sanitized": { "type": "boolean" + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -120,7 +126,8 @@ "odePacketID", "odeTimStartDateTime", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ] }, "payload": { diff --git a/jpo-ode-core/src/main/resources/schemas/schema-spat.json b/jpo-ode-core/src/main/resources/schemas/schema-spat.json index 07095b7ef..80a1d939e 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-spat.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-spat.json @@ -19,7 +19,8 @@ "odeReceivedAt", "schemaVersion", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ], "properties": { "spatSource": { @@ -256,6 +257,12 @@ }, "sanitized": { "type": "boolean" + }, + "asn1": { + "type": [ + "string", + "null" + ] } } }, diff --git a/jpo-ode-core/src/main/resources/schemas/schema-srm.json b/jpo-ode-core/src/main/resources/schemas/schema-srm.json index 3254387e3..8f4457356 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-srm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-srm.json @@ -90,6 +90,12 @@ }, "sanitized": { "type": "boolean" + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -106,7 +112,8 @@ "odePacketID", "odeTimStartDateTime", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ] }, "payload": { diff --git a/jpo-ode-core/src/main/resources/schemas/schema-ssm.json b/jpo-ode-core/src/main/resources/schemas/schema-ssm.json index 09ec3bee8..d22072567 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-ssm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-ssm.json @@ -99,6 +99,12 @@ }, "sanitized": { "type": "boolean" + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -115,7 +121,8 @@ "odePacketID", "odeTimStartDateTime", "recordGeneratedAt", - "sanitized" + "sanitized", + "asn1" ] }, "payload": { diff --git a/jpo-ode-core/src/main/resources/schemas/schema-tim.json b/jpo-ode-core/src/main/resources/schemas/schema-tim.json index 42be7d159..0f09149fb 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-tim.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-tim.json @@ -71,6 +71,12 @@ "bundleId" ], "type": "object" + }, + "asn1": { + "type": [ + "string", + "null" + ] } }, "required": [ @@ -88,7 +94,8 @@ "serialId", "logFileName", "odeReceivedAt", - "originIp" + "originIp", + "asn1" ], "type": "object" }, From ab87864712a65b16b31a51fec55a8c156f9ad6ca Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:13:10 -0600 Subject: [PATCH 36/62] fix failed unit tests --- .../java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java | 8 +++----- .../java/us/dot/its/jpo/ode/model/OdeTimDataTest.java | 4 +++- .../ode/coder/stream/LogFileToAsn1CodecPublisherTest.java | 3 --- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java index dd8ef1555..4089e45df 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java @@ -11,18 +11,16 @@ import static org.junit.Assert.*; - - import us.dot.its.jpo.ode.plugin.j2735.J2735Bsm; import us.dot.its.jpo.ode.plugin.j2735.J2735SupplementalVehicleExtensions; import us.dot.its.jpo.ode.plugin.j2735.J2735VehicleSafetyExtensions; import us.dot.its.jpo.ode.util.JsonUtils; public class OdeBsmDataTest { + private static final String SCHEMA_VERSION = "7"; - final String bsmTxJson = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"504becf3-8e20-49cb-a2d7-25b646c34d0f\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:14:21.223956Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":46,\"id\":\"E6A99808\",\"secMark\":21061,\"position\":{\"latitude\":39.5881304,\"longitude\":-105.0910403,\"elevation\":1692.0},\"accelSet\":{\"accelLong\":-0.07,\"accelYaw\":-0.09},\"accuracy\":{\"semiMajor\":2.0,\"semiMinor\":2.0,\"orientation\":44.49530799},\"transmission\":\"UNAVAILABLE\",\"speed\":22.62,\"heading\":169.3,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"off\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":180,\"length\":480}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.8,\"latOffset\":-0.0001802,\"lonOffset\":0.0000434,\"timeOffset\":0.89},{\"elevationOffset\":4.5,\"latOffset\":-0.0011801,\"lonOffset\":0.0002357,\"timeOffset\":5.7},{\"elevationOffset\":9.3,\"latOffset\":-0.0023623,\"lonOffset\":0.0003881,\"timeOffset\":11.1}]},\"pathPrediction\":{\"confidence\":70.0,\"radiusOfCurve\":0.0}}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}"; - final String bsmLogJson = "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"bsmLogDuringEvent.gz\",\"recordType\":\"bsmLogDuringEvent\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"40.565771\",\"longitude\":\"-105.0318108\",\"elevation\":\"1487\",\"speed\":\"0.14\",\"heading\":\"205.975\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"801780cb-d91d-444b-8f4d-9c44fe27f5ea\",\"bundleSize\":222,\"bundleId\":71,\"recordId\":221,\"serialNumber\":14725},\"odeReceivedAt\":\"2019-04-09T18:07:12.352Z\",\"schemaVersion\":6,\"recordGeneratedAt\":\"2018-05-01T16:04:23.694Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\",\"data\":{\"coreData\":{\"msgCnt\":95,\"id\":\"31325431\",\"secMark\":23794,\"position\":{\"latitude\":40.5657318,\"longitude\":-105.0318485,\"elevation\":1472.8},\"accelSet\":{\"accelLat\":0.00,\"accelLong\":0.52,\"accelVert\":0.00,\"accelYaw\":0.00},\"accuracy\":{\"semiMajor\":12.70,\"semiMinor\":12.40},\"transmission\":\"NEUTRAL\",\"speed\":0.10,\"heading\":250.9125,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"unavailable\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":190,\"length\":570}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.3,\"latOffset\":-0.0000044,\"lonOffset\":-0.0000106,\"timeOffset\":0.59},{\"elevationOffset\":1.5,\"latOffset\":0.0000141,\"lonOffset\":0.0000047,\"timeOffset\":6.99},{\"elevationOffset\":2.8,\"latOffset\":0.0000385,\"lonOffset\":0.0000206,\"timeOffset\":15.09},{\"elevationOffset\":4.2,\"latOffset\":0.0000394,\"lonOffset\":0.0000051,\"timeOffset\":23.19},{\"elevationOffset\":8.6,\"latOffset\":0.0000586,\"lonOffset\":0.0000595,\"timeOffset\":37.89},{\"elevationOffset\":10.2,\"latOffset\":0.0000866,\"lonOffset\":0.0001174,\"timeOffset\":43.80},{\"elevationOffset\":8.5,\"latOffset\":0.0001026,\"lonOffset\":0.0001127,\"timeOffset\":49.20},{\"elevationOffset\":-0.1,\"latOffset\":0.0001183,\"lonOffset\":0.0000434,\"timeOffset\":55.60},{\"elevationOffset\":-8.1,\"latOffset\":0.0001101,\"lonOffset\":-0.0000274,\"timeOffset\":59.09},{\"elevationOffset\":-14.2,\"latOffset\":0.0001019,\"lonOffset\":-0.0000492,\"timeOffset\":61.19},{\"elevationOffset\":-19.0,\"latOffset\":0.0000944,\"lonOffset\":-0.0000738,\"timeOffset\":63.49},{\"elevationOffset\":-31.4,\"latOffset\":0.0000826,\"lonOffset\":-0.0001389,\"timeOffset\":69.19},{\"elevationOffset\":-39.8,\"latOffset\":0.0000788,\"lonOffset\":-0.0001748,\"timeOffset\":73.09},{\"elevationOffset\":-46.7,\"latOffset\":0.0000753,\"lonOffset\":-0.0002035,\"timeOffset\":78.89},{\"elevationOffset\":-48.9,\"latOffset\":0.0000831,\"lonOffset\":-0.0002563,\"timeOffset\":82.09}]},\"pathPrediction\":{\"confidence\":0.0,\"radiusOfCurve\":0.0}}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{}}]}}}"; - + private static final String bsmTxJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"504becf3-8e20-49cb-a2d7-25b646c34d0f\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:14:21.223956Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":46,\"id\":\"E6A99808\",\"secMark\":21061,\"position\":{\"latitude\":39.5881304,\"longitude\":-105.0910403,\"elevation\":1692.0},\"accelSet\":{\"accelLong\":-0.07,\"accelYaw\":-0.09},\"accuracy\":{\"semiMajor\":2.0,\"semiMinor\":2.0,\"orientation\":44.49530799},\"transmission\":\"UNAVAILABLE\",\"speed\":22.62,\"heading\":169.3,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"off\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":180,\"length\":480}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.8,\"latOffset\":-0.0001802,\"lonOffset\":0.0000434,\"timeOffset\":0.89},{\"elevationOffset\":4.5,\"latOffset\":-0.0011801,\"lonOffset\":0.0002357,\"timeOffset\":5.7},{\"elevationOffset\":9.3,\"latOffset\":-0.0023623,\"lonOffset\":0.0003881,\"timeOffset\":11.1}]},\"pathPrediction\":{\"confidence\":70.0,\"radiusOfCurve\":0.0}}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}", SCHEMA_VERSION); + private static final String bsmLogJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"bsmLogDuringEvent.gz\",\"recordType\":\"bsmLogDuringEvent\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"40.565771\",\"longitude\":\"-105.0318108\",\"elevation\":\"1487\",\"speed\":\"0.14\",\"heading\":\"205.975\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"801780cb-d91d-444b-8f4d-9c44fe27f5ea\",\"bundleSize\":222,\"bundleId\":71,\"recordId\":221,\"serialNumber\":14725},\"odeReceivedAt\":\"2019-04-09T18:07:12.352Z\",\"schemaVersion\":%s,\"recordGeneratedAt\":\"2018-05-01T16:04:23.694Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\",\"data\":{\"coreData\":{\"msgCnt\":95,\"id\":\"31325431\",\"secMark\":23794,\"position\":{\"latitude\":40.5657318,\"longitude\":-105.0318485,\"elevation\":1472.8},\"accelSet\":{\"accelLat\":0.00,\"accelLong\":0.52,\"accelVert\":0.00,\"accelYaw\":0.00},\"accuracy\":{\"semiMajor\":12.70,\"semiMinor\":12.40},\"transmission\":\"NEUTRAL\",\"speed\":0.10,\"heading\":250.9125,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"unavailable\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":190,\"length\":570}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.3,\"latOffset\":-0.0000044,\"lonOffset\":-0.0000106,\"timeOffset\":0.59},{\"elevationOffset\":1.5,\"latOffset\":0.0000141,\"lonOffset\":0.0000047,\"timeOffset\":6.99},{\"elevationOffset\":2.8,\"latOffset\":0.0000385,\"lonOffset\":0.0000206,\"timeOffset\":15.09},{\"elevationOffset\":4.2,\"latOffset\":0.0000394,\"lonOffset\":0.0000051,\"timeOffset\":23.19},{\"elevationOffset\":8.6,\"latOffset\":0.0000586,\"lonOffset\":0.0000595,\"timeOffset\":37.89},{\"elevationOffset\":10.2,\"latOffset\":0.0000866,\"lonOffset\":0.0001174,\"timeOffset\":43.80},{\"elevationOffset\":8.5,\"latOffset\":0.0001026,\"lonOffset\":0.0001127,\"timeOffset\":49.20},{\"elevationOffset\":-0.1,\"latOffset\":0.0001183,\"lonOffset\":0.0000434,\"timeOffset\":55.60},{\"elevationOffset\":-8.1,\"latOffset\":0.0001101,\"lonOffset\":-0.0000274,\"timeOffset\":59.09},{\"elevationOffset\":-14.2,\"latOffset\":0.0001019,\"lonOffset\":-0.0000492,\"timeOffset\":61.19},{\"elevationOffset\":-19.0,\"latOffset\":0.0000944,\"lonOffset\":-0.0000738,\"timeOffset\":63.49},{\"elevationOffset\":-31.4,\"latOffset\":0.0000826,\"lonOffset\":-0.0001389,\"timeOffset\":69.19},{\"elevationOffset\":-39.8,\"latOffset\":0.0000788,\"lonOffset\":-0.0001748,\"timeOffset\":73.09},{\"elevationOffset\":-46.7,\"latOffset\":0.0000753,\"lonOffset\":-0.0002035,\"timeOffset\":78.89},{\"elevationOffset\":-48.9,\"latOffset\":0.0000831,\"lonOffset\":-0.0002563,\"timeOffset\":82.09}]},\"pathPrediction\":{\"confidence\":0.0,\"radiusOfCurve\":0.0}}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{}}]}}}", SCHEMA_VERSION); @Test public void shouldDeserializeJson_bsmTx() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java index 99bd69879..fbd008bb3 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java @@ -15,7 +15,9 @@ import static org.junit.Assert.*; public class OdeTimDataTest { - final String json = "{\"metadata\":{\"securityResultCode\":\"\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"6\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"11ad5323-ec81-4694-8cd0-eb88ca08728e\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2022-12-24T02:24:38.248417Z\",\"originIp\":\"172.18.0.1\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"449089\",\"packetID\":\"0000000000000BBC2B\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"},\"name\":\"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456\",\"laneWidth\":\"32700\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047287423\",\"lat\":\"411264686\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047305390\",\"lat\":\"411260104\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047323629\",\"lat\":\"411256185\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047342080\",\"lat\":\"411252886\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047360706\",\"lat\":\"411250207\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047379480\",\"lat\":\"411248201\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047398354\",\"lat\":\"411246839\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047417290\",\"lat\":\"411246133\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047436246\",\"lat\":\"411245796\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047455202\",\"lat\":\"411245470\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047474159\",\"lat\":\"411245173\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000000000010000\"}},\"durationTime\":\"1440\",\"notUsed2\":\"0\",\"notUsed3\":\"0\",\"startYear\":\"2018\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"}}},\"priority\":\"5\",\"content\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":\"777\"}},{\"item\":{\"itis\":\"13579\"}}]}},\"url\":\"null\",\"notUsed\":\"0\",\"notUsed1\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"448260\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}"; + private static final String SCHEMA_VERSION = "7"; + + private static final String json = String.format("{\"metadata\":{\"securityResultCode\":\"\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"%s\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"asn1\":\"\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"11ad5323-ec81-4694-8cd0-eb88ca08728e\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2022-12-24T02:24:38.248417Z\",\"originIp\":\"172.18.0.1\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"449089\",\"packetID\":\"0000000000000BBC2B\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"},\"name\":\"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456\",\"laneWidth\":\"32700\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047287423\",\"lat\":\"411264686\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047305390\",\"lat\":\"411260104\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047323629\",\"lat\":\"411256185\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047342080\",\"lat\":\"411252886\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047360706\",\"lat\":\"411250207\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047379480\",\"lat\":\"411248201\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047398354\",\"lat\":\"411246839\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047417290\",\"lat\":\"411246133\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047436246\",\"lat\":\"411245796\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047455202\",\"lat\":\"411245470\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047474159\",\"lat\":\"411245173\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000000000010000\"}},\"durationTime\":\"1440\",\"notUsed2\":\"0\",\"notUsed3\":\"0\",\"startYear\":\"2018\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"}}},\"priority\":\"5\",\"content\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":\"777\"}},{\"item\":{\"itis\":\"13579\"}}]}},\"url\":\"null\",\"notUsed\":\"0\",\"notUsed1\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"448260\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}", SCHEMA_VERSION); // // Note that OdeTimData does not have annotations to support deserialization, so serialization/deserialization is not tested here. diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java index af30908cf..f424073c3 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java @@ -24,7 +24,6 @@ import java.io.ByteArrayInputStream; import java.util.List; -import org.apache.tomcat.util.buf.HexUtils; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -38,12 +37,10 @@ import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; import us.dot.its.jpo.ode.importer.parser.FileParser.ParserStatus; import us.dot.its.jpo.ode.importer.parser.LogFileParser; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; import us.dot.its.jpo.ode.model.OdeData; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; import us.dot.its.jpo.ode.model.OdeMsgMetadata; import us.dot.its.jpo.ode.util.DateTimeUtils; -import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; public class LogFileToAsn1CodecPublisherTest { From e71215652c0313f42d862908160300a8695edc1d Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:24:15 -0600 Subject: [PATCH 37/62] Update UperUtilTest.java --- .../src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java index 0b4479516..0fa1c8909 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java @@ -86,7 +86,7 @@ public void testStripTrailingZeros() { // Test case: String without extra zero at end of payload String input2 = "123450000"; - String expected2 = "123456000"; + String expected2 = "12345000"; assertEquals(expected2, UperUtil.stripTrailingZeros(input2)); } From 7b76880cfb7e600d40254d0b674c9b0e69f4738a Mon Sep 17 00:00:00 2001 From: John-Wiens Date: Tue, 13 Aug 2024 10:30:19 -0700 Subject: [PATCH 38/62] Fixed bug with decoding message headers --- .../us/dot/its/jpo/ode/udp/UdpHexDecoder.java | 2 +- .../jpo/ode/udp/generic/GenericReceiver.java | 21 +++++++++++-------- .../us/dot/its/jpo/ode/uper/UperUtil.java | 15 +++++++++---- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java index 8530e6652..d6e5344ee 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java @@ -49,7 +49,7 @@ public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil return null; logger.debug("Full {} packet: {}", msgType, payloadHexString); - payloadHexString = UperUtil.stripDot3Header(payloadHexString, startFlag); + payloadHexString = UperUtil.stripDot3Header(payloadHexString, startFlag).toLowerCase(); logger.debug("Stripped {} packet: {}", msgType, payloadHexString); OdeAsn1Payload odePayload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java index 2746a7941..90a8042d7 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java @@ -44,7 +44,7 @@ public void run() { do { - + buffer = new byte[bufferSize]; // packet should be recreated on each loop to prevent latent data in buffer DatagramPacket packet = new DatagramPacket(buffer, buffer.length); try { @@ -61,41 +61,44 @@ public void run() { continue; } String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); - String messageType = UperUtil.determineHexPacketType(payloadHexString); + logger.debug("Raw Payload" + payloadHexString); + + String messageType = UperUtil.determineHexPacketType(payloadHexString); logger.debug("Detected Message Type {}", messageType); - if (messageType == "MAP") { + if (messageType.equals("MAP")) { String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); + logger.debug("Sending Data to Topic" + mapJson); if(mapJson != null){ publisher.publish(mapJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); } - } else if(messageType == "SPAT") { + } else if(messageType.equals("SPAT")) { String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); if(spatJson != null){ publisher.publish(spatJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); } - } else if (messageType == "TIM") { + } else if (messageType.equals("TIM")) { String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); if(timJson != null){ publisher.publish(timJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); } - } else if (messageType == "BSM") { + } else if (messageType.equals("BSM")) { String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); if(bsmJson!=null){ publisher.publish(bsmJson, this.odeProperties.getKafkaTopicOdeRawEncodedBSMJson()); } - } else if (messageType == "SSM") { + } else if (messageType.equals("SSM")) { String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); if(ssmJson!=null){ publisher.publish(ssmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSSMJson()); } - } else if (messageType == "SRM") { + } else if (messageType.equals("SRM")) { String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); if(srmJson!=null){ publisher.publish(srmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSRMJson()); } - } else if (messageType == "PSM") { + } else if (messageType.equals("PSM")) { String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); if(psmJson!=null){ publisher.publish(psmJson, this.odeProperties.getKafkaTopicOdeRawEncodedPSMJson()); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java index 486c7b1eb..235f1bd7f 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java @@ -30,7 +30,7 @@ public enum SupportedMessageTypes { // Strips the IEEE 1609.2 security header (if it exists) and returns the payload public static String stripDot2Header(String hexString, String payload_start_flag) { hexString = hexString.toLowerCase(); - int startIndex = hexString.indexOf(payload_start_flag); + int startIndex = findValidStartFlagLocation(hexString, payload_start_flag); if (startIndex == -1) return "BAD DATA"; return hexString.substring(startIndex, hexString.length()); @@ -46,7 +46,7 @@ public static byte[] stripDot3Header(byte[] packet, HashMap msgS String hexPacketParsed = ""; for (String start_flag : msgStartFlags.values()) { - int payloadStartIndex = hexString.indexOf(start_flag); + int payloadStartIndex = findValidStartFlagLocation(hexString,start_flag); if (payloadStartIndex == -1) continue; @@ -77,7 +77,7 @@ public static byte[] stripDot3Header(byte[] packet, HashMap msgS * Otherwise, returns just the payload. */ public static String stripDot3Header(String hexString, String payload_start_flag) { - int payloadStartIndex = hexString.indexOf(payload_start_flag); + int payloadStartIndex = findValidStartFlagLocation(hexString,payload_start_flag); String headers = hexString.substring(0, payloadStartIndex); String payload = hexString.substring(payloadStartIndex, hexString.length()); // Look for the index of the start flag of a signed 1609.2 header @@ -113,7 +113,7 @@ public static String determineHexPacketType(String hexString){ flagIndexes.put("MAP", findValidStartFlagLocation(hexString, MAP_START_FLAG)); flagIndexes.put("SPAT", findValidStartFlagLocation(hexString, SPAT_START_FLAG)); - flagIndexes.put("TIM", findValidStartFlagLocation(hexString, TIM_START_FLAG)); + flagIndexes.put("TIM", findValidStartFlagLocation(hexString, TIM_START_FLAG)); flagIndexes.put("BSM", findValidStartFlagLocation(hexString, BSM_START_FLAG)); flagIndexes.put("SSM", findValidStartFlagLocation(hexString, SSM_START_FLAG)); flagIndexes.put("PSM", findValidStartFlagLocation(hexString, PSM_START_FLAG)); @@ -136,6 +136,13 @@ public static String determineHexPacketType(String hexString){ public static int findValidStartFlagLocation(String hexString, String startFlag){ int index = hexString.indexOf(startFlag); + // If the message has a header, make sure not to missidentify the message by the header + // Maximum Header Length is 17 Bytes: https://www.researchgate.net/figure/WAVE-Short-Message-format-Reproduced-by-permission_fig6_224242297 + // At 2 Hex Chars per byte that is a maximum length of 38 + if (index != 0){ + index = hexString.indexOf(startFlag, 38); + } + // Make sure start flag is on an even numbered byte while(index != -1 && index %2 != 0){ index = hexString.indexOf(startFlag, index+1); From efa23854cec91fc646bdef1d8de216294f19a62e Mon Sep 17 00:00:00 2001 From: michael english Date: Wed, 14 Aug 2024 20:43:14 +0000 Subject: [PATCH 39/62] updates to major version, schemas, and unit tests --- jpo-ode-common/pom.xml | 2 +- jpo-ode-core/pom.xml | 6 +++--- jpo-ode-core/src/main/resources/schemas/schema-spat.json | 2 +- jpo-ode-core/src/main/resources/schemas/schema-tim.json | 1 + .../test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java | 5 +++-- .../test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java | 6 ++++-- .../test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java | 6 ++++-- .../test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java | 4 +++- .../test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java | 6 ++++-- .../test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java | 6 ++++-- .../test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java | 3 ++- jpo-ode-plugins/pom.xml | 4 ++-- jpo-ode-svcs/pom.xml | 6 +++--- jpo-ode-svcs/run.bat | 2 +- jpo-ode-svcs/run.sh | 2 +- .../src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java | 3 ++- .../ode/coder/stream/LogFileToAsn1CodecPublisherTest.java | 2 +- pom.xml | 4 ++-- 18 files changed, 42 insertions(+), 28 deletions(-) diff --git a/jpo-ode-common/pom.xml b/jpo-ode-common/pom.xml index 9f2eb545d..7ba82c8d5 100644 --- a/jpo-ode-common/pom.xml +++ b/jpo-ode-common/pom.xml @@ -5,7 +5,7 @@ usdot.jpo.ode jpo-ode - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT jpo-ode-common diff --git a/jpo-ode-core/pom.xml b/jpo-ode-core/pom.xml index 3db2c79cd..638e02106 100644 --- a/jpo-ode-core/pom.xml +++ b/jpo-ode-core/pom.xml @@ -5,7 +5,7 @@ usdot.jpo.ode jpo-ode - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT jpo-ode-core @@ -23,12 +23,12 @@ usdot.jpo.ode jpo-ode-common - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT usdot.jpo.ode jpo-ode-plugins - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT org.apache.httpcomponents diff --git a/jpo-ode-core/src/main/resources/schemas/schema-spat.json b/jpo-ode-core/src/main/resources/schemas/schema-spat.json index 80a1d939e..cfc483e64 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-spat.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-spat.json @@ -214,7 +214,7 @@ }, "schemaVersion": { "type": "integer", - "const": 6 + "const": 7 }, "maxDurationTime": { "type": [ diff --git a/jpo-ode-core/src/main/resources/schemas/schema-tim.json b/jpo-ode-core/src/main/resources/schemas/schema-tim.json index 0f09149fb..01853a066 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-tim.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-tim.json @@ -40,6 +40,7 @@ "type": "string" }, "schemaVersion": { + "const": 7, "type": "string" }, "securityResultCode": { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java index 4089e45df..1f586581b 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java @@ -18,9 +18,10 @@ public class OdeBsmDataTest { private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "0022e12d18466c65c1493800000e00e4616183e85a8f0100c000038081bc001480b8494c4c950cd8cde6e9651116579f22a424dd78fffff00761e4fd7eb7d07f7fff80005f11d1020214c1c0ffc7c016aff4017a0ff65403b0fd204c20ffccc04f8fe40c420ffe6404cefe60e9a10133408fcfde1438103ab4138f00e1eec1048ec160103e237410445c171104e26bc103dc4154305c2c84103b1c1c8f0a82f42103f34262d1123198103dac25fb12034ce10381c259f12038ca103574251b10e3b2210324c23ad0f23d8efffe0000209340d10000004264bf00"; - private static final String bsmTxJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"504becf3-8e20-49cb-a2d7-25b646c34d0f\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:14:21.223956Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.11.81.12\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":46,\"id\":\"E6A99808\",\"secMark\":21061,\"position\":{\"latitude\":39.5881304,\"longitude\":-105.0910403,\"elevation\":1692.0},\"accelSet\":{\"accelLong\":-0.07,\"accelYaw\":-0.09},\"accuracy\":{\"semiMajor\":2.0,\"semiMinor\":2.0,\"orientation\":44.49530799},\"transmission\":\"UNAVAILABLE\",\"speed\":22.62,\"heading\":169.3,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"off\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":180,\"length\":480}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.8,\"latOffset\":-0.0001802,\"lonOffset\":0.0000434,\"timeOffset\":0.89},{\"elevationOffset\":4.5,\"latOffset\":-0.0011801,\"lonOffset\":0.0002357,\"timeOffset\":5.7},{\"elevationOffset\":9.3,\"latOffset\":-0.0023623,\"lonOffset\":0.0003881,\"timeOffset\":11.1}]},\"pathPrediction\":{\"confidence\":70.0,\"radiusOfCurve\":0.0}}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}", SCHEMA_VERSION); - private static final String bsmLogJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"bsmLogDuringEvent.gz\",\"recordType\":\"bsmLogDuringEvent\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"40.565771\",\"longitude\":\"-105.0318108\",\"elevation\":\"1487\",\"speed\":\"0.14\",\"heading\":\"205.975\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"801780cb-d91d-444b-8f4d-9c44fe27f5ea\",\"bundleSize\":222,\"bundleId\":71,\"recordId\":221,\"serialNumber\":14725},\"odeReceivedAt\":\"2019-04-09T18:07:12.352Z\",\"schemaVersion\":%s,\"recordGeneratedAt\":\"2018-05-01T16:04:23.694Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\",\"data\":{\"coreData\":{\"msgCnt\":95,\"id\":\"31325431\",\"secMark\":23794,\"position\":{\"latitude\":40.5657318,\"longitude\":-105.0318485,\"elevation\":1472.8},\"accelSet\":{\"accelLat\":0.00,\"accelLong\":0.52,\"accelVert\":0.00,\"accelYaw\":0.00},\"accuracy\":{\"semiMajor\":12.70,\"semiMinor\":12.40},\"transmission\":\"NEUTRAL\",\"speed\":0.10,\"heading\":250.9125,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"unavailable\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":190,\"length\":570}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.3,\"latOffset\":-0.0000044,\"lonOffset\":-0.0000106,\"timeOffset\":0.59},{\"elevationOffset\":1.5,\"latOffset\":0.0000141,\"lonOffset\":0.0000047,\"timeOffset\":6.99},{\"elevationOffset\":2.8,\"latOffset\":0.0000385,\"lonOffset\":0.0000206,\"timeOffset\":15.09},{\"elevationOffset\":4.2,\"latOffset\":0.0000394,\"lonOffset\":0.0000051,\"timeOffset\":23.19},{\"elevationOffset\":8.6,\"latOffset\":0.0000586,\"lonOffset\":0.0000595,\"timeOffset\":37.89},{\"elevationOffset\":10.2,\"latOffset\":0.0000866,\"lonOffset\":0.0001174,\"timeOffset\":43.80},{\"elevationOffset\":8.5,\"latOffset\":0.0001026,\"lonOffset\":0.0001127,\"timeOffset\":49.20},{\"elevationOffset\":-0.1,\"latOffset\":0.0001183,\"lonOffset\":0.0000434,\"timeOffset\":55.60},{\"elevationOffset\":-8.1,\"latOffset\":0.0001101,\"lonOffset\":-0.0000274,\"timeOffset\":59.09},{\"elevationOffset\":-14.2,\"latOffset\":0.0001019,\"lonOffset\":-0.0000492,\"timeOffset\":61.19},{\"elevationOffset\":-19.0,\"latOffset\":0.0000944,\"lonOffset\":-0.0000738,\"timeOffset\":63.49},{\"elevationOffset\":-31.4,\"latOffset\":0.0000826,\"lonOffset\":-0.0001389,\"timeOffset\":69.19},{\"elevationOffset\":-39.8,\"latOffset\":0.0000788,\"lonOffset\":-0.0001748,\"timeOffset\":73.09},{\"elevationOffset\":-46.7,\"latOffset\":0.0000753,\"lonOffset\":-0.0002035,\"timeOffset\":78.89},{\"elevationOffset\":-48.9,\"latOffset\":0.0000831,\"lonOffset\":-0.0002563,\"timeOffset\":82.09}]},\"pathPrediction\":{\"confidence\":0.0,\"radiusOfCurve\":0.0}}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{}}]}}}", SCHEMA_VERSION); + private static final String bsmTxJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"504becf3-8e20-49cb-a2d7-25b646c34d0f\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:14:21.223956Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.11.81.12\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":46,\"id\":\"E6A99808\",\"secMark\":21061,\"position\":{\"latitude\":39.5881304,\"longitude\":-105.0910403,\"elevation\":1692.0},\"accelSet\":{\"accelLong\":-0.07,\"accelYaw\":-0.09},\"accuracy\":{\"semiMajor\":2.0,\"semiMinor\":2.0,\"orientation\":44.49530799},\"transmission\":\"UNAVAILABLE\",\"speed\":22.62,\"heading\":169.3,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"off\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":180,\"length\":480}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.8,\"latOffset\":-0.0001802,\"lonOffset\":0.0000434,\"timeOffset\":0.89},{\"elevationOffset\":4.5,\"latOffset\":-0.0011801,\"lonOffset\":0.0002357,\"timeOffset\":5.7},{\"elevationOffset\":9.3,\"latOffset\":-0.0023623,\"lonOffset\":0.0003881,\"timeOffset\":11.1}]},\"pathPrediction\":{\"confidence\":70.0,\"radiusOfCurve\":0.0}}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}", SCHEMA_VERSION, ASN1_STRING); + private static final String bsmLogJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"bsmLogDuringEvent.gz\",\"recordType\":\"bsmLogDuringEvent\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"40.565771\",\"longitude\":\"-105.0318108\",\"elevation\":\"1487\",\"speed\":\"0.14\",\"heading\":\"205.975\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"801780cb-d91d-444b-8f4d-9c44fe27f5ea\",\"bundleSize\":222,\"bundleId\":71,\"recordId\":221,\"serialNumber\":14725},\"odeReceivedAt\":\"2019-04-09T18:07:12.352Z\",\"schemaVersion\":%s,\"recordGeneratedAt\":\"2018-05-01T16:04:23.694Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\",\"data\":{\"coreData\":{\"msgCnt\":95,\"id\":\"31325431\",\"secMark\":23794,\"position\":{\"latitude\":40.5657318,\"longitude\":-105.0318485,\"elevation\":1472.8},\"accelSet\":{\"accelLat\":0.00,\"accelLong\":0.52,\"accelVert\":0.00,\"accelYaw\":0.00},\"accuracy\":{\"semiMajor\":12.70,\"semiMinor\":12.40},\"transmission\":\"NEUTRAL\",\"speed\":0.10,\"heading\":250.9125,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"unavailable\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":190,\"length\":570}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.3,\"latOffset\":-0.0000044,\"lonOffset\":-0.0000106,\"timeOffset\":0.59},{\"elevationOffset\":1.5,\"latOffset\":0.0000141,\"lonOffset\":0.0000047,\"timeOffset\":6.99},{\"elevationOffset\":2.8,\"latOffset\":0.0000385,\"lonOffset\":0.0000206,\"timeOffset\":15.09},{\"elevationOffset\":4.2,\"latOffset\":0.0000394,\"lonOffset\":0.0000051,\"timeOffset\":23.19},{\"elevationOffset\":8.6,\"latOffset\":0.0000586,\"lonOffset\":0.0000595,\"timeOffset\":37.89},{\"elevationOffset\":10.2,\"latOffset\":0.0000866,\"lonOffset\":0.0001174,\"timeOffset\":43.80},{\"elevationOffset\":8.5,\"latOffset\":0.0001026,\"lonOffset\":0.0001127,\"timeOffset\":49.20},{\"elevationOffset\":-0.1,\"latOffset\":0.0001183,\"lonOffset\":0.0000434,\"timeOffset\":55.60},{\"elevationOffset\":-8.1,\"latOffset\":0.0001101,\"lonOffset\":-0.0000274,\"timeOffset\":59.09},{\"elevationOffset\":-14.2,\"latOffset\":0.0001019,\"lonOffset\":-0.0000492,\"timeOffset\":61.19},{\"elevationOffset\":-19.0,\"latOffset\":0.0000944,\"lonOffset\":-0.0000738,\"timeOffset\":63.49},{\"elevationOffset\":-31.4,\"latOffset\":0.0000826,\"lonOffset\":-0.0001389,\"timeOffset\":69.19},{\"elevationOffset\":-39.8,\"latOffset\":0.0000788,\"lonOffset\":-0.0001748,\"timeOffset\":73.09},{\"elevationOffset\":-46.7,\"latOffset\":0.0000753,\"lonOffset\":-0.0002035,\"timeOffset\":78.89},{\"elevationOffset\":-48.9,\"latOffset\":0.0000831,\"lonOffset\":-0.0002563,\"timeOffset\":82.09}]},\"pathPrediction\":{\"confidence\":0.0,\"radiusOfCurve\":0.0}}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{}}]}}}", SCHEMA_VERSION, ASN1_STRING); @Test public void shouldDeserializeJson_bsmTx() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java index 62a141ae5..eda1eabf9 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java @@ -13,8 +13,10 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeMapDataTest { - - final String json = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"18d7c2e0-9158-4456-916d-5cd4b080d290\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:02:13.083984Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.25\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":null,\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}"; + private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "001283c138003000205e9c014d3eab092ca624b5518202dc3658042800000400023622c60ca009f66d48abfaf81388d8ad18070027d9b2ffcfe9804f13667b1ffd009ec2c76e3ffc82c4e0001004b00c5000000800066c4574101813ecd8b757fae027d9b30e6ff5604ec363561fe7809ec6cd69bfec813c4d8a617fc9027d9b2147008604fb163666000016250000802580228000001000096229e1309b51a6fe4204dd361cf1fe5009f6018e1000096020a00000080004d88a57f84027d9b3827002804ec36087600a009f62c289407282c310001c0440188800000006c46dbe02813ec5816d800710052200000001b11b6fad404fb16054a0000401c8800000006c47b3d24813ec5816d801b100c4200000000af890f12c580007e87100d4200000008af4c0f12c580077e7a2c0004000160002001cb028d000000800052c160bc40b5fffd8a9409d86bfebb5b40141457fef53b76c008b467014145800080002bffcbffc82c6a0001804b024d000000800036c2213c3b013ecd80096d64027d9affd8cdfc04f635ff7983bc09f66c0082aa2014280b1b80006012c0b3400000100004b02bcf0f6d7fe065d602788b0138eb900b1240001012c083400000080009b0c2af0b804fb15fe6de171afff6c63e04ec15fe1de670060e40002581ea8000004000135da6df0180a0a6adc2c00d0143cd51897fda028c8abb25001a0b0680008012c105400000200009aedbefae005053540ee003c0a326a9cf3fed8143c5667780010582c0004009608aa00000080004d76de7ee402829aba88ffdc050f354525fff80a322bcf23fa602c690000c04b0395000000200016bb4fbd4e01414d3215800802940ab108fff2030d2000110126200000001aee5103be050a15f6f1ffc8404d8800000006bb97c18e0142857dfa800010146200000001aee89099a050a15f8720000b05dd000000800046be3743b781428d80e1b00002879b00514b4404f63600827d8c09e22c000400015ffe6007016190000402582ce8000004000135ecee1de80a146c02e54758143cd8059ad3e027b1b00613dd004f102c360000804b055d000000200046bcc7c3c781428d80108c6e02829b002b2ece050a16019a4b29b00ab5c3604f136004e410409ec018a10000960c3a00000080004d7de9878602851b003923cc05053601623b440a0a6bfb8c3a5014140b0640005012c197400000100005afe570ef2050a36003a47c80a0a6bfd2c45f014140b054000501101a8200000001b05a90edc050535ffe605800a0a101b8200000001b08a30ec0050535ffe605300a0a101c8200000005b0c6f0ea4050515ffca0568b0001000e"; + + final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"18d7c2e0-9158-4456-916d-5cd4b080d290\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:02:13.083984Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.25\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":null,\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}",SCHEMA_VERSION,ASN1_STRING); @Test public void shouldDeserializeJson() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java index 40b5cc405..6dd122d4d 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java @@ -13,8 +13,10 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdePsmDataTest { - - final String json = "{\"metadata\":{\"logFileName\":\"\",\"maxDurationTime\":0,\"odePacketID\":\"\",\"odeReceivedAt\":\"2023-09-21T15:30:14.926500Z\",\"odeTimStartDateTime\":\"\",\"originIp\":\"192.168.16.1\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdePsmPayload\",\"psmSource\":\"RSU\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"recordGeneratedAt\":\"\",\"recordType\":\"psmTx\",\"sanitized\":false,\"schemaVersion\":6,\"securityResultCode\":\"success\",\"serialId\":{\"bundleId\":0,\"bundleSize\":1,\"recordId\":0,\"serialNumber\":0,\"streamId\":\"06cc1c17-e331-4806-a8ee-456b98c6517b\"}},\"payload\":{\"data\":{\"accuracy\":{\"orientation\":44.9951935489,\"semiMajor\":1.0,\"semiMinor\":1.0},\"basicType\":\"aPEDESTRIAN\",\"heading\":8898,\"id\":\"24779D7E\",\"msgCnt\":26,\"position\":{\"latitude\":40.2397377,\"longitude\":-74.2761437},\"secMark\":3564,\"speed\":0},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735PSM\"}}"; + private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "011d0000201a0000021bd86891de75f84da101c13f042e2214141fff00022c2000270000000163b2cc7986010000"; + + final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"maxDurationTime\":0,\"odePacketID\":\"\",\"odeReceivedAt\":\"2023-09-21T15:30:14.926500Z\",\"odeTimStartDateTime\":\"\",\"originIp\":\"192.168.16.1\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdePsmPayload\",\"psmSource\":\"RSU\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"recordGeneratedAt\":\"\",\"recordType\":\"psmTx\",\"sanitized\":false,\"schemaVersion\":%s,\"securityResultCode\":\"success\",\"serialId\":{\"bundleId\":0,\"bundleSize\":1,\"recordId\":0,\"serialNumber\":0,\"streamId\":\"06cc1c17-e331-4806-a8ee-456b98c6517b\"},\"asn1\":\"%s\"},\"payload\":{\"data\":{\"accuracy\":{\"orientation\":44.9951935489,\"semiMajor\":1.0,\"semiMinor\":1.0},\"basicType\":\"aPEDESTRIAN\",\"heading\":8898,\"id\":\"24779D7E\",\"msgCnt\":26,\"position\":{\"latitude\":40.2397377,\"longitude\":-74.2761437},\"secMark\":3564,\"speed\":0},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735PSM\"}}", SCHEMA_VERSION, ASN1_STRING); @Test public void shouldDeserializeJson() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java index bdc3359d3..23e8bdff3 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java @@ -13,8 +13,10 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeSpatDataTest { + private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "001338000817a780000089680500204642b342b34802021a15a955a940181190acd0acd20100868555c555c00104342aae2aae002821a155715570"; - final String json = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"spatTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSpatPayload\",\"serialId\":{\"streamId\":\"ed008249-0a8d-47f2-a526-ffd8c30b9810\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-24T01:49:54.160478Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"spatSource\":\"V2X\",\"originIp\":\"172.18.0.1\",\"isCertPresent\":false},\"payload\":{\"data\":{\"intersectionStateList\":{\"intersectionStatelist\":[{\"id\":{\"id\":12111},\"revision\":0,\"status\":{\"failureFlash\":false,\"noValidSPATisAvailableAtThisTime\":false,\"fixedTimeOperation\":false,\"standbyOperation\":false,\"trafficDependentOperation\":false,\"manualControlIsEnabled\":false,\"off\":false,\"stopTimeIsActivated\":false,\"recentChangeInMAPassignedLanesIDsUsed\":false,\"recentMAPmessageUpdate\":false,\"failureMode\":false,\"noValidMAPisAvailableAtThisTime\":false,\"signalPriorityIsActive\":false,\"preemptIsActive\":false},\"timeStamp\":35176,\"states\":{\"movementList\":[{\"signalGroup\":2,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":22120,\"maxEndTime\":22121}}]}},{\"signalGroup\":4,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":22181,\"maxEndTime\":22181}}]}},{\"signalGroup\":6,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":22120,\"maxEndTime\":22121}}]}},{\"signalGroup\":8,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}},{\"signalGroup\":1,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}},{\"signalGroup\":5,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SPAT\"}}"; + final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"spatTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSpatPayload\",\"serialId\":{\"streamId\":\"ed008249-0a8d-47f2-a526-ffd8c30b9810\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-24T01:49:54.160478Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"spatSource\":\"V2X\",\"originIp\":\"172.18.0.1\",\"isCertPresent\":false,\"asn1\":\"%s\"},\"payload\":{\"data\":{\"intersectionStateList\":{\"intersectionStatelist\":[{\"id\":{\"id\":12111},\"revision\":0,\"status\":{\"failureFlash\":false,\"noValidSPATisAvailableAtThisTime\":false,\"fixedTimeOperation\":false,\"standbyOperation\":false,\"trafficDependentOperation\":false,\"manualControlIsEnabled\":false,\"off\":false,\"stopTimeIsActivated\":false,\"recentChangeInMAPassignedLanesIDsUsed\":false,\"recentMAPmessageUpdate\":false,\"failureMode\":false,\"noValidMAPisAvailableAtThisTime\":false,\"signalPriorityIsActive\":false,\"preemptIsActive\":false},\"timeStamp\":35176,\"states\":{\"movementList\":[{\"signalGroup\":2,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":22120,\"maxEndTime\":22121}}]}},{\"signalGroup\":4,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":22181,\"maxEndTime\":22181}}]}},{\"signalGroup\":6,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":22120,\"maxEndTime\":22121}}]}},{\"signalGroup\":8,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}},{\"signalGroup\":1,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}},{\"signalGroup\":5,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SPAT\"}}", SCHEMA_VERSION, ASN1_STRING); @Test public void shouldDeserializeJson() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java index 9b8bfbea9..f86706f81 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java @@ -13,8 +13,10 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeSrmDataTest { - - final String json = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"srmTx\",\"securityResultCode\":null,\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSrmPayload\",\"serialId\":{\"streamId\":\"c3ff825f-ed1f-4411-a12e-1ba889f56483\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-13T18:58:53.541816Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"172.21.0.1\",\"srmSource\":\"RSU\"},\"payload\":{\"data\":{\"timeStamp\":null,\"second\":0,\"sequenceNumber\":1,\"requests\":{\"signalRequestPackage\":[{\"request\":{\"id\":{\"region\":null,\"id\":12109},\"requestID\":4,\"requestType\":\"priorityRequest\",\"inBoundLane\":{\"lane\":13,\"approach\":null,\"connection\":null},\"outBoundLane\":{\"lane\":4,\"approach\":null,\"connection\":null}},\"minute\":null,\"second\":null,\"duration\":10979}]},\"requestor\":{\"id\":{\"entityID\":null,\"stationID\":2366845094},\"type\":{\"role\":\"publicTransport\",\"subrole\":null,\"request\":null,\"iso3883\":null,\"hpmsType\":null},\"position\":{\"position\":{\"latitude\":39.5904915,\"longitude\":-105.0913829,\"elevation\":1685.4},\"heading\":175.9000,\"speed\":null},\"name\":null,\"routeName\":null,\"transitStatus\":null,\"transitOccupancy\":null,\"transitSchedule\":null}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SRM\"}}"; + private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "001d2130000010090bd341080d00855c6c0c6899853000a534f7c24cb29897694759b7c0"; + + final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"srmTx\",\"securityResultCode\":null,\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSrmPayload\",\"serialId\":{\"streamId\":\"c3ff825f-ed1f-4411-a12e-1ba889f56483\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-13T18:58:53.541816Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"172.21.0.1\",\"srmSource\":\"RSU\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"timeStamp\":null,\"second\":0,\"sequenceNumber\":1,\"requests\":{\"signalRequestPackage\":[{\"request\":{\"id\":{\"region\":null,\"id\":12109},\"requestID\":4,\"requestType\":\"priorityRequest\",\"inBoundLane\":{\"lane\":13,\"approach\":null,\"connection\":null},\"outBoundLane\":{\"lane\":4,\"approach\":null,\"connection\":null}},\"minute\":null,\"second\":null,\"duration\":10979}]},\"requestor\":{\"id\":{\"entityID\":null,\"stationID\":2366845094},\"type\":{\"role\":\"publicTransport\",\"subrole\":null,\"request\":null,\"iso3883\":null,\"hpmsType\":null},\"position\":{\"position\":{\"latitude\":39.5904915,\"longitude\":-105.0913829,\"elevation\":1685.4},\"heading\":175.9000,\"speed\":null},\"name\":null,\"routeName\":null,\"transitStatus\":null,\"transitOccupancy\":null,\"transitSchedule\":null}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SRM\"}}", SCHEMA_VERSION, ASN1_STRING); @Test public void shouldDeserializeJson() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java index 3121a8131..cd163307e 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java @@ -13,8 +13,10 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeSsmDataTest { - - final String json = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"ssmTx\",\"securityResultCode\":null,\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSsmPayload\",\"serialId\":{\"streamId\":\"b9801eb3-66fb-4d36-ae08-3e8f2bcb2026\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-13T19:00:42.326229Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"172.21.0.1\",\"ssmSource\":\"RSU\"},\"payload\":{\"data\":{\"timeStamp\":null,\"second\":0,\"sequenceNumber\":null,\"status\":{\"signalStatus\":[{\"sequenceNumber\":0,\"id\":{\"region\":null,\"id\":12110},\"sigStatus\":{\"signalStatusPackage\":[{\"requester\":{\"id\":{\"entityID\":null,\"stationID\":2366845094},\"request\":3,\"sequenceNumber\":0,\"role\":null,\"typeData\":{\"role\":\"publicTransport\",\"subrole\":null,\"request\":null,\"iso3883\":null,\"hpmsType\":null}},\"inboundOn\":{\"lane\":23,\"approach\":null,\"connection\":null},\"outboundOn\":null,\"minute\":null,\"second\":null,\"duration\":null,\"status\":\"granted\"}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SSM\"}}"; + private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "001e120000000005e9c04071a26614c06000040ba0"; + + final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"ssmTx\",\"securityResultCode\":null,\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSsmPayload\",\"serialId\":{\"streamId\":\"b9801eb3-66fb-4d36-ae08-3e8f2bcb2026\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-13T19:00:42.326229Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"172.21.0.1\",\"ssmSource\":\"RSU\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"timeStamp\":null,\"second\":0,\"sequenceNumber\":null,\"status\":{\"signalStatus\":[{\"sequenceNumber\":0,\"id\":{\"region\":null,\"id\":12110},\"sigStatus\":{\"signalStatusPackage\":[{\"requester\":{\"id\":{\"entityID\":null,\"stationID\":2366845094},\"request\":3,\"sequenceNumber\":0,\"role\":null,\"typeData\":{\"role\":\"publicTransport\",\"subrole\":null,\"request\":null,\"iso3883\":null,\"hpmsType\":null}},\"inboundOn\":{\"lane\":23,\"approach\":null,\"connection\":null},\"outboundOn\":null,\"minute\":null,\"second\":null,\"duration\":null,\"status\":\"granted\"}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SSM\"}}", SCHEMA_VERSION, ASN1_STRING); @Test public void shouldDeserializeJson() { diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java index fbd008bb3..73832b293 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java @@ -16,8 +16,9 @@ public class OdeTimDataTest { private static final String SCHEMA_VERSION = "7"; + private static final String ASN1_STRING = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e"; - private static final String json = String.format("{\"metadata\":{\"securityResultCode\":\"\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"%s\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"asn1\":\"\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"11ad5323-ec81-4694-8cd0-eb88ca08728e\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2022-12-24T02:24:38.248417Z\",\"originIp\":\"172.18.0.1\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"449089\",\"packetID\":\"0000000000000BBC2B\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"},\"name\":\"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456\",\"laneWidth\":\"32700\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047287423\",\"lat\":\"411264686\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047305390\",\"lat\":\"411260104\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047323629\",\"lat\":\"411256185\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047342080\",\"lat\":\"411252886\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047360706\",\"lat\":\"411250207\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047379480\",\"lat\":\"411248201\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047398354\",\"lat\":\"411246839\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047417290\",\"lat\":\"411246133\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047436246\",\"lat\":\"411245796\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047455202\",\"lat\":\"411245470\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047474159\",\"lat\":\"411245173\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000000000010000\"}},\"durationTime\":\"1440\",\"notUsed2\":\"0\",\"notUsed3\":\"0\",\"startYear\":\"2018\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"}}},\"priority\":\"5\",\"content\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":\"777\"}},{\"item\":{\"itis\":\"13579\"}}]}},\"url\":\"null\",\"notUsed\":\"0\",\"notUsed1\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"448260\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}", SCHEMA_VERSION); + private static final String json = String.format("{\"metadata\":{\"securityResultCode\":\"\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"%s\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"asn1\":\"%s\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"11ad5323-ec81-4694-8cd0-eb88ca08728e\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2022-12-24T02:24:38.248417Z\",\"originIp\":\"172.18.0.1\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"449089\",\"packetID\":\"0000000000000BBC2B\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"},\"name\":\"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456\",\"laneWidth\":\"32700\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047287423\",\"lat\":\"411264686\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047305390\",\"lat\":\"411260104\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047323629\",\"lat\":\"411256185\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047342080\",\"lat\":\"411252886\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047360706\",\"lat\":\"411250207\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047379480\",\"lat\":\"411248201\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047398354\",\"lat\":\"411246839\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047417290\",\"lat\":\"411246133\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047436246\",\"lat\":\"411245796\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047455202\",\"lat\":\"411245470\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047474159\",\"lat\":\"411245173\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000000000010000\"}},\"durationTime\":\"1440\",\"notUsed2\":\"0\",\"notUsed3\":\"0\",\"startYear\":\"2018\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"}}},\"priority\":\"5\",\"content\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":\"777\"}},{\"item\":{\"itis\":\"13579\"}}]}},\"url\":\"null\",\"notUsed\":\"0\",\"notUsed1\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"448260\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}", SCHEMA_VERSION, ASN1_STRING); // // Note that OdeTimData does not have annotations to support deserialization, so serialization/deserialization is not tested here. diff --git a/jpo-ode-plugins/pom.xml b/jpo-ode-plugins/pom.xml index 8403a85f7..50b5281d1 100644 --- a/jpo-ode-plugins/pom.xml +++ b/jpo-ode-plugins/pom.xml @@ -11,7 +11,7 @@ usdot.jpo.ode jpo-ode - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT @@ -27,7 +27,7 @@ usdot.jpo.ode jpo-ode-common - 2.1.0-SNAPSHOT + 3.0.0-SNAPSHOT + + + package-jar + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + + true + lib/ + us.dot.its.jpo.ode.OdeSvcsApplication + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + repackage + none + + + + + + + From 384911c2e79eee3496041190471a6c7af3e67b2d Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:19:34 -0600 Subject: [PATCH 57/62] testing artifact-publish workflow --- .github/workflows/artifact-publish.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/artifact-publish.yml b/.github/workflows/artifact-publish.yml index c1b20e592..0d142bc1f 100644 --- a/.github/workflows/artifact-publish.yml +++ b/.github/workflows/artifact-publish.yml @@ -4,6 +4,9 @@ on: push: tags: - 'jpo-ode-*' + pull_request: + types: + - synchronize jobs: build: From e458147ec009d31b075bf180255acdc974bfc437 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:25:41 -0600 Subject: [PATCH 58/62] testing putting profile in ode-svcs instead of parent pom --- jpo-ode-svcs/pom.xml | 34 ++++++++++++++++++++++++++++++++++ pom.xml | 35 ----------------------------------- 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/jpo-ode-svcs/pom.xml b/jpo-ode-svcs/pom.xml index 1eabc645b..9a10b40bd 100644 --- a/jpo-ode-svcs/pom.xml +++ b/jpo-ode-svcs/pom.xml @@ -148,4 +148,38 @@ + + + + package-jar + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + + true + lib/ + us.dot.its.jpo.ode.OdeSvcsApplication + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + repackage + none + + + + + + + diff --git a/pom.xml b/pom.xml index 7f7720162..4463b2307 100644 --- a/pom.xml +++ b/pom.xml @@ -170,39 +170,4 @@ https://maven.pkg.github.com/${github_organization}/jpo-ode - - - - - package-jar - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.0 - - - - true - lib/ - us.dot.its.jpo.ode.OdeSvcsApplication - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - repackage - none - - - - - - - From 3b0329b9fadb140ed23b8ea36ea7c46036a48954 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Fri, 20 Sep 2024 16:40:44 -0600 Subject: [PATCH 59/62] removing test from artifact-publish workflow --- .github/workflows/artifact-publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/artifact-publish.yml b/.github/workflows/artifact-publish.yml index 0d142bc1f..3c1fa7dd8 100644 --- a/.github/workflows/artifact-publish.yml +++ b/.github/workflows/artifact-publish.yml @@ -26,9 +26,9 @@ jobs: run: mvn versions:set -DremoveSnapshot - name: Build with Maven - run: mvn -B clean package -Ppackage-jar --file pom.xml -DskipTests + run: mvn -B clean package --file pom.xml -DskipTests -Ppackage-jar - name: Publish to GitHub Packages - run: mvn --batch-mode -Dgithub_organization=${{ github.repository_owner }} deploy + run: mvn --batch-mode -Dgithub_organization=${{ github.repository_owner }} deploy -DskipTests -Ppackage-jar env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From a2c30c610f135e805d778bd473555c688c3f88f1 Mon Sep 17 00:00:00 2001 From: Michael7371 <40476797+Michael7371@users.noreply.github.com> Date: Mon, 23 Sep 2024 08:20:46 -0600 Subject: [PATCH 60/62] removing trigger on pull request --- .github/workflows/artifact-publish.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/artifact-publish.yml b/.github/workflows/artifact-publish.yml index 3c1fa7dd8..8321ef7e0 100644 --- a/.github/workflows/artifact-publish.yml +++ b/.github/workflows/artifact-publish.yml @@ -4,9 +4,6 @@ on: push: tags: - 'jpo-ode-*' - pull_request: - types: - - synchronize jobs: build: From 89b819c9fc1654bd65a341d1d0267e763a8202e6 Mon Sep 17 00:00:00 2001 From: john-wiens Date: Tue, 24 Sep 2024 16:30:24 -0600 Subject: [PATCH 61/62] Change allowed number of skip bits --- .../src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java index 1136ab357..04cb4cc46 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java @@ -43,6 +43,7 @@ public static String stripDot2Header(String hexString, String payload_start_flag * Otherwise, returns just the payload. */ public static byte[] stripDot3Header(byte[] packet, HashMap msgStartFlags) { + String hexString = HexUtils.toHexString(packet); String hexPacketParsed = ""; @@ -145,11 +146,9 @@ public static int findValidStartFlagLocation(String hexString, String startFlag) int index = hexString.indexOf(startFlag); // If the message has a header, make sure not to missidentify the message by the header - // Maximum Header Length is 17 Bytes: https://www.researchgate.net/figure/WAVE-Short-Message-format-Reproduced-by-permission_fig6_224242297 - // At 2 Hex Chars per byte that is a maximum length of 38 if(index == 0 || index == -1){ - return -1; + return index; } else{ index = hexString.indexOf(startFlag,4); From c8be31901c3f148d5f7696fcd48891bd6e6fe831 Mon Sep 17 00:00:00 2001 From: SaikrishnaBairamoni Date: Mon, 30 Sep 2024 12:41:05 -0400 Subject: [PATCH 62/62] updated submodules to point latest versions --- asn1_codec | 2 +- jpo-cvdp | 2 +- jpo-sdw-depositor | 2 +- jpo-security-svcs | 2 +- jpo-utils | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/asn1_codec b/asn1_codec index 3b407666b..6ce8588e7 160000 --- a/asn1_codec +++ b/asn1_codec @@ -1 +1 @@ -Subproject commit 3b407666b09e2e7c3886bf6953d5821b43748e03 +Subproject commit 6ce8588e77cde969fa419f1cc960c4eb05829ff1 diff --git a/jpo-cvdp b/jpo-cvdp index e51d33444..23b593eee 160000 --- a/jpo-cvdp +++ b/jpo-cvdp @@ -1 +1 @@ -Subproject commit e51d334445f97fa2a6b574c74d6547a920dc194c +Subproject commit 23b593eeebacd82b7f334ac926709d424c7bcc28 diff --git a/jpo-sdw-depositor b/jpo-sdw-depositor index cc5429597..0180d3024 160000 --- a/jpo-sdw-depositor +++ b/jpo-sdw-depositor @@ -1 +1 @@ -Subproject commit cc5429597a23623f83c0efe3588631b8bc5f7dcd +Subproject commit 0180d30242fdfe7c178f3e060267b8690220c473 diff --git a/jpo-security-svcs b/jpo-security-svcs index 7c78ca8df..eaa5a3ab4 160000 --- a/jpo-security-svcs +++ b/jpo-security-svcs @@ -1 +1 @@ -Subproject commit 7c78ca8dfeec4f7558187d2c629155ed3f61d6a6 +Subproject commit eaa5a3ab49be37c5457677840b94d674e4be5e45 diff --git a/jpo-utils b/jpo-utils index 849e009a0..99c36526a 160000 --- a/jpo-utils +++ b/jpo-utils @@ -1 +1 @@ -Subproject commit 849e009a0abfc4b69fd1578508b6447049c0b986 +Subproject commit 99c36526af8c349e6ec92440cc017fffbf2c5652

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