refs #200: Create accouting-lib library
https://support.d4science.org/issues/200 Fixing tests git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/accounting/accounting-lib@116497 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
c4cfd8b5a4
commit
3ca48b3441
5
pom.xml
5
pom.xml
|
@ -62,11 +62,6 @@
|
||||||
<artifactId>registry-publisher</artifactId>
|
<artifactId>registry-publisher</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.gcube.core</groupId>
|
|
||||||
<artifactId>common-smartgears</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
|
|
@ -115,15 +115,11 @@ public class PersistenceConfiguration {
|
||||||
return serviceEndpoints.get(0);
|
return serviceEndpoints.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String decrypt(String encrypted) throws Exception {
|
private static String decrypt(String encrypted, Key... key) throws Exception {
|
||||||
/*
|
|
||||||
Key key = null;
|
|
||||||
return StringEncrypter.getEncrypter().decrypt(encrypted, key);
|
return StringEncrypter.getEncrypter().decrypt(encrypted, key);
|
||||||
*/
|
|
||||||
return encrypted;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PersistenceConfiguration createPersistenceConfiguration(ServiceEndpoint serviceEndpoint) throws Exception{
|
private static PersistenceConfiguration createPersistenceConfiguration(ServiceEndpoint serviceEndpoint, Key... key) throws Exception{
|
||||||
PersistenceConfiguration persistenceConfiguration = new PersistenceConfiguration();
|
PersistenceConfiguration persistenceConfiguration = new PersistenceConfiguration();
|
||||||
Group<AccessPoint> accessPoints = serviceEndpoint.profile().accessPoints();
|
Group<AccessPoint> accessPoints = serviceEndpoint.profile().accessPoints();
|
||||||
for(AccessPoint accessPoint : accessPoints){
|
for(AccessPoint accessPoint : accessPoints){
|
||||||
|
@ -131,7 +127,7 @@ public class PersistenceConfiguration {
|
||||||
persistenceConfiguration.username = accessPoint.name();
|
persistenceConfiguration.username = accessPoint.name();
|
||||||
|
|
||||||
String encryptedPassword = accessPoint.password();
|
String encryptedPassword = accessPoint.password();
|
||||||
String password = decrypt(encryptedPassword);
|
String password = decrypt(encryptedPassword, key);
|
||||||
|
|
||||||
persistenceConfiguration.password = password;
|
persistenceConfiguration.password = password;
|
||||||
persistenceConfiguration.propertyMap = accessPoint.propertyMap();
|
persistenceConfiguration.propertyMap = accessPoint.propertyMap();
|
||||||
|
@ -146,9 +142,9 @@ public class PersistenceConfiguration {
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
protected static PersistenceConfiguration getPersistenceConfiguration(String scope, String persistenceClassName) throws Exception {
|
protected static PersistenceConfiguration getPersistenceConfiguration(String scope, String persistenceClassName, Key... key) throws Exception {
|
||||||
ServiceEndpoint serviceEndpoint = getServiceEndpoint(scope, persistenceClassName);
|
ServiceEndpoint serviceEndpoint = getServiceEndpoint(scope, persistenceClassName);
|
||||||
return createPersistenceConfiguration(serviceEndpoint);
|
return createPersistenceConfiguration(serviceEndpoint, key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,8 @@
|
||||||
package org.gcube.accounting.persistence;
|
package org.gcube.accounting.persistence;
|
||||||
|
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.util.ArrayList;
|
import java.security.Key;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import org.gcube.common.resources.gcore.Resource;
|
import org.gcube.common.resources.gcore.Resource;
|
||||||
import org.gcube.common.resources.gcore.Resources;
|
import org.gcube.common.resources.gcore.Resources;
|
||||||
|
@ -22,7 +21,9 @@ import org.gcube.informationsystem.publisher.AdvancedScopedPublisher;
|
||||||
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
|
import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
|
||||||
import org.gcube.informationsystem.publisher.ScopedPublisher;
|
import org.gcube.informationsystem.publisher.ScopedPublisher;
|
||||||
import org.gcube.informationsystem.publisher.exception.RegistryNotFoundException;
|
import org.gcube.informationsystem.publisher.exception.RegistryNotFoundException;
|
||||||
import org.gcube.smartgears.configuration.Mode;
|
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
||||||
|
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
||||||
|
import org.gcube.resources.discovery.icclient.ICFactory;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -38,6 +39,10 @@ public class PersistenceConfigurationTest {
|
||||||
public static final String PROFILE_DESCRIPTION = "This ServiceEndpoint contains the parameter to connect to DB to persist log accounting.";
|
public static final String PROFILE_DESCRIPTION = "This ServiceEndpoint contains the parameter to connect to DB to persist log accounting.";
|
||||||
public static final String RUNNING_ON = "http://localhost:5984";
|
public static final String RUNNING_ON = "http://localhost:5984";
|
||||||
|
|
||||||
|
public static final String LOAD_BALANCER = "loadBalancer";
|
||||||
|
|
||||||
|
public static final String READY = "READY";
|
||||||
|
|
||||||
public static final String TEST_VERSION = "1.0.0";
|
public static final String TEST_VERSION = "1.0.0";
|
||||||
public static final short[] VERSION_SLICES = new short[]{1,6,0,0};
|
public static final short[] VERSION_SLICES = new short[]{1,6,0,0};
|
||||||
|
|
||||||
|
@ -47,7 +52,9 @@ public class PersistenceConfigurationTest {
|
||||||
public static final String FAKE_USERNAME = "fakeusername";
|
public static final String FAKE_USERNAME = "fakeusername";
|
||||||
public static final String FAKE_PASSWORD = "fakepassword";
|
public static final String FAKE_PASSWORD = "fakepassword";
|
||||||
|
|
||||||
public static final String TEST_SCOPE = "/gcube/devsec";
|
public static final String[] SCOPES = new String[]{"/gcube", "/gcube/devsec"};
|
||||||
|
public static final String GCUBE_SCOPE = SCOPES[1];
|
||||||
|
public static final String GCUBE_DEVSEC_SCOPE = SCOPES[1];
|
||||||
|
|
||||||
public static final String DB_NAME_PROPERTY_NAME = "dbName";
|
public static final String DB_NAME_PROPERTY_NAME = "dbName";
|
||||||
public static final String DB_NAME_PROPERTY_VALUE = "accounting";
|
public static final String DB_NAME_PROPERTY_VALUE = "accounting";
|
||||||
|
@ -61,7 +68,7 @@ public class PersistenceConfigurationTest {
|
||||||
* @throws RegistryNotFoundException if the Registry is not found so the
|
* @throws RegistryNotFoundException if the Registry is not found so the
|
||||||
* resource has not be published
|
* resource has not be published
|
||||||
*/
|
*/
|
||||||
private static void publishScopedResource(Resource resource, List<String> scopes) throws RegistryNotFoundException, Exception {
|
private static void publishScopedResource(Resource resource, List<String> scopes) throws Exception {
|
||||||
StringWriter stringWriter = new StringWriter();
|
StringWriter stringWriter = new StringWriter();
|
||||||
Resources.marshal(resource, stringWriter);
|
Resources.marshal(resource, stringWriter);
|
||||||
|
|
||||||
|
@ -69,7 +76,7 @@ public class PersistenceConfigurationTest {
|
||||||
try {
|
try {
|
||||||
logger.debug("Trying to publish to {}:\n{}", scopes, stringWriter);
|
logger.debug("Trying to publish to {}:\n{}", scopes, stringWriter);
|
||||||
scopedPublisher.create(resource, scopes);
|
scopedPublisher.create(resource, scopes);
|
||||||
} catch (RegistryNotFoundException e) {
|
} catch (Exception e) {
|
||||||
logger.error("The resource was not published", e);
|
logger.error("The resource was not published", e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
@ -124,13 +131,18 @@ public class PersistenceConfigurationTest {
|
||||||
|
|
||||||
Runtime runtime = profile.newRuntime();
|
Runtime runtime = profile.newRuntime();
|
||||||
runtime.hostedOn(RUNNING_ON);
|
runtime.hostedOn(RUNNING_ON);
|
||||||
runtime.status(Mode.online.toString());
|
runtime.status(READY);
|
||||||
|
|
||||||
|
Group<AccessPoint> accessPoints = profile.accessPoints();
|
||||||
|
|
||||||
AccessPoint accessPointElement = new AccessPoint();
|
AccessPoint accessPointElement = new AccessPoint();
|
||||||
|
accessPoints.add(accessPointElement);
|
||||||
accessPointElement.description(DESCRIPTION);
|
accessPointElement.description(DESCRIPTION);
|
||||||
|
|
||||||
accessPointElement.credentials(FAKE_USERNAME, FAKE_PASSWORD);
|
accessPointElement.credentials(FAKE_USERNAME, FAKE_PASSWORD);
|
||||||
|
|
||||||
|
accessPointElement.address(RUNNING_ON);
|
||||||
|
accessPointElement.name(LOAD_BALANCER);
|
||||||
|
|
||||||
Group<Property> properties = accessPointElement.properties();
|
Group<Property> properties = accessPointElement.properties();
|
||||||
|
|
||||||
Property className = new Property();
|
Property className = new Property();
|
||||||
|
@ -148,15 +160,46 @@ public class PersistenceConfigurationTest {
|
||||||
return serviceEndpoint;
|
return serviceEndpoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void clean(){
|
||||||
|
ScopeProvider.instance.set(GCUBE_DEVSEC_SCOPE);
|
||||||
|
|
||||||
|
SimpleQuery query = ICFactory.queryFor(ServiceEndpoint.class)
|
||||||
|
.addCondition(String.format("$resource/Profile/Category/text() eq '%s'", PersistenceConfiguration.SERVICE_ENDPOINT_CATEGORY))
|
||||||
|
.addCondition(String.format("$resource/Profile/Name/text() eq '%s'", PersistenceConfiguration.SERVICE_ENDPOINT_NAME))
|
||||||
|
.addCondition(String.format("$resource/Profile/RunTime/HostedOn/text() eq '%s'", RUNNING_ON))
|
||||||
|
.setResult("$resource");
|
||||||
|
|
||||||
|
DiscoveryClient<ServiceEndpoint> client = ICFactory.clientFor(ServiceEndpoint.class);
|
||||||
|
List<ServiceEndpoint> serviceEndpoints = client.submit(query);
|
||||||
|
|
||||||
|
for (ServiceEndpoint serviceEndpoint : serviceEndpoints) {
|
||||||
|
try {
|
||||||
|
logger.debug("Trying to unpublish the old ServiceEndpoint with ID {} from scope {}",
|
||||||
|
serviceEndpoint.id(), GCUBE_DEVSEC_SCOPE);
|
||||||
|
unPublishScopedResource(serviceEndpoint);
|
||||||
|
} catch(Exception e){
|
||||||
|
logger.debug("Exception trying to unpublish the old ServiceEndpoint with ID {} from scope {}",
|
||||||
|
serviceEndpoint.id(), GCUBE_DEVSEC_SCOPE, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPersistenceFromIS() throws RegistryNotFoundException, Exception{
|
public void testPersistenceFromIS() throws Exception{
|
||||||
List<String> scopes = new ArrayList<String>();
|
|
||||||
scopes.add(TEST_SCOPE);
|
/*
|
||||||
|
List<String> scopes = Arrays.asList(SCOPES);
|
||||||
ServiceEndpoint serviceEndpoint = createServiceEndpoint();
|
ServiceEndpoint serviceEndpoint = createServiceEndpoint();
|
||||||
publishScopedResource(serviceEndpoint, scopes);
|
publishScopedResource(serviceEndpoint, scopes);
|
||||||
|
*/
|
||||||
|
|
||||||
PersistenceConfiguration.getPersistenceConfiguration(TEST_SCOPE, COUCHDB_CLASS_NAME);
|
try {
|
||||||
|
String keyName = "devsec.gcubekey";
|
||||||
|
Key key = SymmetricKey.getKey(System.getProperty(PersistenceTest.HOME_SYSTEM_PROPERTY)+ "/" + keyName);
|
||||||
|
PersistenceConfiguration.getPersistenceConfiguration(GCUBE_DEVSEC_SCOPE, COUCHDB_CLASS_NAME, key);
|
||||||
|
} finally {
|
||||||
|
//unPublishScopedResource(serviceEndpoint);
|
||||||
|
}
|
||||||
|
|
||||||
unPublishScopedResource(serviceEndpoint);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
package org.gcube.accounting.persistence;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.security.InvalidKeyException;
|
||||||
|
import java.security.Key;
|
||||||
|
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
|
||||||
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
|
import org.gcube.common.scope.impl.ScopeBean;
|
||||||
|
import org.gcube.common.scope.impl.ScopeBean.Type;
|
||||||
|
//import org.apache.xml.security.utils.JavaUtils;
|
||||||
|
|
||||||
|
|
||||||
|
final class SymmetricKey {
|
||||||
|
|
||||||
|
private static Key key;
|
||||||
|
|
||||||
|
private static String keyAlgorithm = "AES";
|
||||||
|
|
||||||
|
//private constructor
|
||||||
|
private SymmetricKey() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the key for encryption/decryption
|
||||||
|
* @return the key
|
||||||
|
* @throws InvalidKeyException if the key is not available or is invalid
|
||||||
|
*/
|
||||||
|
public static Key getKey(String keyPath) throws InvalidKeyException {
|
||||||
|
if (key == null) load(keyPath);
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the key from the classpaht
|
||||||
|
* @throws InvalidKeyException if the key is not available or is invalid
|
||||||
|
*/
|
||||||
|
private static void load(String keyPath) throws InvalidKeyException {
|
||||||
|
byte[] rawKey;
|
||||||
|
String keyFileName=null;
|
||||||
|
try {
|
||||||
|
InputStream is = new FileInputStream(new File(keyPath));
|
||||||
|
rawKey = getBytesFromStream(is);
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Unable to load the Key "+keyFileName+" from the classpath");
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new InvalidKeyException("Unable to load the Key "+keyFileName+" from the classpath");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
key = new SecretKeySpec(rawKey, 0, rawKey.length, keyAlgorithm);
|
||||||
|
}catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new InvalidKeyException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static byte[] getBytesFromStream(InputStream is) throws IOException {
|
||||||
|
byte[] rawKey;
|
||||||
|
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
|
||||||
|
int nRead;
|
||||||
|
byte[] data = new byte[16384];
|
||||||
|
while ((nRead = is.read(data, 0, data.length)) != -1) {
|
||||||
|
buffer.write(data, 0, nRead);
|
||||||
|
}
|
||||||
|
buffer.flush();
|
||||||
|
rawKey= buffer.toByteArray();
|
||||||
|
return rawKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue