From fe59c5ae0ad06c7203885d43355648c6fa09a6ff Mon Sep 17 00:00:00 2001 From: pmonington Date: Thu, 9 Apr 2026 09:57:44 -0600 Subject: [PATCH 01/52] test: disable broken test Asn1DecodedDataRouterTIMDataFlow with Disabled annotation and associated ticket number --- .../its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java index 3d5899dec..7c0f7d240 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java @@ -16,6 +16,7 @@ import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.common.serialization.StringDeserializer; import org.assertj.core.util.Arrays; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; @@ -116,6 +117,7 @@ void testAsn1DecodedDataRouterBSMDataFlow() throws IOException { testConsumer.close(); } + @Disabled("466943") @Test void testAsn1DecodedDataRouterTIMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getTim()); From c3ec53d46b1f19efcb0ba35504df4adaadafcd92 Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 14 Apr 2026 13:37:16 -0600 Subject: [PATCH 02/52] tool: use rewrite recipe to update dependencies and plugins in pom files for upgrade to Spring --- jpo-ode-common/pom.xml | 7 +++---- jpo-ode-svcs/pom.xml | 28 +++++++++++++++------------- pom.xml | 12 +++++------- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/jpo-ode-common/pom.xml b/jpo-ode-common/pom.xml index c01fb219c..e4f653b6f 100644 --- a/jpo-ode-common/pom.xml +++ b/jpo-ode-common/pom.xml @@ -39,12 +39,11 @@ jakarta.xml.bind jakarta.xml.bind-api - 4.0.0 + 4.0.5 - javax.websocket - javax.websocket-client-api - 1.1 + jakarta.websocket + jakarta.websocket-client-api com.esotericsoftware diff --git a/jpo-ode-svcs/pom.xml b/jpo-ode-svcs/pom.xml index f9e8537d3..cf2f155d2 100644 --- a/jpo-ode-svcs/pom.xml +++ b/jpo-ode-svcs/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 usdot.jpo.ode @@ -50,11 +50,12 @@ jakarta.xml.bind jakarta.xml.bind-api - 4.0.0 + 4.0.5 org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc + 4.0.3 org.springframework.restdocs @@ -71,8 +72,14 @@ spring-boot-starter-websocket - org.springframework.kafka - spring-kafka + org.springframework.boot + spring-boot-starter-kafka + 4.0.3 + + + org.springframework.boot + spring-boot-starter-restclient + 4.0.3 org.springframework.kafka @@ -100,8 +107,7 @@ org.webjars - webjars-locator - 0.40 + webjars-locator-lite org.webjars @@ -147,11 +153,7 @@ jakarta.annotation jakarta.annotation-api 2.1.1 - - - javax.annotation - javax.annotation-api - 1.3.2 + provided com.networknt diff --git a/pom.xml b/pom.xml index a345c8266..1c79c963f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.5.4 + 4.0.3 @@ -60,7 +60,7 @@ org.springframework.boot - spring-boot-starter-web + spring-boot-starter-webmvc org.springframework.boot @@ -83,13 +83,12 @@ org.junit.jupiter junit-jupiter-api - 5.12.2 test org.projectlombok lombok - 1.18.30 + 1.18.44 provided @@ -109,7 +108,7 @@ org.springframework.cloud spring-cloud-dependencies - 2025.0.0 + 2025.0.1 pom import @@ -141,7 +140,7 @@ org.projectlombok lombok - 1.18.30 + 1.18.44 @@ -149,7 +148,6 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.5 -javaagent:${user.home}/.m2/repository/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar -Xshare:off From d53aedad70311924d6a7755ffac161de2c4813c5 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 15:06:17 -0600 Subject: [PATCH 03/52] test: refactor RawEncodedTIMJsonRouterTest to use @EmbeddedKafka and @KafkaListener --- .../asn1/RawEncodedTIMJsonRouterTest.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java index 87cd97d17..3d2f4bcdc 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java @@ -1,24 +1,26 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,7 +30,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @@ -45,6 +46,8 @@ "ode.kafka.topics.raw-encoded-json.tim=topic.Asn1DecoderTestTIMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderTIMInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestTIMJSON", "topic.Asn1DecoderTIMInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -60,18 +63,13 @@ class RawEncodedTIMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; - @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getTim()); + private CountDownLatch latch; + private String odeTimData; - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeTIMJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + @Test + void testListen() throws JSONException, IOException, InterruptedException { + latch = new CountDownLatch(1); + odeTimData = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -81,14 +79,19 @@ void testListen() throws JSONException, IOException { var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); kafkaTemplate.send(rawEncodedJsonTopics.getTim(), json); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-tim.xml"); assert inputStream != null; var expectedTim = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var produced = - KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); - assertEquals(expectedTim, produced.value()); - testConsumer.close(); + assertEquals(expectedTim, odeTimData); + } + + @KafkaListener(topics = {"topic.Asn1DecoderTIMInput", "topic.Asn1DecoderTestTIMJSON"} , groupId = "test-group") + public void receive(String payload) { + odeTimData = payload; + latch.countDown(); // Decrement the latch once the message is received } } \ No newline at end of file From 2b2316a7a854fc31e93d290af43bf57947e9d7a2 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 15:00:44 -0600 Subject: [PATCH 04/52] test: refactor RawEncodedSSMJsonRouterTest to use @EmbeddedKafka and @KafkaListener --- .../asn1/RawEncodedSSMJsonRouterTest.java | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java index ce658c1ab..2cf839c63 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java @@ -1,24 +1,26 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,7 +30,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @SpringBootTest( @@ -44,6 +45,8 @@ "ode.kafka.topics.raw-encoded-json.ssm=topic.Asn1DecoderTestSSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSSMInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestSSMJSON", "topic.Asn1DecoderSSMInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -59,18 +62,13 @@ class RawEncodedSSMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; - @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getSsm()); + private CountDownLatch latch; + private String odeSsmData; - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeSSMJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + @Test + void testListen() throws JSONException, IOException, InterruptedException { + latch = new CountDownLatch(1); + odeSsmData = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -80,13 +78,19 @@ void testListen() throws JSONException, IOException { var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); kafkaTemplate.send(rawEncodedJsonTopics.getSsm(), json); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-ssm.xml"); assert inputStream != null; var expectedSSM = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var consumedSSM = KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); - assertEquals(expectedSSM, consumedSSM.value()); - testConsumer.close(); + assertEquals(expectedSSM, odeSsmData); } + + @KafkaListener(topics = {"topic.Asn1DecoderSSMInput", "topic.Asn1DecoderTestSSMJSON"} , groupId = "test-group") + public void receive(String payload) { + odeSsmData = payload; + latch.countDown(); // Decrement the latch once the message is received + } } \ No newline at end of file From cfed20b3d353e364543c811da363d42f437e90ac Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 14:41:29 -0600 Subject: [PATCH 05/52] test: refactor RawEncodedSRMJsonRouterTest to use EmbeddedKafka and CountDownLatch for message validation --- .../asn1/RawEncodedSRMJsonRouterTest.java | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java index 60c65da18..e663dcd02 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -1,24 +1,26 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,7 +30,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @SpringBootTest( @@ -44,6 +45,8 @@ "ode.kafka.topics.raw-encoded-json.srm=topic.Asn1DecoderTestSRMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSRMInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestRSMJSON", "topic.Asn1DecoderSRMInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -59,18 +62,13 @@ class RawEncodedSRMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; - @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getSrm()); + private CountDownLatch latch; + private String odeRsmData; - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeSRMJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + @Test + void testListen() throws JSONException, IOException, InterruptedException { + latch = new CountDownLatch(1); + odeRsmData = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -80,13 +78,19 @@ void testListen() throws JSONException, IOException { var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); kafkaTemplate.send(rawEncodedJsonTopics.getSrm(), json); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-srm.xml"); assert inputStream != null; var expectedSrm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var producedSrm = KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); - assertEquals(expectedSrm, producedSrm.value()); - testConsumer.close(); + assertEquals(expectedSrm, odeRsmData); } + + @KafkaListener(topics = {"topic.Asn1DecoderSRMInput", "topic.Asn1DecoderTestRSMJSON"} , groupId = "test-group") + public void receive(String payload) { + odeRsmData = payload; + latch.countDown(); // Decrement the latch once the message is received + } } \ No newline at end of file From 2bd4a54ac0cf4cc5044b557c1ec65bf362907d33 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 14:05:49 -0600 Subject: [PATCH 06/52] test: refactor MapReceiverTest to use @EmbeddedKafka and @KafkaListener --- .../its/jpo/ode/udp/map/MapReceiverTest.java | 55 +++++++++---------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java index 7fac81a8f..c1fbc1742 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java @@ -1,5 +1,6 @@ package us.dot.its.jpo.ode.udp.map; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static us.dot.its.jpo.ode.test.utilities.ApprovalTestCase.deserializeTestCases; @@ -8,31 +9,31 @@ import java.time.Clock; import java.time.Instant; import java.util.List; -import java.util.Map; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + import lombok.extern.slf4j.Slf4j; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.clients.consumer.ConsumerRecord; import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.test.utilities.ApprovalTestCase; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; @@ -40,8 +41,7 @@ @Slf4j @SpringBootTest( classes = { - OdeKafkaProperties.class, - UDPReceiverProperties.class, + KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class, @@ -51,14 +51,14 @@ ) @EnableConfigurationProperties @ContextConfiguration(classes = { - UDPReceiverProperties.class, + UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.MapReceiverTestMAPJSON"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class MapReceiverTest { - private final EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - @Autowired UDPReceiverProperties udpReceiverProperties; @@ -68,9 +68,11 @@ class MapReceiverTest { @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; - @Test - void testMapReceiver() throws IOException { + private CountDownLatch latch; + private String actualPayload; + @Test + void testMapReceiver() throws IOException, InterruptedException { // Set the clock to a fixed time so that the MapReceiver will produce the same output every time final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2020-01-01T00:00:00Z"), Clock.systemUTC().getZone())); @@ -80,16 +82,6 @@ void testMapReceiver() throws IOException { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(mapReceiver); - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getMap()); - - // Set up a Kafka consumer - Map consumerProps = - KafkaTestUtils.consumerProps("test-group", "false", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getMap()); - TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getMap().getReceiverPort()); String path = @@ -97,12 +89,11 @@ void testMapReceiver() throws IOException { List approvalTestCases = deserializeTestCases(path); for (ApprovalTestCase approvalTestCase : approvalTestCases) { + latch = new CountDownLatch(1); + actualPayload = null; udpClient.send(approvalTestCase.getInput()); - - ConsumerRecord produced = - KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getMap()); - - JSONObject producedJson = new JSONObject(produced.value()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(approvalTestCase.getExpected()); // assert that the UUIDs are different, then remove them so that the rest of the JSON can be compared @@ -120,4 +111,10 @@ void testMapReceiver() throws IOException { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.MapReceiverTestMAPJSON") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } From 4ce1ee7c461a2365e9241207ac1998c62f85cd88 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 13:42:05 -0600 Subject: [PATCH 07/52] refactor: update related imports for Spring updates --- .../main/java/us/dot/its/jpo/ode/config/MetricsConfig.java | 6 +++--- .../java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java | 2 +- .../dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java | 2 +- .../its/jpo/ode/udp/controller/UdpServicesController.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/MetricsConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/MetricsConfig.java index 4727d86ad..673e2b2af 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/MetricsConfig.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/MetricsConfig.java @@ -3,7 +3,7 @@ import io.micrometer.core.instrument.MeterRegistry; import java.net.InetAddress; import java.net.UnknownHostException; -import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; +import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -28,12 +28,12 @@ public MeterRegistryCustomizer metricsCommonTags() { private String getHostName() { try { - // Get hostname from environment variable if running in Kubernetes + // Get the hostname from the environment variable if running in Kubernetes String hostFromEnv = System.getenv("HOSTNAME"); if (hostFromEnv != null && !hostFromEnv.isEmpty()) { return hostFromEnv; } - // Fallback to system hostname for local deployments in Docker + // Fallback to the system hostname for local deployments in Docker return InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { return "unknown"; diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java index 4dd35f434..d4822b539 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java @@ -3,7 +3,7 @@ import java.util.HashMap; import java.util.Map; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.annotation.EnableKafka; diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java index 5380e3ecb..457386abe 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java @@ -6,7 +6,7 @@ import java.util.Map; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.common.serialization.StringSerializer; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.annotation.EnableKafka; 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 ae69b128c..07b56b264 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 @@ -5,7 +5,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import javax.annotation.PreDestroy; +import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; From 5086432731164e113ba80ca9d0bceba1e8ac4f8f Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 14 Apr 2026 14:07:15 -0600 Subject: [PATCH 08/52] refactor: replace io.netty UnsupportedMessageTypeException with custom implementation --- .../jpo/ode/udp/generic/GenericReceiver.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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 0b5447bba..20d7c4825 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 @@ -1,6 +1,5 @@ package us.dot.its.jpo.ode.udp.generic; -import io.netty.handler.codec.UnsupportedMessageTypeException; import java.net.DatagramPacket; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; @@ -152,4 +151,18 @@ private void routeMessageByMessageType( default -> throw new UnsupportedMessageTypeException(messageType); } } -} + + /** + * Exception class for Unsupported Message Types. + */ + public static class UnsupportedMessageTypeException extends Exception { + /** + * Constructs a new UnsupportedMessageTypeException with the specified detail message. + * + * @param message the detail message + */ + public UnsupportedMessageTypeException(String message) { + super(message); + } + } +} \ No newline at end of file From ae07690e16e605edf9886bb55344e5516290e271 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Sun, 22 Mar 2026 22:12:18 -0600 Subject: [PATCH 09/52] fix: update EmbeddedKafkaHolder to use EmbeddedKafkaKraftBroker instead of EmbeddedKafkaZKBroker for transition to kraft instead of zookeeper --- .../its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java index aecd57099..4121e320a 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java @@ -2,9 +2,9 @@ import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.admin.NewTopic; -import org.springframework.kafka.KafkaException; +import org.apache.kafka.common.KafkaException; import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.EmbeddedKafkaZKBroker; +import org.springframework.kafka.test.EmbeddedKafkaKraftBroker; /** * The EmbeddedKafkaHolder class is a utility for managing a singleton instance of an embedded Kafka @@ -26,8 +26,8 @@ @Slf4j public final class EmbeddedKafkaHolder { - private static EmbeddedKafkaBroker embeddedKafka = - new EmbeddedKafkaZKBroker(1, false).brokerListProperty("spring.kafka.bootstrap-servers"); + private static final EmbeddedKafkaBroker embeddedKafka = + new EmbeddedKafkaKraftBroker(1, 1).brokerListProperty("spring.kafka.bootstrap-servers"); private static boolean started; From 32348bc83a9e7482ff4a6ac89c2755667df68ae8 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 12:50:29 -0600 Subject: [PATCH 10/52] test: refactor SrmReceiverTest to use @EmbeddedKafka and @KafkaListener, remove EmbeddedKafkaHolder usage --- .../its/jpo/ode/udp/srm/SrmReceiverTest.java | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java index ff0e964a5..ff29260e6 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java @@ -1,45 +1,45 @@ package us.dot.its.jpo.ode.udp.srm; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Paths; +import java.nio.file.Path; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + import org.json.JSONObject; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; -@RunWith(SpringRunner.class) @EnableConfigurationProperties @SpringBootTest( classes = { - OdeKafkaProperties.class, - UDPReceiverProperties.class, + KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class, @@ -50,9 +50,11 @@ } ) @ContextConfiguration(classes = { - UDPReceiverProperties.class, + UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.SrmReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SrmReceiverTest { @@ -65,11 +67,13 @@ class SrmReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSrm()); + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); @@ -81,25 +85,19 @@ void testRun() throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(srmReceiver); - String fileContent = Files.readString(Paths.get( + String fileContent = Files.readString(Path.of( "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt")); - String expected = Files.readString(Paths.get( + String expected = Files.readString(Path.of( "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSrm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps( - "SrmReceiverTest", "true", embeddedKafka); - var cf = new DefaultKafkaConsumerFactory(consumerProps); - var consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSrm()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSrm()); - String receivedValue = singleRecord.value(); - assertNotEquals(expected, receivedValue); + assertNotEquals(expected, actualPayload); - JSONObject producedJson = new JSONObject(receivedValue); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), @@ -111,4 +109,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.SrmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From f5f2d02c8e2a441ab923ddca2ff89fda64945bd0 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 12:59:22 -0600 Subject: [PATCH 11/52] test: refactor SsmReceiverTest to use @EmbeddedKafka and @KafkaListener, remove EmbeddedKafkaHolder usage --- .../its/jpo/ode/udp/ssm/SsmReceiverTest.java | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java index 760ab07e3..01f222fa8 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java @@ -1,5 +1,6 @@ package us.dot.its.jpo.ode.udp.ssm; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -8,27 +9,29 @@ import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.kafka.clients.consumer.Consumer; +import java.util.concurrent.TimeUnit; + import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; @@ -36,8 +39,7 @@ @EnableConfigurationProperties @SpringBootTest( classes = { - OdeKafkaProperties.class, - UDPReceiverProperties.class, + KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class, @@ -48,9 +50,11 @@ } ) @ContextConfiguration(classes = { - UDPReceiverProperties.class, + UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.SsmReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SsmReceiverTest { @@ -63,11 +67,13 @@ class SsmReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSsm()); + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); @@ -86,16 +92,10 @@ void testRun() throws Exception { TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSsm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps( - "SsmReceiverTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSsm()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSsm()); - assertNotEquals(expected, singleRecord.value()); - JSONObject producedJson = new JSONObject(singleRecord.value()); + assertNotEquals(expected, actualPayload); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), @@ -109,4 +109,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.SsmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From 1d0831ca09bac4566dbdd2625b4e4253413df945 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 13:14:45 -0600 Subject: [PATCH 12/52] test: refactor RtcmReceiverTest to use @EmbeddedKafka and @KafkaListener, replace EmbeddedKafkaHolder with CountDownLatch for async validation --- .../jpo/ode/udp/rtcm/RtcmReceiverTest.java | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java index 2859a629e..2491562b1 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java @@ -1,5 +1,6 @@ package us.dot.its.jpo.ode.udp.rtcm; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -8,27 +9,29 @@ import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.kafka.clients.consumer.Consumer; +import java.util.concurrent.TimeUnit; + import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; @@ -38,12 +41,14 @@ */ @EnableConfigurationProperties @SpringBootTest( - classes = { OdeKafkaProperties.class, UDPReceiverProperties.class, KafkaProducerConfig.class, + classes = { KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class, }, properties = {"ode.receivers.rtcm.receiver-port=12753", "ode.kafka.topics.raw-encoded-json.rtcm=topic.RtcmReceiverTest"}) @ContextConfiguration( - classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class}) + classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class, OdeKafkaProperties.class}) +@EmbeddedKafka(partitions = 1, topics = {"topic.RtcmReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RtcmReceiverTest { @@ -56,11 +61,13 @@ public class RtcmReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getRtcm()); + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils .setClock(Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); @@ -78,18 +85,12 @@ void testRun() throws Exception { TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getRtcm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps("RtcmReceiverTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getRtcm()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - // read record from produce topic - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getRtcm()); - // confirm the stream-id is different, then remove it from both so that we can test equality + // confirm the stream-id is different, then remove it from both so that we can test equality // of all other fields - assertNotEquals(expected, singleRecord.value()); - JSONObject producedJson = new JSONObject(singleRecord.value()); + assertNotEquals(expected, actualPayload); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); // assert that the UUIDs are different, then remove them so that the rest of the JSON can be @@ -103,4 +104,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.RtcmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From 71c481d97f04d754ec4890818b69c7ff3193eacb Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 13:29:47 -0600 Subject: [PATCH 13/52] test: refactor SdsmReceiverTest to use @EmbeddedKafka and @KafkaListener, replace EmbeddedKafkaHolder with CountDownLatch for async validation --- .../jpo/ode/udp/sdsm/SdsmReceiverTest.java | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java index a8fb13dc8..f6923e1db 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java @@ -5,48 +5,52 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Paths; +import java.nio.file.Path; import java.time.Clock; import java.time.Instant; import java.time.ZoneOffset; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + import org.apache.kafka.clients.admin.NewTopic; +import org.assertj.core.api.Assertions; import org.json.JSONObject; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; import us.dot.its.jpo.ode.util.JsonUtils; -@RunWith(SpringRunner.class) @EnableConfigurationProperties @SpringBootTest( - classes = {OdeKafkaProperties.class, UDPReceiverProperties.class, KafkaProducerConfig.class, + classes = {KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class}, properties = {"ode.receivers.sdsm.receiver-port=12413", "ode.kafka.topics.raw-encoded-json.sdsm=topic.SdsmReceiverTest"}) @ContextConfiguration( - classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class}) + classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class, OdeKafkaProperties.class}) +@EmbeddedKafka(partitions = 1, topics = {"topic.SdsmReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SdsmReceiverTest { @@ -59,11 +63,12 @@ class SdsmReceiverTest { @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - private ExecutorService executorService; private SdsmReceiver sdsmReceiver; + private CountDownLatch latch; + private String actualPayload; + @AfterEach void cleanup() { if (executorService != null) { @@ -76,11 +81,8 @@ void cleanup() { @Test void testRun() throws Exception { - try { - embeddedKafka.addTopics(new NewTopic(rawEncodedJsonTopics.getSdsm(), 1, (short) 1)); - } catch (Exception e) { - // Ignore as we're only ensuring topics exist - } + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils .setClock(Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneOffset.UTC)); @@ -91,24 +93,20 @@ void testRun() throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(sdsmReceiver); - String fileContent = Files.readString(Paths - .get("src/test/resources/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest_ValidSDSM.txt")); - String expected = Files.readString(Paths.get( + String fileContent = Files.readString(Path + .of("src/test/resources/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest_ValidSDSM.txt")); + String expected = Files.readString(Path.of( "src/test/resources/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest_ValidSDSM_expected.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSdsm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps("SdsmReceiverTest", "true", embeddedKafka); - var cf = new DefaultKafkaConsumerFactory(consumerProps); - var consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSdsm()); + Assertions.assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSdsm()); - assertNotEquals(expected, singleRecord.value()); + assertNotEquals(expected, actualPayload); - JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), @@ -122,4 +120,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } } + + @KafkaListener(topics = "topic.SdsmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From 71559e42a5397899550d8120cabf74bc49ba700a Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 13:34:36 -0600 Subject: [PATCH 14/52] test: refactor PsmReceiverTest to use @EmbeddedKafka and @KafkaListener, replace EmbeddedKafkaHolder with CountDownLatch for async validation --- .../its/jpo/ode/udp/psm/PsmReceiverTest.java | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java index fc7b7765d..a8f29407c 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java @@ -1,46 +1,45 @@ package us.dot.its.jpo.ode.udp.psm; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Paths; +import java.nio.file.Path; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.kafka.clients.admin.NewTopic; +import java.util.concurrent.TimeUnit; + import org.json.JSONObject; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; -@RunWith(SpringRunner.class) @EnableConfigurationProperties @SpringBootTest( classes = { - OdeKafkaProperties.class, - UDPReceiverProperties.class, + KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class, @@ -51,9 +50,11 @@ } ) @ContextConfiguration(classes = { - UDPReceiverProperties.class, + UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.PsmReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class PsmReceiverTest { @@ -66,15 +67,13 @@ class PsmReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - try { - embeddedKafka.addTopics(new NewTopic(rawEncodedJsonTopics.getPsm(), 1, (short) 1)); - } catch (Exception e) { - // Ignore as we're only ensuring topics exist - } + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); @@ -85,24 +84,19 @@ void testRun() throws Exception { executorService.submit(psmReceiver); String fileContent = - Files.readString(Paths.get( + Files.readString(Path.of( "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt")); - String expected = Files.readString(Paths.get( + String expected = Files.readString(Path.of( "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getPsm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps( - "PsmReceiverTest", "true", embeddedKafka); - var cf = new DefaultKafkaConsumerFactory(consumerProps); - var consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getPsm()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getPsm()); - assertNotEquals(expected, singleRecord.value()); + assertNotEquals(expected, actualPayload); - JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), @@ -114,4 +108,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.PsmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From bcd51cca9d414c286ddc0af329d5ffab686dff30 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 13:40:15 -0600 Subject: [PATCH 15/52] test: refactor SpatReceiverTest to use @EmbeddedKafka and @KafkaListener, replace EmbeddedKafkaHolder with CountDownLatch for async validation --- .../jpo/ode/udp/spat/SpatReceiverTest.java | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java index 6c9dce3bd..310146aa3 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java @@ -1,5 +1,6 @@ package us.dot.its.jpo.ode.udp.spat; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -8,8 +9,11 @@ import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + import org.apache.kafka.clients.consumer.Consumer; import org.json.JSONObject; import org.junit.jupiter.api.Test; @@ -17,13 +21,17 @@ import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; @@ -36,8 +44,7 @@ @EnableConfigurationProperties @SpringBootTest( classes = { - OdeKafkaProperties.class, - UDPReceiverProperties.class, + KafkaConsumerConfig.class, KafkaProducerConfig.class, SerializationConfig.class, TestMetricsConfig.class, @@ -48,9 +55,11 @@ } ) @ContextConfiguration(classes = { - UDPReceiverProperties.class, + UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.SpatReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SpatReceiverTest { @@ -63,10 +72,13 @@ class SpatReceiverTest { @Autowired private KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { + latch = new CountDownLatch(1); + actualPayload = null; EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSpat()); final Clock prevClock = DateTimeUtils.setClock( @@ -87,16 +99,10 @@ void testRun() throws Exception { TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSpat().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps( - "SpatReceiverTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSpat()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSpat()); - assertNotEquals(expected, singleRecord.value()); - JSONObject producedJson = new JSONObject(singleRecord.value()); + assertNotEquals(expected, actualPayload); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), @@ -110,4 +116,9 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + @KafkaListener(topics = "topic.SpatReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From 5eb8e0318c6997405d107c66bd13dcc169fd3eb0 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 13:42:05 -0600 Subject: [PATCH 16/52] test: remove EmbeddedKafkaHolder usage in SpatReceiverTest --- .../test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java index 310146aa3..372272bba 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java @@ -36,7 +36,6 @@ import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; @@ -79,7 +78,6 @@ class SpatReceiverTest { void testRun() throws Exception { latch = new CountDownLatch(1); actualPayload = null; - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSpat()); final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); From 43ff246df576ca54e936acbe1799088b0383fdab Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 14:40:50 -0600 Subject: [PATCH 17/52] test: refactor RawEncodedSRMJsonRouterTest to use @EmbeddedKafka and @KafkaListener, replace EmbeddedKafkaHolder with CountDownLatch for async validation --- .../kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java index e663dcd02..d5a78fd98 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -6,9 +6,12 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -16,8 +19,10 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.context.EmbeddedKafka; +import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; @@ -30,6 +35,7 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @SpringBootTest( From 3fc9477350915ca58dc71a3b3382cbdec1801ff1 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 14:41:29 -0600 Subject: [PATCH 18/52] test: remove unused imports in RawEncodedSRMJsonRouterTest --- .../kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java index d5a78fd98..e663dcd02 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -6,12 +6,9 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -19,10 +16,8 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.context.EmbeddedKafka; -import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; @@ -35,7 +30,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @SpringBootTest( From 352f1393e409e07d8a8fb5beedca96f6440f9c1a Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Tue, 24 Mar 2026 14:20:38 -0600 Subject: [PATCH 19/52] test: refactor RawEncodedBSMJsonRouterTest to use @EmbeddedKafka and @KafkaListener, remove EmbeddedKafkaHolder usage --- .../asn1/RawEncodedBSMJsonRouterTest.java | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java index 57ba0bd7f..41416f47c 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java @@ -5,9 +5,9 @@ import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -15,11 +15,12 @@ import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,14 +29,16 @@ import us.dot.its.jpo.ode.kafka.listeners.json.RawEncodedJsonService; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import static org.assertj.core.api.Assertions.assertThat; @SpringBootTest( classes = { KafkaProducerConfig.class, KafkaConsumerConfig.class, RawEncodedBSMJsonRouter.class, RawEncodedJsonService.class, SerializationConfig.class, TestMetricsConfig.class, }, properties = {"ode.kafka.topics.raw-encoded-json.bsm=topic.Asn1DecoderTestBSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderBSMInput"}) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderBSMInput", "topic.Asn1DecoderTestBSMJSON"}) +@TestPropertySource(properties = "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}") @EnableConfigurationProperties @ContextConfiguration(classes = {UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class}) @@ -51,17 +54,11 @@ class RawEncodedBSMJsonRouterTest { @Autowired KafkaTemplate kafkaTemplate; - @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1DecoderInput, rawEncodedBsmJson); + private final CountDownLatch latch = new CountDownLatch(1); + private String odeBsmData; - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeBSMJSONTestConsumer", "false", embeddedKafka); - var cf = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), - new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1DecoderInput); + @Test + void testListen() throws JSONException, IOException, InterruptedException { var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -75,9 +72,13 @@ void testListen() throws JSONException, IOException { assert inputStream != null; var expectedBsm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var produced = KafkaTestUtils.getSingleRecord(testConsumer, asn1DecoderInput); - var odeBsmData = produced.value(); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); assertEquals(expectedBsm, odeBsmData); - testConsumer.close(); } + + @KafkaListener(topics = {"topic.Asn1DecoderBSMInput", "topic.Asn1DecoderTestBSMJSON"} , groupId = "test-group") + public void receive(String payload) { + odeBsmData = payload; + latch.countDown(); // Decrement the latch once the message is received + } } \ No newline at end of file From bf831a0a2bb32671ab2de30728dbeb1585fe3480 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Sun, 22 Mar 2026 21:46:16 -0600 Subject: [PATCH 20/52] chore: remove obsolete kafka_2.11 dependency from pom.xml --- jpo-ode-core/pom.xml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/jpo-ode-core/pom.xml b/jpo-ode-core/pom.xml index c5ea2bfd1..a29c6fa4d 100644 --- a/jpo-ode-core/pom.xml +++ b/jpo-ode-core/pom.xml @@ -57,21 +57,6 @@ - - org.apache.kafka - kafka_2.11 - 0.10.1.0 - - - org.slf4j - slf4j-log4j12 - - - log4j - log4j - - - org.apache.kafka kafka-streams From 43583a9e4ec7f62cda171065987e76146f053445 Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Wed, 25 Mar 2026 16:25:16 -0600 Subject: [PATCH 21/52] test: replace EmbeddedKafkaHolder with @EmbeddedKafka and @KafkaListener in all tests, refactor tests to use CountDownLatch for async validation --- .../Asn1DecodedDataRouterApprovalTest.java | 52 +++++++++------- .../asn1/RawEncodedMAPJsonRouterTest.java | 60 ++++++++++--------- .../asn1/RawEncodedPSMJsonRouterTest.java | 50 +++++++++------- .../asn1/RawEncodedRSMJsonRouterTest.java | 47 ++++++++------- .../asn1/RawEncodedRTCMJsonRouterTest.java | 44 +++++++------- .../asn1/RawEncodedSPATJsonRouterTest.java | 50 +++++++++------- .../its/jpo/ode/udp/bsm/BsmReceiverTest.java | 42 +++++++------ .../its/jpo/ode/udp/tim/TimReceiverTest.java | 46 +++++++------- 8 files changed, 217 insertions(+), 174 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java index 41de57efb..c7fc49966 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java @@ -1,25 +1,28 @@ package us.dot.its.jpo.ode.kafka.listeners; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; import java.util.List; -import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import lombok.extern.slf4j.Slf4j; -import org.apache.kafka.clients.consumer.Consumer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; + import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -30,7 +33,6 @@ import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.model.OdeMessageFrameData; import us.dot.its.jpo.ode.test.utilities.ApprovalTestCase; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @Slf4j @@ -47,6 +49,8 @@ "ode.kafka.topics.asn1.decoder-output=topic.Asn1DecoderOutputRouterApprovalTest", "ode.kafka.topics.json.map=topic.OdeMapJsonRouterApprovalTest" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderOutputRouterApprovalTest", "topic.OdeMapJsonRouterApprovalTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -64,35 +68,37 @@ class Asn1DecodedDataRouterApprovalTest { @Autowired KafkaTemplate producer; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - - @Test - void testAsn1DecodedDataRouter_MAPDataFlow() throws IOException { - String[] topics = {decoderOutputTopic, jsonMapTopic}; - EmbeddedKafkaHolder.addTopics(topics); + private final ObjectMapper mapper = new ObjectMapper(); - Map consumerProps = - KafkaTestUtils.consumerProps("testT", "false", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); + private CountDownLatch latch; + private String actualPayload; - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromEmbeddedTopics(consumer, jsonMapTopic); + @Test + void testAsn1DecodedDataRouter_MAPDataFlow() throws IOException, InterruptedException { - @SuppressWarnings("checkstyle:linelength") List jsonTestCases = ApprovalTestCase.deserializeTestCases( "src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json"); for (ApprovalTestCase testCase : jsonTestCases) { + latch = new CountDownLatch(1); + actualPayload = null; + producer.send(decoderOutputTopic, testCase.getInput()); - String received = KafkaTestUtils.getSingleRecord(consumer, jsonMapTopic).value(); - ObjectMapper mapper = new ObjectMapper(); - OdeMessageFrameData receivedMapData = mapper.readValue(received, OdeMessageFrameData.class); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + OdeMessageFrameData receivedMapData = mapper.readValue(actualPayload, OdeMessageFrameData.class); + OdeMessageFrameData expectedMapData = mapper.readValue(testCase.getExpected(), OdeMessageFrameData.class); + assertEquals(expectedMapData.toJson(), receivedMapData.toJson(), "Failed test case: " + testCase.getDescription()); } - consumer.close(); + } + + @KafkaListener(topics = "topic.OdeMapJsonRouterApprovalTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java index 3042d84d4..132c77704 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java @@ -1,26 +1,28 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static us.dot.its.jpo.ode.test.utilities.ApprovalTestCase.deserializeTestCases; import java.io.IOException; import java.util.List; -import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import lombok.extern.slf4j.Slf4j; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; + import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -30,7 +32,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.test.utilities.ApprovalTestCase; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @Slf4j @@ -47,6 +48,10 @@ "ode.kafka.topics.raw-encoded-json.map=topic.Asn1DecoderTestMAPJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderMAPInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestMAPJSON", "topic.Asn1DecoderMAPInput"}) +@TestPropertySource(properties = { + "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}" +}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -55,42 +60,41 @@ @DirtiesContext class RawEncodedMAPJsonRouterTest { - @Value(value = "${ode.kafka.topics.raw-encoded-json.map}") + @Value("${ode.kafka.topics.raw-encoded-json.map}") private String rawEncodedMapJson; - @Value(value = "${ode.kafka.topics.asn1.decoder-input}") + @Value("${ode.kafka.topics.asn1.decoder-input}") private String asn1DecoderInput; @Autowired - KafkaTemplate producer; + KafkaTemplate kafkaTemplate; - private static final EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test - void testProcess_ApprovalTest() throws IOException { - String[] topics = {rawEncodedMapJson, asn1DecoderInput}; - EmbeddedKafkaHolder.addTopics(topics); + void testProcess_ApprovalTest() throws IOException, InterruptedException { String path = "src/test/resources/us.dot.its.jpo.ode.udp.map/JSONEncodedMAP_to_Asn1DecoderInput_Validation.json"; List approvalTestCases = deserializeTestCases(path); - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeMapJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1DecoderInput); - for (ApprovalTestCase approvalTestCase : approvalTestCases) { - // produce the test case input to the topic for consumption by the asn1RawMAPJSONConsumer - producer.send(rawEncodedMapJson, approvalTestCase.getInput()); - var actualRecord = - KafkaTestUtils.getSingleRecord(testConsumer, asn1DecoderInput); - assertEquals(approvalTestCase.getExpected(), actualRecord.value(), + latch = new CountDownLatch(1); + actualPayload = null; + + kafkaTemplate.send(rawEncodedMapJson, approvalTestCase.getInput()); + + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + assertEquals(approvalTestCase.getExpected(), actualPayload, approvalTestCase.getDescription()); } - testConsumer.close(); + } + + @KafkaListener(topics = {"topic.Asn1DecoderMAPInput"}) + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java index 242b27529..c87599b00 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java @@ -1,12 +1,14 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -14,10 +16,13 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; + import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -27,7 +32,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; @SpringBootTest( classes = { @@ -44,11 +48,14 @@ "ode.kafka.topics.raw-encoded-json.psm=topic.Asn1DecoderTestPSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderPSMInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestPSMJSON", "topic.Asn1DecoderPSMInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) @EnableConfigurationProperties(value = { OdeKafkaProperties.class, Asn1CoderTopics.class, RawEncodedJsonTopics.class}) +@DirtiesContext class RawEncodedPSMJsonRouterTest { @Autowired @@ -58,18 +65,14 @@ class RawEncodedPSMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; + private CountDownLatch latch; + private String actualPayload; + @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getPsm()); + void testListen() throws JSONException, IOException, InterruptedException { - Map consumerProps = - KafkaTestUtils.consumerProps("RawEncodedPSMJsonRouterTest", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - var testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + latch = new CountDownLatch(1); + actualPayload = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -77,17 +80,22 @@ void testListen() throws JSONException, IOException { "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-psm.json"); assert inputStream != null; var psmJson = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - kafkaTemplate.send(rawEncodedJsonTopics.getPsm(), psmJson); inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-psm.xml"); assert inputStream != null; var expectedPsm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var produced = - KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); - var odePsmData = produced.value(); - assertEquals(expectedPsm, odePsmData); - testConsumer.close(); + kafkaTemplate.send(rawEncodedJsonTopics.getPsm(), psmJson); + + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + assertEquals(expectedPsm, actualPayload); + } + + @KafkaListener(topics = "topic.Asn1DecoderPSMInput") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java index 6696d9334..e88356ed0 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java @@ -1,24 +1,27 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; + import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,7 +31,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; /** @@ -48,6 +50,8 @@ "ode.kafka.topics.raw-encoded-json.rsm=topic.Asn1DecoderTestRSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderRSMInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestRSMJSON", "topic.Asn1DecoderRSMInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -63,18 +67,15 @@ public class RawEncodedRSMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; + + private CountDownLatch latch; + private String actualPayload; + @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getRsm()); + void testListen() throws JSONException, IOException, InterruptedException { - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeRSMJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + latch = new CountDownLatch(1); + actualPayload = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -82,15 +83,21 @@ void testListen() throws JSONException, IOException { "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-rsm.json"); assert inputStream != null; var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - kafkaTemplate.send(rawEncodedJsonTopics.getRsm(), json); inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-rsm.xml"); assert inputStream != null; var expectedRSM = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var consumedRSM = KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); - assertEquals(expectedRSM, consumedRSM.value()); - testConsumer.close(); + kafkaTemplate.send(rawEncodedJsonTopics.getRsm(), json); + + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertEquals(expectedRSM, actualPayload); + } + + @KafkaListener(topics = "topic.Asn1DecoderRSMInput") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java index 84f3c088e..581efe402 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java @@ -1,24 +1,26 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,7 +30,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; /** @@ -53,6 +54,8 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class, Asn1CoderTopics.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestRTCMJSON", "topic.Asn1DecoderRTCMInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RawEncodedRTCMJsonRouterTest { @@ -63,18 +66,13 @@ public class RawEncodedRTCMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; - @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getRtcm()); + private CountDownLatch latch; + private String actualPayload; - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeRTCMJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + @Test + void testListen() throws JSONException, IOException, InterruptedException { + latch = new CountDownLatch(1); + actualPayload = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -89,8 +87,14 @@ void testListen() throws JSONException, IOException { assert inputStream != null; var expectedRTCM = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - var consumedRTCM = KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); - assertEquals(expectedRTCM, consumedRTCM.value()); - testConsumer.close(); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + assertEquals(expectedRTCM, actualPayload); + } + + @KafkaListener(topics = "topic.Asn1DecoderPSMInput") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java index 7efbcbbcf..f8607fe79 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java @@ -1,24 +1,27 @@ package us.dot.its.jpo.ode.kafka.listeners.asn1; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Map; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; + import us.dot.its.jpo.ode.config.SerializationConfig; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; @@ -28,7 +31,6 @@ import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; @SpringBootTest( @@ -44,6 +46,9 @@ "ode.kafka.topics.raw-encoded-json.spat=topic.Asn1DecoderTestSPATJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSPATInput" }) +@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestSPATJSON", "topic.Asn1DecoderSPATInput"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}" +}) @EnableConfigurationProperties @ContextConfiguration(classes = { UDPReceiverProperties.class, OdeKafkaProperties.class, @@ -59,19 +64,14 @@ class RawEncodedSPATJsonRouterTest { @Autowired KafkaTemplate kafkaTemplate; + private CountDownLatch latch; + private String actualPayload; + @Test - void testListen() throws JSONException, IOException { - var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), - rawEncodedJsonTopics.getSpat()); + void testListen() throws JSONException, IOException, InterruptedException { - Map consumerProps = - KafkaTestUtils.consumerProps("Asn1DecodeSPATJSONTestConsumer", "false", embeddedKafka); - var cf = - new DefaultKafkaConsumerFactory<>(consumerProps, - new StringDeserializer(), new StringDeserializer()); - Consumer testConsumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + latch = new CountDownLatch(1); + actualPayload = null; var classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader @@ -79,16 +79,22 @@ void testListen() throws JSONException, IOException { "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-spat.json"); assert inputStream != null; var spatJson = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - kafkaTemplate.send(rawEncodedJsonTopics.getSpat(), spatJson); - var consumedSpat = - KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-spat.xml"); assert inputStream != null; var expectedSpat = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - assertEquals(expectedSpat, consumedSpat.value()); - testConsumer.close(); + kafkaTemplate.send(rawEncodedJsonTopics.getSpat(), spatJson); + + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + assertEquals(expectedSpat, actualPayload); + } + + @KafkaListener(topics = "topic.Asn1DecoderSPATInput", groupId = "test-group") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java index 0a0238c7d..f7cf1b5e2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java @@ -1,5 +1,6 @@ package us.dot.its.jpo.ode.udp.bsm; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -8,27 +9,29 @@ import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.kafka.clients.consumer.Consumer; +import java.util.concurrent.TimeUnit; + import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; @@ -36,9 +39,11 @@ @EnableConfigurationProperties @SpringBootTest( classes = { OdeKafkaProperties.class, UDPReceiverProperties.class, KafkaProducerConfig.class, - SerializationConfig.class, TestMetricsConfig.class, }, + KafkaConsumerConfig.class, SerializationConfig.class, TestMetricsConfig.class, }, properties = {"ode.receivers.bsm.receiver-port=15352", "ode.kafka.topics.raw-encoded-json.bsm=topic.BsmReceiverTest"}) +@EmbeddedKafka(partitions = 1, topics = "topic.BsmReceiverTest") +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @ContextConfiguration( classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class}) @DirtiesContext @@ -53,12 +58,13 @@ class BsmReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getBsm()); - + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils .setClock(Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); // create the BsmReceiver and submit it to a runner @@ -75,18 +81,12 @@ void testRun() throws Exception { TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getBsm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps("BsmReceiverTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getBsm()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - // read record from produce topic - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getBsm()); // confirm the stream-id is different, then remove it from both so that we can test equality // of all other fields - assertNotEquals(expected, singleRecord.value()); - JSONObject producedJson = new JSONObject(singleRecord.value()); + assertNotEquals(expected, actualPayload); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); // assert that the UUIDs are different, then remove them so that the rest of the JSON can be @@ -100,4 +100,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.BsmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java index 23ede9af4..bd8477a60 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java @@ -8,38 +8,38 @@ import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.kafka.clients.consumer.Consumer; -import org.apache.kafka.common.serialization.StringDeserializer; +import java.util.concurrent.TimeUnit; import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.kafka.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; +import static org.assertj.core.api.Assertions.assertThat; @EnableConfigurationProperties @SpringBootTest( classes = { - OdeKafkaProperties.class, - UDPReceiverProperties.class, KafkaProducerConfig.class, + KafkaConsumerConfig.class, SerializationConfig.class, TestMetricsConfig.class, }, @@ -52,6 +52,8 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) +@EmbeddedKafka(partitions = 1, topics = {"topic.TimReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class TimReceiverTest { @@ -64,11 +66,13 @@ class TimReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getTim()); + latch = new CountDownLatch(1); + actualPayload = null; final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); @@ -87,20 +91,12 @@ void testRun() throws Exception { TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getTim().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps( - "TimReceiverTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getTim()); - - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getTim()); - // confirm the stream-id is different, then remove it from both so that we can test equality of all other fields - assertNotEquals(expected, singleRecord.value()); - JSONObject producedJson = new JSONObject(singleRecord.value()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + assertNotEquals(expected, actualPayload); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); - // assert that the UUIDs are different, then remove them so that the rest of the JSON can be compared assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), producedJson.getJSONObject("metadata").get("serialId")); expectedJson.getJSONObject("metadata").remove("serialId"); @@ -112,4 +108,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.TimReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From cacd39dd3572fa52994a96628e16d29b861aa76f Mon Sep 17 00:00:00 2001 From: Paige Monington Date: Thu, 26 Mar 2026 08:57:47 -0600 Subject: [PATCH 22/52] test: refactor RsmReceiverTest to use @EmbeddedKafka and @KafkaListener, remove EmbeddedKafkaHolder usage --- .../its/jpo/ode/udp/rsm/RsmReceiverTest.java | 78 ++++++++++--------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java index 46a51a0a6..2500df810 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java @@ -1,34 +1,36 @@ package us.dot.its.jpo.ode.udp.rsm; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Paths; +import java.nio.file.Path; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.apache.kafka.clients.consumer.Consumer; +import java.util.concurrent.TimeUnit; import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; -import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.test.utilities.TestUDPClient; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.DateTimeUtils; @@ -36,14 +38,20 @@ /** * Unit test for the RsmReceiver class, verifying UDP reception, Kafka publishing and output. */ -@EnableConfigurationProperties @SpringBootTest( - classes = { OdeKafkaProperties.class, UDPReceiverProperties.class, KafkaProducerConfig.class, + classes = {KafkaProducerConfig.class, KafkaConsumerConfig.class, SerializationConfig.class, TestMetricsConfig.class, }, properties = {"ode.receivers.rsm.receiver-port=12759", - "ode.kafka.topics.raw-encoded-json.rsm=topic.RsmReceiverTest"}) -@ContextConfiguration( - classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class}) + "ode.kafka.topics.raw-encoded-json.rsm=topic.RsmReceiverTest" + } +) +@EnableConfigurationProperties +@ContextConfiguration(classes = {UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, + KafkaProperties.class, +}) +@EmbeddedKafka(partitions = 1, topics = {"topic.RsmReceiverTest"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RsmReceiverTest { @@ -56,46 +64,36 @@ public class RsmReceiverTest { @Autowired KafkaTemplate kafkaTemplate; - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + private CountDownLatch latch; + private String actualPayload; @Test void testRun() throws Exception { - EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getRsm()); + latch = new CountDownLatch(1); + actualPayload = null; + + final Clock prevClock = DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); - final Clock prevClock = DateTimeUtils - .setClock(Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); - // create the RsmReceiver and submit it to a runner RsmReceiver rsmReceiver = new RsmReceiver(udpReceiverProperties.getRsm(), kafkaTemplate, - rawEncodedJsonTopics.getRsm()); + rawEncodedJsonTopics.getRsm()); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(rsmReceiver); - String fileContent = Files.readString( - Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM.txt")); - String expected = Files.readString(Paths.get( - "src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM_expected.json")); + String fileContent = Files.readString(Path.of("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM.txt")); + String expected = Files.readString(Path.of("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM_expected.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getRsm().getReceiverPort()); udpClient.send(fileContent); - var consumerProps = KafkaTestUtils.consumerProps("RsmReceiverTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory cf = - new DefaultKafkaConsumerFactory<>(consumerProps); - Consumer consumer = cf.createConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getRsm()); - - // read record from produce topic - var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getRsm()); - // confirm the stream-id is different, then remove it from both so that we can test equality - // of all other fields - assertNotEquals(expected, singleRecord.value()); - JSONObject producedJson = new JSONObject(singleRecord.value()); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + + assertNotEquals(expected, actualPayload); + JSONObject producedJson = new JSONObject(actualPayload); JSONObject expectedJson = new JSONObject(expected); - // assert that the UUIDs are different, then remove them so that the rest of the JSON can be - // compared assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), - producedJson.getJSONObject("metadata").get("serialId")); + producedJson.getJSONObject("metadata").get("serialId")); expectedJson.getJSONObject("metadata").remove("serialId"); producedJson.getJSONObject("metadata").remove("serialId"); @@ -103,4 +101,10 @@ void testRun() throws Exception { DateTimeUtils.setClock(prevClock); } + + @KafkaListener(topics = "topic.RsmReceiverTest") + public void receive(String payload) { + this.actualPayload = payload; + latch.countDown(); + } } \ No newline at end of file From 8f73dfaa8baf682c47bcbce032bbe7afb3788a11 Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 14 Apr 2026 16:53:39 -0600 Subject: [PATCH 23/52] refactor(test): update KafkaProperties import paths to align with Spring package changes --- .../us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java | 2 +- .../kafka/listeners/Asn1DecodedDataRouterApprovalTest.java | 2 +- .../jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java | 2 +- .../jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java | 2 +- .../dot/its/jpo/ode/traveler/TimDepositControllerTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java | 2 +- .../us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java | 6 +----- .../java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java | 2 +- 20 files changed, 20 insertions(+), 24 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java index cc71a9951..dde0b465c 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java @@ -18,7 +18,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java index c7fc49966..5241c88bf 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java index 7c0f7d240..37befd434 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java @@ -19,7 +19,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java index 41416f47c..087e7e16b 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java @@ -12,7 +12,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java index 132c77704..2fb38ba71 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java @@ -13,7 +13,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java index c87599b00..1e9615e0a 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java @@ -12,7 +12,7 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; import org.springframework.boot.test.context.SpringBootTest; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java index e88356ed0..7eea5ffab 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java @@ -12,7 +12,7 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java index 581efe402..c2626092c 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java @@ -12,7 +12,7 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java index f8607fe79..62e7cc87f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java @@ -12,7 +12,7 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java index 2cf839c63..f4fbf84e9 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java @@ -12,7 +12,7 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java index 3d2f4bcdc..17d55ad43 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java @@ -12,7 +12,7 @@ import org.json.JSONException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java index 7a790f559..342dccddb 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java @@ -37,7 +37,7 @@ import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Profile; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index eba22af98..8cc0c9e11 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -36,7 +36,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; - import org.springframework.boot.autoconfigure.kafka.KafkaProperties; + import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.ResponseEntity; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java index f7cf1b5e2..3888e9c53 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java @@ -17,7 +17,7 @@ import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java index 005616723..1af33fad2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java @@ -14,7 +14,7 @@ import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.core.DefaultKafkaConsumerFactory; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java index c1fbc1742..bb38e6b43 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java @@ -18,7 +18,7 @@ import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java index 2491562b1..041fc5258 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java @@ -17,7 +17,7 @@ import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java index 372272bba..e1795f4f2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java @@ -14,19 +14,15 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import org.apache.kafka.clients.consumer.Consumer; import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; -import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; import org.springframework.kafka.test.context.EmbeddedKafka; -import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java index 01f222fa8..191311443 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java @@ -17,7 +17,7 @@ import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java index bd8477a60..4debb4c6a 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java @@ -15,7 +15,7 @@ import org.json.JSONObject; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.kafka.autoconfigure.KafkaProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; From 1bd986019ccb4be9df8d45efcd5121dda7abb52e Mon Sep 17 00:00:00 2001 From: pmonington Date: Wed, 15 Apr 2026 11:45:09 -0600 Subject: [PATCH 24/52] test: replace EmbeddedKafkaHolder with @EmbeddedKafka in Asn1EncodedDataRouterTest --- .../asn1/Asn1EncodedDataRouterTest.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java index 342dccddb..52fe2243f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java @@ -47,6 +47,7 @@ import org.springframework.kafka.listener.KafkaMessageListenerContainer; import org.springframework.kafka.listener.MessageListener; import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.utils.ContainerTestUtils; import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.stereotype.Service; @@ -71,7 +72,6 @@ import us.dot.its.jpo.ode.security.SecurityServicesClient; import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.security.models.SignatureResultModel; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; @Slf4j @SpringBootTest( @@ -82,7 +82,11 @@ "ode.kafka.topics.json.tim-tmc-filtered=topic.Asn1EncodedDataRouterTestTimTmcFiltered", "ode.kafka.topics.asn1.encoder-input=topic.Asn1EncodedDataRouterTestEncoderInput", "ode.kafka.topics.asn1.encoder-output=topic.Asn1EncodedDataRouterTestEncoderOutput", - "ode.kafka.topics.sdx-depositor.input=topic.Asn1EncodedDataRouterTestSDXDepositor" + "ode.kafka.topics.sdx-depositor.input=topic.Asn1EncodedDataRouterTestSDXDepositor", + "ode.kafka.topics.json.tim=topic.OdeTimJson", + "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}", + "ode.kafka.brokers=${spring.embedded.kafka.brokers}", + "ode.kafka.topics.json.tim-ktable=topic.OdeTimJsonKTable" }, classes = { OdeKafkaProperties.class, @@ -102,9 +106,22 @@ @EnableConfigurationProperties @DirtiesContext @ActiveProfiles("test") +@EmbeddedKafka( + partitions = 1, + topics = { + "topic.Asn1EncodedDataRouterTestTimCertExpiration", + "topic.Asn1EncodedDataRouterTestTimTmcFiltered", + "topic.Asn1EncodedDataRouterTestEncoderInput", + "topic.Asn1EncodedDataRouterTestEncoderOutput", + "topic.Asn1EncodedDataRouterTestSDXDepositor", + "topic.OdeTimJson", + "topic.OdeTimJsonKTable" + } +) class Asn1EncodedDataRouterTest { - private final EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + @Autowired + private EmbeddedKafkaBroker embeddedKafka; @Autowired Asn1CoderTopics asn1CoderTopics; @Autowired @@ -156,7 +173,6 @@ void processDoubleEncodedMessage() throws IOException { jsonTopics.getTimTmcFiltered(), sdxDepositorTopic }; - EmbeddedKafkaHolder.addTopics(topicsForConsumption); securityServicesProperties.setIsSdwSigningEnabled(true); Asn1EncodedDataRouter encoderRouter = new Asn1EncodedDataRouter( @@ -211,7 +227,6 @@ void processUnsignedMessageSDWOnly() throws IOException { jsonTopics.getTimCertExpiration(), jsonTopics.getTimTmcFiltered() }; - EmbeddedKafkaHolder.addTopics(topicsForConsumption); securityServicesProperties.setIsSdwSigningEnabled(true); securityServicesProperties.setIsRsuSigningEnabled(true); @@ -302,7 +317,6 @@ void processUnsignedMessageWithRsus() throws IOException { jsonTopics.getTimCertExpiration(), jsonTopics.getTimTmcFiltered() }; - EmbeddedKafkaHolder.addTopics(topicsForConsumption); securityServicesProperties.setIsSdwSigningEnabled(true); securityServicesProperties.setIsRsuSigningEnabled(true); From 69c7179dba3adbe21d2d55ad058f917e6a9207c0 Mon Sep 17 00:00:00 2001 From: pmonington Date: Wed, 15 Apr 2026 11:53:58 -0600 Subject: [PATCH 25/52] test: replace EmbeddedKafkaHolder with @EmbeddedKafka in Asn1DecodedDataRouterTest --- .../listeners/Asn1DecodedDataRouterTest.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java index 37befd434..cdd031db9 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java @@ -25,6 +25,7 @@ import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; @@ -40,7 +41,6 @@ import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; import us.dot.its.jpo.ode.model.OdeMessageFrameData; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; import us.dot.its.jpo.ode.util.JsonUtils; @@ -55,10 +55,12 @@ @ContextConfiguration( classes = {UDPReceiverProperties.class, OdeKafkaProperties.class, KafkaProperties.class}) @DirtiesContext +@EmbeddedKafka(ports = 4242, brokerProperties = {"auto.create.topics.enable=true"}) @TestPropertySource(properties = "logging.level.org.springframework.kafka=DEBUG") class Asn1DecodedDataRouterTest { - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + @Autowired + EmbeddedKafkaBroker embeddedKafka; @Autowired KafkaTemplate kafkaStringTemplate; @Autowired @@ -73,7 +75,7 @@ class Asn1DecodedDataRouterTest { @Test void testAsn1DecodedDataRouterBSMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getBsm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-bsm.xml"); @@ -121,7 +123,7 @@ void testAsn1DecodedDataRouterBSMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouterTIMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getTim()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-tim.xml"); @@ -167,7 +169,7 @@ void testAsn1DecodedDataRouterTIMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_SPaTDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getSpat()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-spat.xml"); @@ -212,7 +214,7 @@ void testAsn1DecodedDataRouter_SPaTDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_SSMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getSsm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-ssm.xml"); @@ -256,7 +258,7 @@ void testAsn1DecodedDataRouter_SSMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_SRMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getSrm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-srm.xml"); @@ -300,7 +302,7 @@ void testAsn1DecodedDataRouter_SRMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_PSMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getPsm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-psm.xml"); @@ -344,7 +346,7 @@ void testAsn1DecodedDataRouter_PSMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_MAPDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getMap()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-map.xml"); @@ -388,7 +390,7 @@ void testAsn1DecodedDataRouter_MAPDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_SDSMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getSdsm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-sdsm.xml"); @@ -433,7 +435,7 @@ void testAsn1DecodedDataRouter_SDSMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_RTCMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getRtcm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-rtcm.xml"); @@ -478,7 +480,7 @@ void testAsn1DecodedDataRouter_RTCMDataFlow() throws IOException { @Test void testAsn1DecodedDataRouter_RSMDataFlow() throws IOException { String[] topics = Arrays.array(jsonTopics.getRsm()); - EmbeddedKafkaHolder.addTopics(topics); + embeddedKafka.addTopics(topics); String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-rsm.xml"); From 65a81c0196621ed1c5b370c991ab566843417ca7 Mon Sep 17 00:00:00 2001 From: pmonington Date: Thu, 16 Apr 2026 10:31:18 -0600 Subject: [PATCH 26/52] refactor: add @Getter annotation to ensure proper serialization of isCertPresent field --- .../java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java index bf7750c05..c8b550550 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NoArgsConstructor; import us.dot.its.jpo.ode.plugin.ServiceRequest; @@ -30,6 +31,8 @@ public enum Source { // otherwise it will deserialize as "certPresent" @JsonProperty("isCertPresent") + // otherwise it will serialize as both "certPresent" and "isCertPresent" + @Getter(onMethod_ = {@JsonProperty("isCertPresent")}) private boolean isCertPresent; public OdeMessageFrameMetadata(OdeMsgPayload payload) { From 8d2fcfd6679b5b12cb3ee44ff60a6bdf94823e4b Mon Sep 17 00:00:00 2001 From: pmonington Date: Thu, 16 Apr 2026 15:37:11 -0600 Subject: [PATCH 27/52] test: replace EmbeddedKafkaHolder with @EmbeddedKafka in TimDepositControllerTest and change order of creation of consumers --- .../traveler/TimDepositControllerTest.java | 141 ++++++++++-------- 1 file changed, 78 insertions(+), 63 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index 8cc0c9e11..a8b7d202c 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -43,9 +43,11 @@ import org.springframework.kafka.core.DefaultKafkaConsumerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.test.EmbeddedKafkaBroker; + import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; + import org.springframework.test.context.TestPropertySource; import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.kafka.TestMetricsConfig; @@ -58,12 +60,11 @@ import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; import us.dot.its.jpo.ode.plugin.j2735.builders.TravelerMessageFromHumanToAsnConverter; import us.dot.its.jpo.ode.security.SecurityServicesProperties; - import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; import us.dot.its.jpo.ode.util.DateTimeUtils; import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; import us.dot.its.jpo.ode.util.XmlUtils; - - + + @EnableConfigurationProperties @SpringBootTest(classes = {KafkaProducerConfig.class, KafkaConsumerConfig.class, OdeKafkaProperties.class, Asn1CoderTopics.class, JsonTopics.class, @@ -72,6 +73,9 @@ @ContextConfiguration(classes = {TimDepositController.class, Asn1CoderTopics.class, JsonTopics.class, TimIngestTrackerProperties.class, SecurityServicesProperties.class, OdeKafkaProperties.class}) +@EmbeddedKafka(brokerProperties = {"auto.create.topics.enable=true"}) +@TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}", + "ode.kafka.brokers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class TimDepositControllerTest { @@ -98,9 +102,10 @@ class TimDepositControllerTest { @Autowired private XmlMapper simpleXmlMapper; - - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); - + + @Autowired + EmbeddedKafkaBroker embeddedKafka; + int consumerCount = 0; @Test @@ -254,7 +259,15 @@ void testSuccessfulMessageReturnsSuccessMessagePost() throws IOException { odeKafkaProperties.setDisabledTopics(Set.of()); jsonTopics.setTim("test.successfulMessageReturnsSuccessMessagePost.tim.json"); asn1CoderTopics.setEncoderInput("test.successfulMessageReturnsSuccessMessagePost.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + // Subscribe consumers + var jsonTimConsumer = createConsumer("postSuccessJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("postSuccessEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -272,8 +285,6 @@ void testSuccessfulMessageReturnsSuccessMessagePost() throws IOException { Assertions.assertEquals(expectedResponseBody, actualResponse.getBody()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = new JSONObject( @@ -286,9 +297,6 @@ void testSuccessfulMessageReturnsSuccessMessagePost() throws IOException { Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -314,7 +322,14 @@ void testSuccessfulSdwRequestMessageReturnsSuccessMessagePost() throws Exception jsonTopics.setTim("test.successfulSdwRequestMessageReturnsSuccessMessagePost.tim.json"); asn1CoderTopics.setEncoderInput( "test.successfulSdwRequestMessageReturnsSuccessMessagePost.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + var jsonTimConsumer = createConsumer("sdwPostSuccessJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("sdwPostSuccessEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -333,8 +348,6 @@ void testSuccessfulSdwRequestMessageReturnsSuccessMessagePost() throws Exception Assertions.assertEquals(expectedResponseBody, actualResponse.getBody()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = new JSONObject( @@ -347,9 +360,6 @@ void testSuccessfulSdwRequestMessageReturnsSuccessMessagePost() throws Exception Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -375,7 +385,14 @@ void testSuccessfulMessageReturnsSuccessMessagePostWithOde() throws IOException jsonTopics.setTim("test.successfulMessageReturnsSuccessMessagePostWithOde.tim.json"); asn1CoderTopics.setEncoderInput( "test.successfulMessageReturnsSuccessMessagePostWithOde.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + var jsonTimConsumer = createConsumer("postWithOdeJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("postWithOdeEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -393,8 +410,6 @@ void testSuccessfulMessageReturnsSuccessMessagePostWithOde() throws IOException Assertions.assertEquals(expectedResponseBody, actualResponse.getBody()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = new JSONObject( @@ -407,9 +422,6 @@ void testSuccessfulMessageReturnsSuccessMessagePostWithOde() throws IOException Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -434,7 +446,14 @@ void testSuccessfulMessageReturnsSuccessMessagePut() throws IOException { odeKafkaProperties.setDisabledTopics(Set.of()); jsonTopics.setTim("test.successfulMessageReturnsSuccessMessagePut.tim.json"); asn1CoderTopics.setEncoderInput("test.successfulMessageReturnsSuccessMessagePut.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + var jsonTimConsumer = createConsumer("putSuccessJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("putSuccessEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -452,8 +471,6 @@ void testSuccessfulMessageReturnsSuccessMessagePut() throws IOException { Assertions.assertEquals(expectedResponseBody, actualResponse.getBody()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = new JSONObject( @@ -466,9 +483,6 @@ void testSuccessfulMessageReturnsSuccessMessagePut() throws IOException { Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -493,7 +507,14 @@ void testDepositingTimWithExtraProperties() throws IOException { odeKafkaProperties.setDisabledTopics(Set.of()); jsonTopics.setTim("test.depositingTimWithExtraProperties.tim.json"); asn1CoderTopics.setEncoderInput("test.depositingTimWithExtraProperties.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + var jsonTimConsumer = createConsumer("extraPropsJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("extraPropsEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -511,8 +532,6 @@ void testDepositingTimWithExtraProperties() throws IOException { Assertions.assertEquals(expectedResponseBody, actualResponse.getBody()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = @@ -525,9 +544,6 @@ void testDepositingTimWithExtraProperties() throws IOException { Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -552,7 +568,14 @@ void testSuccessfulTimIngestIsTracked() throws IOException { odeKafkaProperties.setDisabledTopics(Set.of()); jsonTopics.setTim("test.successfulTimIngestIsTracked.tim.json"); asn1CoderTopics.setEncoderInput("test.successfulTimIngestIsTracked.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + var jsonTimConsumer = createConsumer("ingestTrackedJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("ingestTrackedEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -573,8 +596,6 @@ void testSuccessfulTimIngestIsTracked() throws IOException { TimIngestTracker.getInstance().getTotalMessagesReceived()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = @@ -587,9 +608,6 @@ void testSuccessfulTimIngestIsTracked() throws IOException { Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -615,7 +633,14 @@ void testSuccessfulRsuMessageReturnsSuccessMessagePost() throws IOException { jsonTopics.setTim("test.successfulRsuMessageReturnsSuccessMessagePost.tim.json"); asn1CoderTopics.setEncoderInput( "test.successfulRsuMessageReturnsSuccessMessagePost.encoderInput"); - EmbeddedKafkaHolder.addTopics(jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()); + String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; + embeddedKafka.addTopics(topics); + + var jsonTimConsumer = createConsumer("rsuPostSuccessJsonTimGroup"); + var asn1CoderEncoderInputConsumer = createConsumer("rsuPostSuccessEncoderInputGroup"); + embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); + embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); + final Clock prevClock = DateTimeUtils.setClock( Clock.fixed(Instant.parse("2018-03-13T01:07:11.120Z"), ZoneId.of("UTC"))); TimDepositController testTimDepositController = @@ -633,8 +658,6 @@ void testSuccessfulRsuMessageReturnsSuccessMessagePost() throws IOException { Assertions.assertEquals(expectedResponseBody, actualResponse.getBody()); // verify JSON tim message - var jsonTimConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); var jsonTimRecord = KafkaTestUtils.getSingleRecord(jsonTimConsumer, jsonTopics.getTim()); var actualTimJson = new JSONObject(jsonTimRecord.value()); var expectedTimJson = new JSONObject( @@ -647,9 +670,6 @@ void testSuccessfulRsuMessageReturnsSuccessMessagePost() throws IOException { Assertions.assertEquals(expectedTimJson.toString(2), actualTimJson.toString(2)); // verify ASN.1 coder encoder input message - var asn1CoderEncoderInputConsumer = createStr2StrConsumer(); - embeddedKafka.consumeFromAnEmbeddedTopic(asn1CoderEncoderInputConsumer, - asn1CoderTopics.getEncoderInput()); var asn1CoderEncoderInputRecord = KafkaTestUtils.getSingleRecord(asn1CoderEncoderInputConsumer, asn1CoderTopics.getEncoderInput()); var actualXml = asn1CoderEncoderInputRecord.value(); @@ -665,19 +685,14 @@ void testSuccessfulRsuMessageReturnsSuccessMessagePost() throws IOException { asn1CoderEncoderInputConsumer.close(); DateTimeUtils.setClock(prevClock); } - - /** - * Helper method to create a consumer for String messages with String keys. - */ - private Consumer createStr2StrConsumer() { - consumerCount++; - var consumerProps = - KafkaTestUtils.consumerProps("TimDepositControllerTest", "true", embeddedKafka); - DefaultKafkaConsumerFactory stringConsumerFactory = - new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), - new StringDeserializer()); - return stringConsumerFactory.createConsumer(String.format("groupid%d", consumerCount), - String.format("clientidsuffix%d", consumerCount)); + + /** + * Helper method to create a consumer with an explicit, stable group ID for String messages with String keys. + */ + private Consumer createConsumer(String groupId) { + java.util.Map consumerProps = + KafkaTestUtils.consumerProps(groupId, "true", embeddedKafka); + return new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()).createConsumer(); } /** @@ -721,7 +736,7 @@ private static String getStreamId(String xmlString) { private static void removeStreamId(JSONObject jsonObject) { jsonObject.getJSONObject("metadata").getJSONObject("serialId").remove("streamId"); } - + /** * Helper method to remove the stream id from an XML string. * @@ -731,5 +746,5 @@ private static void removeStreamId(JSONObject jsonObject) { private static String removeStreamId(String xmlString, String streamId) { return xmlString.replace(streamId, ""); } - + } \ No newline at end of file From ea3940934571882965fbcedd306f4eadad1bc25a Mon Sep 17 00:00:00 2001 From: pmonington Date: Fri, 17 Apr 2026 09:15:27 -0600 Subject: [PATCH 28/52] test: replace EmbeddedKafkaHolder with @EmbeddedKafka in KafkaProducerConfigTest and update topic handling logic --- .../ode/kafka/KafkaProducerConfigTest.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java index dde0b465c..ff2ca9931 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java @@ -27,6 +27,7 @@ import org.springframework.kafka.core.DefaultKafkaProducerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.core.ProducerFactory; +import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.kafka.test.EmbeddedKafkaBroker; import org.springframework.kafka.test.utils.KafkaTestUtils; import org.springframework.test.annotation.DirtiesContext; @@ -35,11 +36,11 @@ import us.dot.its.jpo.ode.kafka.OdeKafkaProperties.Producer; import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; import us.dot.its.jpo.ode.model.OdeObject; -import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; @Slf4j @ExtendWith(SpringExtension.class) @DirtiesContext +@EmbeddedKafka() @EnableConfigurationProperties({ KafkaProperties.class }) @Import({ KafkaProducerConfigTest.KafkaProducerConfigTestConfig.class, SerializationConfig.class }) class KafkaProducerConfigTest { @@ -56,7 +57,8 @@ class KafkaProducerConfigTest { XmlMapper xmlMapper; ObjectMapper objectMapper = new ObjectMapper(); - EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + @Autowired + EmbeddedKafkaBroker embeddedKafka; @Test void odeDataProducerFactory_shouldReturnNonNull() { @@ -73,7 +75,11 @@ void odeDataProducerFactory_shouldReturnDefaultKafkaProducerFactory() { @Test void kafkaTemplateInterceptorPreventsSendingToDisabledTopics() { - EmbeddedKafkaHolder.addTopics(odeKafkaProperties.getDisabledTopics().toArray(new String[0])); + for (String topic : odeKafkaProperties.getDisabledTopics()) { + if (!Set.of(embeddedKafka.getTopics()).contains(topic)) { + embeddedKafka.addTopics(topic); + } + } var consumerProps = KafkaTestUtils.consumerProps("interceptor-disabled", "false", embeddedKafka); @@ -102,7 +108,9 @@ void kafkaTemplateInterceptorPreventsSendingToDisabledTopics() { @Test void kafkaTemplateInterceptorAllowsSendingToTopicsNotInDisabledSet() { String enabledTopic = "topic.enabled" + this.getClass().getSimpleName(); - EmbeddedKafkaHolder.addTopics(enabledTopic); + if (!Set.of(embeddedKafka.getTopics()).contains(enabledTopic)) { + embeddedKafka.addTopics(enabledTopic); + } var consumerProps = KafkaTestUtils.consumerProps("interceptor-enabled", "false", embeddedKafka); var cf = new DefaultKafkaConsumerFactory<>(consumerProps, @@ -124,8 +132,10 @@ void kafkaTemplateInterceptorAllowsSendingToTopicsNotInDisabledSet() { @Test void kafkaTemplateInterceptorCanSendAfterAttemptToSendToDisabledTopic() { - String enabledTopic = "topic.enabled" + this.getClass().getSimpleName(); - EmbeddedKafkaHolder.addTopics(enabledTopic); + String enabledTopic = "topic.enabled" + this.getClass().getSimpleName() + "2"; + if (!Set.of(embeddedKafka.getTopics()).contains(enabledTopic)) { + embeddedKafka.addTopics(enabledTopic); + } var consumerProps = KafkaTestUtils.consumerProps("send-after", "false", embeddedKafka); var cf = new DefaultKafkaConsumerFactory<>(consumerProps, From f4ada6d781af40fa6419fe490b50940b480cb785 Mon Sep 17 00:00:00 2001 From: pmonington Date: Fri, 17 Apr 2026 11:10:51 -0600 Subject: [PATCH 29/52] tool: add lombok configuration to copy Jackson annotations to accessors --- lombok.config | 1 + 1 file changed, 1 insertion(+) create mode 100644 lombok.config diff --git a/lombok.config b/lombok.config new file mode 100644 index 000000000..f91264a2c --- /dev/null +++ b/lombok.config @@ -0,0 +1 @@ +lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file From ea24e34dafeac578f65786a777989992c89e0d5a Mon Sep 17 00:00:00 2001 From: pmonington Date: Fri, 17 Apr 2026 11:12:23 -0600 Subject: [PATCH 30/52] Revert "refactor: add @Getter annotation to ensure proper serialization of isCertPresent field" This reverts commit 65a81c0196621ed1c5b370c991ab566843417ca7. --- .../java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java index c8b550550..bf7750c05 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMessageFrameMetadata.java @@ -3,7 +3,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Getter; import lombok.NoArgsConstructor; import us.dot.its.jpo.ode.plugin.ServiceRequest; @@ -31,8 +30,6 @@ public enum Source { // otherwise it will deserialize as "certPresent" @JsonProperty("isCertPresent") - // otherwise it will serialize as both "certPresent" and "isCertPresent" - @Getter(onMethod_ = {@JsonProperty("isCertPresent")}) private boolean isCertPresent; public OdeMessageFrameMetadata(OdeMsgPayload payload) { From 00cc4f944952250f07dbac81ff9a3f008fbd19bc Mon Sep 17 00:00:00 2001 From: pmonington Date: Fri, 17 Apr 2026 12:40:50 -0600 Subject: [PATCH 31/52] test: remove test topics from kafka listener --- .../kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java | 7 ++++--- .../listeners/asn1/RawEncodedRTCMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java | 6 +++--- .../kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java | 8 ++++---- .../kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java | 8 ++++---- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java index 087e7e16b..71823af77 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java @@ -72,13 +72,14 @@ void testListen() throws JSONException, IOException, InterruptedException { assert inputStream != null; var expectedBsm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertEquals(expectedBsm, odeBsmData); } - @KafkaListener(topics = {"topic.Asn1DecoderBSMInput", "topic.Asn1DecoderTestBSMJSON"} , groupId = "test-group") + @KafkaListener(topics = {"topic.Asn1DecoderBSMInput"} , groupId = "test-group") public void receive(String payload) { odeBsmData = payload; - latch.countDown(); // Decrement the latch once the message is received + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java index c2626092c..2e840f01d 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java @@ -92,7 +92,7 @@ void testListen() throws JSONException, IOException, InterruptedException { assertEquals(expectedRTCM, actualPayload); } - @KafkaListener(topics = "topic.Asn1DecoderPSMInput") + @KafkaListener(topics = "topic.Asn1DecoderRTCMInput") public void receive(String payload) { this.actualPayload = payload; latch.countDown(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java index e663dcd02..b20542ebb 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -88,9 +88,9 @@ void testListen() throws JSONException, IOException, InterruptedException { assertEquals(expectedSrm, odeRsmData); } - @KafkaListener(topics = {"topic.Asn1DecoderSRMInput", "topic.Asn1DecoderTestRSMJSON"} , groupId = "test-group") + @KafkaListener(topics = {"topic.Asn1DecoderSRMInput"} , groupId = "test-group") public void receive(String payload) { - odeRsmData = payload; - latch.countDown(); // Decrement the latch once the message is received + odeRsmData = payload; + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java index f4fbf84e9..856a0306a 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java @@ -78,19 +78,19 @@ void testListen() throws JSONException, IOException, InterruptedException { var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); kafkaTemplate.send(rawEncodedJsonTopics.getSsm(), json); - assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-ssm.xml"); assert inputStream != null; var expectedSSM = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertEquals(expectedSSM, odeSsmData); } - @KafkaListener(topics = {"topic.Asn1DecoderSSMInput", "topic.Asn1DecoderTestSSMJSON"} , groupId = "test-group") + @KafkaListener(topics = {"topic.Asn1DecoderSSMInput"} , groupId = "test-group") public void receive(String payload) { odeSsmData = payload; - latch.countDown(); // Decrement the latch once the message is received + latch.countDown(); } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java index 17d55ad43..c0af30955 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java @@ -79,19 +79,19 @@ void testListen() throws JSONException, IOException, InterruptedException { var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); kafkaTemplate.send(rawEncodedJsonTopics.getTim(), json); - assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); - inputStream = classLoader .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-tim.xml"); assert inputStream != null; var expectedTim = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + assertThat(latch.await(10, TimeUnit.SECONDS)).isTrue(); + assertEquals(expectedTim, odeTimData); } - @KafkaListener(topics = {"topic.Asn1DecoderTIMInput", "topic.Asn1DecoderTestTIMJSON"} , groupId = "test-group") + @KafkaListener(topics = {"topic.Asn1DecoderTIMInput"} , groupId = "test-group") public void receive(String payload) { odeTimData = payload; - latch.countDown(); // Decrement the latch once the message is received + latch.countDown(); } } \ No newline at end of file From f96e89c990b310d01cf862ddf569df75a5b7a8ea Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 21 Apr 2026 10:11:17 -0600 Subject: [PATCH 32/52] test: simplify @EmbeddedKafka usage by removing topic and partition configuration across test classes --- .../us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java | 2 +- .../kafka/listeners/Asn1DecodedDataRouterApprovalTest.java | 2 +- .../jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java | 6 +++--- .../kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java | 2 +- .../kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java | 2 +- .../dot/its/jpo/ode/traveler/TimDepositControllerTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java | 2 +- .../java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java index ff2ca9931..42b4e9490 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java @@ -40,7 +40,7 @@ @Slf4j @ExtendWith(SpringExtension.class) @DirtiesContext -@EmbeddedKafka() +@EmbeddedKafka @EnableConfigurationProperties({ KafkaProperties.class }) @Import({ KafkaProducerConfigTest.KafkaProducerConfigTestConfig.class, SerializationConfig.class }) class KafkaProducerConfigTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java index 5241c88bf..6c48a41c0 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java @@ -49,7 +49,7 @@ "ode.kafka.topics.asn1.decoder-output=topic.Asn1DecoderOutputRouterApprovalTest", "ode.kafka.topics.json.map=topic.OdeMapJsonRouterApprovalTest" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderOutputRouterApprovalTest", "topic.OdeMapJsonRouterApprovalTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java index cdd031db9..f67c29c26 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java @@ -55,7 +55,7 @@ @ContextConfiguration( classes = {UDPReceiverProperties.class, OdeKafkaProperties.class, KafkaProperties.class}) @DirtiesContext -@EmbeddedKafka(ports = 4242, brokerProperties = {"auto.create.topics.enable=true"}) +@EmbeddedKafka @TestPropertySource(properties = "logging.level.org.springframework.kafka=DEBUG") class Asn1DecodedDataRouterTest { @@ -80,7 +80,7 @@ void testAsn1DecodedDataRouterBSMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-bsm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("bsmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "bsmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -128,7 +128,7 @@ void testAsn1DecodedDataRouterTIMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-tim.xml"); - var consumerProps = KafkaTestUtils.consumerProps("timDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "timDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java index 71823af77..f52e81fe8 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java @@ -37,7 +37,7 @@ RawEncodedJsonService.class, SerializationConfig.class, TestMetricsConfig.class, }, properties = {"ode.kafka.topics.raw-encoded-json.bsm=topic.Asn1DecoderTestBSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderBSMInput"}) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderBSMInput", "topic.Asn1DecoderTestBSMJSON"}) +@EmbeddedKafka @TestPropertySource(properties = "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}") @EnableConfigurationProperties @ContextConfiguration(classes = {UDPReceiverProperties.class, OdeKafkaProperties.class, diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java index 2fb38ba71..e378052ec 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java @@ -48,7 +48,7 @@ "ode.kafka.topics.raw-encoded-json.map=topic.Asn1DecoderTestMAPJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderMAPInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestMAPJSON", "topic.Asn1DecoderMAPInput"}) +@EmbeddedKafka @TestPropertySource(properties = { "spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}" }) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java index 1e9615e0a..69174cc75 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java @@ -48,7 +48,7 @@ "ode.kafka.topics.raw-encoded-json.psm=topic.Asn1DecoderTestPSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderPSMInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestPSMJSON", "topic.Asn1DecoderPSMInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) @EnableConfigurationProperties(value = { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java index 7eea5ffab..6a933c7f8 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java @@ -50,7 +50,7 @@ "ode.kafka.topics.raw-encoded-json.rsm=topic.Asn1DecoderTestRSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderRSMInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestRSMJSON", "topic.Asn1DecoderRSMInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java index 2e840f01d..4e9a43cdc 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java @@ -54,7 +54,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class, Asn1CoderTopics.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestRTCMJSON", "topic.Asn1DecoderRTCMInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RawEncodedRTCMJsonRouterTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java index 62e7cc87f..a09900003 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java @@ -46,7 +46,7 @@ "ode.kafka.topics.raw-encoded-json.spat=topic.Asn1DecoderTestSPATJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSPATInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestSPATJSON", "topic.Asn1DecoderSPATInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}" }) @EnableConfigurationProperties diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java index b20542ebb..488cc3d46 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -45,7 +45,7 @@ "ode.kafka.topics.raw-encoded-json.srm=topic.Asn1DecoderTestSRMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSRMInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestRSMJSON", "topic.Asn1DecoderSRMInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java index 856a0306a..c12b560c6 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java @@ -45,7 +45,7 @@ "ode.kafka.topics.raw-encoded-json.ssm=topic.Asn1DecoderTestSSMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSSMInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestSSMJSON", "topic.Asn1DecoderSSMInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java index c0af30955..d1833eef2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java @@ -46,7 +46,7 @@ "ode.kafka.topics.raw-encoded-json.tim=topic.Asn1DecoderTestTIMJSON", "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderTIMInput" }) -@EmbeddedKafka(partitions = 1, topics = {"topic.Asn1DecoderTestTIMJSON", "topic.Asn1DecoderTIMInput"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @EnableConfigurationProperties @ContextConfiguration(classes = { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index a8b7d202c..22cb8bcf7 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -73,7 +73,7 @@ @ContextConfiguration(classes = {TimDepositController.class, Asn1CoderTopics.class, JsonTopics.class, TimIngestTrackerProperties.class, SecurityServicesProperties.class, OdeKafkaProperties.class}) -@EmbeddedKafka(brokerProperties = {"auto.create.topics.enable=true"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}", "ode.kafka.brokers=${spring.embedded.kafka.brokers}"}) @DirtiesContext diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java index 3888e9c53..3a40b9883 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java @@ -42,7 +42,7 @@ KafkaConsumerConfig.class, SerializationConfig.class, TestMetricsConfig.class, }, properties = {"ode.receivers.bsm.receiver-port=15352", "ode.kafka.topics.raw-encoded-json.bsm=topic.BsmReceiverTest"}) -@EmbeddedKafka(partitions = 1, topics = "topic.BsmReceiverTest") +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @ContextConfiguration( classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class}) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java index bb38e6b43..c7b9766bf 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java @@ -54,7 +54,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.MapReceiverTestMAPJSON"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class MapReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java index a8f29407c..13cbec09d 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java @@ -53,7 +53,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.PsmReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class PsmReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java index 2500df810..c498cb783 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java @@ -50,7 +50,7 @@ RawEncodedJsonTopics.class, KafkaProperties.class, }) -@EmbeddedKafka(partitions = 1, topics = {"topic.RsmReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RsmReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java index 041fc5258..ca40ac996 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rtcm/RtcmReceiverTest.java @@ -47,7 +47,7 @@ "ode.kafka.topics.raw-encoded-json.rtcm=topic.RtcmReceiverTest"}) @ContextConfiguration( classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class, OdeKafkaProperties.class}) -@EmbeddedKafka(partitions = 1, topics = {"topic.RtcmReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RtcmReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java index f6923e1db..26133c442 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java @@ -49,7 +49,7 @@ "ode.kafka.topics.raw-encoded-json.sdsm=topic.SdsmReceiverTest"}) @ContextConfiguration( classes = {UDPReceiverProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class, OdeKafkaProperties.class}) -@EmbeddedKafka(partitions = 1, topics = {"topic.SdsmReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SdsmReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java index e1795f4f2..3e0219246 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java @@ -53,7 +53,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.SpatReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SpatReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java index ff29260e6..2465842ef 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java @@ -53,7 +53,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.SrmReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SrmReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java index 191311443..383b98101 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java @@ -53,7 +53,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.SsmReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class SsmReceiverTest { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java index 4debb4c6a..9841e6a08 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java @@ -52,7 +52,7 @@ UDPReceiverProperties.class, OdeKafkaProperties.class, RawEncodedJsonTopics.class, KafkaProperties.class }) -@EmbeddedKafka(partitions = 1, topics = {"topic.TimReceiverTest"}) +@EmbeddedKafka @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext class TimReceiverTest { From 6c416e31ee9344c86eebc1e7ee5c5e774365f335 Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 21 Apr 2026 10:20:25 -0600 Subject: [PATCH 33/52] test: remove depreciated `KafkaTestUtils.consumerProps` to use updated `KafkaTestUtils.consumerProps` --- .../jpo/ode/kafka/KafkaProducerConfigTest.java | 10 +++++----- .../listeners/Asn1DecodedDataRouterTest.java | 16 ++++++++-------- .../services/asn1/Asn1EncodedDataRouterTest.java | 8 ++++---- .../ode/traveler/TimDepositControllerTest.java | 2 +- .../jpo/ode/udp/generic/GenericReceiverTest.java | 2 +- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java index 42b4e9490..17e266f34 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java @@ -80,9 +80,9 @@ void kafkaTemplateInterceptorPreventsSendingToDisabledTopics() { embeddedKafka.addTopics(topic); } } - var consumerProps = KafkaTestUtils.consumerProps("interceptor-disabled", - "false", - embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, + "interceptor-disabled", + false); var cf = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var consumer = cf.createConsumer(); @@ -112,7 +112,7 @@ void kafkaTemplateInterceptorAllowsSendingToTopicsNotInDisabledSet() { embeddedKafka.addTopics(enabledTopic); } - var consumerProps = KafkaTestUtils.consumerProps("interceptor-enabled", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "interceptor-enabled", false); var cf = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var consumer = cf.createConsumer(); @@ -137,7 +137,7 @@ void kafkaTemplateInterceptorCanSendAfterAttemptToSendToDisabledTopic() { embeddedKafka.addTopics(enabledTopic); } - var consumerProps = KafkaTestUtils.consumerProps("send-after", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "send-after", false); var cf = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var consumer = cf.createConsumer(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java index f67c29c26..66353d04f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java @@ -174,7 +174,7 @@ void testAsn1DecodedDataRouter_SPaTDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-spat.xml"); - var consumerProps = KafkaTestUtils.consumerProps("spatDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "spatDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -219,7 +219,7 @@ void testAsn1DecodedDataRouter_SSMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-ssm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("ssmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "ssmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -263,7 +263,7 @@ void testAsn1DecodedDataRouter_SRMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-srm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("srmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "srmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -307,7 +307,7 @@ void testAsn1DecodedDataRouter_PSMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-psm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("psmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "psmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -351,7 +351,7 @@ void testAsn1DecodedDataRouter_MAPDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-map.xml"); - var consumerProps = KafkaTestUtils.consumerProps("mapDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "mapDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -395,7 +395,7 @@ void testAsn1DecodedDataRouter_SDSMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-sdsm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("sdsmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "sdsmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -440,7 +440,7 @@ void testAsn1DecodedDataRouter_RTCMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-rtcm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("rtcmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "rtcmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); @@ -485,7 +485,7 @@ void testAsn1DecodedDataRouter_RSMDataFlow() throws IOException { String baseTestData = loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-rsm.xml"); - var consumerProps = KafkaTestUtils.consumerProps("rsmDecoderTest", "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "rsmDecoderTest", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var testConsumer = consumerFactory.createConsumer(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java index 52fe2243f..ddea6a47f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java @@ -258,7 +258,7 @@ void processUnsignedMessageSDWOnly() throws IOException { Awaitility.await().until(completableFuture::isDone); var consumerProps = KafkaTestUtils.consumerProps( - "processUnsignedMessageSDWOnly", "false", embeddedKafka); + embeddedKafka, "processUnsignedMessageSDWOnly", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); @@ -348,7 +348,7 @@ void processUnsignedMessageWithRsus() throws IOException { Awaitility.await().until(completableFuture::isDone); var consumerProps = KafkaTestUtils.consumerProps( - "processUnsignedMessage", "false", embeddedKafka); + embeddedKafka, "processUnsignedMessage", false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); @@ -391,7 +391,7 @@ void processUnsignedMessageWithRsus() throws IOException { private KafkaMessageListenerContainer setupListenerContainer( Asn1EncodedDataRouter encoderRouter, String containerName) { - var consumerProps = KafkaTestUtils.consumerProps(containerName, "false", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, containerName, false); DefaultKafkaConsumerFactory consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); ContainerProperties containerProperties = new ContainerProperties(asn1CoderTopics.getEncoderOutput()); @@ -414,7 +414,7 @@ private KafkaMessageListenerContainer setupListenerContainer( private Consumer createTestConsumer(String group) { var consumerProps = KafkaTestUtils.consumerProps( - group, "false", embeddedKafka); + embeddedKafka, group, false); var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); return consumerFactory.createConsumer(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index 22cb8bcf7..f17350261 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -691,7 +691,7 @@ void testSuccessfulRsuMessageReturnsSuccessMessagePost() throws IOException { */ private Consumer createConsumer(String groupId) { java.util.Map consumerProps = - KafkaTestUtils.consumerProps(groupId, "true", embeddedKafka); + KafkaTestUtils.consumerProps(embeddedKafka, groupId, true); return new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()).createConsumer(); } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java index 1af33fad2..8dfb69372 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java @@ -81,7 +81,7 @@ void testRun() throws Exception { TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getGeneric().getReceiverPort()); - var consumerProps = KafkaTestUtils.consumerProps("GenericReceiverTest", "true", embeddedKafka); + var consumerProps = KafkaTestUtils.consumerProps(embeddedKafka, "GenericReceiverTest", true); var cf = new DefaultKafkaConsumerFactory<>(consumerProps, new StringDeserializer(), new StringDeserializer()); var consumer = cf.createConsumer(); From ec7a850a798950a4506d13239fc9cd008d51feaf Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 21 Apr 2026 10:57:30 -0600 Subject: [PATCH 34/52] chore: remove redundant imports and comments across test and controller classes --- .../dot/its/jpo/ode/udp/controller/UdpServicesController.java | 2 +- .../ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java | 1 - .../us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) 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 07b56b264..6a49bec89 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 @@ -4,8 +4,8 @@ import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; import jakarta.annotation.PreDestroy; +import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java index 6a933c7f8..4fc0f983a 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java @@ -67,7 +67,6 @@ public class RawEncodedRSMJsonRouterTest { @Autowired private KafkaTemplate kafkaTemplate; - private CountDownLatch latch; private String actualPayload; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index f17350261..003bf0636 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -262,7 +262,6 @@ void testSuccessfulMessageReturnsSuccessMessagePost() throws IOException { String[] topics = {jsonTopics.getTim(), asn1CoderTopics.getEncoderInput()}; embeddedKafka.addTopics(topics); - // Subscribe consumers var jsonTimConsumer = createConsumer("postSuccessJsonTimGroup"); var asn1CoderEncoderInputConsumer = createConsumer("postSuccessEncoderInputGroup"); embeddedKafka.consumeFromAnEmbeddedTopic(jsonTimConsumer, jsonTopics.getTim()); From cd6dd2658262fc50da8c04d146cdf7c70ccf09d2 Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 21 Apr 2026 11:02:52 -0600 Subject: [PATCH 35/52] test: replace `Path.of` with `Paths.get` in UDP receiver test classes --- .../us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java | 6 +++--- .../us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java | 6 +++--- .../us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java | 10 ++++------ .../us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java | 6 +++--- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java index 13cbec09d..ae987a093 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.Paths; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; @@ -84,9 +84,9 @@ void testRun() throws Exception { executorService.submit(psmReceiver); String fileContent = - Files.readString(Path.of( + Files.readString(Paths.get( "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt")); - String expected = Files.readString(Path.of( + String expected = Files.readString(Paths.get( "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getPsm().getReceiverPort()); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java index c498cb783..3bb668793 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.Paths; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; @@ -80,8 +80,8 @@ void testRun() throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(rsmReceiver); - String fileContent = Files.readString(Path.of("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM.txt")); - String expected = Files.readString(Path.of("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM_expected.json")); + String fileContent = Files.readString(Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM.txt")); + String expected = Files.readString(Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/rsm/RsmReceiverTest_ValidRSM_expected.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getRsm().getReceiverPort()); udpClient.send(fileContent); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java index 26133c442..23c33a7ef 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.Paths; import java.time.Clock; import java.time.Instant; import java.time.ZoneOffset; @@ -14,7 +14,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import org.apache.kafka.clients.admin.NewTopic; import org.assertj.core.api.Assertions; import org.json.JSONObject; import org.junit.jupiter.api.AfterEach; @@ -25,7 +24,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.kafka.core.KafkaTemplate; -import org.springframework.kafka.test.EmbeddedKafkaBroker; import org.springframework.kafka.test.context.EmbeddedKafka; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; @@ -93,9 +91,9 @@ void testRun() throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(sdsmReceiver); - String fileContent = Files.readString(Path - .of("src/test/resources/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest_ValidSDSM.txt")); - String expected = Files.readString(Path.of( + String fileContent = Files.readString(Paths + .get("src/test/resources/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest_ValidSDSM.txt")); + String expected = Files.readString(Paths.get( "src/test/resources/us/dot/its/jpo/ode/udp/sdsm/SdsmReceiverTest_ValidSDSM_expected.json")); TestUDPClient udpClient = diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java index 2465842ef..967dc4dab 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java @@ -5,7 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import java.nio.file.Files; -import java.nio.file.Path; +import java.nio.file.Paths; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; @@ -85,9 +85,9 @@ void testRun() throws Exception { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(srmReceiver); - String fileContent = Files.readString(Path.of( + String fileContent = Files.readString(Paths.get( "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt")); - String expected = Files.readString(Path.of( + String expected = Files.readString(Paths.get( "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json")); TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSrm().getReceiverPort()); From 5974153918fe5fb8131bd6f5050303c82cbdba9b Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 21 Apr 2026 11:21:42 -0600 Subject: [PATCH 36/52] test: remove unused @Autowired fields, redundant imports, and outdated exception declarations in test classes --- .../ode/kafka/KafkaProducerConfigTest.java | 4 +--- .../Asn1DecodedDataRouterApprovalTest.java | 3 --- .../asn1/RawEncodedBSMJsonRouterTest.java | 3 --- .../asn1/RawEncodedMAPJsonRouterTest.java | 2 -- .../asn1/RawEncodedPSMJsonRouterTest.java | 2 -- .../asn1/RawEncodedRSMJsonRouterTest.java | 4 +--- .../asn1/RawEncodedRTCMJsonRouterTest.java | 4 +--- .../asn1/RawEncodedSPATJsonRouterTest.java | 2 -- .../asn1/RawEncodedSRMJsonRouterTest.java | 2 -- .../asn1/RawEncodedSSMJsonRouterTest.java | 2 -- .../asn1/RawEncodedTIMJsonRouterTest.java | 2 -- .../asn1/Asn1EncodedDataRouterTest.java | 10 -------- .../traveler/TimDepositControllerTest.java | 23 +++++++------------ 13 files changed, 11 insertions(+), 52 deletions(-) diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java index 17e266f34..83a02bdde 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java @@ -51,9 +51,7 @@ class KafkaProducerConfigTest { @Autowired @Qualifier("testOdeKafkaProperties") OdeKafkaProperties odeKafkaProperties; - @Autowired - @Qualifier("testMeterRegistry") - MeterRegistry meterRegistry; + XmlMapper xmlMapper; ObjectMapper objectMapper = new ObjectMapper(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java index 6c48a41c0..b847709ed 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java @@ -62,9 +62,6 @@ class Asn1DecodedDataRouterApprovalTest { @Value("${ode.kafka.topics.asn1.decoder-output}") private String decoderOutputTopic; - @Value("${ode.kafka.topics.json.map}") - private String jsonMapTopic; - @Autowired KafkaTemplate producer; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java index f52e81fe8..38c294a33 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java @@ -48,9 +48,6 @@ class RawEncodedBSMJsonRouterTest { @Value(value = "${ode.kafka.topics.raw-encoded-json.bsm}") private String rawEncodedBsmJson; - @Value(value = "${ode.kafka.topics.asn1.decoder-input}") - private String asn1DecoderInput; - @Autowired KafkaTemplate kafkaTemplate; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java index e378052ec..06ccfeb1d 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java @@ -63,8 +63,6 @@ class RawEncodedMAPJsonRouterTest { @Value("${ode.kafka.topics.raw-encoded-json.map}") private String rawEncodedMapJson; - @Value("${ode.kafka.topics.asn1.decoder-input}") - private String asn1DecoderInput; @Autowired KafkaTemplate kafkaTemplate; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java index 69174cc75..07e7ee2ef 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java @@ -58,8 +58,6 @@ @DirtiesContext class RawEncodedPSMJsonRouterTest { - @Autowired - Asn1CoderTopics asn1CoderTopics; @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java index 4fc0f983a..00bf90faf 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRSMJsonRouterTest.java @@ -59,9 +59,7 @@ }) @DirtiesContext public class RawEncodedRSMJsonRouterTest { - - @Autowired - Asn1CoderTopics asn1CoderTopics; + @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java index 4e9a43cdc..d2ade2fab 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedRTCMJsonRouterTest.java @@ -58,9 +58,7 @@ @TestPropertySource(properties = {"spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}"}) @DirtiesContext public class RawEncodedRTCMJsonRouterTest { - - @Autowired - Asn1CoderTopics asn1CoderTopics; + @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java index a09900003..c7d9681bd 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java @@ -57,8 +57,6 @@ @DirtiesContext class RawEncodedSPATJsonRouterTest { - @Autowired - Asn1CoderTopics asn1CoderTopics; @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java index 488cc3d46..f369c2e47 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -55,8 +55,6 @@ @DirtiesContext class RawEncodedSRMJsonRouterTest { - @Autowired - Asn1CoderTopics asn1CoderTopics; @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java index c12b560c6..6723dd806 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java @@ -55,8 +55,6 @@ @DirtiesContext class RawEncodedSSMJsonRouterTest { - @Autowired - Asn1CoderTopics asn1CoderTopics; @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java index d1833eef2..5dd90ea88 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java @@ -56,8 +56,6 @@ @DirtiesContext class RawEncodedTIMJsonRouterTest { - @Autowired - Asn1CoderTopics asn1CoderTopics; @Autowired RawEncodedJsonTopics rawEncodedJsonTopics; @Autowired diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java index ddea6a47f..f5296b116 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java @@ -222,11 +222,6 @@ void processDoubleEncodedMessage() throws IOException { @Test void processUnsignedMessageSDWOnly() throws IOException { - String[] topicsForConsumption = { - asn1CoderTopics.getEncoderInput(), - jsonTopics.getTimCertExpiration(), - jsonTopics.getTimTmcFiltered() - }; securityServicesProperties.setIsSdwSigningEnabled(true); securityServicesProperties.setIsRsuSigningEnabled(true); @@ -312,11 +307,6 @@ void processUnsignedMessageSDWOnly() throws IOException { @Test void processUnsignedMessageWithRsus() throws IOException { - String[] topicsForConsumption = { - asn1CoderTopics.getEncoderInput(), - jsonTopics.getTimCertExpiration(), - jsonTopics.getTimTmcFiltered() - }; securityServicesProperties.setIsSdwSigningEnabled(true); securityServicesProperties.setIsRsuSigningEnabled(true); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index 003bf0636..c0dfd5eb2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -16,7 +16,6 @@ package us.dot.its.jpo.ode.traveler; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.xml.XmlMapper; @@ -55,7 +54,6 @@ import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; import us.dot.its.jpo.ode.kafka.topics.JsonTopics; import us.dot.its.jpo.ode.model.OdeMsgMetadata; - import us.dot.its.jpo.ode.model.OdeObject; import us.dot.its.jpo.ode.model.SerialId; import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; import us.dot.its.jpo.ode.plugin.j2735.builders.TravelerMessageFromHumanToAsnConverter; @@ -96,20 +94,15 @@ class TimDepositControllerTest { @Autowired KafkaTemplate kafkaTemplate; - - @Autowired - KafkaTemplate timDataKafkaTemplate; - + @Autowired private XmlMapper simpleXmlMapper; @Autowired EmbeddedKafkaBroker embeddedKafka; - - int consumerCount = 0; @Test - void nullRequestShouldReturnEmptyError() throws com.fasterxml.jackson.core.JsonProcessingException { + void nullRequestShouldReturnEmptyError() { TimDepositController testTimDepositController = new TimDepositController(asn1CoderTopics, jsonTopics, timIngestTrackerProperties, securityServicesProperties, kafkaTemplate, @@ -119,7 +112,7 @@ void nullRequestShouldReturnEmptyError() throws com.fasterxml.jackson.core.JsonP } @Test - void emptyRequestShouldReturnEmptyError() throws com.fasterxml.jackson.core.JsonProcessingException { + void emptyRequestShouldReturnEmptyError() { TimDepositController testTimDepositController = new TimDepositController(asn1CoderTopics, jsonTopics, timIngestTrackerProperties, securityServicesProperties, kafkaTemplate, @@ -129,7 +122,7 @@ void emptyRequestShouldReturnEmptyError() throws com.fasterxml.jackson.core.Json } @Test - void invalidJsonSyntaxShouldReturnJsonSyntaxError() throws com.fasterxml.jackson.core.JsonProcessingException { + void invalidJsonSyntaxShouldReturnJsonSyntaxError() { TimDepositController testTimDepositController = new TimDepositController(asn1CoderTopics, jsonTopics, timIngestTrackerProperties, securityServicesProperties, kafkaTemplate, @@ -140,7 +133,7 @@ void invalidJsonSyntaxShouldReturnJsonSyntaxError() throws com.fasterxml.jackson } @Test - void missingRequestElementShouldReturnMissingRequestError() throws com.fasterxml.jackson.core.JsonProcessingException { + void missingRequestElementShouldReturnMissingRequestError() { TimDepositController testTimDepositController = new TimDepositController(asn1CoderTopics, jsonTopics, timIngestTrackerProperties, securityServicesProperties, kafkaTemplate, @@ -152,7 +145,7 @@ void missingRequestElementShouldReturnMissingRequestError() throws com.fasterxml } @Test - void invalidTimestampShouldReturnInvalidTimestampError() throws com.fasterxml.jackson.core.JsonProcessingException { + void invalidTimestampShouldReturnInvalidTimestampError() { TimDepositController testTimDepositController = new TimDepositController(asn1CoderTopics, jsonTopics, timIngestTrackerProperties, securityServicesProperties, kafkaTemplate, @@ -166,7 +159,7 @@ void invalidTimestampShouldReturnInvalidTimestampError() throws com.fasterxml.ja } @Test - void messageWithNoRSUsOrSDWShouldReturnWarning() throws IOException { + void messageWithNoRSUsOrSDWShouldReturnWarning() { // prepare odeKafkaProperties.setDisabledTopics(Set.of()); TimDepositController testTimDepositController = @@ -223,7 +216,7 @@ void failedObjectNodeConversionShouldReturnConvertingError( @Test void failedXmlConversionShouldReturnConversionError( @Capturing TimTransmogrifier capturingTimTransmogrifier) - throws XmlUtils.XmlUtilsException, JsonUtilsException, JsonProcessingException { + throws XmlUtils.XmlUtilsException, JsonUtilsException { // prepare odeKafkaProperties.setDisabledTopics(Set.of()); final Clock prevClock = DateTimeUtils.setClock( From acb3827afa24dcb9a11c62525bc8e16edb0b2e26 Mon Sep 17 00:00:00 2001 From: pmonington Date: Tue, 21 Apr 2026 11:25:29 -0600 Subject: [PATCH 37/52] chore: move jakarta annotation imports to before java.util imports --- .../dot/its/jpo/ode/udp/controller/UdpServicesController.java | 2 +- .../us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) 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 6a49bec89..e239fbe87 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 @@ -1,10 +1,10 @@ package us.dot.its.jpo.ode.udp.controller; +import jakarta.annotation.PreDestroy; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import jakarta.annotation.PreDestroy; import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index c0dfd5eb2..c6d5b9408 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -62,7 +62,6 @@ import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; import us.dot.its.jpo.ode.util.XmlUtils; - @EnableConfigurationProperties @SpringBootTest(classes = {KafkaProducerConfig.class, KafkaConsumerConfig.class, OdeKafkaProperties.class, Asn1CoderTopics.class, JsonTopics.class, From 1b7b13a2a91bd952b5bb14172eca9fc1bb986255 Mon Sep 17 00:00:00 2001 From: Brandon Payne Date: Tue, 21 Apr 2026 15:22:30 -0600 Subject: [PATCH 38/52] chore: add checkout step with recursive submodules in Azure pipeline --- .azure/azure-pipelines.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.azure/azure-pipelines.yml b/.azure/azure-pipelines.yml index 526ba8c39..a07bde981 100644 --- a/.azure/azure-pipelines.yml +++ b/.azure/azure-pipelines.yml @@ -16,6 +16,9 @@ pool: vmImage: ubuntu-latest steps: + - checkout: self + submodules: recursive + - task: CopyFiles@2 inputs: SourceFolder: '$(Build.SourcesDirectory)' From 9b8242ed860be0ae4475aa33c7b971a4f1c525e8 Mon Sep 17 00:00:00 2001 From: pmonington Date: Thu, 23 Apr 2026 08:13:37 -0600 Subject: [PATCH 39/52] tool: add lombok.config to enable copying Jackson annotations to accessors --- jpo-ode-common/lombok.config | 1 + jpo-ode-core/lombok.config | 1 + jpo-ode-plugins/lombok.config | 1 + jpo-ode-svcs/lombok.config | 1 + 4 files changed, 4 insertions(+) create mode 100644 jpo-ode-common/lombok.config create mode 100644 jpo-ode-core/lombok.config create mode 100644 jpo-ode-plugins/lombok.config create mode 100644 jpo-ode-svcs/lombok.config diff --git a/jpo-ode-common/lombok.config b/jpo-ode-common/lombok.config new file mode 100644 index 000000000..f91264a2c --- /dev/null +++ b/jpo-ode-common/lombok.config @@ -0,0 +1 @@ +lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/jpo-ode-core/lombok.config b/jpo-ode-core/lombok.config new file mode 100644 index 000000000..f91264a2c --- /dev/null +++ b/jpo-ode-core/lombok.config @@ -0,0 +1 @@ +lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/jpo-ode-plugins/lombok.config b/jpo-ode-plugins/lombok.config new file mode 100644 index 000000000..f91264a2c --- /dev/null +++ b/jpo-ode-plugins/lombok.config @@ -0,0 +1 @@ +lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/jpo-ode-svcs/lombok.config b/jpo-ode-svcs/lombok.config new file mode 100644 index 000000000..f91264a2c --- /dev/null +++ b/jpo-ode-svcs/lombok.config @@ -0,0 +1 @@ +lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file From 1e30b07a9476d344c859f8e82b02e4093117b25d Mon Sep 17 00:00:00 2001 From: pmonington Date: Thu, 23 Apr 2026 10:00:01 -0600 Subject: [PATCH 40/52] Revert "tool: add lombok.config to enable copying Jackson annotations to accessors" This reverts commit 9b8242ed860be0ae4475aa33c7b971a4f1c525e8. --- jpo-ode-common/lombok.config | 1 - jpo-ode-core/lombok.config | 1 - jpo-ode-plugins/lombok.config | 1 - jpo-ode-svcs/lombok.config | 1 - 4 files changed, 4 deletions(-) delete mode 100644 jpo-ode-common/lombok.config delete mode 100644 jpo-ode-core/lombok.config delete mode 100644 jpo-ode-plugins/lombok.config delete mode 100644 jpo-ode-svcs/lombok.config diff --git a/jpo-ode-common/lombok.config b/jpo-ode-common/lombok.config deleted file mode 100644 index f91264a2c..000000000 --- a/jpo-ode-common/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/jpo-ode-core/lombok.config b/jpo-ode-core/lombok.config deleted file mode 100644 index f91264a2c..000000000 --- a/jpo-ode-core/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/jpo-ode-plugins/lombok.config b/jpo-ode-plugins/lombok.config deleted file mode 100644 index f91264a2c..000000000 --- a/jpo-ode-plugins/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/jpo-ode-svcs/lombok.config b/jpo-ode-svcs/lombok.config deleted file mode 100644 index f91264a2c..000000000 --- a/jpo-ode-svcs/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file From 09540199ca6c90061ebeea031addeeb639381e13 Mon Sep 17 00:00:00 2001 From: pmonington Date: Thu, 23 Apr 2026 14:07:22 -0600 Subject: [PATCH 41/52] chore: downgrade Lombok version to 1.18.30 to fix compatibility issues and revert lombok.config settings --- lombok.config | 1 - pom.xml | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 lombok.config diff --git a/lombok.config b/lombok.config deleted file mode 100644 index f91264a2c..000000000 --- a/lombok.config +++ /dev/null @@ -1 +0,0 @@ -lombok.copyJacksonAnnotationsToAccessors = true \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1c79c963f..47646b7bb 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ org.projectlombok lombok - 1.18.44 + 1.18.30 provided @@ -140,7 +140,7 @@ org.projectlombok lombok - 1.18.44 + 1.18.30 From d99effdeaab6407d09a18b9413e31682cc443a53 Mon Sep 17 00:00:00 2001 From: pmonington Date: Fri, 24 Apr 2026 10:20:00 -0600 Subject: [PATCH 42/52] docs: add comments to pom.xml explaining Lombok upgrade considerations and JavaBeans naming convention workaround --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index 47646b7bb..ac26ab868 100644 --- a/pom.xml +++ b/pom.xml @@ -88,6 +88,13 @@ org.projectlombok lombok + 1.18.30 provided From 49215c15446f2ea8e74789c520a2c4ea677d32e4 Mon Sep 17 00:00:00 2001 From: pmonington Date: Mon, 27 Apr 2026 09:14:24 -0600 Subject: [PATCH 43/52] chore: bump project version to 6.0.0 and update compatibility matrix accordingly --- docs/compatibility.md | 23 ++++++++++++----------- jpo-ode-common/pom.xml | 2 +- jpo-ode-core/pom.xml | 6 +++--- jpo-ode-plugins/pom.xml | 4 ++-- jpo-ode-svcs/pom.xml | 6 +++--- pom.xml | 4 ++-- 6 files changed, 23 insertions(+), 22 deletions(-) diff --git a/docs/compatibility.md b/docs/compatibility.md index 98f6598a9..9f184c8ee 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -2,17 +2,18 @@ This table serves as a guide, suggesting which versions of individual submodules are best suited to accompany each version of the main module. It helps users ensure compatibility and smooth integration by recommending specific submodule versions for their chosen main module version. | [ODE (this project)](https://github.com/usdot-jpo-ode/jpo-ode/releases) | [ACM](https://github.com/usdot-jpo-ode/asn1_codec/releases) | [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp/releases) | [SEC](https://github.com/usdot-jpo-ode/jpo-security-svcs/releases) | [SDWD](https://github.com/usdot-jpo-ode/jpo-sdw-depositor/releases) | [S3D](https://github.com/usdot-jpo-ode/jpo-s3-deposit/releases) | [GJConverter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter/releases) | [CMonitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor/releases) | [CVisualizer](https://github.com/usdot-jpo-ode/jpo-conflictvisualizer/releases) | [CVManager](https://github.com/usdot-jpo-ode/jpo-cvmanager/releases) | [MEC](https://github.com/usdot-jpo-ode/jpo-mec-deposit/releases) | -|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------| -| 5.1.0 | 3.2.0 | 1.6.0 | 1.7.0 | 1.10.0 | 1.7.1 | 3.2.0 | 3.1.0 | N/A | 2.0.0 | 1.0.0 | -| 4.1.2 | 3.1.0 | 1.5.0 | 1.6.0 | 1.9.1 | 1.7.1 | 2.1.0 | 2.1.0 | 1.5.0 | 1.6.0 | N/A | -| 4.0.0 | 3.0.0 | 1.5.0 | 1.5.0 | 1.9.0 | 1.7.0 | 2.0.0 | 2.0.0 | 1.5.0 | 1.5.0 | N/A | -| 3.0.0 | 2.2.0 | 1.4.0 | 1.5.0 | 1.8.0 | 1.6.0 | 1.4.2 | 1.4.2 | 1.4.1 | 1.4.0 | N/A | -| 2.1.0 | 2.1.0 | 1.3.0 | 1.4.0 | 1.7.0 | 1.5.0 | 1.3.0 | 1.3.0 | 1.3.0 | 1.3.0 | N/A | -| 2.0.x | 2.0.0 | 1.3.0 | 1.4.0 | 1.6.0 | 1.4.0 | 1.2.0 | 1.2.0 | 1.2.0 | 1.2.0 | N/A | -| 1.5.1 | 1.5.0 | 1.2.0 | 1.3.0 | 1.5.0 | 1.3.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | N/A | -| 1.4.1 | 1.4.1 | 1.1.1 | 1.2.1 | 1.4.1 | 1.2.1 | 1.0.0 | 1.0.1 | 1.0.1 | 1.0.1 | N/A | -| 1.4.0 | 1.4.0 | 1.1.0 | 1.2.0 | 1.4.0 | 1.2.0 | N/A | N/A | N/A | N/A | N/A | -| 1.3.0 | 1.3.0 | 1.0.0 | 1.0.1 | 1.3.0 | 1.1.0 | N/A | N/A | N/A | N/A | N/A | +|-------------------------------------------------------------------------|-------|-------|-------|-------|-------|-------|-------|-------|-------|-------| +| 6.0.0 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | +| 5.1.0 | 3.2.0 | 1.6.0 | 1.7.0 | 1.10.0 | 1.7.1 | 3.2.0 | 3.1.0 | N/A | 2.0.0 | 1.0.0 | +| 4.1.2 | 3.1.0 | 1.5.0 | 1.6.0 | 1.9.1 | 1.7.1 | 2.1.0 | 2.1.0 | 1.5.0 | 1.6.0 | N/A | +| 4.0.0 | 3.0.0 | 1.5.0 | 1.5.0 | 1.9.0 | 1.7.0 | 2.0.0 | 2.0.0 | 1.5.0 | 1.5.0 | N/A | +| 3.0.0 | 2.2.0 | 1.4.0 | 1.5.0 | 1.8.0 | 1.6.0 | 1.4.2 | 1.4.2 | 1.4.1 | 1.4.0 | N/A | +| 2.1.0 | 2.1.0 | 1.3.0 | 1.4.0 | 1.7.0 | 1.5.0 | 1.3.0 | 1.3.0 | 1.3.0 | 1.3.0 | N/A | +| 2.0.x | 2.0.0 | 1.3.0 | 1.4.0 | 1.6.0 | 1.4.0 | 1.2.0 | 1.2.0 | 1.2.0 | 1.2.0 | N/A | +| 1.5.1 | 1.5.0 | 1.2.0 | 1.3.0 | 1.5.0 | 1.3.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | N/A | +| 1.4.1 | 1.4.1 | 1.1.1 | 1.2.1 | 1.4.1 | 1.2.1 | 1.0.0 | 1.0.1 | 1.0.1 | 1.0.1 | N/A | +| 1.4.0 | 1.4.0 | 1.1.0 | 1.2.0 | 1.4.0 | 1.2.0 | N/A | N/A | N/A | N/A | N/A | +| 1.3.0 | 1.3.0 | 1.0.0 | 1.0.1 | 1.3.0 | 1.1.0 | N/A | N/A | N/A | N/A | N/A | For example, if you're using ODE version 2.0.1, it's recommended to use ACM 2.0.0, PPM 1.3.0, SEC 1.4.0, SDWD 1.6.0, S3D 1.4.0, GJConverter 1.2.0, CMonitor 1.2.0, CVisualizer 1.2.0, and CVManager 1.2.0. While other combinations may work, these versions are suggested for the best compatibility. diff --git a/jpo-ode-common/pom.xml b/jpo-ode-common/pom.xml index e4f653b6f..d5660ba7d 100644 --- a/jpo-ode-common/pom.xml +++ b/jpo-ode-common/pom.xml @@ -5,7 +5,7 @@ usdot.jpo.ode jpo-ode - 5.1.0 + 6.0.0 jpo-ode-common diff --git a/jpo-ode-core/pom.xml b/jpo-ode-core/pom.xml index a29c6fa4d..7cc96730c 100644 --- a/jpo-ode-core/pom.xml +++ b/jpo-ode-core/pom.xml @@ -7,7 +7,7 @@ usdot.jpo.ode jpo-ode - 5.1.0 + 6.0.0 jpo-ode-core @@ -25,12 +25,12 @@ usdot.jpo.ode jpo-ode-common - 5.1.0 + 6.0.0 usdot.jpo.ode jpo-ode-plugins - 5.1.0 + 6.0.0 org.apache.httpcomponents diff --git a/jpo-ode-plugins/pom.xml b/jpo-ode-plugins/pom.xml index 6b1324f33..b4705224f 100644 --- a/jpo-ode-plugins/pom.xml +++ b/jpo-ode-plugins/pom.xml @@ -11,7 +11,7 @@ usdot.jpo.ode jpo-ode - 5.1.0 + 6.0.0 @@ -27,7 +27,7 @@ usdot.jpo.ode jpo-ode-common - 5.1.0 + 6.0.0