refs #2211: Remove the use of ScopeProvider if any from document-store-lib-mongodb

https://support.d4science.org/issues/2211

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-publishing/document-store-lib--mongodb@124030 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2016-02-10 10:00:00 +00:00
parent b935a2c595
commit af89df01b2
4 changed files with 146 additions and 45 deletions

14
pom.xml
View File

@ -9,7 +9,7 @@
<groupId>org.gcube.data.publishing</groupId>
<artifactId>document-store-lib-mongodb</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>1.1.0-SNAPSHOT</version>
<name>Document Store MongoDB</name>
<description>Document Store MongoDB Implementation</description>
@ -45,28 +45,24 @@
<artifactId>reflections</artifactId>
<version>0.9.9-RC1</version>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.gcube.core</groupId> -->
<!-- <artifactId>common-scope</artifactId> -->
<!-- <version>[1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)</version> -->
<!-- </dependency> -->
<!-- Test Dependency -->
<dependency>
<groupId>org.gcube.accounting</groupId>
<artifactId>accounting-lib</artifactId>
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<version>[2.1.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.gcube.core</groupId>
<artifactId>common-encryption</artifactId>
<version>[1.0.2-SNAPSHOT, 2.0.0-SNAPSHOT)</version>
<version>[1.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.gcube.resources</groupId>
<artifactId>registry-publisher</artifactId>
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
<version>[1.0.0-SNAPSHOT,3.0.0-SNAPSHOT)</version>
<scope>test</scope>
</dependency>
<dependency>

View File

@ -4,21 +4,21 @@
package org.gcube.accounting.persistence;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.gcube.accounting.datamodel.BasicUsageRecord;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.resources.gcore.Resource;
import org.gcube.common.resources.gcore.Resources;
import org.gcube.common.resources.gcore.ServiceEndpoint;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.documentstore.persistence.PersistenceMongoDB;
import org.gcube.documentstore.persistence.PersistenceBackend;
import org.gcube.documentstore.persistence.PersistenceBackendFactory;
import org.gcube.documentstore.persistence.PersistenceMongoDB;
import org.gcube.informationsystem.publisher.RegistryPublisher;
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
import org.gcube.informationsystem.publisher.ScopedPublisher;
import org.gcube.informationsystem.publisher.exception.RegistryNotFoundException;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -31,10 +31,19 @@ public class PersistenceMongoDBTest {
private static final Logger logger = LoggerFactory.getLogger(PersistenceMongoDBTest.class);
@Before
public void before() throws Exception {
SecurityTokenProvider.instance.set(TestUtility.TOKEN);
}
@After
public void after(){
SecurityTokenProvider.instance.reset();
}
public static PersistenceBackend getPersistence(){
ScopeProvider.instance.set("/gcube/devNext");
PersistenceBackendFactory.setFallbackLocation(null);
return PersistenceBackendFactory.getPersistenceBackend(ScopeProvider.instance.get());
return PersistenceBackendFactory.getPersistenceBackend(BasicUsageRecord.getScopeFromToken());
}
@Test
@ -43,51 +52,53 @@ public class PersistenceMongoDBTest {
Assert.assertTrue(accountingPersistence instanceof PersistenceMongoDB);
}
private static void publishScopedResource(Resource resource, List<String> scopes) throws Exception {
private static void publishResource(Resource resource) throws Exception {
StringWriter stringWriter = new StringWriter();
Resources.marshal(resource, stringWriter);
ScopedPublisher scopedPublisher = RegistryPublisherFactory.scopedPublisher();
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
try {
logger.debug("Trying to publish to {}:\n{}", scopes, stringWriter);
scopedPublisher.create(resource, scopes);
logger.debug("Trying to publish to {}:\n{}", BasicUsageRecord.getScopeFromToken(), stringWriter);
registryPublisher.create(resource);
} catch (Exception e) {
logger.error("The resource was not published", e);
throw e;
}
}
private static void unPublishScopedResource(Resource resource, List<String> scopes) throws RegistryNotFoundException, Exception {
ScopedPublisher scopedPublisher = RegistryPublisherFactory.scopedPublisher();
String id = resource.id();
logger.debug("Trying to remove {} with ID {} from {}", resource.getClass().getSimpleName(), id, scopes);
scopedPublisher.remove(resource, scopes);
private static void unPublishResource(Resource resource) throws Exception {
//StringWriter stringWriter = new StringWriter();
//Resources.marshal(resource, stringWriter);
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
String id = resource.id();
logger.debug("Trying to remove {} with ID {} from {}",
resource.getClass().getSimpleName(), id,
BasicUsageRecord.getScopeFromToken());
registryPublisher.remove(resource);
logger.debug("{} with ID {} removed successfully", resource.getClass().getSimpleName(), id);
}
public void testScopeRecheck() throws Exception {
final String vreScopeToUse = "/gcube/devsec/LucioVRE";
final String parentVREScopeToUse = "/gcube/devsec";
ScopeProvider.instance.set(vreScopeToUse);
ServiceEndpoint serviceEndpoint = null;
try {
AccountingPersistenceConfiguration persitenceConfiguration = new AccountingPersistenceConfiguration(PersistenceMongoDB.class);
serviceEndpoint = persitenceConfiguration.getServiceEndpoint(
AccountingPersistenceConfiguration.SERVICE_ENDPOINT_CATEGORY, AccountingPersistenceConfiguration.SERVICE_ENDPOINT_NAME,
PersistenceMongoDB.class);
List<String> scopes = new ArrayList<String>();
scopes.add(ScopeProvider.instance.get());
unPublishScopedResource(serviceEndpoint, scopes);
unPublishResource(serviceEndpoint);
} catch(IndexOutOfBoundsException e){
ScopeProvider.instance.set(parentVREScopeToUse);
SecurityTokenProvider.instance.set(TestUtility.PARENT_TOKEN);
AccountingPersistenceConfiguration persitenceConfiguration = new AccountingPersistenceConfiguration(PersistenceMongoDB.class);
serviceEndpoint = persitenceConfiguration.getServiceEndpoint(
AccountingPersistenceConfiguration.SERVICE_ENDPOINT_CATEGORY,
AccountingPersistenceConfiguration.SERVICE_ENDPOINT_NAME,
PersistenceMongoDB.class);
ScopeProvider.instance.set(vreScopeToUse);
SecurityTokenProvider.instance.set(TestUtility.TOKEN);
}
@ -98,12 +109,10 @@ public class PersistenceMongoDBTest {
}
logger.debug("Going to check First Time");
PersistenceBackend first = PersistenceBackendFactory.getPersistenceBackend(ScopeProvider.instance.get());
PersistenceBackend first = PersistenceBackendFactory.getPersistenceBackend(BasicUsageRecord.getScopeFromToken());
logger.debug("First {} : {}", PersistenceBackend.class.getSimpleName(), first);
List<String> scopes = new ArrayList<String>();
scopes.add(ScopeProvider.instance.get());
publishScopedResource(serviceEndpoint, scopes);
publishResource(serviceEndpoint);
startTime = Calendar.getInstance().getTimeInMillis();
endTime = startTime;
@ -112,7 +121,7 @@ public class PersistenceMongoDBTest {
}
logger.debug("Going to check Second Time");
PersistenceBackend second = PersistenceBackendFactory.getPersistenceBackend(ScopeProvider.instance.get());
PersistenceBackend second = PersistenceBackendFactory.getPersistenceBackend(BasicUsageRecord.getScopeFromToken());
logger.debug("Second {} : {}", PersistenceBackend.class.getSimpleName(), second);
Assert.assertNotEquals(first, second);

View File

@ -0,0 +1,86 @@
/**
*
*/
package org.gcube.accounting.persistence;
import java.io.StringWriter;
import org.gcube.common.authorization.client.Constants;
import org.gcube.common.authorization.library.AuthorizationEntry;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.common.resources.gcore.Resource;
import org.gcube.common.resources.gcore.Resources;
import org.gcube.informationsystem.publisher.RegistryPublisher;
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
import org.gcube.informationsystem.publisher.exception.RegistryNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class TestUtility {
public static final String TOKEN = "";
public static final String PARENT_TOKEN = "";
/**
* Logger
*/
private static Logger logger = LoggerFactory.getLogger(TestUtility.class);
public static String getScopeFromToken(){
String token = SecurityTokenProvider.instance.get();
AuthorizationEntry authorizationEntry;
try {
authorizationEntry = Constants.authorizationService().get(token);
} catch (Exception e) {
throw new RuntimeException(e);
}
String scope = authorizationEntry.getContext();
return scope;
}
/**
* Publish the provided resource on current scope
* @param resource to be published
* @throws RegistryNotFoundException if the Registry is not found so the
* resource has not be published
*/
public static void publishResource(Resource resource) throws Exception {
StringWriter stringWriter = new StringWriter();
Resources.marshal(resource, stringWriter);
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
try {
logger.debug("Trying to publish to {}:\n{}", getScopeFromToken(), stringWriter);
registryPublisher.create(resource);
} catch (Exception e) {
logger.error("The resource was not published", e);
throw e;
}
}
/**
* Remove the resource from IS from curretn scope
* @param resource to be unpublished
* @throws RegistryNotFoundException if the Registry is not found so the
* resource has not be published
*/
public static void unPublishResource(Resource resource) throws Exception {
//StringWriter stringWriter = new StringWriter();
//Resources.marshal(resource, stringWriter);
RegistryPublisher registryPublisher = RegistryPublisherFactory.create();
String id = resource.id();
logger.debug("Trying to remove {} with ID {} from {}", resource.getClass().getSimpleName(), id, getScopeFromToken());
registryPublisher.remove(resource);
logger.debug("{} with ID {} removed successfully", resource.getClass().getSimpleName(), id);
}
}

View File

@ -9,9 +9,12 @@ import org.bson.Document;
import org.gcube.accounting.datamodel.UsageRecord;
import org.gcube.accounting.datamodel.basetypes.AbstractStorageUsageRecord.OperationType;
import org.gcube.accounting.datamodel.basetypes.TestUsageRecord;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.accounting.persistence.TestUtility;
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
import org.gcube.documentstore.records.Record;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -24,9 +27,18 @@ public class PersistenceMongoDBTest {
private static final Logger logger = LoggerFactory.getLogger(PersistenceMongoDBTest.class);
@Before
public void before() throws Exception {
SecurityTokenProvider.instance.set(TestUtility.TOKEN);
}
@After
public void after(){
SecurityTokenProvider.instance.reset();
}
@Test
public void testJsonNodeUsageRecordConversions() throws Exception {
ScopeProvider.instance.set("/gcube/devNext");
Record record = TestUsageRecord.createTestServiceUsageRecordAutomaticScope();
logger.debug("UsageRecord : {}", record.toString());
Document document = PersistenceMongoDB.usageRecordToDocument(record);
@ -38,7 +50,6 @@ public class PersistenceMongoDBTest {
@Test
public void testJsonNodeUsageRecordConversionsWithNestedMap() throws Exception {
ScopeProvider.instance.set("/gcube/devNext");
Record record = TestUsageRecord.createTestTaskUsageRecordAutomaticScope();
logger.debug("UsageRecord : {}", record.toString());
Document document = PersistenceMongoDB.usageRecordToDocument(record);
@ -54,7 +65,6 @@ public class PersistenceMongoDBTest {
@Test
public void testConfiguration() throws Exception{
ScopeProvider.instance.set("/gcube/devNext");
URL url = new URL("http://mongo-test.d4science.org");
PersistenceBackendConfiguration persitenceConfiguration = PersistenceBackendConfiguration.getUnconfiguredInstance();