From adb2ad2d16e851fbf8dcc71af68949a74463204d Mon Sep 17 00:00:00 2001 From: efiacor Date: Wed, 23 Oct 2019 15:31:43 +0100 Subject: More bug fix and refactoring Signed-off-by: efiacor Change-Id: I4fce4e73faa86573d0c716882bb014b9f83026ee Issue-ID: DMAAP-1284 --- .../dmaap/datarouter/node/DeliveryTaskTest.java | 21 +++- .../dmaap/datarouter/node/LogbackFilterTest.java | 3 +- .../datarouter/node/NodeAafPropsUtilsTest.java | 14 +-- .../datarouter/node/NodeConfigManagerTest.java | 99 +++++++++++++++-- .../onap/dmaap/datarouter/node/NodeServerTest.java | 119 +++++++++++++++++++++ .../dmaap/datarouter/node/NodeServletTest.java | 8 +- 6 files changed, 241 insertions(+), 23 deletions(-) create mode 100644 datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java (limited to 'datarouter-node/src/test/java/org/onap') diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java index 0123c315..596d56a7 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/DeliveryTaskTest.java @@ -23,6 +23,9 @@ package org.onap.dmaap.datarouter.node; import java.io.ByteArrayOutputStream; import java.net.HttpURLConnection; import java.net.URL; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -42,6 +45,8 @@ public class DeliveryTaskTest { @Mock private DeliveryQueue deliveryQueue; + private ExecutorService executorService; + @Before public void setUp() throws Exception { DestInfo destInfo = getPrivDestInfo(); @@ -86,15 +91,23 @@ public class DeliveryTaskTest { } @Test - public void Validate_Delivery_Tasks_Success_For_Standard_File() { + public void Validate_Delivery_Tasks_Success_For_Standard_File() throws InterruptedException { DeliveryTask task = new DeliveryTask(deliveryQueue, "123456789.test-dr-node"); - task.run(); + executorService = Executors.newSingleThreadExecutor(); + executorService.execute(task); + + executorService.shutdown(); + executorService.awaitTermination(2, TimeUnit.SECONDS); } @Test - public void Validate_Delivery_Tasks_Success_For_Compressed_File() { + public void Validate_Delivery_Tasks_Success_For_Compressed_File() throws InterruptedException { DeliveryTask task = new DeliveryTask(deliveryQueue, "123456789.test-dr-node.gz"); - task.run(); + executorService = Executors.newSingleThreadExecutor(); + executorService.execute(task); + + executorService.shutdown(); + executorService.awaitTermination(2, TimeUnit.SECONDS); } private DestInfo getPrivDestInfo() { diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java index c18528ea..fe9b43c2 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/LogbackFilterTest.java @@ -309,10 +309,9 @@ public class LogbackFilterTest { } - @Test public void Given_call_to_EelfMsgs_return_the_correct_enum(){ - assertEquals(MESSAGE_WITH_BEHALF.toString(), "MESSAGE_WITH_BEHALF"); + assertEquals("MESSAGE_WITH_BEHALF", MESSAGE_WITH_BEHALF.toString()); } } diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java index aa5368b5..927b8bef 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeAafPropsUtilsTest.java @@ -22,18 +22,20 @@ package org.onap.dmaap.datarouter.node; import java.io.File; import java.io.IOException; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; public class NodeAafPropsUtilsTest { + private NodeAafPropsUtils nodeAafPropsUtils; + + @Before + public void setUp() throws IOException { + nodeAafPropsUtils = new NodeAafPropsUtils(new File("src/test/resources/aaf/org.onap.dmaap-dr.props")); + } + @Test public void Veirfy_Aaf_Pass_Decryp_Successful() { - NodeAafPropsUtils nodeAafPropsUtils = null; - try { - nodeAafPropsUtils = new NodeAafPropsUtils(new File("src/test/resources/aaf/org.onap.dmaap-dr.props")); - } catch (IOException e) { - e.printStackTrace(); - } Assert.assertEquals("tVac2#@Stx%tIOE^x[c&2fgZ", nodeAafPropsUtils.getDecryptedPass("cadi_keystore_password")); } } diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java index 578053aa..9c945725 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeConfigManagerTest.java @@ -20,30 +20,69 @@ package org.onap.dmaap.datarouter.node; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.net.InetAddress; import java.net.URL; +import java.net.URLStreamHandler; +import java.net.URLStreamHandlerFactory; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; import org.apache.commons.io.FileUtils; +import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import org.junit.runner.RunWith; +import org.mockito.Mock; import org.powermock.core.classloader.annotations.PowerMockIgnore; import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import sun.net.www.URLConnection; -@RunWith(PowerMockRunner.class) @PowerMockIgnore({"javax.net.ssl.*", "javax.security.auth.x500.X500Principal", "javax.crypto.*"}) -@PrepareForTest({InetAddress.class, URL.class}) +@PrepareForTest({InetAddress.class}) public class NodeConfigManagerTest { - private NodeConfigManager nodeConfigManager = NodeConfigManager.getInstance(); + private static HttpUrlStreamHandler httpUrlStreamHandler; + + @Mock + InputStream inputStream; + + @Mock + NodeConfig nodeConfig; @BeforeClass public static void init() { System.setProperty("org.onap.dmaap.datarouter.node.properties", "src/test/resources/node_test.properties"); + // Allows for mocking URL connections + URLStreamHandlerFactory urlStreamHandlerFactory = mock(URLStreamHandlerFactory.class); + URL.setURLStreamHandlerFactory(urlStreamHandlerFactory); + httpUrlStreamHandler = new HttpUrlStreamHandler(); + given(urlStreamHandlerFactory.createURLStreamHandler("https")).willReturn(httpUrlStreamHandler); + } + + @Before + public void reset() throws IOException { + String href = "https://dmaap-dr-prov:8443/internal/prov"; + URLConnection urlConnection = mock(URLConnection.class); + httpUrlStreamHandler.addConnection(new URL(href), urlConnection); + //File prov = new File("src/test/resources/prov_data.json"); + InputStream anyInputStream = new ByteArrayInputStream(Files.readAllBytes(Paths.get("src/test/resources/prov_data.json"))); + when(urlConnection.getInputStream()).thenReturn(anyInputStream); + } + + @After + public void resetHandler() { + httpUrlStreamHandler.resetConnections(); } @AfterClass @@ -54,6 +93,7 @@ public class NodeConfigManagerTest { @Test public void Verify_NodeConfigMan_Getters() { + NodeConfigManager nodeConfigManager = NodeConfigManager.getInstance(); Assert.assertEquals("legacy", nodeConfigManager.getAafInstance()); Assert.assertEquals("src/test/resources/spool/f", nodeConfigManager.getSpoolDir()); Assert.assertEquals("src/test/resources/spool", nodeConfigManager.getSpoolBase()); @@ -70,10 +110,55 @@ public class NodeConfigManagerTest { Assert.assertEquals(new String[] {"TLSv1.1", "TLSv1.2"}, nodeConfigManager.getEnabledprotocols()); Assert.assertEquals("org.onap.dmaap-dr.feed", nodeConfigManager.getAafType()); Assert.assertEquals("publish", nodeConfigManager.getAafAction()); - Assert.assertEquals("https://aaf-locate:8095", nodeConfigManager.getAafURL()); Assert.assertFalse(nodeConfigManager.getCadiEnabled()); Assert.assertFalse(nodeConfigManager.isShutdown()); - Assert.assertFalse(nodeConfigManager.isConfigured()); + Assert.assertTrue(nodeConfigManager.isConfigured()); + Assert.assertEquals("legacy", nodeConfigManager.getAafInstance("1")); + Assert.assertNotNull(nodeConfigManager.getPublishId()); + Assert.assertNotNull(nodeConfigManager.getAllDests()); + Assert.assertEquals(10000, nodeConfigManager.getInitFailureTimer()); + Assert.assertEquals(600000, nodeConfigManager.getWaitForFileProcessFailureTimer()); + Assert.assertEquals(3600000, nodeConfigManager.getMaxFailureTimer()); + Assert.assertEquals(2.0, nodeConfigManager.getFailureBackoff(),0.0); + Assert.assertEquals(86400000, nodeConfigManager.getExpirationTimer()); + Assert.assertEquals(100, nodeConfigManager.getFairFileLimit()); + Assert.assertEquals(60000, nodeConfigManager.getFairTimeLimit()); + Assert.assertNotNull(nodeConfigManager.getTargets("1")); + Assert.assertEquals("src/test/resources/spool/f", nodeConfigManager.getSpoolDir()); + Assert.assertEquals("src/test/resources/aaf/org.onap.dmaap-dr.p12", nodeConfigManager.getKSFile()); + Assert.assertEquals("jks", nodeConfigManager.getTstype()); + Assert.assertEquals("src/test/resources/aaf/org.onap.dmaap-dr.trust.jks", nodeConfigManager.getTsfile()); + Assert.assertEquals(40, nodeConfigManager.getDeliveryThreads()); + Assert.assertEquals("30", nodeConfigManager.getEventLogInterval()); + Assert.assertFalse(nodeConfigManager.isFollowRedirects()); + Assert.assertNotNull(nodeConfigManager.getTimer()); + Assert.assertEquals("1", nodeConfigManager.getFeedId("1")); + Assert.assertEquals("Basic ZG1hYXAtZHItbm9kZTpsaEFUNHY2N3F3blY3QVFxV3ByMm84WXNuVjg9", nodeConfigManager.getMyAuth()); + Assert.assertEquals(0.05, nodeConfigManager.getFreeDiskStart(), 0.0); + Assert.assertEquals(0.2, nodeConfigManager.getFreeDiskStop(), 0.0); + Assert.assertEquals("org.onap.dmaap-dr.feed|legacy|publish", nodeConfigManager.getPermission("legacy")); } + /** + * {@link URLStreamHandler} that allows us to control the {@link URLConnection URLConnections} that are returned + * by {@link URL URLs} in the code under test. + */ + public static class HttpUrlStreamHandler extends URLStreamHandler { + + private Map connections = new HashMap(); + + @Override + protected URLConnection openConnection(URL url) { + return connections.get(url); + } + + void resetConnections() { + connections = new HashMap(); + } + + HttpUrlStreamHandler addConnection(URL url, URLConnection urlConnection) { + connections.put(url, urlConnection); + return this; + } + } } \ No newline at end of file diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java new file mode 100644 index 00000000..f72e581d --- /dev/null +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServerTest.java @@ -0,0 +1,119 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.onap.dmaap.datarouter.node; + +import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.io.IOException; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; +import org.powermock.modules.junit4.PowerMockRunner; + +@RunWith(PowerMockRunner.class) +@SuppressStaticInitializationFor("org.onap.dmaap.datarouter.node.NodeConfigManager") +public class NodeServerTest { + + private NodeConfigManager config = mock(NodeConfigManager.class); + @Before + public void setUp() throws Exception { + setUpConfig(); + setUpNodeMainDelivery(); + createFilesAndDirectories(); + mock(Delivery.class); + } + + @AfterClass + public static void tearDown() { + deleteCreatedDirectories(); + } + + @Test + public void Verify_Node_Server_Is_Configured_Correctly() { + Assert.assertNotNull(NodeServer.getServerInstance()); + } + + private void setUpConfig() throws IllegalAccessException { + PowerMockito.mockStatic(NodeConfigManager.class); + when(config.isShutdown()).thenReturn(false); + when(config.isConfigured()).thenReturn(true); + when(config.getSpoolDir()).thenReturn("spool/f"); + when(config.getSpoolBase()).thenReturn("spool"); + when(config.getLogDir()).thenReturn("log/dir"); + when(config.getPublishId()).thenReturn("User1"); + when(config.isAnotherNode(anyString(), anyString())).thenReturn(true); + when(config.getEventLogInterval()).thenReturn("40"); + when(config.isDeletePermitted("1")).thenReturn(true); + when(config.getAllDests()).thenReturn(new DestInfo[0]); + when(config.getKSType()).thenReturn("PKCS12"); + when(config.getKSFile()).thenReturn("src/test/resources/aaf/org.onap.dmaap-dr.p12"); + when(config.getKSPass()).thenReturn("tVac2#@Stx%tIOE^x[c&2fgZ"); + when(config.getTstype()).thenReturn("jks"); + when(config.getTsfile()).thenReturn("src/test/resources/aaf/org.onap.dmaap-dr.trust.jks"); + when(config.getTspass()).thenReturn("XHX$2Vl?Lk*2CB.i1+ZFAhZd"); + FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); + FieldUtils.writeDeclaredStaticField(NodeRunner.class, "nodeConfigManager", config, true); + PowerMockito.when(NodeConfigManager.getInstance()).thenReturn(config); + } + + private void setUpNodeMainDelivery() throws IllegalAccessException{ + Delivery delivery = mock(Delivery.class); + doNothing().when(delivery).resetQueue(anyObject()); + FieldUtils.writeDeclaredStaticField(NodeServer.class, "delivery", delivery, true); + } + + private void createFilesAndDirectories() throws IOException { + File nodeDir = new File("spool/n/172.0.0.1"); + File spoolDir = new File("spool/s/0/1"); + File dataFile = new File("spool/s/0/1/dmaap-dr-node.1234567"); + File metaDataFile = new File("spool/s/0/1/dmaap-dr-node.1234567.M"); + nodeDir.mkdirs(); + spoolDir.mkdirs(); + dataFile.createNewFile(); + metaDataFile.createNewFile(); + } + + private static void deleteCreatedDirectories() { + File spoolDir = new File("spool"); + delete(spoolDir); + } + + private static void delete(File file) { + if (file.isDirectory()) { + for (File f: file.listFiles()) { + delete(f); + } + } + if (!file.delete()) { + System.out.println("Failed to delete: " + file); + } + } + +} diff --git a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java index b3db3201..136e21d4 100644 --- a/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java +++ b/datarouter-node/src/test/java/org/onap/dmaap/datarouter/node/NodeServletTest.java @@ -307,7 +307,7 @@ public class NodeServletTest { when(config.isDeletePermitted("1")).thenReturn(true); when(config.getAllDests()).thenReturn(new DestInfo[0]); FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); - FieldUtils.writeDeclaredStaticField(NodeMain.class, "nodeConfigManager", config, true); + FieldUtils.writeDeclaredStaticField(NodeRunner.class, "nodeConfigManager", config, true); PowerMockito.when(NodeConfigManager.getInstance()).thenReturn(config); } @@ -318,7 +318,7 @@ public class NodeServletTest { when(config.isConfigured()).thenReturn(true); when(config.isDeletePermitted("1")).thenReturn(false); FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); - FieldUtils.writeDeclaredStaticField(NodeMain.class, "nodeConfigManager", config, true); + FieldUtils.writeDeclaredStaticField(NodeRunner.class, "nodeConfigManager", config, true); PowerMockito.when(NodeConfigManager.getInstance()).thenReturn(config); } @@ -329,14 +329,14 @@ public class NodeServletTest { when(config.isConfigured()).thenReturn(true); when(config.isDeletePermitted("1")).thenThrow(new NullPointerException()); FieldUtils.writeDeclaredStaticField(NodeServlet.class, "config", config, true); - FieldUtils.writeDeclaredStaticField(NodeMain.class, "nodeConfigManager", config, true); + FieldUtils.writeDeclaredStaticField(NodeRunner.class, "nodeConfigManager", config, true); PowerMockito.when(NodeConfigManager.getInstance()).thenReturn(config); } private void setUpNodeMainDelivery() throws IllegalAccessException{ Delivery delivery = mock(Delivery.class); doNothing().when(delivery).resetQueue(anyObject()); - FieldUtils.writeDeclaredStaticField(NodeMain.class, "delivery", delivery, true); + FieldUtils.writeDeclaredStaticField(NodeServer.class, "delivery", delivery, true); } private void setNodeConfigManagerIsConfiguredToReturnFalse() throws IllegalAccessException{ -- cgit 1.2.3-korg