summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xpom.xml275
-rw-r--r--src/main/java/org/onap/music/client/MusicClient.java581
-rw-r--r--src/main/java/org/onap/music/client/MusicRestClient.java384
-rwxr-xr-xsrc/main/java/org/onap/music/main/MusicUtil.java10
-rw-r--r--src/test/java/org/onap/music/benchmarks/MicroBenchMarks.java2
-rw-r--r--src/test/java/org/onap/music/unittests/JsonLockResponseTest.java186
-rw-r--r--src/test/java/org/onap/music/unittests/JsonResponseTest.java83
-rw-r--r--src/test/java/org/onap/music/unittests/MusicUtilTest.java217
-rw-r--r--src/test/java/org/onap/music/unittests/ResultTypeTest.java43
-rw-r--r--src/test/java/org/onap/music/unittests/ReturnTypeTest.java83
-rw-r--r--version.properties2
11 files changed, 754 insertions, 1112 deletions
diff --git a/pom.xml b/pom.xml
index 683c56a4..823e5707 100755
--- a/pom.xml
+++ b/pom.xml
@@ -25,59 +25,59 @@
<groupId>org.onap.music</groupId>
<artifactId>MUSIC</artifactId>
<packaging>war</packaging>
- <version>2.4.11</version>
- <description>
+ <version>2.4.12</version>
+ <description>
This is the MUSIC REST interface, packaged as a war file.
</description>
- <parent>
- <groupId>org.onap.oparent</groupId>
- <artifactId>oparent</artifactId>
- <version>0.1.1</version>
- <relativePath />
- </parent>
+ <parent>
+ <groupId>org.onap.oparent</groupId>
+ <artifactId>oparent</artifactId>
+ <version>0.1.1</version>
+ <relativePath />
+ </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <jersey1.version>1.17</jersey1.version>
- <jersey2.version>2.26</jersey2.version>
- <jaxrs.version>2.0.1</jaxrs.version>
- <cassandra.version>3.0.0</cassandra.version>
- <zookeeper.version>3.4.6</zookeeper.version>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <jersey1.version>1.17</jersey1.version>
+ <jersey2.version>2.26</jersey2.version>
+ <jaxrs.version>2.0.1</jaxrs.version>
+ <cassandra.version>3.0.0</cassandra.version>
+ <zookeeper.version>3.4.6</zookeeper.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--nexus -->
- <nexusproxy>https://nexus.onap.org</nexusproxy>
- <snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath>
- <releaseNexusPath>/content/repositories/releases/</releaseNexusPath>
- <stagingNexusPath>/content/repositories/staging/</stagingNexusPath>
- <sitePath>/content/sites/site/org/onap/music/${project.version}</sitePath>
- <!--maven -->
- <timestamp>${maven.build.timestamp}</timestamp>
- <maven.build.timestamp.format>yyyy.MM.dd.HH.mm</maven.build.timestamp.format>
- <!--docker -->
- <docker.tag>${project.version}-${timestamp}</docker.tag>
- <docker.latest.tag>${project.version}-latest</docker.latest.tag>
- </properties>
+ <nexusproxy>https://nexus.onap.org</nexusproxy>
+ <snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath>
+ <releaseNexusPath>/content/repositories/releases/</releaseNexusPath>
+ <stagingNexusPath>/content/repositories/staging/</stagingNexusPath>
+ <sitePath>/content/sites/site/org/onap/music/${project.version}</sitePath>
+ <!--maven -->
+ <timestamp>${maven.build.timestamp}</timestamp>
+ <maven.build.timestamp.format>yyyy.MM.dd.HH.mm</maven.build.timestamp.format>
+ <!--docker -->
+ <docker.tag>${project.version}-${timestamp}</docker.tag>
+ <docker.latest.tag>${project.version}-latest</docker.latest.tag>
+ </properties>
- <repositories>
- <repository>
- <id>ecomp-releases</id>
- <name>ECOMP Release Repository</name>
- <url>${onap.nexus.url}/${releaseNexusPath}</url>
- </repository>
- <repository>
- <id>ecomp-snapshots</id>
- <name>Snapshot Repository</name>
- <url>${nexusproxy}/${snapshotNexusPath}</url>
- </repository>
- <repository>
- <id>ecomp-staging</id>
- <name>Staging Repository</name>
- <url>${nexusproxy}/${stagingNexusPath}</url>
- </repository>
- </repositories>
+ <repositories>
+ <repository>
+ <id>ecomp-releases</id>
+ <name>ECOMP Release Repository</name>
+ <url>${onap.nexus.url}/${releaseNexusPath}</url>
+ </repository>
+ <repository>
+ <id>ecomp-snapshots</id>
+ <name>Snapshot Repository</name>
+ <url>${nexusproxy}/${snapshotNexusPath}</url>
+ </repository>
+ <repository>
+ <id>ecomp-staging</id>
+ <name>Staging Repository</name>
+ <url>${nexusproxy}/${stagingNexusPath}</url>
+ </repository>
+ </repositories>
<build>
<finalName>MUSIC</finalName>
@@ -209,10 +209,10 @@
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
<exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- </exclusion>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
@@ -246,7 +246,6 @@
<artifactId>commons-jcs-core</artifactId>
<version>2.2</version>
</dependency>
-
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
@@ -258,8 +257,6 @@
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
-
-
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
@@ -272,8 +269,6 @@
<artifactId>mockito-all</artifactId>
<version>1.9.0</version>
</dependency>
-
-
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey-jaxrs</artifactId>
@@ -289,7 +284,7 @@
<dependency>
<groupId>com.att.eelf</groupId>
<artifactId>eelf-core</artifactId>
- <version>1.0.0</version>
+ <version>1.0.1-oss</version>
</dependency>
</dependencies>
@@ -313,88 +308,88 @@
</plugins>
</reporting>
- <profiles>
- <profile>
- <id>docker</id>
- <build>
- <plugins>
- <plugin>
- <groupId>io.fabric8</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>0.19.1</version>
- <configuration>
- <verbose>true</verbose>
- <apiVersion>1.23</apiVersion>
- <registry>nexus3.onap.org:10003</registry>
- <images>
- <!-- MUSIC War -->
- <image>
- <name>music</name>
- <alias>docker_music</alias>
- <build>
- <cleanup>true</cleanup>
- <tags>
- <tag>${docker.tag}</tag>
- <tag>${docker.latest.tag}</tag>
- </tags>
- <dockerFileDir>${project.basedir}</dockerFileDir>
- <assembly>
- <descriptorRef>artifact</descriptorRef>
- </assembly>
- </build>
- </image>
- </images>
- </configuration>
- <executions>
- <execution>
- <id>clean-images</id>
- <phase>pre-clean</phase>
- <goals>
- <goal>remove</goal>
- </goals>
- <configuration>
- <removeAll>true</removeAll>
- <image>music</image>
- </configuration>
- </execution>
- <execution>
- <id>generate-images</id>
- <phase>package</phase>
- <goals>
- <goal>build</goal>
- </goals>
- </execution>
- <execution>
- <id>push-images</id>
- <phase>deploy</phase>
- <goals>
- <goal>push</goal>
- </goals>
- <configuration>
- <image>music</image>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
- <distributionManagement>
- <repository>
- <id>ecomp-releases</id>
- <name>Release Repository</name>
- <url>${nexusproxy}/${releaseNexusPath}</url>
- </repository>
- <snapshotRepository>
- <id>ecomp-snapshots</id>
- <name>Snapshot Repository</name>
- <url>${nexusproxy}/${snapshotNexusPath}</url>
- </snapshotRepository>
- <!-- added for javadoc -->
- <site>
- <id>ecomp-site</id>
- <url>dav:${nexusproxy}${sitePath}</url>
- </site>
- </distributionManagement>
+ <profiles>
+ <profile>
+ <id>docker</id>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>io.fabric8</groupId>
+ <artifactId>docker-maven-plugin</artifactId>
+ <version>0.19.1</version>
+ <configuration>
+ <verbose>true</verbose>
+ <apiVersion>1.23</apiVersion>
+ <registry>nexus3.onap.org:10003</registry>
+ <images>
+ <!-- MUSIC War -->
+ <image>
+ <name>music</name>
+ <alias>docker_music</alias>
+ <build>
+ <cleanup>true</cleanup>
+ <tags>
+ <tag>${docker.tag}</tag>
+ <tag>${docker.latest.tag}</tag>
+ </tags>
+ <dockerFileDir>${project.basedir}</dockerFileDir>
+ <assembly>
+ <descriptorRef>artifact</descriptorRef>
+ </assembly>
+ </build>
+ </image>
+ </images>
+ </configuration>
+ <executions>
+ <execution>
+ <id>clean-images</id>
+ <phase>pre-clean</phase>
+ <goals>
+ <goal>remove</goal>
+ </goals>
+ <configuration>
+ <removeAll>true</removeAll>
+ <image>music</image>
+ </configuration>
+ </execution>
+ <execution>
+ <id>generate-images</id>
+ <phase>package</phase>
+ <goals>
+ <goal>build</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>push-images</id>
+ <phase>deploy</phase>
+ <goals>
+ <goal>push</goal>
+ </goals>
+ <configuration>
+ <image>music</image>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+ <distributionManagement>
+ <repository>
+ <id>ecomp-releases</id>
+ <name>Release Repository</name>
+ <url>${nexusproxy}/${releaseNexusPath}</url>
+ </repository>
+ <snapshotRepository>
+ <id>ecomp-snapshots</id>
+ <name>Snapshot Repository</name>
+ <url>${nexusproxy}/${snapshotNexusPath}</url>
+ </snapshotRepository>
+ <!-- added for javadoc -->
+ <site>
+ <id>ecomp-site</id>
+ <url>dav:${nexusproxy}${sitePath}</url>
+ </site>
+ </distributionManagement>
</project>
diff --git a/src/main/java/org/onap/music/client/MusicClient.java b/src/main/java/org/onap/music/client/MusicClient.java
deleted file mode 100644
index e67c98a4..00000000
--- a/src/main/java/org/onap/music/client/MusicClient.java
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * ===================================================================
- * 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.client;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import org.onap.music.datastore.jsonobjects.JsonInsert;
-import org.onap.music.datastore.jsonobjects.JsonKeySpace;
-import org.onap.music.datastore.jsonobjects.JsonTable;
-import org.onap.music.eelf.logging.EELFLoggerDelegate;
-import org.onap.music.lockingservice.MusicLockingService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import com.datastax.driver.core.Cluster;
-import com.datastax.driver.core.ColumnDefinitions;
-import com.datastax.driver.core.ColumnDefinitions.Definition;
-import com.datastax.driver.core.ConsistencyLevel;
-import com.datastax.driver.core.DataType;
-import com.datastax.driver.core.KeyspaceMetadata;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.SimpleStatement;
-import com.datastax.driver.core.Statement;
-import com.datastax.driver.core.TableMetadata;
-import com.datastax.driver.core.querybuilder.Clause;
-import com.datastax.driver.core.querybuilder.Delete;
-import com.datastax.driver.core.querybuilder.QueryBuilder;
-import com.datastax.driver.core.querybuilder.Select;
-
-/**
- * A MUSIC client that talks directly to Cassandra/ZooKeeper. This was taken, and slightly modified,
- * from the REST version of the code.
- *
- * @author Robert Eby
- */
-public class MusicClient {
- private EELFLoggerDelegate LOG = EELFLoggerDelegate.getLogger(MusicClient.class);
-
- private final String[] music_hosts; // array of hosts in the music cluster
- private Cluster cluster; // MUSIC Cassandra cluster
- private Session session; // MUSIC Cassandra session
- private MusicLockingService mls; // ZooKeeper
- private final Set<String> lockNames;// set of active lock names
-
- /**
- * Create a MUSIC client that talks to MUSIC on localhost.
- */
- public MusicClient() {
- this("127.0.0.1");
- }
-
- /**
- * Create a MUSIC client that talks to MUSIC on a remote host. The string <i>hosts</i> is a
- * comma-separated list of IP addresses for remote instances of Cassandra/ZooKeeper.
- *
- * @param hosts the list of hostnames
- */
- public MusicClient(String hosts) {
- music_hosts = hosts.split(",");
- if (cluster == null) {
- LOG.debug("Initializing MUSIC Client with endpoints " + hosts);
- cluster = Cluster.builder().addContactPoints(music_hosts).build();
- }
- session = cluster.connect();
- mls = null;
- lockNames = new HashSet<String>();
- }
-
- /**
- * Close the connection to MUSIC.
- */
- public void close() {
- if (session != null) {
- session.close();
- session = null;
- }
- if (cluster != null) {
- cluster.close();
- cluster = null;
- }
- }
-
- /**
- * Be sure to close the connection to MUSIC when this object is GC-ed.
- */
- @Override
- protected void finalize() {
- close();
- }
-
- /**
- * Return a String representation of the music hosts used by this object.
- *
- * @return the string
- */
- @Override
- public String toString() {
- List<String> t = Arrays.asList(music_hosts);
- return "MUSIC hosts=" + t.toString();
- }
-
- /**
- * Create a lock.
- *
- * @see org.onap.music.lockingservice.MusicLockingService#createLock(String)
- * @param lockName the lock name
- * @return FILL IN
- */
- public String createLock(String lockName) {
- String ln = "/" + lockName;
- synchronized (lockNames) {
- lockNames.add(ln);
- }
- return getLockingService().createLockId(ln);
- }
-
- /**
- * Acquire a lock.
- *
- * @see org.onap.music.lockingservice.MusicLockingService#lock(String)
- * @param lockName the lock name
- * @return FILL IN
- */
- public boolean acquireLock(String lockName) {
- return getLockingService().isMyTurn(lockName);
- }
-
- /**
- * Get the lock holder.
- *
- * @see org.onap.music.lockingservice.MusicLockingService#currentLockHolder(String)
- * @param lockName the lock name
- * @return FILL IN
- */
- public String getLockHolder(String lockName) {
- return getLockingService().whoseTurnIsIt("/" + lockName);
- }
-
- /**
- * Unlock a lock.
- *
- * @see org.onap.music.lockingservice.MusicLockingService#unlock(String)
- * @param lockName the lock name
- */
- public void unlockLock(String lockName) {
- getLockingService().unlockAndDeleteId(lockName);
- }
-
- /**
- * Delete a lock.
- *
- * @see org.onap.music.lockingservice.MusicLockingService#deleteLock(String)
- * @param lockName the lock name
- */
- public void deleteLock(String lockName) {
- String ln = "/" + lockName;
- synchronized (lockNames) {
- lockNames.remove(ln);
- }
- getLockingService().deleteLock(ln);
- }
-
- /**
- * Delete all locks.
- *
- * @see org.onap.music.lockingservice.MusicLockingService#deleteLock(String)
- * @return true
- */
- public boolean deleteAllLocks() {
- synchronized (lockNames) {
- for (String lockName : lockNames) {
- deleteLock(lockName);
- }
- lockNames.clear();
- }
- return true;
- }
-
- /**
- * Create a keyspace using the default replication configuration.
- *
- * @param keyspaceName the name of the keyspace
- * @return always true currently
- * @throws Exception Cassandra exceptions are passed through
- */
- public boolean createKeyspace(String keyspaceName) throws Exception {
- Map<String, Object> repl = new HashMap<String, Object>();
- repl.put("class", "SimpleStrategy");
- repl.put("replication_factor", 1);
- Map<String, String> consistencyInfo = Collections.singletonMap("type", "eventual");
- JsonKeySpace jsonKp = new JsonKeySpace();
- jsonKp.setConsistencyInfo(consistencyInfo);
- jsonKp.setDurabilityOfWrites("true");
- jsonKp.setReplicationInfo(repl);
- return createKeyspace(keyspaceName, jsonKp);
- }
-
- public boolean createKeyspace(String keyspaceName, JsonKeySpace kspObject) throws Exception {
- String consistency = extractConsistencyInfo(keyspaceName, kspObject.getConsistencyInfo());
- Map<String, Object> replicationInfo = kspObject.getReplicationInfo();
- String durability = "";
- if (kspObject.getDurabilityOfWrites() != null)
- durability = " AND durable_writes = " + kspObject.getDurabilityOfWrites();
- String query = String.format(
- "CREATE KEYSPACE IF NOT EXISTS %s WITH replication = { %s } %s;",
- keyspaceName, jsonMaptoSqlString(replicationInfo, ","), durability);
- LOG.info(EELFLoggerDelegate.applicationLogger,query);
- executeCreateQuery(query, consistency);
- return true;
- }
-
- public boolean dropKeyspace(String keyspaceName, JsonKeySpace kspObject) throws Exception {
- String consistency = extractConsistencyInfo(keyspaceName, kspObject.getConsistencyInfo());
- String query = String.format("DROP KEYSPACE %s;", keyspaceName);
- LOG.info(EELFLoggerDelegate.applicationLogger,query);
- executeCreateQuery(query, consistency);
- return false;
- }
-
- public boolean createTable(String tablename, Map<String, String> cols) throws Exception {
- JsonTable tableObj = new JsonTable();
- Map<String, String> map = new HashMap<String, String>(); // This should be in the
- // consutructor!
- map.put("type", "eventual");
- tableObj.setConsistencyInfo(map);
- return createTable(tablename, cols, tableObj);
- }
-
- public boolean createTable(String tablename, Map<String, String> cols, JsonTable tableObj)
- throws Exception {
- // Note: https://docs.datastax.com/en/cql/3.0/cql/cql_reference/create_table_r.html
-
- // first read the information about the table fields
- StringBuilder fields = new StringBuilder();
- String prefix = "";
- for (String key : cols.keySet()) {
- fields.append(prefix).append(key).append(" ").append(cols.get(key));
- prefix = ", ";
- }
-
- String query = String.format("CREATE TABLE IF NOT EXISTS %s (%s);", tablename,
- fields.toString());
-
- LOG.debug(query);
- String consistency = extractConsistencyInfo(tablename, tableObj.getConsistencyInfo());
- executeCreateQuery(query, consistency);
- return false;
- }
-
- public boolean dropTable(String name) {
- // TODO
- return false;
- }
-
- public boolean insertRow(String name, Map<String, Object> valuesMap) throws Exception {
- Map<String, String> consistencyInfo = Collections.singletonMap("type", "eventual");
- return insertRow(name, valuesMap, consistencyInfo, new JsonInsert());
- }
-
- public boolean insertRow(String tablename, Map<String, Object> valuesMap,
- Map<String, String> consistencyInfo, JsonInsert insObj) throws Exception {
- // Note: https://docs.datastax.com/en/cql/3.0/cql/cql_reference/insert_r.html
- String[] parts = tablename.split("\\.");
- KeyspaceMetadata ks = cluster.getMetadata().getKeyspace(parts[0]);
- TableMetadata tableInfo = ks.getTable(parts[1]);
-
- StringBuilder fields = new StringBuilder();
- StringBuilder values = new StringBuilder();
- String prefix = "";
- for (String key : valuesMap.keySet()) {
- fields.append(prefix).append(key);
- Object valueObj = valuesMap.get(key);
- DataType colType = tableInfo.getColumn(key).getType();
- values.append(prefix).append(convertToSqlDataType(colType, valueObj));
- prefix = ", ";
- }
-
- String suffix = getTTLSuffix(insObj);
- String query = String.format("INSERT INTO %s (%s) VALUES (%s)%s;", tablename,
- fields.toString(), values.toString(), suffix);
- LOG.info(EELFLoggerDelegate.applicationLogger,query);
-
- String consistency = extractConsistencyInfo(tablename, consistencyInfo);
- executeCreateQuery(query, consistency);
- return false;
- }
-
- public boolean lockRow(String name, Map<String, String> cols) {
- // TODO
- return false;
- }
-
- /**
- * Select ALL rows in the table.
- *
- * @param tablename the name of the table
- * @return a list of maps, one map per row
- */
- public List<Map<String, Object>> selectRows(final String tablename) {
- return selectRows(tablename, new HashMap<String, String>());
- }
-
- public List<Map<String, Object>> selectRows(final String tablename, Map<String, String> cols) {
- String ns = "";
- String tbl = tablename;
- int ix = tbl.indexOf('.');
- if (ix >= 0) {
- ns = tablename.substring(0, ix);
- tbl = tablename.substring(ix + 1);
- }
- Select sel = QueryBuilder.select().all().from(ns, tbl);
- Statement stmt = sel;
- if (cols.size() == 1) {
- // only handles 1 WHERE value right now
- String k = cols.keySet().iterator().next();
- Clause eqclause = QueryBuilder.eq(k, cols.get(k));
- stmt = sel.where(eqclause);
- }
- ResultSet resultset = session.execute(stmt);
- List<Map<String, Object>> results = new ArrayList<Map<String, Object>>();
- for (Row row : resultset) {
- Map<String, Object> map = new HashMap<String, Object>();
- for (Definition definition : row.getColumnDefinitions()) {
- map.put(definition.getName(),
- readRow(row, definition.getName(), definition.getType()));
- }
- results.add(map);
- }
- return results;
- }
-
- private Object readRow(final Row row, final String name, final DataType colType) {
- switch (colType.getName()) {
- case BIGINT:
- return row.getLong(name);
- case BOOLEAN:
- return row.getBool(name);
- case DOUBLE:
- return row.getDouble(name);
- case FLOAT:
- return row.getFloat(name);
- case INT:
- return row.getInt(name);
- case MAP:
- return row.getMap(name, String.class, String.class);
- case UUID:
- return row.getUUID(name);
- case TEXT:
- case VARCHAR:
- return row.getString(name);
- case VARINT:
- return row.getVarint(name);
- // These are not supported right now....
- // ASCII
- // BLOB
- // COUNTER
- // CUSTOM
- // DECIMAL
- // INET
- // LIST
- // SET
- // TIMESTAMP
- // TIMEUUID
- // TUPLE
- // UDT
- default:
- return null;
- }
- }
-
- @Deprecated
- public List<Map<String, String>> OLDselectRows(String tablename, Map<String, String> cols) {
- String query = String.format("SELECT * FROM %s", tablename);
- if (cols.size() > 0) {
- // add WHERE clause
- // String[] parts = tablename.split("\\.");
- // KeyspaceMetadata ks = cluster.getMetadata().getKeyspace(parts[0]);
- // TableMetadata tableInfo = ks.getTable(parts[1]);
- String whereclause = " WHERE";
- String prefix = "";
- for (String key : cols.keySet()) {
- String val = cols.get(key);
- // DataType colType = tableInfo.getColumn(key).getType();
- whereclause = String.format("%s%s %s = '%s'", whereclause, prefix, key, val);
- prefix = " AND";
- }
- query += whereclause;
- }
- LOG.debug(query);
- ResultSet resultset = session.execute(query);
- List<Map<String, String>> results = new ArrayList<Map<String, String>>();
- for (Row row : resultset) {
- ColumnDefinitions colInfo = row.getColumnDefinitions();
- Map<String, String> map = new HashMap<String, String>();
- for (Definition definition : colInfo) {
- // map.put(definition.getName(), (String)MusicDataStore.readRow(row,
- // definition.getName(), definition.getType()));
- }
- results.add(map);
- }
- return results;
- }
-
- public void updateRows(String tablename, Map<String, String> cols, Map<String, Object> vals)
- throws Exception {
- Map<String, String> consistencyInfo = Collections.singletonMap("type", "eventual");
- updateRows(tablename, cols, vals, consistencyInfo, new JsonInsert());
- }
-
- public void updateRows(String tablename, Map<String, String> cols, Map<String, Object> vals,
- Map<String, String> consistencyInfo, JsonInsert insObj) throws Exception {
- // https://docs.datastax.com/en/cql/3.0/cql/cql_reference/update_r.html
-
- // obtain the field value pairs of the update
- String[] parts = tablename.split("\\.");
- KeyspaceMetadata ks = cluster.getMetadata().getKeyspace(parts[0]);
- TableMetadata tableInfo = ks.getTable(parts[1]);
-
- StringBuilder fields = new StringBuilder();
- String prefix = "";
- for (String key : vals.keySet()) {
- Object valueObj = vals.get(key);
- String valueString = convertToSqlDataType(tableInfo.getColumn(key).getType(), valueObj);
- fields.append(prefix).append(key).append(" = ").append(valueString);
- prefix = ", ";
- }
-
- // get the row specifier
- StringBuilder rows = new StringBuilder();
- String primaryKey = "";
- prefix = "";
- for (String key : cols.keySet()) {
- String indValue = cols.get(key);
- DataType colType = tableInfo.getColumn(key).getType();
- String formattedValue = convertToSqlDataType(colType, indValue);
- primaryKey = primaryKey + indValue;
- rows.append(prefix).append(key).append(" = ").append(formattedValue);
- prefix = " AND ";
- }
-
- String using = getTTLSuffix(insObj);
- String query = String.format("UPDATE %s%s SET %s WHERE %s;", tablename, using,
- fields.toString(), rows.toString());
- LOG.debug(query);
-
- String consistency = extractConsistencyInfo(tablename, consistencyInfo);
- executeCreateQuery(query, consistency);
- }
-
- public void deleteRows(String tablename, Map<String, String> cols) {
- String ns = "";
- String tbl = tablename;
- int ix = tbl.indexOf('.');
- if (ix >= 0) {
- ns = tablename.substring(0, ix);
- tbl = tablename.substring(ix + 1);
- }
- Delete stmt = QueryBuilder.delete().from(ns, tbl);
- if (cols.size() == 1) {
- // only handles 1 WHERE value right now
- String k = cols.keySet().iterator().next();
- Clause eqclause = QueryBuilder.eq(k, cols.get(k));
- session.execute(stmt.where(eqclause));
- } else {
- session.execute(stmt);
- }
- }
-
- private String getTTLSuffix(JsonInsert insObj) {
- String ttl = insObj.getTtl();
- String timestamp = insObj.getTimestamp();
- if (ttl != null && ttl.length() > 0) {
- if (timestamp != null && timestamp.length() > 0) {
- return " USING TTL " + ttl + " AND TIMESTAMP " + timestamp;
- } else {
- return " USING TTL " + ttl;
- }
- } else if (timestamp != null && timestamp.length() > 0) {
- return " USING TIMESTAMP " + timestamp;
- }
- return "";
- }
-
- private MusicLockingService getLockingService() {
- if (mls == null) {
- mls = new MusicLockingService(music_hosts[0]);
- }
- return mls;
- }
-
- private String extractConsistencyInfo(String key, Map<String, String> consistencyInfo)
- throws Exception {
- String consistency = "";
- if (consistencyInfo.get("type").equalsIgnoreCase("atomic")) {
- String lockId = consistencyInfo.get("lockId");
- String lockName = lockId.substring(lockId.indexOf("$") + 1);
- lockName = lockName.substring(0, lockName.indexOf("$"));
-
- // first ensure that the lock name is correct before seeing if it has access
- if (!lockName.equalsIgnoreCase(key))
- throw new Exception("THIS LOCK IS NOT FOR THE KEY: " + key);
-
- String lockStatus = getLockingService().isMyTurn(lockId) + "";
- if (lockStatus.equalsIgnoreCase("false"))
- throw new Exception("YOU DO NOT HAVE THE LOCK");
- return "atomic";
- }
- if (consistencyInfo.get("type").equalsIgnoreCase("eventual"))
- return "eventual";
- throw new Exception("Consistency type " + consistency + " unknown!!");
- }
-
- // utility function to parse json map into sql like string
- private String jsonMaptoSqlString(Map<String, Object> jMap, String lineDelimiter) {
- String sql = "";
- String prefix = "";
- for (Map.Entry<String, Object> entry : jMap.entrySet()) {
- Object ot = entry.getValue();
- String value = ot + "";
- if (ot instanceof String) {
- value = "'" + value + "'";
- }
- sql = String.format("%s%s'%s': %s", sql, prefix, entry.getKey(), value);
- prefix = lineDelimiter;
- }
- return sql;
- }
-
- private String convertToSqlDataType(DataType type, Object valueObj) {
- switch (type.getName()) {
- case TEXT:
- String t = valueObj.toString();
- t = t.replaceAll("'", "''");
- return "'" + t + "'";
- case MAP:
- @SuppressWarnings("unchecked")
- Map<String, Object> otMap = (Map<String, Object>) valueObj;
- return "{" + jsonMaptoSqlString(otMap, ",") + "}";
- default:
- case UUID:
- return valueObj.toString();
- }
- }
-
- private void executeCreateQuery(String query, String consistency) throws Exception {
- Statement statement = new SimpleStatement(query);
- if (consistency.equalsIgnoreCase("atomic"))
- statement.setConsistencyLevel(ConsistencyLevel.ALL);
- else if (consistency.equalsIgnoreCase("eventual"))
- statement.setConsistencyLevel(ConsistencyLevel.ONE);
- else
- throw new Exception("Consistency level " + consistency + " unknown!!");
- session.execute(statement);
- }
-}
diff --git a/src/main/java/org/onap/music/client/MusicRestClient.java b/src/main/java/org/onap/music/client/MusicRestClient.java
deleted file mode 100644
index 93a2e12b..00000000
--- a/src/main/java/org/onap/music/client/MusicRestClient.java
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * ============LICENSE_START==========================================
- * org.onap.music
- * ===================================================================
- * Copyright (c) 2017 AT&T Intellectual Property
- * ===================================================================
- * 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.client;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-import javax.ws.rs.core.MediaType;
-import org.onap.music.datastore.jsonobjects.JsonDelete;
-import org.onap.music.datastore.jsonobjects.JsonInsert;
-import org.onap.music.datastore.jsonobjects.JsonKeySpace;
-import org.onap.music.datastore.jsonobjects.JsonTable;
-import org.onap.music.main.MusicUtil;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.json.JSONConfiguration;
-
-public class MusicRestClient {
- String[] musicNodes;
-
- public MusicRestClient(String[] musicNodes) {
- this.musicNodes = musicNodes;
- }
-
- public MusicRestClient(String oneMusicNode) {
- musicNodes = new String[1];
- this.musicNodes[0] = oneMusicNode;
- }
-
- public String getMusicNodeURL() {
- String musicurl = "http://" + getMusicNodeIp() + ":8080/MUSIC/rest";
- return musicurl;
- }
-
- private String getMusicNodeIp() {
- Random r = new Random();
- int index = r.nextInt(musicNodes.length);
- return musicNodes[index];
- }
-
- public void createKeyspace(String keyspaceName) {
- Map<String, Object> replicationInfo = new HashMap<String, Object>();
- replicationInfo.put("class", "SimpleStrategy");
- replicationInfo.put("replication_factor", 1);
- String durabilityOfWrites = "false";
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "eventual");
- org.onap.music.datastore.jsonobjects.JsonKeySpace jsonKp = new JsonKeySpace();
- jsonKp.setConsistencyInfo(consistencyInfo);
- jsonKp.setDurabilityOfWrites(durabilityOfWrites);
- jsonKp.setReplicationInfo(replicationInfo);
-
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
-
- WebResource webResource = client.resource(getMusicNodeURL() + "/keyspaces/" + keyspaceName);
-
- ClientResponse response = webResource.accept("application/json").type("application/json")
- .post(ClientResponse.class, jsonKp);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
-
- }
-
- public void createStringMapTable(String keyspaceName, String tableName,
- Map<String, String> fields) {
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "eventual");
-
- JsonTable jtab = new JsonTable();
- jtab.setFields(fields);
- jtab.setConsistencyInfo(consistencyInfo);
-
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
- String url = getMusicNodeURL() + "/keyspaces/" + keyspaceName + "/tables/" + tableName;
- WebResource webResource = client.resource(url);
-
- ClientResponse response = webResource.accept("application/json").type("application/json")
- .post(ClientResponse.class, jtab);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
-
- }
-
- public void checkMusicVersion() {
- Client client = Client.create();
-
- WebResource webResource = client.resource(getMusicNodeURL() + "/version");
-
- ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);
-
- if (response.getStatus() != 200) {
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
- }
-
- String output = response.getEntity(String.class);
- }
-
- public void createRow(String keyspaceName, String tableName, Map<String, Object> values) {
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "eventual");
-
- JsonInsert jIns = new JsonInsert();
- jIns.setValues(values);
- jIns.setConsistencyInfo(consistencyInfo);
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
-
- String url = getMusicNodeURL() + "/keyspaces/" + keyspaceName + "/tables/" + tableName
- + "/rows";
- WebResource webResource = client.resource(url);
-
- ClientResponse response = webResource.accept("application/json").type("application/json")
- .post(ClientResponse.class, jIns);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus() + "url:"
- + url + "values:" + values);
-
-
- }
-
- private void basicUpdateRow(String keyspaceName, String tableName, String primaryKeyName,
- String primaryKeyValue, Map<String, Object> values,
- Map<String, String> consistencyInfo) {
- JsonInsert jIns = new JsonInsert();
- jIns.setValues(values);
- jIns.setConsistencyInfo(consistencyInfo);
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
- String url = getMusicNodeURL() + "/keyspaces/" + keyspaceName + "/tables/" + tableName
- + "/rows?" + primaryKeyName + "=" + primaryKeyValue;
- WebResource webResource = client.resource(url);
-
- ClientResponse response = webResource.accept("application/json").type("application/json")
- .put(ClientResponse.class, jIns);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus() + "url:"
- + url + " values:" + values);
-
- }
-
- public void updateEntry(String keyspaceName, String tableName, String primaryKeyName,
- String primaryKeyValue, Map<String, Object> values) {
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "eventual");
- basicUpdateRow(keyspaceName, tableName, primaryKeyName, primaryKeyValue, values,
- consistencyInfo);
- }
-
- public void deleteEntry(String keyspaceName, String tableName, String primaryKeyName,
- String primaryKeyValue) {
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "eventual");
-
- JsonDelete jDel = new JsonDelete();
- jDel.setConsistencyInfo(consistencyInfo);
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
- String url = getMusicNodeURL() + "/keyspaces/" + keyspaceName + "/tables/" + tableName
- + "/rows?" + primaryKeyName + "=" + primaryKeyValue;
- WebResource webResource = client.resource(url);
-
- ClientResponse response = webResource.accept("application/json").type("application/json")
- .delete(ClientResponse.class, jDel);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException(
- "Failed : HTTP error code : " + response.getStatus() + "url:" + url);
-
- }
-
- public Map<String, Object> readRow(String keyspaceName, String tableName, String primaryKeyName,
- String primaryKeyValue) {
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
- String url = getMusicNodeURL() + "/keyspaces/" + keyspaceName + "/tables/" + tableName
- + "/rows?" + primaryKeyName + "=" + primaryKeyValue;
- WebResource webResource = client.resource(url);
-
- ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
-
- Map<String, Object> output = response.getEntity(Map.class);
- return output;
- }
-
- public Map<String, Object> readAllRows(String keyspaceName, String tableName) {
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
- String url = getMusicNodeURL() + "/keyspaces/" + keyspaceName + "/tables/" + tableName
- + "/rows";
- WebResource webResource = client.resource(url);
-
- ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
-
- Map<String, Object> output = response.getEntity(Map.class);
- return output;
- }
-
-
- public void dropKeySpace(String keyspaceName) {
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "eventual");
-
- JsonKeySpace jsonKp = new JsonKeySpace();
- jsonKp.setConsistencyInfo(consistencyInfo);
-
- ClientConfig clientConfig = new DefaultClientConfig();
-
- clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-
- Client client = Client.create(clientConfig);
-
- WebResource webResource = client.resource(getMusicNodeURL() + "/keyspaces/" + keyspaceName);
-
- ClientResponse response =
- webResource.type("application/json").delete(ClientResponse.class, jsonKp);
-
- if (response.getStatus() < 200 || response.getStatus() > 299)
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
- }
-
- public String createLock(String primaryKeyValue) {
- Client client = Client.create();
- String msg = getMusicNodeURL() + "/locks/create/" + primaryKeyValue;
- WebResource webResource = client.resource(msg);
-
- WebResource.Builder wb = webResource.accept(MediaType.TEXT_PLAIN);
-
- ClientResponse response = wb.post(ClientResponse.class);
-
- if (response.getStatus() != 200) {
- throw new RuntimeException(
- "Failed : HTTP error code : " + response.getStatus() + "url:" + msg);
- }
-
- String output = response.getEntity(String.class);
-
- return output;
- }
-
- public boolean acquireLock(String lockId) {
- Client client = Client.create();
- String msg = getMusicNodeURL() + "/locks/acquire/" + lockId;
- WebResource webResource = client.resource(msg);
-
-
- WebResource.Builder wb = webResource.accept(MediaType.TEXT_PLAIN);
-
- ClientResponse response = wb.get(ClientResponse.class);
-
- if (response.getStatus() != 200) {
- throw new RuntimeException(
- "Failed : HTTP error code : " + response.getStatus() + "url:" + msg);
- }
-
- String output = response.getEntity(String.class);
- Boolean status = Boolean.parseBoolean(output);
- return status;
- }
-
- public void releaseLock(String lockId) {
- Client client = Client.create();
- WebResource webResource = client.resource(getMusicNodeURL() + "/locks/release/" + lockId);
-
- ClientResponse response = webResource.delete(ClientResponse.class);
-
-
- if (response.getStatus() != 204) {
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
- }
- }
-
-
- public void updateRowAtomically(String keyspaceName, String tableName, String primaryKeyName,
- String primaryKeyValue, Map<String, Object> values) {
- /*
- * create lock for the candidate. The music API dictates that the lock name must be of the
- * form keyspacename.tableName.primaryKeyName
- */
-
- String lockName = keyspaceName + "." + tableName + "." + primaryKeyValue;
- String lockId = createLock(lockName);
- while (acquireLock(lockId) != true);
-
-
- Map<String, String> consistencyInfo = new HashMap<String, String>();
- consistencyInfo.put("type", "atomic");
- consistencyInfo.put("lockId", lockId);
-
- basicUpdateRow(keyspaceName, tableName, primaryKeyName, primaryKeyValue, values,
- consistencyInfo);
-
- // release lock now that the operation is done
- releaseLock(lockId);
-
- }
-
- public String getMusicId() {
-
- Client client = Client.create();
-
- WebResource webResource = client.resource(getMusicNodeURL() + "/nodeId");
- ClientResponse response = webResource.accept("text/plain").get(ClientResponse.class);
-
- if (response.getStatus() != 200) {
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
- }
-
- String output = response.getEntity(String.class);
- return output;
- }
-
- public void deleteRowAtomically(String keyspaceName, String tableName, String primaryKeyName,
- String primaryKeyValue, Map<String, Object> values) {
-
- }
-
- public void deleteLock(String lockName) {
- Client client = Client.create();
- WebResource webResource = client.resource(getMusicNodeURL() + "/locks/delete/" + lockName);
-
- ClientResponse response = webResource.delete(ClientResponse.class);
-
-
- if (response.getStatus() != 204) {
- throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
- }
- }
-}
-
diff --git a/src/main/java/org/onap/music/main/MusicUtil.java b/src/main/java/org/onap/music/main/MusicUtil.java
index 317f2560..a31e33f9 100755
--- a/src/main/java/org/onap/music/main/MusicUtil.java
+++ b/src/main/java/org/onap/music/main/MusicUtil.java
@@ -56,7 +56,7 @@ public class MusicUtil {
private static String defaultMusicIp = "localhost";
private static boolean debug = true;
private static String version = "2.3.0";
- public static String musicRestIp = "localhost";
+ private static String musicRestIp = "localhost";
private static String musicPropertiesFilePath = "/opt/app/music/etc/music.properties";
private static long defaultLockLeasePeriod = 6000;
private static final String[] propKeys = new String[] { "zookeeper.host", "cassandra.host", "music.ip", "debug",
@@ -70,7 +70,7 @@ public class MusicUtil {
public static final String DEFAULTKEYSPACENAME = "TBD";
private static String cassName = "cassandra";
- private static String cassPwd = "cassandra";
+ private static String cassPwd;
private static String aafEndpointUrl = null;
/**
@@ -472,9 +472,9 @@ public class MusicUtil {
Map<String, HashMap<String, Object>> results = new HashMap<>();
HashMap<String, Object> tempMap = new HashMap<>();
Map<String, Object> result = new HashMap<>();
- result.put("Error Description", ex.getMessage());
- tempMap.put("Error", result);
- results.put("Result", tempMap);
+ result.put("error-description", ex.getMessage());
+ tempMap.put("error", result);
+ results.put("result", tempMap);
return results;
}
}
diff --git a/src/test/java/org/onap/music/benchmarks/MicroBenchMarks.java b/src/test/java/org/onap/music/benchmarks/MicroBenchMarks.java
index a9b40aec..c267d254 100644
--- a/src/test/java/org/onap/music/benchmarks/MicroBenchMarks.java
+++ b/src/test/java/org/onap/music/benchmarks/MicroBenchMarks.java
@@ -37,7 +37,7 @@ import com.sun.jersey.api.json.JSONConfiguration;
public class MicroBenchMarks {
final String keyspaceName = "shankarks";
- final String musicurl = "http://" + MusicUtil.musicRestIp + ":8080/MUSIC/rest/formal";
+ final String musicurl = "http://" + MusicUtil.getMusicRestIp() + ":8080/MUSIC/rest/formal";
final String userForGets = "shankarUserForGets";
public MicroBenchMarks() {
diff --git a/src/test/java/org/onap/music/unittests/JsonLockResponseTest.java b/src/test/java/org/onap/music/unittests/JsonLockResponseTest.java
new file mode 100644
index 00000000..cd5773dc
--- /dev/null
+++ b/src/test/java/org/onap/music/unittests/JsonLockResponseTest.java
@@ -0,0 +1,186 @@
+/*
+ * ============LICENSE_START==========================================
+ * org.onap.music
+ * ===================================================================
+ * Copyright (c) 2017 AT&T Intellectual Property
+ * ===================================================================
+ * 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.unittests;
+
+import static org.junit.Assert.*;
+import java.util.Map;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.music.lockingservice.MusicLockState;
+import org.onap.music.lockingservice.MusicLockState.LockStatus;
+import org.onap.music.main.ResultType;
+import org.onap.music.response.jsonobjects.JsonLockResponse;
+
+public class JsonLockResponseTest {
+
+ JsonLockResponse response = new JsonLockResponse(ResultType.SUCCESS);
+
+ @Test
+ public void error1() {
+ Boolean result = false;
+ response.setError("");
+ result = response.getError().equals("error1");
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void error() {
+ Boolean result = false;
+ response.setError("error1");
+ result = response.getError().equals("error1");
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void lock1() {
+ Boolean result = false;
+ response.setLock("");
+ result = response.getLock().equals("lock1");
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void lock() {
+ Boolean result = false;
+ response.setLock("lock1");
+ result = response.getLock().equals("lock1");
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void status1() {
+ Boolean result = false;
+ response.setStatus(null);
+ result = response.getStatus() == ResultType.SUCCESS;
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void status() {
+ Boolean result = false;
+ response.setStatus(ResultType.SUCCESS);
+ result = response.getStatus() == ResultType.SUCCESS;
+ assertTrue("Success",result);
+ }
+
+
+
+ @Test
+ public void lockHolder1() {
+ Boolean result = false;
+ response.setLockHolder("");
+ result = response.getLockHolder().equals("LockHolder");
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void lockHolder() {
+ Boolean result = false;
+ response.setLockHolder("LockHolder");
+ result = response.getLockHolder().equals("LockHolder");
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void lockLease1() {
+ Boolean result = false;
+ response.setLockLease("");
+ result = response.getLockLease().equals("lockLease");
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void lockLease() {
+ Boolean result = false;
+ response.setLockLease("lockLease");
+ result = response.getLockLease().equals("lockLease");
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void lockStatus1() {
+ Boolean result = false;
+ response.setLockStatus(null);
+ result = response.getLockStatus() == MusicLockState.LockStatus.LOCKED;
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void lockStatus() {
+ Boolean result = false;
+ response.setLockStatus(MusicLockState.LockStatus.LOCKED);
+ result = response.getLockStatus() == MusicLockState.LockStatus.LOCKED;
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void message1() {
+ Boolean result = false;
+ response.setMessage("");
+ result = response.getMessage().equals("message");
+ assertFalse("Success",result);
+ }
+
+ @Test
+ public void message() {
+ Boolean result = false;
+ response.setMessage("message");
+ result = response.getMessage().equals("message");
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void map() {
+ Boolean result = false;
+ response.setMessage("message");
+ response.setLockStatus(MusicLockState.LockStatus.LOCKED);
+ response.setLockHolder("LockHolder");
+ response.setLockLease("lockLease");
+ response.setStatus(ResultType.SUCCESS);
+ response.setLock("lock1");
+ response.setError("error1");
+ Map<String,Object> myMap = response.toMap();
+ result = myMap.containsKey("status");
+ System.out.println(response.toString());
+ assertTrue("Success",result);
+ }
+
+ @Test
+ public void map1() {
+ Boolean result = false;
+ response.setMessage(null);
+ response.setLockStatus(null);
+ response.setLockHolder(null);
+ response.setLockLease(null);
+ response.setStatus(null);
+ response.setLock(null);
+ response.setError(null);
+ Map<String,Object> myMap = response.toMap();
+ result = myMap.containsKey("error");
+ System.out.println(result);
+ assertFalse("Success",result);
+ }
+
+
+
+
+}
diff --git a/src/test/java/org/onap/music/unittests/JsonResponseTest.java b/src/test/java/org/onap/music/unittests/JsonResponseTest.java
new file mode 100644
index 00000000..55e5965e
--- /dev/null
+++ b/src/test/java/org/onap/music/unittests/JsonResponseTest.java
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START==========================================
+ * org.onap.music
+ * ===================================================================
+ * Copyright (c) 2017 AT&T Intellectual Property
+ * ===================================================================
+ * 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.unittests;
+
+import static org.junit.Assert.*;
+import java.util.Map;
+import org.junit.Test;
+import org.onap.music.response.jsonobjects.JsonResponse;
+
+public class JsonResponseTest {
+
+ JsonResponse result = null;
+
+ @Test
+ public void testJsonResponseBooleanStringString() {
+ result = new JsonResponse(true,"error","version");
+ assertEquals("error",result.getError());
+ }
+
+ @Test
+ public void testJsonResponse() {
+ result = new JsonResponse();
+ assertFalse(result.getStatus());
+ }
+
+ @Test
+ public void testStatus() {
+ result = new JsonResponse();
+ result.setStatus(true);
+ assertTrue(result.getStatus());
+ result = new JsonResponse(false,"error","version");
+ assertFalse(result.getStatus());
+ }
+
+ @Test
+ public void testError() {
+ result = new JsonResponse();
+ result.setError("error");
+ assertTrue(result.getError().equals("error"));
+ result.setError("");
+ assertFalse(result.getError().equals("error"));
+ }
+
+ @Test
+ public void testVersion() {
+ result = new JsonResponse();
+ result.setVersion("version");
+ assertTrue(result.getVersion().equals("version"));
+ result.setVersion("");
+ assertFalse(result.getVersion().equals("version"));
+ }
+
+ @Test
+ public void testToMap() {
+ result = new JsonResponse(true,"error","version");
+ Map<String,Object> myMap = result.toMap();
+ assertTrue(myMap.containsKey("status"));
+ result = new JsonResponse(false,"","");
+ myMap = result.toMap();
+ assertTrue(myMap.containsKey("status"));
+ }
+
+}
diff --git a/src/test/java/org/onap/music/unittests/MusicUtilTest.java b/src/test/java/org/onap/music/unittests/MusicUtilTest.java
new file mode 100644
index 00000000..35ec3791
--- /dev/null
+++ b/src/test/java/org/onap/music/unittests/MusicUtilTest.java
@@ -0,0 +1,217 @@
+/*
+ * ============LICENSE_START==========================================
+ * org.onap.music
+ * ===================================================================
+ * Copyright (c) 2017 AT&T Intellectual Property
+ * ===================================================================
+ * 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.unittests;
+
+import static org.junit.Assert.*;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import org.apache.cassandra.exceptions.PreparedQueryNotFoundException;
+import org.junit.Test;
+import org.onap.music.datastore.PreparedQueryObject;
+import org.onap.music.exceptions.MusicServiceException;
+import org.onap.music.main.MusicUtil;
+import com.datastax.driver.core.DataType;
+import javassist.CodeConverter.ArrayAccessReplacementMethodNames;
+
+public class MusicUtilTest {
+
+ @Test
+ public void testGetCassName() {
+ MusicUtil.setCassName("Cassandra");
+ assertTrue(MusicUtil.getCassName().equals("Cassandra"));
+ }
+
+ @Test
+ public void testGetCassPwd() {
+ MusicUtil.setCassPwd("Cassandra");
+ assertTrue(MusicUtil.getCassPwd().equals("Cassandra"));
+ }
+
+ @Test
+ public void testGetAafEndpointUrl() {
+ MusicUtil.setAafEndpointUrl("url");
+ assertEquals(MusicUtil.getAafEndpointUrl(),"url");
+ }
+
+ @Test
+ public void testGetMyId() {
+ MusicUtil.setMyId(1);
+ assertEquals(MusicUtil.getMyId(),1);
+ }
+
+ @Test
+ public void testGetAllIds() {
+ List<String> ids = new ArrayList<String>();
+ ids.add("1");
+ ids.add("2");
+ ids.add("3");
+ MusicUtil.setAllIds(ids);
+ assertEquals(MusicUtil.getAllIds().get(0),"1");
+ }
+
+ @Test
+ public void testGetPublicIp() {
+ MusicUtil.setPublicIp("10.0.0.1");
+ assertEquals(MusicUtil.getPublicIp(),"10.0.0.1");
+ }
+
+ @Test
+ public void testGetAllPublicIps() {
+ List<String> ips = new ArrayList<String>();
+ ips.add("10.0.0.1");
+ ips.add("10.0.0.2");
+ ips.add("10.0.0.3");
+ MusicUtil.setAllPublicIps(ips);
+ assertEquals(MusicUtil.getAllPublicIps().get(1),"10.0.0.2");
+ }
+
+ @Test
+ public void testGetPropkeys() {
+ assertEquals(MusicUtil.getPropkeys()[2],"music.ip");
+ }
+
+ @Test
+ public void testGetMusicRestIp() {
+ MusicUtil.setMusicRestIp("localhost");
+ assertEquals(MusicUtil.getMusicRestIp(),"localhost");
+ }
+
+ @Test
+ public void testGetMusicPropertiesFilePath() {
+ MusicUtil.setMusicPropertiesFilePath("filepath");
+ assertEquals(MusicUtil.getMusicPropertiesFilePath(),"filepath");
+ }
+
+ @Test
+ public void testGetDefaultLockLeasePeriod() {
+ MusicUtil.setDefaultLockLeasePeriod(5000);
+ assertEquals(MusicUtil.getDefaultLockLeasePeriod(),5000);
+ }
+
+ @Test
+ public void testIsDebug() {
+ MusicUtil.setDebug(true);
+ assertTrue(MusicUtil.isDebug());
+ }
+
+ @Test
+ public void testGetVersion() {
+ MusicUtil.setVersion("1.0.0");
+ assertEquals(MusicUtil.getVersion(),"1.0.0");
+ }
+
+ @Test
+ public void testGetMyZkHost() {
+ MusicUtil.setMyZkHost("10.0.0.2");
+ assertEquals(MusicUtil.getMyZkHost(),"10.0.0.2");
+ }
+
+ @Test
+ public void testGetMyCassaHost() {
+ MusicUtil.setMyCassaHost("10.0.0.2");
+ assertEquals(MusicUtil.getMyCassaHost(),"10.0.0.2");
+ }
+
+ @Test
+ public void testGetDefaultMusicIp() {
+ MusicUtil.setDefaultMusicIp("10.0.0.2");
+ assertEquals(MusicUtil.getDefaultMusicIp(),"10.0.0.2");
+ }
+
+// @Test
+// public void testGetTestType() {
+// fail("Not yet implemented"); // TODO
+// }
+
+ @Test
+ public void testIsValidQueryObject() {
+ PreparedQueryObject myQueryObject = new PreparedQueryObject();
+ myQueryObject.appendQueryString("select * from apple where type = ?");
+ myQueryObject.addValue("macintosh");
+ assertTrue(MusicUtil.isValidQueryObject(true,myQueryObject));
+
+ myQueryObject.appendQueryString("select * from apple");
+ assertTrue(MusicUtil.isValidQueryObject(false,myQueryObject));
+
+ myQueryObject.appendQueryString("select * from apple where type = ?");
+ assertFalse(MusicUtil.isValidQueryObject(true,myQueryObject));
+
+ myQueryObject = new PreparedQueryObject();
+ myQueryObject.appendQueryString("");
+ System.out.println("#######" + myQueryObject.getQuery().isEmpty());
+ assertFalse(MusicUtil.isValidQueryObject(false,myQueryObject));
+
+
+ }
+
+ @Test
+ public void testConvertToCQLDataType() {
+ Map<String,Object> myMap = new HashMap<String,Object>();
+ myMap.put("name","tom");
+ assertEquals(MusicUtil.convertToCQLDataType(DataType.varchar(),"Happy People"),"'Happy People'");
+ assertEquals(MusicUtil.convertToCQLDataType(DataType.uuid(),UUID.fromString("29dc2afa-c2c0-47ae-afae-e72a645308ab")),"29dc2afa-c2c0-47ae-afae-e72a645308ab");
+ assertEquals(MusicUtil.convertToCQLDataType(DataType.blob(),"Hi"),"Hi");
+ assertEquals(MusicUtil.convertToCQLDataType(DataType.map(DataType.varchar(),DataType.varchar()),myMap),"{'name':'tom'}");
+ }
+
+ @Test
+ public void testConvertToActualDataType() {
+ assertEquals(MusicUtil.convertToActualDataType(DataType.varchar(),"Happy People"),"Happy People");
+ assertEquals(MusicUtil.convertToActualDataType(DataType.uuid(),"29dc2afa-c2c0-47ae-afae-e72a645308ab"),UUID.fromString("29dc2afa-c2c0-47ae-afae-e72a645308ab"));
+ assertEquals(MusicUtil.convertToActualDataType(DataType.varint(),"1234"),BigInteger.valueOf(Long.parseLong("1234")));
+ assertEquals(MusicUtil.convertToActualDataType(DataType.bigint(),"123"),Long.parseLong("123"));
+ assertEquals(MusicUtil.convertToActualDataType(DataType.cint(),"123"),Integer.parseInt("123"));
+ assertEquals(MusicUtil.convertToActualDataType(DataType.cfloat(),"123.01"),Float.parseFloat("123.01"));
+ assertEquals(MusicUtil.convertToActualDataType(DataType.cdouble(),"123.02"),Double.parseDouble("123.02"));
+ assertEquals(MusicUtil.convertToActualDataType(DataType.cboolean(),"true"),Boolean.parseBoolean("true"));
+ Map<String,Object> myMap = new HashMap<String,Object>();
+ myMap.put("name","tom");
+ assertEquals(MusicUtil.convertToActualDataType(DataType.map(DataType.varchar(),DataType.varchar()),myMap),myMap);
+
+ }
+
+ @Test
+ public void testJsonMaptoSqlString() {
+ Map<String,Object> myMap = new HashMap<>();
+ myMap.put("name","tom");
+ myMap.put("value",5);
+ String result = MusicUtil.jsonMaptoSqlString(myMap,",");
+ assertTrue(result.contains("name"));
+ assertTrue(result.contains("value"));
+ }
+
+ @Test
+ public void testSetErrorResponse() {
+ Map<String,Object> myMap = new HashMap<>();
+ myMap.put("name","tom");
+ Map<String,HashMap<String,Object>> result = MusicUtil.setErrorResponse(new MusicServiceException("This is the error"));
+ Map<String,Object> testMap = (Map<String,Object>) result.get("result");
+ Map<String,Object> error = (Map<String,Object>) testMap.get("error");
+ assertTrue(error.containsKey("error-description"));
+ }
+
+}
diff --git a/src/test/java/org/onap/music/unittests/ResultTypeTest.java b/src/test/java/org/onap/music/unittests/ResultTypeTest.java
new file mode 100644
index 00000000..012629e0
--- /dev/null
+++ b/src/test/java/org/onap/music/unittests/ResultTypeTest.java
@@ -0,0 +1,43 @@
+/*
+ * ============LICENSE_START==========================================
+ * org.onap.music
+ * ===================================================================
+ * Copyright (c) 2017 AT&T Intellectual Property
+ * ===================================================================
+ * 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.unittests;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+import org.onap.music.main.ResultType;
+
+public class ResultTypeTest {
+
+ @Test
+ public void testResultType() {
+ assertEquals("SUCCESS",ResultType.SUCCESS.name());
+ assertEquals("FAILURE",ResultType.FAILURE.name());
+ }
+
+ @Test
+ public void testGetResult() {
+ assertEquals("Success",ResultType.SUCCESS.getResult());
+ assertEquals("Failure",ResultType.FAILURE.getResult());
+ }
+
+}
diff --git a/src/test/java/org/onap/music/unittests/ReturnTypeTest.java b/src/test/java/org/onap/music/unittests/ReturnTypeTest.java
new file mode 100644
index 00000000..c22b0155
--- /dev/null
+++ b/src/test/java/org/onap/music/unittests/ReturnTypeTest.java
@@ -0,0 +1,83 @@
+/*
+ * ============LICENSE_START==========================================
+ * org.onap.music
+ * ===================================================================
+ * Copyright (c) 2017 AT&T Intellectual Property
+ * ===================================================================
+ * 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.unittests;
+
+import static org.junit.Assert.*;
+import java.util.Map;
+import org.apache.tools.ant.filters.TokenFilter.ContainsString;
+import org.hamcrest.core.AnyOf;
+import org.junit.Test;
+import org.onap.music.main.ResultType;
+import org.onap.music.main.ReturnType;
+
+public class ReturnTypeTest {
+
+ @Test
+ public void testReturnType() {
+ ReturnType result = new ReturnType(ResultType.SUCCESS,"message");
+ assertEquals(result.getMessage(),"message");
+ assertEquals(result.getResult(),ResultType.SUCCESS);
+ }
+
+ @Test
+ public void testTimingInfo() {
+ ReturnType result = new ReturnType(ResultType.SUCCESS,"message");
+ result.setTimingInfo("123");
+ assertEquals(result.getTimingInfo(),"123");
+ }
+
+ @Test
+ public void testGetResult() {
+ ReturnType result = new ReturnType(ResultType.FAILURE,"message");
+ assertEquals(result.getResult(),ResultType.FAILURE);
+ }
+
+ @Test
+ public void testGetMessage() {
+ ReturnType result = new ReturnType(ResultType.SUCCESS,"message");
+ result.setMessage("NewMessage");
+ assertEquals(result.getMessage(),"NewMessage");
+ }
+
+ @Test
+ public void testToJson() {
+ ReturnType result = new ReturnType(ResultType.SUCCESS,"message");
+ String myJson = result.toJson();
+ assertTrue(myJson.contains("message"));
+ }
+
+ @Test
+ public void testToString() {
+ ReturnType result = new ReturnType(ResultType.SUCCESS,"message");
+ String test = result.toString();
+ assertTrue(test.contains("message"));
+ }
+
+ @Test
+ public void testToMap() {
+ ReturnType result = new ReturnType(ResultType.SUCCESS,"message");
+ Map<String, Object> myMap = result.toMap();
+ assertTrue(myMap.containsKey("message"));
+ }
+
+}
diff --git a/version.properties b/version.properties
index cc011b98..f4a16a7a 100644
--- a/version.properties
+++ b/version.properties
@@ -4,7 +4,7 @@
major=2
minor=4
-patch=11
+patch=12
base_version=${major}.${minor}.${patch}