- test improved
This commit is contained in:
parent
f7ced19279
commit
43a07dcbff
2
pom.xml
2
pom.xml
|
@ -136,7 +136,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.jaxrs</groupId>
|
<groupId>com.fasterxml.jackson.jaxrs</groupId>
|
||||||
<artifactId>jackson-jaxrs-json-provider</artifactId>
|
<artifactId>jackson-jaxrs-json-provider</artifactId>
|
||||||
<version>2.3.0</version>
|
<version>2.12.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.gcube.vremanagement.contextmanager.services;
|
package org.gcube.vremanagement.contextmanager.services;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
@ -11,6 +10,7 @@ import javax.ws.rs.PUT;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
import org.gcube.common.resources.gcore.Resource;
|
import org.gcube.common.resources.gcore.Resource;
|
||||||
|
@ -19,8 +19,9 @@ import org.gcube.smartgears.ApplicationManagerProvider;
|
||||||
import org.gcube.smartgears.ContextProvider;
|
import org.gcube.smartgears.ContextProvider;
|
||||||
import org.gcube.smartgears.annotations.ManagedBy;
|
import org.gcube.smartgears.annotations.ManagedBy;
|
||||||
import org.gcube.smartgears.context.application.ApplicationContext;
|
import org.gcube.smartgears.context.application.ApplicationContext;
|
||||||
import org.gcube.vremanagement.contextmanager.ResourceManager;
|
|
||||||
import org.gcube.vremanagement.contextmanager.ContextAppManager;
|
import org.gcube.vremanagement.contextmanager.ContextAppManager;
|
||||||
|
import org.gcube.vremanagement.contextmanager.ResourceManager;
|
||||||
|
import org.gcube.vremanagement.contextmanager.handlers.ContextContainer;
|
||||||
import org.gcube.vremanagement.contextmanager.handlers.ContextHandler;
|
import org.gcube.vremanagement.contextmanager.handlers.ContextHandler;
|
||||||
import org.gcube.vremanagement.contextmanager.model.types.ContextList;
|
import org.gcube.vremanagement.contextmanager.model.types.ContextList;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -56,11 +57,21 @@ public class ContextService {
|
||||||
@PathParam("vo")
|
@PathParam("vo")
|
||||||
String vo;
|
String vo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ContextContainer contextContainer;
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
@Path("")
|
@Path("")
|
||||||
public ContextList getContexts() {
|
public ContextList getContexts() {
|
||||||
return new ContextList(Arrays.asList("/gcube","/gcube/devsec"));
|
log.info("get Context called");
|
||||||
|
try {
|
||||||
|
List<String> contexts = contextContainer.getAvailableContexts();
|
||||||
|
log.debug("found {}",contexts);
|
||||||
|
return new ContextList(contexts);
|
||||||
|
}catch (Exception e) {
|
||||||
|
throw new WebApplicationException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@PUT
|
@PUT
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
package org.gcube.vremanagement.contextmanager;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.gcube.vremanagement.contextmanager.handlers.ContextContainer;
|
||||||
|
import org.gcube.vremanagement.contextmanager.model.types.Context;
|
||||||
|
import org.gcube.vremanagement.contextmanager.model.types.Context.Type;
|
||||||
|
|
||||||
|
public class ContextContainerTester implements ContextContainer {
|
||||||
|
|
||||||
|
private ContextTree contextTree = new ContextTree() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init() {
|
||||||
|
TreeItem root = this.createItem(null, new Context("gcube", "gcube", Type.INFRASTRUCTURE));
|
||||||
|
TreeItem devsec = this.createItem(root.getContext().getId(), new Context("devsec", "devsec", Type.VO));
|
||||||
|
TreeItem devNext = this.createItem(root.getContext().getId(), new Context("devNext", "devNext", Type.VO));
|
||||||
|
this.createItem(devsec.getContext().getId(), new Context("devVRE", "devVRE", Type.VRE));
|
||||||
|
this.createItem(devNext.getContext().getId(), new Context("nextNext", "nextNext", Type.VRE));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getAvailableContexts() {
|
||||||
|
return contextTree.getContexts();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addContext(String parentId, Context toAdd) {
|
||||||
|
return contextTree.createItem(parentId, toAdd)!=null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeContext(String contextId) {
|
||||||
|
return contextTree.removeItem(contextId)!=null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -36,13 +36,12 @@ public class ContextServiceIntegrationTest extends JerseyTest {
|
||||||
public void getContexts_whenCorrectRequest_thenResponseIsOk() {
|
public void getContexts_whenCorrectRequest_thenResponseIsOk() {
|
||||||
|
|
||||||
|
|
||||||
Response response = target("/contexts").request()
|
Response response = target("/contexts").request().get();
|
||||||
.get();
|
|
||||||
|
|
||||||
assertEquals("Http Response should be 200: ", Status.OK.getStatusCode(), response.getStatus());
|
assertEquals("Http Response should be 200: ", Status.OK.getStatusCode(), response.getStatus());
|
||||||
assertEquals("Http Content-Type should be: ", MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
|
assertEquals("Http Content-Type should be: ", MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE));
|
||||||
|
|
||||||
assertTrue(((ContextList)response.getEntity()).getContexts().size()>0);
|
assertTrue(response.readEntity(ContextList.class).getContexts().size()>0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
package org.gcube.vremanagement.contextmanager;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.gcube.vremanagement.contextmanager.model.types.Context;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public abstract class ContextTree {
|
||||||
|
|
||||||
|
private static Logger log = LoggerFactory.getLogger(ContextTree.class);
|
||||||
|
|
||||||
|
public ContextTree() {
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TreeItem root;
|
||||||
|
|
||||||
|
private static Map<String, TreeItem> values = new HashMap<>();
|
||||||
|
|
||||||
|
public abstract void init();
|
||||||
|
|
||||||
|
public synchronized TreeItem removeItem(String itemId) {
|
||||||
|
TreeItem item = values.get(itemId);
|
||||||
|
if (item.isLeaf())
|
||||||
|
return values.remove(itemId);
|
||||||
|
throw new IllegalArgumentException("item is not a leaf");
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized TreeItem createItem(String parentId, Context context) {
|
||||||
|
TreeItem item;
|
||||||
|
if (parentId==null) {
|
||||||
|
if (root!=null) throw new IllegalArgumentException("root is already set");
|
||||||
|
item = new TreeItem(null, context);
|
||||||
|
root= item;
|
||||||
|
} else {
|
||||||
|
TreeItem parentItem = values.get(parentId);
|
||||||
|
if (context.getType().getPossibleParent()!=parentItem.getContext().getType())
|
||||||
|
throw new IllegalArgumentException("parent not valid");
|
||||||
|
item = new TreeItem(parentItem, context);
|
||||||
|
parentItem.addChild(item);
|
||||||
|
}
|
||||||
|
values.put(context.getId(), item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Context getContext(String id) {
|
||||||
|
return values.get(id).getContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getContexts(){
|
||||||
|
log.debug("searching for contexts");
|
||||||
|
List<String> toReturn = new ArrayList<>();
|
||||||
|
String rootString = "/"+root.getContext().getId();
|
||||||
|
toReturn.add(rootString);
|
||||||
|
if (!root.isLeaf())
|
||||||
|
toReturn.addAll(deepSearch(root.getChildren(), rootString));
|
||||||
|
log.debug("found {} contexts", toReturn.size());
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> deepSearch(Set<TreeItem> children, String parentString) {
|
||||||
|
List<String> toReturn = new ArrayList<>();
|
||||||
|
for (TreeItem item : children) {
|
||||||
|
String itemString = String.format("%s/%s", parentString, item.getContext().getId());
|
||||||
|
toReturn.add(itemString);
|
||||||
|
if (!item.isLeaf())
|
||||||
|
toReturn.addAll(deepSearch(item.getChildren(), itemString));
|
||||||
|
}
|
||||||
|
return toReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package org.gcube.vremanagement.contextmanager;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.gcube.vremanagement.contextmanager.model.types.Context;
|
||||||
|
|
||||||
|
public class TreeItem {
|
||||||
|
|
||||||
|
TreeItem parent;
|
||||||
|
Context context;
|
||||||
|
|
||||||
|
private Set<TreeItem> children = new HashSet<>();
|
||||||
|
|
||||||
|
public TreeItem(TreeItem parent, Context context) {
|
||||||
|
this.parent = parent;
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addChild(TreeItem child) {
|
||||||
|
children.add(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeChild(TreeItem child) {
|
||||||
|
children.remove(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<TreeItem> getChildren() {
|
||||||
|
return Collections.unmodifiableSet(children);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeItem getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Context getContext() {
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLeaf() {
|
||||||
|
return children.size()==0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((context == null) ? 0 : context.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
TreeItem other = (TreeItem) obj;
|
||||||
|
if (context == null) {
|
||||||
|
if (other.context != null)
|
||||||
|
return false;
|
||||||
|
} else if (!context.equals(other.context))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,12 +1,18 @@
|
||||||
<configuration>
|
<configuration>
|
||||||
|
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT"
|
||||||
|
class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<layout class="ch.qos.logback.classic.PatternLayout">
|
<layout class="ch.qos.logback.classic.PatternLayout">
|
||||||
<Pattern>
|
<Pattern>
|
||||||
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
|
%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
|
||||||
</Pattern>
|
</Pattern>
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
|
<root level="ERROR">
|
||||||
|
<appender-ref ref="STDOUT" />
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<logger name="org.gcube.vremanagement" level="DEBUG"/>
|
||||||
|
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
Loading…
Reference in New Issue