Merged from branch

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-publishing/gcat-client@179477 82a268e6-3cf1-43bd-a215-b396298e98cf
master
Luca Frosini 5 years ago
parent 23bb6996df
commit 148b5b8a78

@ -22,7 +22,7 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>

@ -1,5 +1,2 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.8

@ -3,6 +3,8 @@
<ReleaseNotes>
<Changeset component="org.gcube.data-publishing.gcat-client.1-1-0" date="${buildDate}">
<Change>Added the possibility to enforce gCat service URL</Change>
<Change>Added the possibility to disable social post #16322</Change>
<Change>Added the possibility to get a porfile as JSON</Change>
</Changeset>
<Changeset component="org.gcube.data-publishing.gcat-client.1-0-0" date="2019-02-26">
<Change>First Release</Change>

@ -48,7 +48,7 @@
<dependency>
<groupId>org.gcube.data-publishing</groupId>
<artifactId>gcat-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>[1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)</version>
</dependency>
<dependency>
<groupId>org.gcube.resources.discovery</groupId>

@ -121,12 +121,15 @@ abstract class GCatClient {
}
}
protected String create(String body, String... paths) {
protected String create(String body, Map<String, String> queryParams, String... paths) {
try {
initRequest();
for(String p : paths) {
gxhttpStringRequest.path(p);
}
if(queryParams!=null && queryParams.size()>0) {
gxhttpStringRequest.queryParams(queryParams);
}
HttpURLConnection httpURLConnection = gxhttpStringRequest.post(body);
return parseHttpURLConnection(httpURLConnection);
}catch (WebApplicationException e) {
@ -136,6 +139,9 @@ abstract class GCatClient {
}
}
protected String create(String body, String... paths) {
return create(body, (Map<String, String>) null, paths);
}
protected String read(String... paths) throws WebApplicationException {
try {

@ -31,6 +31,19 @@ public class Item extends GCatClient implements org.gcube.gcat.api.interfaces.It
return super.list(queryParams);
}
public String create(String json, boolean socialPost) {
try {
Map<String,String> queryParams = new HashMap<>();
queryParams.put(GCatConstants.SOCIAL_POST_PARAMETER, String.valueOf(socialPost));
return super.create(json, queryParams);
}catch (WebApplicationException e) {
throw e;
}catch (Exception e) {
throw new WebApplicationException(e);
}
}
@Override
public String create(String json) {
return super.create(json);

@ -5,6 +5,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import org.gcube.gcat.api.GCatConstants;
@ -27,10 +28,12 @@ public class Profile extends GCatClient implements org.gcube.gcat.api.interfaces
return super.list(null);
}
@Override
public String create(String name, String xml) {
protected String createOrUpdate(String name, String xml) {
try {
initRequest();
gxhttpStringRequest.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML);
gxhttpStringRequest.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML);
gxhttpStringRequest.path(name);
HttpURLConnection httpURLConnection = gxhttpStringRequest.put(xml);
return parseHttpURLConnection(httpURLConnection);
}catch (WebApplicationException e) {
@ -39,13 +42,26 @@ public class Profile extends GCatClient implements org.gcube.gcat.api.interfaces
throw new WebApplicationException(e);
}
}
@Override
public String create(String name, String xml) {
return createOrUpdate(name, xml);
}
@Override
public String read(String name) {
return read(name, false);
}
public String read(String name, boolean asJSON) {
try {
initRequest();
gxhttpStringRequest.path(name);
gxhttpStringRequest.header("Accept", MediaType.APPLICATION_XML);
if(asJSON) {
gxhttpStringRequest.header(HttpHeaders.ACCEPT, GCatConstants.APPLICATION_JSON_CHARSET_UTF_8);
} else {
gxhttpStringRequest.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML);
}
HttpURLConnection httpURLConnection = gxhttpStringRequest.get();
return parseHttpURLConnection(httpURLConnection);
}catch (WebApplicationException e) {
@ -55,17 +71,9 @@ public class Profile extends GCatClient implements org.gcube.gcat.api.interfaces
}
}
public String read(String name, boolean asJSON) {
if(!asJSON) {
return read(name);
}
gxhttpStringRequest.header("Accept", GCatConstants.APPLICATION_JSON_CHARSET_UTF_8);
return super.read(name);
}
@Override
public String update(String name, String xml) {
return super.update(xml, name);
return createOrUpdate(name, xml);
}
@Override

@ -5,7 +5,6 @@ package org.gcube.gcat.client;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.Properties;
import org.gcube.common.authorization.client.Constants;
@ -16,7 +15,6 @@ 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.gcube.gcat.client.GCatClientDiscovery;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.slf4j.Logger;
@ -24,101 +22,44 @@ import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*
*/
public class ContextTest {
private static final Logger logger = LoggerFactory.getLogger(ContextTest.class);
protected static final String TOKEN_PROPERTIES_FILENAME = "token.properties";
protected static final String CONFIG_PROPERTIES_FILENAME = "config.properties";
protected static Properties properties;
protected static final String PROPERTIES_FILENAME = "token.properties";
private static final String GCUBE_VARNAME = "GCUBE";
public static final String GCUBE;
private static final String GCUBE_DEVNEXT_VARNAME = "GCUBE_DEVNEXT";
public static final String GCUBE_DEVNEXT;
private static final String GCUBE_DEVNEXT_NEXTNEXT_VARNAME = "GCUBE_DEVNEXT_NEXTNEXT";
public static final String GCUBE_DEVNEXT_NEXTNEXT;
public static final String GCUBE_DEVSEC_VARNAME = "GCUBE_DEVSEC";
public static final String GCUBE_DEVSEC;
public static final String GCUBE_DEVSEC_DEVVRE_VARNAME = "GCUBE_DEVSEC_DEVVRE";
public static final String GCUBE_DEVSEC_DEVVRE;
private static final String GCUBE_DEVNEXT_ANOTHER_USER_VARNAME = "GCUBE_DEVNEXT_ANOTHER_USER";
public static final String GCUBE_DEVNEXT_ANOTHER_USER;
public static final String DEFAULT_TEST_SCOPE;
public static final String GCUBE_PRE_PROD_PREVRE_VARNAME = "GCUBE_PRE_PROD_PREVRE";
public static final String GCUBE_PRE_PROD_PREVRE;
public static final String GCUBE_PRE_PROD_PARTHENOS_REGISTRY_VARNAME = "GCUBE_PRE_PROD_PARTHENOS_REGISTRY";
public static final String GCUBE_PRE_PROD_PARTHENOS_REGISTRY;
public static final String ROOT_VARNAME = "ROOT";
public static final String ROOT;
public static final String FORCED_URL_VARNAME = "FORCED_URL";
public static final String FORCED_URL;
public static final String DEFAULT_TEST_SCOPE_NAME;
static {
Properties properties = new Properties();
InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(TOKEN_PROPERTIES_FILENAME);
try {
// load the properties file
properties.load(input);
} catch (IOException e) {
throw new RuntimeException(e);
}
GCUBE = properties.getProperty(GCUBE_VARNAME);
GCUBE_DEVNEXT = properties.getProperty(GCUBE_DEVNEXT_VARNAME);
GCUBE_DEVNEXT_NEXTNEXT = properties.getProperty(GCUBE_DEVNEXT_NEXTNEXT_VARNAME);
GCUBE_DEVSEC = properties.getProperty(GCUBE_DEVSEC_VARNAME);
GCUBE_DEVSEC_DEVVRE = properties.getProperty(GCUBE_DEVSEC_DEVVRE_VARNAME);
GCUBE_DEVNEXT_ANOTHER_USER = properties.getProperty(GCUBE_DEVNEXT_ANOTHER_USER_VARNAME);
GCUBE_PRE_PROD_PARTHENOS_REGISTRY = properties.getProperty(GCUBE_PRE_PROD_PARTHENOS_REGISTRY_VARNAME);
GCUBE_PRE_PROD_PREVRE = properties.getProperty(GCUBE_PRE_PROD_PREVRE_VARNAME);
ROOT = properties.getProperty(ROOT_VARNAME);
DEFAULT_TEST_SCOPE = GCUBE_PRE_PROD_PREVRE;
properties = new Properties();
input = ContextTest.class.getClassLoader().getResourceAsStream(CONFIG_PROPERTIES_FILENAME);
InputStream input = ContextTest.class.getClassLoader().getResourceAsStream(PROPERTIES_FILENAME);
try {
// load the properties file
properties.load(input);
} catch (IOException e) {
} catch(IOException e) {
throw new RuntimeException(e);
}
FORCED_URL = properties.getProperty(FORCED_URL_VARNAME);
try {
GCatClientDiscovery.forceToURL(FORCED_URL);
} catch(MalformedURLException e) {
throw new RuntimeException(e);
}
DEFAULT_TEST_SCOPE_NAME = "/pred4s/preprod/preVRE";
}
public static String getCurrentScope(String token) throws ObjectNotFound, Exception{
public static String getCurrentScope(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);
}
public static void setContext(String token) throws ObjectNotFound, Exception{
public static void setContext(String token) throws ObjectNotFound, Exception {
SecurityTokenProvider.instance.set(token);
AuthorizationEntry authorizationEntry = Constants.authorizationService().get(token);
ClientInfo clientInfo = authorizationEntry.getClientInfo();
@ -130,12 +71,12 @@ public class ContextTest {
}
@BeforeClass
public static void beforeClass() throws Exception{
setContext(DEFAULT_TEST_SCOPE);
public static void beforeClass() throws Exception {
setContextByName(DEFAULT_TEST_SCOPE_NAME);
}
@AfterClass
public static void afterClass() throws Exception{
public static void afterClass() throws Exception {
SecurityTokenProvider.instance.reset();
ScopeProvider.instance.reset();
}

@ -4,7 +4,9 @@ import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.NotFoundException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@ -27,14 +29,14 @@ public class ProfileTest extends ContextTest {
private static Logger logger = LoggerFactory.getLogger(ProfileTest.class);
@Test
public void safeTest() throws IOException, ParserConfigurationException, SAXException {
public void safeTest() throws Exception {
ObjectMapper mapper = new ObjectMapper();
JavaType arrayType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, String.class);
Profile profile = new Profile();
String profilesString = profile.list();
logger.debug("Got Profiles {}", profilesString);
logger.debug("Got Profiles {}\n", profilesString);
List<String> profiles = mapper.readValue(profilesString, arrayType);
for(String name : profiles) {
@ -45,18 +47,85 @@ public class ProfileTest extends ContextTest {
InputSource is = new InputSource(new StringReader(xml));
dBuilder.parse(is);
String retAsXML = profile.read(name, false);
String retAsXML = profile.read(name, false);
logger.debug("Got XML (explicit) Profile {}", retAsXML);
is = new InputSource(new StringReader(retAsXML));
dBuilder.parse(is);
InputSource is2 = new InputSource(new StringReader(retAsXML));
dBuilder.parse(is2);
Assert.assertTrue(xml.compareTo(retAsXML) == 0);
//Assert.assertTrue(xml.compareTo(retAsXML) == 0);
String json = profile.read(name, true);
logger.debug("Got JSON Profile {}", json);
logger.debug("Got JSON Profile {}\n", json);
mapper.readTree(json);
}
}
public static final String PROFILE_NAME = "TestEmptyProfile";
public static final String PROFILE_XML = "<metadataformat type=\"%s\"><metadatafield><fieldName>test</fieldName><mandatory>false</mandatory><dataType>String</dataType><maxOccurs>1</maxOccurs><note>Test Field</note></metadatafield></metadataformat>";
// @Test
public void delete() throws Exception {
Profile profile = new Profile();
profile.delete(PROFILE_NAME);
}
@Test
public void list() throws Exception {
Profile profile = new Profile();
String list = profile.list();
logger.debug("Got Profiles {}\n", list);
}
@Test
public void createDeleteTest() throws Exception {
ObjectMapper mapper = new ObjectMapper();
JavaType arrayType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, String.class);
Profile profile = new Profile();
profile.create(PROFILE_NAME, String.format(PROFILE_XML, PROFILE_NAME));
String list = profile.list();
logger.debug("Got Profiles {}\n", list);
boolean found = false;
int count = 1;
while(!found) {
List<String> profiles = mapper.readValue(list, arrayType);
if(profiles.contains(PROFILE_NAME)) {
found = true;
}
if(count >= 5) {
throw new NotFoundException(String.format("%s not found after %d retries", PROFILE_NAME, count));
}
if(!found) {
Thread.sleep(TimeUnit.SECONDS.toMillis(2*count));
++count;
}
}
String xml = profile.read(PROFILE_NAME);
profile.delete(PROFILE_NAME);
while(found) {
List<String> profiles = mapper.readValue(list, arrayType);
if(!profiles.contains(PROFILE_NAME)) {
found = false;
}
if(count >= 5) {
throw new Exception(String.format("%s still found after %d retries", PROFILE_NAME, count));
}
if(found) {
Thread.sleep(TimeUnit.SECONDS.toMillis(2*count));
++count;
}
}
}
}

@ -1 +0,0 @@
/gcube/preprod/preVRE=3c5b250d-6101-467a-b343-601a495ed4dd-98187548

@ -1,19 +0,0 @@
GCUBE=0b47600a-1c53-4a47-b07b-03851cc28c8a-98187548
GCUBE_DEVNEXT=577013f6-2d07-4071-af7b-c3c6a064fbda-98187548
GCUBE_DEVNEXT_NEXTNEXT=7c66c94c-7f6e-49cd-9a34-909cd3832f3e-98187548
GCUBE_DEVSEC=a2c82e3a-82ca-4fd9-b37d-f1eb49a22bd5-98187548
GCUBE_DEVSEC_DEVVRE=4646ff97-40d1-443c-8cf9-5892957d3d64-98187548
GCUBE_DEVNEXT_ANOTHER_USER=52b59669-ccde-46d2-a4da-108b9e941f7c-98187548
GCUBE_DEVVRE_ANOTHER_USER=f851ba11-bd3e-417a-b2c2-753b02bac506-98187548
# accountingaggregator
# ROOT=18fed2d9-030b-4c77-93af-af2015d945f7-843339462
# luca.frosini
ROOT=cb220668-c7dc-4ed5-9e51-933125d0aa57-843339462
GCUBE_PRE_PROD_PREVRE=1ba19f5d-5ca1-44d6-a8b0-c081e722327e-98187548
GCUBE_PRE_PROD_PARTHENOS_REGISTRY=4ac1fb39-e24e-416e-a98b-ab30e997e745-98187548
Loading…
Cancel
Save