summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoss Armstrong <joss.armstrong@ericsson.com>2019-02-08 08:38:45 +0000
committerTakamune Cho <takamune.cho@att.com>2019-02-08 15:58:35 +0000
commit8501f18c560534018a839b0bbccccf071e51fa4f (patch)
treef618c6bfafdd329fff8f8ea51b59c67a805225d1
parent57102888658f02a22c0d9da7872fc7c5880366a1 (diff)
Test coverage in transaction-recorder
Increased coverage from 64% to 96% Issue-ID: APPC-1403 Change-Id: Idbb94d5e8933ac65bfc68cec6996c5ac039e8748 Signed-off-by: Joss Armstrong <joss.armstrong@ericsson.com>
-rw-r--r--appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java4
-rw-r--r--appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/objects/TransactionConstants.java4
-rw-r--r--appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java158
3 files changed, 146 insertions, 20 deletions
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java
index 98ea1b538..5c5d8fc24 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImpl.java
@@ -5,6 +5,8 @@
* Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
+ * ================================================================================
+ * Modifications Copyright (C) 2019 Ericsson
* =============================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -158,7 +160,7 @@ public class TransactionRecorderImpl implements TransactionRecorder {
} catch (SQLException e) {
String message = "In progress transactions couldn't be marked aborted on server start up";
logger.error(message);
- throw new RuntimeException(message);
+ throw new RuntimeException(message, e);
}
if (logger.isTraceEnabled()) {
logger.trace("In progress transactions marked aborted");
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/objects/TransactionConstants.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/objects/TransactionConstants.java
index 17913233a..0424f87a3 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/objects/TransactionConstants.java
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/main/java/org/onap/appc/transactionrecorder/objects/TransactionConstants.java
@@ -5,6 +5,8 @@
* Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
+ * ================================================================================
+ * Modifications Copyright (C) 2019 Ericsson
* =============================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -56,7 +58,7 @@ public class TransactionConstants {
private String columnName;
TRANSACTION_ATTRIBUTES(String columnName){
- this.columnName=columnName;
+ this.columnName = columnName;
}
public String getColumnName(){
diff --git a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java
index 1418e89c6..8d30ef302 100644
--- a/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java
+++ b/appc-dispatcher/appc-dispatcher-common/transaction-recorder/src/test/java/org/onap/appc/transactionrecorder/impl/TransactionRecorderImplTest.java
@@ -5,6 +5,8 @@
* Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
+ * ================================================================================
+ * Modifications Copyright (C) 2019 Ericsson
* =============================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,13 +25,32 @@
package org.onap.appc.transactionrecorder.impl;
-import com.sun.rowset.CachedRowSetImpl;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.anyString;
+import static org.hamcrest.CoreMatchers.isA;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
+import java.time.Instant;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.sql.rowset.CachedRowSet;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
import org.mockito.Mockito;
-
import org.onap.appc.dao.util.dbcp.DBConnectionPool;
import org.onap.appc.dao.util.helper.DBHelper;
import org.onap.appc.domainmodel.lcm.Flags;
@@ -38,21 +59,9 @@ import org.onap.appc.domainmodel.lcm.TransactionRecord;
import org.onap.appc.domainmodel.lcm.VNFOperation;
import org.onap.appc.exceptions.APPCException;
import org.onap.appc.transactionrecorder.objects.TransactionConstants;
+import org.onap.appc.transactionrecorder.objects.TransactionConstants.TRANSACTION_ATTRIBUTES;
import org.onap.ccsdk.sli.core.dblib.DbLibService;
-
-import javax.sql.rowset.CachedRowSet;
-import java.sql.*;
-import java.time.Instant;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import static org.mockito.Matchers.*;
+import com.sun.rowset.CachedRowSetImpl;
/**
* Test class for TransactionRecorder
@@ -99,6 +108,9 @@ public class TransactionRecorderImplTest {
")";
private String TRANSACTION_DROP_TABLE = "DROP TABLE IF EXISTS TRANSACTIONS";
+ @Rule
+ public ExpectedException expectedEx = ExpectedException.none();
+
@Before
public void setUp() throws Exception {
transactionRecorderImpl = new TransactionRecorderImpl();
@@ -107,7 +119,6 @@ public class TransactionRecorderImplTest {
transactionRecorderImpl.setDbLibService(dbLibService);
dbConnectionPool = new DBConnectionPool(dbUrl, username, password, driver);
executeUpdate(TRANSACTION_CREATE_TABLE);
-
}
@@ -147,6 +158,18 @@ public class TransactionRecorderImplTest {
}
@Test
+ public void testStoreExceptionFlow() throws SQLException, APPCException {
+
+ TransactionRecord input = prepareTransactionsInput();
+ Mockito.when(dbLibService.writeData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.store(input);
+
+ }
+
+ @Test
public void testGetInProgressRequests() throws SQLException, APPCException {
TransactionRecord record1 = prepareTransactionsInput();
insertRecord(record1);
@@ -154,11 +177,24 @@ public class TransactionRecorderImplTest {
input.setStartTime(Instant.now());
Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenAnswer(invocation ->
inMemoryExecutionWithResultSet(invocation.getArguments()));
- Assert.assertEquals(1, transactionRecorderImpl.getInProgressRequests(input,0).size());
+ Assert.assertEquals(1, transactionRecorderImpl.getInProgressRequests(input, 0).size());
}
@Test
+ public void testGetInProgressRequestsSqlException() throws SQLException, APPCException {
+ TransactionRecord record1 = prepareTransactionsInput();
+ insertRecord(record1);
+ TransactionRecord input = prepareTransactionsInput();
+ input.setStartTime(Instant.now());
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.getInProgressRequests(input, 0);
+ }
+
+ @Test
public void testGetInProgressRequestsWithinTimeInterval() throws SQLException, APPCException {
TransactionRecord record1 = prepareTransactionsInput();
record1.setStartTime(Instant.now().minus(4,ChronoUnit.HOURS));
@@ -182,6 +218,29 @@ public class TransactionRecorderImplTest {
}
@Test
+ public void testIsTransactionDuplicateExceptionFlow() throws SQLException, APPCException {
+ TransactionRecord input = prepareTransactionsInput();
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.isTransactionDuplicate(input);
+ }
+
+ @Test
+ public void testIsTransactionDuplicateAlternativeFlow() throws SQLException, APPCException {
+ TransactionRecord input = prepareTransactionsInput();
+ input.setSubRequestId(null);
+ input.setOriginatorId(null);
+ CachedRowSetImpl rowset = Mockito.mock(CachedRowSetImpl.class);
+ Mockito.when(rowset.first()).thenReturn(true);
+ Mockito.when(rowset.getString(TransactionConstants.TRANSACTION_ATTRIBUTES.TRANSACTION_ID.getColumnName()))
+ .thenReturn(null);
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenReturn(rowset);
+ Assert.assertTrue(transactionRecorderImpl.isTransactionDuplicate(input));
+ }
+
+ @Test
public void testGetInProgressRequestsCount() throws SQLException, APPCException {
TransactionRecord input = prepareTransactionsInput();
Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenAnswer(invocation ->
@@ -190,6 +249,26 @@ public class TransactionRecorderImplTest {
}
@Test
+ public void testGetInProgressRequestsCountSqlException() throws SQLException, APPCException {
+ TransactionRecord input = prepareTransactionsInput();
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.getInProgressRequestsCount();
+ }
+
+ @Test
+ public void testGetInProgressRequestsCountNoRecords() throws SQLException, APPCException {
+ CachedRowSetImpl rowset = Mockito.mock(CachedRowSetImpl.class);
+ Mockito.when(rowset.first()).thenReturn(false);
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenReturn(rowset);
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
+ transactionRecorderImpl.getInProgressRequestsCount();
+ }
+
+ @Test
public void testUpdate() throws APPCException, SQLException {
TransactionRecord input = prepareTransactionsInput();
insertRecord(input);
@@ -201,6 +280,19 @@ public class TransactionRecorderImplTest {
}
@Test
+ public void testUpdateExceptionFlow() throws APPCException, SQLException {
+ TransactionRecord input = prepareTransactionsInput();
+ insertRecord(input);
+ Map<TransactionConstants.TRANSACTION_ATTRIBUTES, String> updateColumns = new HashMap<>();
+ updateColumns.put(TransactionConstants.TRANSACTION_ATTRIBUTES.TARGET_TYPE, "Firewall");
+ Mockito.when(dbLibService.writeData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage(TransactionConstants.ERROR_ACCESSING_DATABASE);
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.update(input.getTransactionId(), updateColumns);
+ }
+
+ @Test
public void testMarkTransactionsAborted() throws SQLException {
TransactionRecord input = prepareTransactionsInput();
insertRecord(input);
@@ -209,6 +301,36 @@ public class TransactionRecorderImplTest {
transactionRecorderImpl.markTransactionsAborted("123~");
}
+ @Test
+ public void testMarkTransactionsAbortedExceptionFlow() throws SQLException {
+ TransactionRecord input = prepareTransactionsInput();
+ insertRecord(input);
+ Mockito.when(dbLibService.writeData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(RuntimeException.class);
+ expectedEx.expectMessage("In progress transactions couldn't be marked aborted on server start up");
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.markTransactionsAborted("123~");
+ }
+
+ @Test
+ public void testGetRecords() throws SQLException, APPCException {
+ CachedRowSetImpl rowset = Mockito.mock(CachedRowSetImpl.class);
+ Mockito.when(rowset.next()).thenReturn(true).thenReturn(false);
+ Mockito.when(rowset.getString(TRANSACTION_ATTRIBUTES.STATE.getColumnName())).thenReturn("NAME");
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenReturn(rowset);
+ Assert.assertEquals(RequestStatus.UNKNOWN,
+ transactionRecorderImpl.getRecords(null, "SUBREQUEST_ID", "ORIGINATOR_ID", null).get(0));
+ }
+
+ @Test
+ public void testGetRecordsSqlException() throws SQLException, APPCException {
+ Mockito.when(dbLibService.getData(anyString(), anyObject(), anyString())).thenThrow(new SQLException());
+ expectedEx.expect(APPCException.class);
+ expectedEx.expectMessage("Error retrieving record for requestID null and vnfId null");
+ expectedEx.expectCause(isA(SQLException.class));
+ transactionRecorderImpl.getRecords(null, null, null, null);
+ }
+
private ResultSet inMemoryExecutionWithResultSet(Object[] obj) throws Exception {
String query = (String) obj[0];
ArrayList<String> args = (ArrayList<String>) obj[1];