diff options
8 files changed, 233 insertions, 22 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/lockingservice/cassandra/LockCleanUpDaemon.java b/music-core/src/main/java/org/onap/music/lockingservice/cassandra/LockCleanUpDaemon.java index 1f40f2bd..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 @@ -56,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); + } } } @@ -108,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/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); + } + +} |