diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/entities/ContextManagement.java b/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/entities/ContextManagement.java index 82745e3..55e7cfd 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/entities/ContextManagement.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/contexts/entities/ContextManagement.java @@ -69,7 +69,7 @@ public class ContextManagement extends EntityElementManagement { try { contexts = ElementMapper.unmarshalList(contextsJsonString); } catch (IOException e) { - logger.error("Unable to "); + logger.error("Unable to read contexts from DB", e); } return contexts; } diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/instances/multicontext/BasicTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/instances/multicontext/BasicTest.java index 5088a47..49b9b3a 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/instances/multicontext/BasicTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/instances/multicontext/BasicTest.java @@ -3,25 +3,33 @@ */ package org.gcube.informationsystem.resourceregistry.instances.multicontext; +import java.io.IOException; import java.net.URI; import java.net.URL; import java.util.Calendar; +import java.util.List; +import java.util.Set; import java.util.UUID; import org.gcube.common.authorization.client.exceptions.ObjectNotFound; +import org.gcube.informationsystem.context.reference.entities.Context; import org.gcube.informationsystem.model.impl.properties.PropagationConstraintImpl; import org.gcube.informationsystem.model.reference.entities.Facet; import org.gcube.informationsystem.model.reference.properties.PropagationConstraint; import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.AddConstraint; import org.gcube.informationsystem.model.reference.properties.PropagationConstraint.RemoveConstraint; import org.gcube.informationsystem.resourceregistry.ContextTest; +import org.gcube.informationsystem.resourceregistry.api.contexts.ContextCache; +import org.gcube.informationsystem.resourceregistry.api.contexts.ContextCacheRenewal; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; import org.gcube.informationsystem.resourceregistry.api.exceptions.context.ContextNotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.facet.FacetAvailableInAnotherContextException; import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceAvailableInAnotherContextException; import org.gcube.informationsystem.resourceregistry.api.exceptions.entity.resource.ResourceNotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.relation.RelationAvailableInAnotherContextException; +import org.gcube.informationsystem.resourceregistry.api.utils.Utility; import org.gcube.informationsystem.resourceregistry.contexts.ContextUtility; +import org.gcube.informationsystem.resourceregistry.contexts.entities.ContextManagement; import org.gcube.informationsystem.resourceregistry.instances.SmartgearResourcesTest; import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagement; import org.gcube.informationsystem.resourceregistry.instances.base.ElementManagementUtility; @@ -464,11 +472,11 @@ public class BasicTest extends ContextTest { Assert.assertTrue(deleted); } - @Test + // @Test public void testGetInstanceContexts() throws ObjectNotFound, Exception { - String type = "ContainerStateFacet"; - String instanceId = "9d22d8e2-56ad-4de4-99cd-3c68e282ba99"; + String type = "HostingNode"; + String instanceId = "f0460614-9ffb-4ecd-bf52-d91e8d81d604"; @SuppressWarnings("rawtypes") ElementManagement erManagement = ElementManagementUtility.getERManagement(type); @@ -483,5 +491,138 @@ public class BasicTest extends ContextTest { logger.debug("{}", contexts); } + + protected ContextCacheRenewal contextCacheRenewal= new ContextCacheRenewal() { + + @Override + public List renew() throws ResourceRegistryException { + ContextManagement contextManagement = new ContextManagement(); + String contextsJsonString = contextManagement.allFromServer(false); + List contexts = null; + try { + contexts = ElementMapper.unmarshalList(contextsJsonString); + } catch (IOException e) { + logger.error("Unable to read context from server", e); + } + return contexts; + } + }; + + @Test + public void testGetInstancesContexts() throws ResourceRegistryException, Exception { + ContextTest.setContextByName(DEFAULT_TEST_SCOPE); + /* Creating HostingNode */ + ContextCache contextCache = ContextCache.getInstance(); + contextCache.setContextCacheRenewal(contextCacheRenewal); + + + ResourceManagement hostingNodeManagement = new ResourceManagement(); + hostingNodeManagement.setElementType(HostingNode.NAME); + hostingNodeManagement.setJson(SmartgearResourcesTest.HOSTING_NODE); + + String hnJson = hostingNodeManagement.create(); + logger.debug("Created : {}", hnJson); + HostingNode hostingNode = ElementMapper.unmarshal(HostingNode.class, hnJson); + logger.debug("Unmarshalled {} {}", HostingNode.NAME, hostingNode); + + /* Creating EService */ + + ResourceManagement eServiceManagement = new ResourceManagement(); + eServiceManagement.setElementType(EService.NAME); + eServiceManagement.setJson(SmartgearResourcesTest.ESERVICE); + + String eservicejson = eServiceManagement.create(); + logger.debug("Created : {}", eservicejson); + EService eService = ElementMapper.unmarshal(EService.class, eservicejson); + logger.debug("Unmarshalled {} {}", EService.NAME, eService); + + + /* Creating Activates Relation */ + + PropagationConstraint propagationConstraint = new PropagationConstraintImpl(); + propagationConstraint + .setRemoveConstraint(RemoveConstraint.cascade); + propagationConstraint + .setAddConstraint(AddConstraint.unpropagate); + + + Activates activates = new ActivatesImpl<>(hostingNode, eService, + propagationConstraint); + + IsRelatedToManagement activatesManagement = new IsRelatedToManagement(); + activatesManagement.setElementType(Activates.NAME); + String activatesJson = ElementMapper.marshal(activates); + activatesManagement.setJson(activatesJson); + String createdActivatesJson = activatesManagement.create(); + logger.debug("Created : {}", createdActivatesJson); + + @SuppressWarnings("unchecked") + Activates createdActivates = ElementMapper.unmarshal(Activates.class, createdActivatesJson); + logger.debug("UnMarshalled {}", createdActivates); + + /* ------------------------------------------------------------------ */ + + logger.debug("Switching to alternative scope"); + ContextTest.setContextByName(ALTERNATIVE_TEST_SCOPE); + + hostingNodeManagement = new ResourceManagement(); + hostingNodeManagement.setUUID(hostingNode.getHeader().getUUID()); + hostingNodeManagement.setElementType(Utility.getTypeName(hostingNode.getClass())); + hostingNodeManagement.addToContext(ContextUtility.getCurrentSecurityContext().getUUID()); + + String hostingNodeContexts = hostingNodeManagement.getContexts(); + logger.debug("Contexts of {} with UUID {} have the following UUID {}", HostingNode.NAME, hostingNodeManagement.getUUID(), hostingNodeContexts); + Set hostingNodeContextsUUID = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextUUIDSet(hostingNodeContexts); + Assert.assertTrue(hostingNodeContextsUUID.size()==2); + Set hostingNodeContextFullNames = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextFullNameSet(hostingNodeContextsUUID); + Assert.assertTrue(hostingNodeContextFullNames.size()==2); + logger.debug("Contexts of {} with UUID {} are {}", HostingNode.NAME, hostingNodeManagement.getUUID(), hostingNodeContextFullNames); + + for(Facet facet : hostingNode.getFacets()) { + FacetManagement facetManagement = new FacetManagement(); + facetManagement.setUUID(facet.getHeader().getUUID()); + String typeName = Utility.getTypeName(facet.getClass()); + facetManagement.setElementType(typeName); + String facetContexts = facetManagement.getContexts(); + logger.debug("Contexts of {} with UUID {} have the following UUID {}", typeName, facetManagement.getUUID(), facetContexts); + Set facetContextsUUID = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextUUIDSet(facetContexts); + Assert.assertTrue(hostingNodeContextsUUID.size()==2); + Assert.assertTrue(facetContextsUUID.containsAll(hostingNodeContextsUUID)); + Assert.assertTrue(hostingNodeContextsUUID.containsAll(facetContextsUUID)); + Set facetContextFullNames = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextFullNameSet(facetContextsUUID); + Assert.assertTrue(facetContextFullNames.size()==2); + logger.debug("Contexts of {} with UUID {} are {}", typeName, facetManagement.getUUID(), facetContextFullNames); + } + + activatesManagement = new IsRelatedToManagement(); + activatesManagement.setUUID(createdActivates.getHeader().getUUID()); + activatesManagement.setElementType(Utility.getTypeName(createdActivates.getClass())); + String isRelatedToContexts = activatesManagement.getContexts(); + logger.debug("Contexts of {} with UUID {} have the following UUID {}", Activates.NAME, activatesManagement.getUUID(), isRelatedToContexts); + Set activatesContextsUUID = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextUUIDSet(isRelatedToContexts); + Assert.assertTrue(activatesContextsUUID.size()==1); + Assert.assertFalse(activatesContextsUUID.containsAll(hostingNodeContextsUUID)); + Assert.assertTrue(hostingNodeContextsUUID.containsAll(activatesContextsUUID)); + Set activatesContextFullNames = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextFullNameSet(activatesContextsUUID); + Assert.assertTrue(activatesContextFullNames.size()==1); + logger.debug("Contexts of {} with UUID {} are {}", Activates.NAME, activatesManagement.getUUID(), activatesContextFullNames); + + + eServiceManagement = new ResourceManagement(); + eServiceManagement.setUUID(eService.getHeader().getUUID()); + eServiceManagement.setElementType(Utility.getTypeName(eService.getClass())); + String eServiceContexts = eServiceManagement.getContexts(); + logger.debug("Contexts of {} with UUID {} have the following UUID {}", EService.NAME, eServiceManagement.getUUID(), eServiceContexts); + Set eServiceContextsUUID = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextUUIDSet(eServiceContexts); + Assert.assertTrue(eServiceContextsUUID.size()==1); + Assert.assertFalse(eServiceContextsUUID.containsAll(hostingNodeContextsUUID)); + Assert.assertTrue(hostingNodeContextsUUID.containsAll(eServiceContextsUUID)); + Set eServiceContextFullNames = org.gcube.informationsystem.resourceregistry.api.contexts.ContextUtility.getContextFullNameSet(eServiceContextsUUID); + Assert.assertTrue(eServiceContextFullNames.size()==1); + logger.debug("Contexts of {} with UUID {} are {}", EService.NAME, eServiceManagement.getUUID(), eServiceContextFullNames); + + boolean deleted = hostingNodeManagement.delete(); + Assert.assertTrue(deleted); + } }