Merge "ICS sample producer and consumer"
[nonrtric.git] / sample-services / ics-producer-consumer / producer / src / test / java / com / demo / producer / ThreadsControllerTest.java
diff --git a/sample-services/ics-producer-consumer/producer/src/test/java/com/demo/producer/ThreadsControllerTest.java b/sample-services/ics-producer-consumer/producer/src/test/java/com/demo/producer/ThreadsControllerTest.java
new file mode 100644 (file)
index 0000000..d3587f1
--- /dev/null
@@ -0,0 +1,89 @@
+/*-
+ * ========================LICENSE_START=================================
+ * O-RAN-SC
+ *
+ * Copyright (C) 2024: OpenInfra Foundation Europe
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================LICENSE_END===================================
+ */
+
+package com.demo.producer;
+
+import com.demo.producer.controllers.ThreadsController;
+import com.demo.producer.producer.SimpleProducer;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import java.util.concurrent.CompletableFuture;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.*;
+
+@SpringBootTest
+@ContextConfiguration(classes = SimpleProducer.class)
+public class ThreadsControllerTest {
+
+    @Mock
+    @Autowired
+    private SimpleProducer simpleProducer;
+
+    @InjectMocks
+    private ThreadsController threadsController;
+
+    private MockHttpServletRequest request;
+    private MockHttpServletResponse response;
+
+    private AutoCloseable closable;
+
+    @BeforeEach
+    public void setUp() {
+        closable = MockitoAnnotations.openMocks(this);
+        request = new MockHttpServletRequest();
+        response = new MockHttpServletResponse();
+        RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request, response));
+    }
+
+    @AfterEach
+    public void close() throws Exception {
+        closable.close();
+    }
+
+    @Test
+    public void testStopProducerWhenNoActiveProducer() throws Exception {
+        String result = threadsController.stopProducer();
+        assertEquals("No active producer to stop", result);
+        verify(simpleProducer, never()).shutdown();
+    }
+
+    @Test
+    public void testPublishNMessage() throws Exception {
+        String topicName = "testTopic";
+        int numberOfMessages = 10;
+        CompletableFuture<String> future = CompletableFuture.completedFuture("Producer started for topic: " + topicName);
+        CompletableFuture<String> result = threadsController.publishNMessage(numberOfMessages, topicName);
+        assertEquals(future.getClass(), result.getClass());
+    }
+
+}