diff --git a/pom.xml b/pom.xml
index 6427052..0f8702c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,11 @@
logback-classic
test
+
+ org.gcube.accounting
+ accounting-lib
+ test
+
diff --git a/src/main/java/org/gcube/documentstore/persistence/PersistencePostgreSQL.java b/src/main/java/org/gcube/documentstore/persistence/PersistencePostgreSQL.java
index d39ea34..3f7ceff 100644
--- a/src/main/java/org/gcube/documentstore/persistence/PersistencePostgreSQL.java
+++ b/src/main/java/org/gcube/documentstore/persistence/PersistencePostgreSQL.java
@@ -62,7 +62,7 @@ public class PersistencePostgreSQL extends PersistenceBackend {
StringBuffer values = new StringBuffer();
for(String key : keys) {
if(first) {
- sql.append(" ");
+ sql.append(" (");
values.append(" (");
first = false;
}else {
diff --git a/src/test/java/org/gcube/documentstore/persistence/ContextTest.java b/src/test/java/org/gcube/documentstore/persistence/ContextTest.java
new file mode 100644
index 0000000..7a1e91d
--- /dev/null
+++ b/src/test/java/org/gcube/documentstore/persistence/ContextTest.java
@@ -0,0 +1,106 @@
+/**
+ *
+ */
+package org.gcube.documentstore.persistence;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.gcube.common.authorization.client.Constants;
+import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
+import org.gcube.common.authorization.library.AuthorizationEntry;
+import org.gcube.common.authorization.library.provider.AuthorizationProvider;
+import org.gcube.common.authorization.library.provider.ClientInfo;
+import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
+import org.gcube.common.authorization.library.utils.Caller;
+import org.gcube.common.scope.api.ScopeProvider;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Luca Frosini (ISTI - CNR)
+ */
+public class ContextTest {
+
+ private static final Logger logger = LoggerFactory.getLogger(ContextTest.class);
+
+ protected static Properties properties;
+ protected static final String PROPERTIES_FILENAME = "token.properties";
+
+ public static final String PARENT_DEFAULT_TEST_SCOPE;
+ public static final String DEFAULT_TEST_SCOPE;
+ public static final String ALTERNATIVE_TEST_SCOPE;
+
+ public static final String DEFAULT_TEST_SCOPE_ANOTHER_USER;
+
+ static {
+ properties = new Properties();
+ InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(PROPERTIES_FILENAME);
+
+ try {
+ // load the properties file
+ properties.load(input);
+ } catch(IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ // PARENT_DEFAULT_TEST_SCOPE = "/pred4s"
+ // DEFAULT_TEST_SCOPE_NAME = PARENT_DEFAULT_TEST_SCOPE + "/preprod";
+ // ALTERNATIVE_TEST_SCOPE = DEFAULT_TEST_SCOPE_NAME + "/preVRE";
+
+
+ PARENT_DEFAULT_TEST_SCOPE = "/gcube";
+ DEFAULT_TEST_SCOPE = PARENT_DEFAULT_TEST_SCOPE + "/devNext";
+ ALTERNATIVE_TEST_SCOPE = DEFAULT_TEST_SCOPE + "/NextNext";
+
+ DEFAULT_TEST_SCOPE_ANOTHER_USER = "lucio.lelii_" + DEFAULT_TEST_SCOPE;
+
+ try {
+ setContextByName(DEFAULT_TEST_SCOPE);
+ } catch(Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static String getCurrentContextFullName() throws ObjectNotFound, Exception {
+ return getContextFullNameByToken(SecurityTokenProvider.instance.get());
+ }
+
+ public static String getContextFullNameByToken(String token) throws ObjectNotFound, Exception {
+ AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token);
+ String context = authorizationEntry.getContext();
+ logger.info("Context of token {} is {}", token, context);
+ return context;
+ }
+
+ public static void setContextByName(String fullContextName) throws ObjectNotFound, Exception {
+ String token = ContextTest.properties.getProperty(fullContextName);
+ setContext(token);
+ }
+
+ private static void setContext(String token) throws ObjectNotFound, Exception {
+ SecurityTokenProvider.instance.set(token);
+ AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token);
+ ClientInfo clientInfo = authorizationEntry.getClientInfo();
+ logger.debug("User : {} - Type : {}", clientInfo.getId(), clientInfo.getType().name());
+ String qualifier = authorizationEntry.getQualifier();
+ Caller caller = new Caller(clientInfo, qualifier);
+ AuthorizationProvider.instance.set(caller);
+ ScopeProvider.instance.set(getContextFullNameByToken(token));
+ }
+
+ @BeforeClass
+ public static void beforeClass() throws Exception {
+ setContextByName(DEFAULT_TEST_SCOPE);
+ }
+
+ @AfterClass
+ public static void afterClass() throws Exception {
+ SecurityTokenProvider.instance.reset();
+ ScopeProvider.instance.reset();
+ }
+
+}
diff --git a/src/test/java/org/gcube/documentstore/persistence/PersistencePostgreSQLTest.java b/src/test/java/org/gcube/documentstore/persistence/PersistencePostgreSQLTest.java
new file mode 100644
index 0000000..e84a53f
--- /dev/null
+++ b/src/test/java/org/gcube/documentstore/persistence/PersistencePostgreSQLTest.java
@@ -0,0 +1,78 @@
+/**
+ *
+ */
+package org.gcube.documentstore.persistence;
+
+import java.util.Calendar;
+
+import org.gcube.accounting.datamodel.UsageRecord;
+import org.gcube.accounting.datamodel.UsageRecord.OperationResult;
+import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
+import org.gcube.common.authorization.client.exceptions.ObjectNotFound;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Luca Frosini (ISTI - CNR)
+ */
+public class PersistencePostgreSQLTest extends ContextTest {
+
+ private static final Logger logger = LoggerFactory.getLogger(PersistencePostgreSQLTest.class);
+
+ protected UsageRecord getTestServiceUsageRecord() throws Exception {
+ AggregatedServiceUsageRecord serviceUsageRecord = new AggregatedServiceUsageRecord();
+ serviceUsageRecord.setAggregated(true);
+
+ Calendar creationTime = Calendar.getInstance();
+ serviceUsageRecord.setCreationTime(creationTime);
+
+ Calendar startTime = Calendar.getInstance();
+ serviceUsageRecord.setStartTime(startTime);
+
+ serviceUsageRecord.setCalledMethod("createResource");
+ serviceUsageRecord.setCallerHost("localhost");
+ serviceUsageRecord.setHost("localhost");
+ serviceUsageRecord.setConsumerId("luca.frosini");
+ serviceUsageRecord.setCallerQualifier("TOKEN");
+ serviceUsageRecord.setDuration((long) 100);
+
+ serviceUsageRecord.setMaxInvocationTime((long) 150);
+ serviceUsageRecord.setMinInvocationTime((long) 50);
+ serviceUsageRecord.setOperationCount(9);
+ serviceUsageRecord.setOperationResult(OperationResult.SUCCESS);
+ serviceUsageRecord.setScope(ContextTest.getCurrentContextFullName());
+
+ Calendar endTime = Calendar.getInstance();
+ endTime.add(Calendar.MINUTE, 5);
+ serviceUsageRecord.setEndTime(endTime);
+
+ serviceUsageRecord.setServiceClass("information-system");
+ serviceUsageRecord.setServiceName("resource-registry");
+
+ return serviceUsageRecord;
+ }
+
+ @Test
+ public void testSQLStatementString() throws Exception {
+ UsageRecord usageRecord = getTestServiceUsageRecord();
+ PersistencePostgreSQL persistencePostgreSQL = new PersistencePostgreSQL();
+ String sql = persistencePostgreSQL.getSQLInsertCommand(usageRecord);
+ logger.debug(sql);
+ }
+
+ @Test
+ public void persistenceIsPostgreSQL() throws ObjectNotFound, Exception {
+ logger.debug("Going to check if the Persistence is CouchBase");
+ PersistenceBackendFactory.setFallbackLocation(null);
+ String context = ContextTest.getCurrentContextFullName();
+ FallbackPersistenceBackend fallbackPersistenceBackend = PersistenceBackendFactory.createFallback(context);
+
+ PersistenceBackend persistenceBackend = PersistenceBackendFactory.rediscoverPersistenceBackend(fallbackPersistenceBackend, context);
+
+ Assert.assertTrue(persistenceBackend instanceof PersistencePostgreSQL);
+
+ }
+
+}
diff --git a/src/test/resources/.gitignore b/src/test/resources/.gitignore
new file mode 100644
index 0000000..9b2c262
--- /dev/null
+++ b/src/test/resources/.gitignore
@@ -0,0 +1,2 @@
+/token.properties
+/*.gcubekey
\ No newline at end of file
diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml
new file mode 100644
index 0000000..80378b8
--- /dev/null
+++ b/src/test/resources/logback-test.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file