- test improved
This commit is contained in:
parent
f7ced19279
commit
43a07dcbff
2
pom.xml
2
pom.xml
|
@ -136,7 +136,7 @@
|
|||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.jaxrs</groupId>
|
||||
<artifactId>jackson-jaxrs-json-provider</artifactId>
|
||||
<version>2.3.0</version>
|
||||
<version>2.12.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package org.gcube.vremanagement.contextmanager.services;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
|
@ -11,6 +10,7 @@ import javax.ws.rs.PUT;
|
|||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
|
||||
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.annotations.ManagedBy;
|
||||
import org.gcube.smartgears.context.application.ApplicationContext;
|
||||
import org.gcube.vremanagement.contextmanager.ResourceManager;
|
||||
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.model.types.ContextList;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -56,11 +57,21 @@ public class ContextService {
|
|||
@PathParam("vo")
|
||||
String vo;
|
||||
|
||||
@Inject
|
||||
ContextContainer contextContainer;
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("")
|
||||
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
|
||||
|
|
|
@ -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() {
|
||||
|
||||
|
||||
Response response = target("/contexts").request()
|
||||
.get();
|
||||
Response response = target("/contexts").request().get();
|
||||
|
||||
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));
|
||||
|
||||
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>
|
||||
|
||||
<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">
|
||||
<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>
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
|
||||
<root level="ERROR">
|
||||
<appender-ref ref="STDOUT" />
|
||||
</root>
|
||||
|
||||
<logger name="org.gcube.vremanagement" level="DEBUG"/>
|
||||
|
||||
</configuration>
|
||||
|
|
Loading…
Reference in New Issue