/* * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt). * * The MIT License * Copyright © 2014-2022 Ilkka Seppälä * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.iluwatar.messaging; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import org.apache.kafka.clients.producer.MockProducer; import org.apache.kafka.common.serialization.StringSerializer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; /** Unit tests for {@link KafkaMessageProducer}. */ class KafkaMessageProducerTest { private MockProducer mockProducer; private KafkaMessageProducer kafkaMessageProducer; @BeforeEach void setUp() { mockProducer = new MockProducer<>(true, new StringSerializer(), new StringSerializer()); kafkaMessageProducer = new KafkaMessageProducer(mockProducer); } @Test void testProducerCanBeInstantiated() { assertNotNull(kafkaMessageProducer, "KafkaMessageProducer should be instantiated"); } @Test void testPublishMessageSuccess() { Message message = new Message("Test Order"); assertDoesNotThrow(() -> kafkaMessageProducer.publish("test-topic", message)); assertEquals(1, mockProducer.history().size()); assertEquals("test-topic", mockProducer.history().get(0).topic()); assertEquals(message.getId(), mockProducer.history().get(0).key()); } @Test void testPublishMessageErrorCallback() { MockProducer failingProducer = new MockProducer<>(false, new StringSerializer(), new StringSerializer()); KafkaMessageProducer producerWithError = new KafkaMessageProducer(failingProducer); Message message = new Message("Test Order"); assertDoesNotThrow(() -> producerWithError.publish("test-topic", message)); assertEquals(1, failingProducer.history().size()); // Trigger error callback BEFORE closing so the exception != null branch is covered failingProducer.errorNext(new RuntimeException("Kafka publish error")); assertDoesNotThrow(() -> producerWithError.close()); assertTrue(failingProducer.closed()); } @Test void testClose() { assertDoesNotThrow(() -> kafkaMessageProducer.close()); assertTrue(mockProducer.closed()); } @Test void testPublishNullMessageCatchesException() { // Passing null causes message.getId() to throw NPE, which is caught by the // catch(Exception e) block — covering the "Error serializing message" log branch. assertDoesNotThrow(() -> kafkaMessageProducer.publish("test-topic", null)); } }