aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/release-notes.rst26
-rw-r--r--music-core/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java6
-rw-r--r--music-core/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java2
-rw-r--r--music-core/src/main/java/org/onap/music/lockingservice/cassandra/LockCleanUpDaemon.java13
-rw-r--r--music-core/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java7
-rw-r--r--music-core/src/main/java/org/onap/music/main/CipherUtil.java3
-rw-r--r--music-core/src/test/java/org/onap/music/datastore/MusicDataStoreTest.java4
-rw-r--r--music-core/src/test/java/org/onap/music/datastore/jsonobjects/JSONObjectTest.java54
-rw-r--r--music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonDeleteTest.java28
-rw-r--r--music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonSelectTest.java17
-rw-r--r--music-core/src/test/java/org/onap/music/datastore/jsonobjects/RowIdentifierTest.java60
-rw-r--r--music-rest/src/test/java/org/onap/music/eelf/logging/MusicContainerFilterTest.java55
12 files changed, 242 insertions, 33 deletions
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index e736d848..d5da2fb7 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -5,31 +5,33 @@
Release Notes
=============
-Initial Release for El Alto
+Initial Release for Frankfurt
-Version: 3.2.35
+Version: 3.2.40
---------------
-:Release Date: 2019-09-19
+:Release Date: 2020-05-20
**New Features**
-- MUSIC features an 'ORM' layer. Applications directly using music will now have a streamlined API that matches the REST API for easier adoption and use.
+- MUSIC now runs on a springboot server, instead of a standalone tomcat server
-- MUSIC includes deadlock detection when creating and acquiring locks
+- HTTPS support for clients through AAF certificates
-- Continued adherence to ONAP S3P requirements
+- A background lock clean up daemon will periodically check the status of current locks, cleaning up 'stale' references.
+Clients should see a performance boost if they were previously dealing with many stale locks.
+- Improved error messaging to the user, allowing clients to better debug their applications
-**Bug Fixes**
+- Continued adherence to ONAP S3P requirements
- - `MUSIC-434 <https://jira.onap.org/browse/MUSIC-434>`_ Sonar Fix : JsonDelete.java
- - `MUSIC-432 <https://jira.onap.org/projects/MUSIC/issues/MUSIC-432`_ Use try-with resources to handle the resources used in the code
+**Bug Fixes**
+ - `MUSIC-573 <https://jira.onap.org/projects/MUSIC/issues/MUSIC-573`_ Pods still run as root
- - `MUSIC-410 <https://jira.onap.org/projects/MUSIC/issues/MUSIC-410>`_ Use logger to log exception
+ - `MUSIC-557 <https://jira.onap.org/projects/MUSIC/issues/MUSIC-557`_ Test coverage goals met, and migrated to new sonar location
- - `MUSIC-408 <https://jira.onap.org/projects/MUSIC/issues/MUSIC-408>`_ fix reduce method parameter
+ - `MUSIC-530 <https://jira.onap.org/browse/MUSIC-530>`_ Security Vulnerability in pom.xml fix
@@ -43,7 +45,7 @@ MUSIC code has been formally scanned during build time using NexusIQ and all Cri
Quick Links:
- `MUSIC project page <https://wiki.onap.org/display/DW/MUSIC+Project>`_
-- `MUSIC Dublin Release <https://wiki.onap.org/display/DW/MUSIC+El-Alto>`_
+- `MUSIC Frankfurt Release <https://wiki.onap.org/display/DW/MUSIC+Frankfurt>`_
- `Passing Badge information for MUSIC <https://bestpractices.coreinfrastructure.org/en/projects/1722>`_
- `MUSIC Architecture Page <TBD>`_
- `Project Vulnerability Review Table for MUSIC <https://wiki.onap.org/pages/viewpage.action?pageId=64004601>`_
diff --git a/music-core/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java b/music-core/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java
index cd767a44..29fdb1d4 100644
--- a/music-core/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java
+++ b/music-core/src/main/java/org/onap/music/datastore/jsonobjects/JsonUpdate.java
@@ -190,7 +190,6 @@ public class JsonUpdate implements Serializable {
}
EELFLoggerDelegate.mdcPut("keyspace", "( "+this.getKeyspaceName()+" ) ");
- long startTime = System.currentTimeMillis();
String operationId = UUID.randomUUID().toString(); // just for infoging purposes.
String consistency = this.getConsistencyInfo().get("type");
@@ -311,9 +310,6 @@ public class JsonUpdate implements Serializable {
conditionInfo = new Condition(this.getConditions(), selectQuery);
}
- ReturnType operationResult = null;
- long jsonParseCompletionTime = System.currentTimeMillis();
-
if(consistency.equalsIgnoreCase(MusicUtil.EVENTUAL) && this.getConsistencyInfo().get("consistency") != null) {
if(MusicUtil.isValidConsistency(this.getConsistencyInfo().get("consistency"))) {
queryObject.setConsistency(this.getConsistencyInfo().get("consistency"));
@@ -376,7 +372,7 @@ public class JsonUpdate implements Serializable {
}
public String getRowIdString() {
- return this.rowIdString.toString();
+ return this.rowIdString;
}
public void setRowIdString(String rowIdString) {
diff --git a/music-core/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java
index 0c5d39c8..9a69a9ba 100644
--- a/music-core/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java
+++ b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/CassaLockStore.java
@@ -503,7 +503,7 @@ public class CassaLockStore {
}
public List<String> getAllLocksForOwner(String ownerId, String keyspace, String table) throws MusicServiceException, MusicQueryException {
- List<String> toRet = new ArrayList<String>();
+ List<String> toRet = new ArrayList<>();
String lockTable = table_prepend_name + table;
PreparedQueryObject queryObject = new PreparedQueryObject();
queryObject.appendQueryString("SELECT key, lockreference FROM " + keyspace + "." + lockTable);
diff --git a/music-core/src/main/java/org/onap/music/lockingservice/cassandra/LockCleanUpDaemon.java b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/LockCleanUpDaemon.java
index 492a48f0..623a07c7 100644
--- a/music-core/src/main/java/org/onap/music/lockingservice/cassandra/LockCleanUpDaemon.java
+++ b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/LockCleanUpDaemon.java
@@ -23,12 +23,10 @@
package org.onap.music.lockingservice.cassandra;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
import org.onap.music.datastore.MusicDataStoreHandle;
import org.onap.music.datastore.PreparedQueryObject;
import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.exceptions.MusicQueryException;
import org.onap.music.exceptions.MusicServiceException;
import org.onap.music.main.MusicCore;
import org.onap.music.main.MusicUtil;
@@ -58,7 +56,8 @@ public class LockCleanUpDaemon extends Thread {
try {
Thread.sleep(MusicUtil.getLockDaemonSleepTimeMs());
} catch (InterruptedException e) {
- e.printStackTrace();
+ logger.warn(EELFLoggerDelegate.applicationLogger, "Interrupted exception", e);
+
}
}
}
@@ -110,12 +109,14 @@ public class LockCleanUpDaemon extends Thread {
private void deleteLockIfStale(String lockTable, Row lock) throws MusicServiceException {
- if (lock.isNull("createtime") && lock.isNull("acquiretime")) {
+ final String CREATETIME="createtime";
+ final String ACQUIRETIME="acquiretime";
+ if (lock.isNull(CREATETIME) && lock.isNull("acquiretime")) {
return;
}
- long createTime = lock.isNull("createtime") ? 0 : Long.parseLong(lock.getString("createtime"));
- long acquireTime = lock.isNull("acquiretime") ? 0 : Long.parseLong(lock.getString("acquiretime"));
+ long createTime = lock.isNull(CREATETIME) ? 0 : Long.parseLong(lock.getString(CREATETIME));
+ long acquireTime = lock.isNull(ACQUIRETIME) ? 0 : Long.parseLong(lock.getString(ACQUIRETIME));
long row_access_time = Math.max(createTime, acquireTime);
if (System.currentTimeMillis() > row_access_time + MusicUtil.getDefaultLockLeasePeriod()) {
logger.info(EELFLoggerDelegate.applicationLogger, "Stale lock detected and being removed: " + lock);
diff --git a/music-core/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java
index 00187dc8..14fb8135 100644
--- a/music-core/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java
+++ b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/MusicLockState.java
@@ -39,15 +39,18 @@ import org.onap.music.eelf.logging.format.ErrorTypes;
// the state variable that will be stored in the locking service, capturing the transitions of
public class MusicLockState implements Serializable {
+ // captures the state of the lock
public enum LockStatus {
UNLOCKED, BEING_LOCKED, LOCKED
- };// captures the state of the lock
+ }
+
private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MusicLockState.class);
private LockStatus lockStatus;
private boolean needToSyncQuorum = false;
private String lockHolder;
- private long leasePeriod = Long.MAX_VALUE, leaseStartTime = -1;
+ private long leasePeriod = Long.MAX_VALUE;
+ private long leaseStartTime = -1;
private String errorMessage = null;
public MusicLockState(String errorMessage) {
diff --git a/music-core/src/main/java/org/onap/music/main/CipherUtil.java b/music-core/src/main/java/org/onap/music/main/CipherUtil.java
index 3278dc12..9a8ff69d 100644
--- a/music-core/src/main/java/org/onap/music/main/CipherUtil.java
+++ b/music-core/src/main/java/org/onap/music/main/CipherUtil.java
@@ -168,7 +168,8 @@ public class CipherUtil {
*/
public static String encryptPKC(String value, String skey) {
Cipher cipher = null;
- byte[] iv = null, finalByte = null;
+ byte[] iv = null;
+ byte[] finalByte = null;
try {
cipher = Cipher.getInstance(ALGORYTHM_DETAILS, "SunJCE");
diff --git a/music-core/src/test/java/org/onap/music/datastore/MusicDataStoreTest.java b/music-core/src/test/java/org/onap/music/datastore/MusicDataStoreTest.java
index 4de995f7..9260cd92 100644
--- a/music-core/src/test/java/org/onap/music/datastore/MusicDataStoreTest.java
+++ b/music-core/src/test/java/org/onap/music/datastore/MusicDataStoreTest.java
@@ -80,10 +80,6 @@ public class MusicDataStoreTest {
dataStore = new MusicDataStore(cluster, session);
}
- @Test
- public void testMusicDataStore() {
- //MusicDataStore mds = new MusicDataStore();
- }
@Test
public void testMusicDataStoreClusterSession() {
diff --git a/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JSONObjectTest.java b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JSONObjectTest.java
new file mode 100644
index 00000000..9fb549d2
--- /dev/null
+++ b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JSONObjectTest.java
@@ -0,0 +1,54 @@
+
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP MUSIC
+ * ===================================================================
+ * Copyright (C) 2020 IBM Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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 org.onap.music.datastore.jsonobjects;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class JSONObjectTest {
+
+ @Test
+ public void testGetData(){
+ JSONObject js=new JSONObject();
+ js.setData("test");
+ assertEquals(js.getData(),"test");
+
+ }
+}
diff --git a/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonDeleteTest.java b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonDeleteTest.java
index 0014f823..5b9cef8b 100644
--- a/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonDeleteTest.java
+++ b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonDeleteTest.java
@@ -82,4 +82,32 @@ public class JsonDeleteTest {
}
+ @Test
+ public void testGetKeyspaceName() {
+ jd.setKeyspaceName("keyspace");
+ assertEquals("keyspace",jd.getKeyspaceName());
+
+ }
+
+ @Test
+ public void testGetTableName() {
+ jd.setTableName("tablename");
+ assertEquals("tablename",jd.getTableName());
+
+ }
+
+ @Test
+ public void testGetPrimarKeyValue() {
+ jd.setPrimarKeyValue("primarykey");
+ assertEquals("primarykey",jd.getPrimarKeyValue());
+
+ }
+
+ @Test
+ public void testRowIdString() {
+ StringBuilder builder = new StringBuilder("testing");
+ jd.setRowIdString(builder);
+ assertEquals(jd.getRowIdString().toString(),builder.toString());
+ }
+
}
diff --git a/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonSelectTest.java b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonSelectTest.java
index 21c022ab..baada1d5 100644
--- a/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonSelectTest.java
+++ b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/JsonSelectTest.java
@@ -33,10 +33,10 @@ import java.util.Map;
import org.junit.Test;
public class JsonSelectTest {
+ JsonSelect js = new JsonSelect();
@Test
public void testGetConsistencyInfo() {
- JsonSelect js = new JsonSelect();
Map<String, String> mapSs = new HashMap<>();
mapSs.put("k1", "one");
js.setConsistencyInfo(mapSs);
@@ -45,11 +45,24 @@ public class JsonSelectTest {
@Test
public void testSerialize() throws IOException {
- JsonSelect js = new JsonSelect();
Map<String, String> mapSs = new HashMap<>();
mapSs.put("Key", "Value");
js.setConsistencyInfo(mapSs);
js.serialize();
}
+ @Test
+ public void testGetKeyspaceName() {
+ js.setKeyspaceName("testkeyspace");
+ assertEquals("testkeyspace",js.getKeyspaceName());
+
+ }
+
+ @Test
+ public void testGetTableName() {
+ js.setTableName("testkeyspace");
+ assertEquals("testkeyspace",js.getTableName());
+
+ }
+
}
diff --git a/music-core/src/test/java/org/onap/music/datastore/jsonobjects/RowIdentifierTest.java b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/RowIdentifierTest.java
new file mode 100644
index 00000000..e29f0377
--- /dev/null
+++ b/music-core/src/test/java/org/onap/music/datastore/jsonobjects/RowIdentifierTest.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP MUSIC
+ * ===================================================================
+ * Copyright (C) 2020 IBM Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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 org.onap.music.datastore.jsonobjects;
+
+import org.onap.music.datastore.PreparedQueryObject;
+import org.onap.music.datastore.jsonobjects.JsonUpdate;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class RowIdentifierTest {
+ String primarykey="primarykey";
+ String rowIdString="123";
+ PreparedQueryObject queryObject=new PreparedQueryObject("select * from employee");
+ JsonUpdate ju=new JsonUpdate();
+ JsonUpdate.RowIdentifier rowId= ju.new RowIdentifier(primarykey,rowIdString,queryObject);
+ @Test
+ public void testConstructor(){
+ rowId.setPrimaryKeyValue(primarykey);
+ rowId.setRowIdString(rowIdString);
+ assertEquals(rowId.getPrimaryKeyValue(),"primarykey");
+ assertEquals(rowId.getRowIdString(),"123");
+ }
+}
diff --git a/music-rest/src/test/java/org/onap/music/eelf/logging/MusicContainerFilterTest.java b/music-rest/src/test/java/org/onap/music/eelf/logging/MusicContainerFilterTest.java
new file mode 100644
index 00000000..cd7a9ca4
--- /dev/null
+++ b/music-rest/src/test/java/org/onap/music/eelf/logging/MusicContainerFilterTest.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * ============LICENSE_START==========================================
+ * org.onap.music
+ * ===================================================================
+ * Copyright (c) 2019 AT&T Intellectual Property
+ * ===================================================================
+ * Modifications Copyright (C) 2020 IBM.
+ * ===================================================================
+ * 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 org.onap.music.eelf.logging;
+
+import java.io.IOException;
+
+import javax.servlet.ServletException;
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+
+import org.springframework.stereotype.Component;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.music.main.MusicUtil;
+
+public class MusicContainerFilterTest {
+ MusicContainerFilter filter;
+
+ @Before
+ public void setup() throws IOException {
+ filter = new MusicContainerFilter();
+ }
+
+ @Test
+ public void testDoFilter() throws IOException {
+ ContainerResponseFilter fil=Mockito.mock(ContainerResponseFilter.class);
+ ContainerRequestContext req=Mockito.mock(ContainerRequestContext.class);
+ ContainerResponseContext res=Mockito.mock(ContainerResponseContext.class);
+ filter.filter(req,res);
+ }
+
+}