/** * */ package org.gcube.informationsystem.resourceregistry.publisher; import java.net.URI; import java.net.URL; import java.util.Calendar; import java.util.List; import java.util.Map; import java.util.UUID; import org.gcube.informationsystem.context.reference.entities.Context; import org.gcube.informationsystem.context.reference.relations.IsParentOf; import org.gcube.informationsystem.model.reference.entities.Facet; import org.gcube.informationsystem.resourceregistry.api.contexts.ContextCache; import org.gcube.informationsystem.resourceregistry.api.exceptions.AvailableInAnotherContextException; import org.gcube.informationsystem.resourceregistry.api.exceptions.NotFoundException; import org.gcube.informationsystem.resourceregistry.api.exceptions.ResourceRegistryException; import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClient; import org.gcube.informationsystem.resourceregistry.client.ResourceRegistryClientFactory; import org.gcube.resourcemanagement.model.impl.entities.facets.AccessPointFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.CPUFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.EventFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.LicenseFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.MemoryFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.NetworkingFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.SoftwareFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.facets.StateFacetImpl; import org.gcube.resourcemanagement.model.impl.entities.resources.EServiceImpl; import org.gcube.resourcemanagement.model.impl.entities.resources.HostingNodeImpl; import org.gcube.resourcemanagement.model.impl.properties.ValueSchemaImpl; import org.gcube.resourcemanagement.model.impl.relations.consistsof.HasPersistentMemoryImpl; import org.gcube.resourcemanagement.model.impl.relations.consistsof.HasVolatileMemoryImpl; import org.gcube.resourcemanagement.model.impl.relations.consistsof.IsIdentifiedByImpl; import org.gcube.resourcemanagement.model.impl.relations.isrelatedto.ActivatesImpl; import org.gcube.resourcemanagement.model.reference.entities.facets.AccessPointFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.CPUFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.EventFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.LicenseFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.MemoryFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.MemoryFacet.MemoryUnit; import org.gcube.resourcemanagement.model.reference.entities.facets.NetworkingFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet; import org.gcube.resourcemanagement.model.reference.entities.facets.StateFacet; import org.gcube.resourcemanagement.model.reference.entities.resources.EService; import org.gcube.resourcemanagement.model.reference.entities.resources.HostingNode; import org.gcube.resourcemanagement.model.reference.properties.ValueSchema; import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasPersistentMemory; import org.gcube.resourcemanagement.model.reference.relations.consistsof.HasVolatileMemory; import org.gcube.resourcemanagement.model.reference.relations.consistsof.IsIdentifiedBy; import org.gcube.resourcemanagement.model.reference.relations.isrelatedto.Activates; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) * */ public class MultiContextTest extends ContextTest { private static Logger logger = LoggerFactory .getLogger(MultiContextTest.class); protected ResourceRegistryPublisher resourceRegistryPublisher; protected ResourceRegistryClient resourceRegistryClient; public MultiContextTest() throws Exception { ContextTest.setContextByName(PARENT_DEFAULT_TEST_SCOPE); resourceRegistryPublisher = ResourceRegistryPublisherFactory.create(); resourceRegistryClient = ResourceRegistryClientFactory.create(); } @Test public void testCreateEServiceHostingNode() throws Exception { EService eService = new EServiceImpl(); SoftwareFacet softwareFacet = new SoftwareFacetImpl(); softwareFacet.setGroup("InformationSystem"); softwareFacet.setName("resource-registry"); softwareFacet.setVersion("1.1.0"); IsIdentifiedBy isIdentifiedBy = new IsIdentifiedByImpl(eService, softwareFacet, null); eService.addFacet(isIdentifiedBy); AccessPointFacet accessPointFacet = new AccessPointFacetImpl(); accessPointFacet.setEndpoint(new URI("http://localhost")); accessPointFacet.setEntryName("port1"); eService.addFacet(accessPointFacet); EventFacet eventFacet = new EventFacetImpl(); eventFacet.setDate(Calendar.getInstance().getTime()); ValueSchema event = new ValueSchemaImpl(); event.setValue("Created"); eventFacet.setEvent(event); eService.addFacet(eventFacet); StateFacet stateFacet = new StateFacetImpl(); stateFacet.setValue("ready"); eService.addFacet(stateFacet); LicenseFacet licenseFacet = new LicenseFacetImpl(); licenseFacet.setName("EUPL"); licenseFacet.setTextURL(new URL("https://joinup.ec.europa.eu/community/eupl/og_page/european-union-public-licence-eupl-v11")); eService.addFacet(licenseFacet); EService createdEService = resourceRegistryPublisher.createResource(eService); logger.debug("Created : {}", createdEService); HostingNode hostingNode = new HostingNodeImpl(); NetworkingFacet networkingFacet = new NetworkingFacetImpl(); networkingFacet.setIPAddress("146.48.87.183"); networkingFacet.setHostName("pc-frosini.isti.cnr.it"); networkingFacet.setDomainName("isti.cnr.it"); networkingFacet.setMask("255.255.248.0"); networkingFacet.setBroadcastAddress("146.48.87.255"); IsIdentifiedBy isIdentifiedByHNNF = new IsIdentifiedByImpl(hostingNode, networkingFacet, null); hostingNode.addFacet(isIdentifiedByHNNF); CPUFacet cpuFacet = new CPUFacetImpl(); cpuFacet.setClockSpeed("1 GHz"); cpuFacet.setModel("Opteron"); cpuFacet.setVendor("AMD"); hostingNode.addFacet(cpuFacet); MemoryFacet ram = new MemoryFacetImpl(); ram.setSize(8); ram.setUnit(MemoryUnit.GB); ram.setUsed(2); HasVolatileMemory hasVolatileMemory = new HasVolatileMemoryImpl(hostingNode, ram, null); hostingNode.addFacet(hasVolatileMemory); MemoryFacet disk = new MemoryFacetImpl(); disk.setSize(256); disk.setUnit(MemoryUnit.GB); disk.setUsed(120); HasPersistentMemory hasPersistentMemory = new HasPersistentMemoryImpl(hostingNode, disk, null); hostingNode.addFacet(hasPersistentMemory); Activates activates = new ActivatesImpl(hostingNode, createdEService, null); hostingNode.attachResource(activates); HostingNode createdHN = resourceRegistryPublisher.createResource(hostingNode); logger.debug("Created : {}", createdHN); logger.debug("Changing token to test add to scope"); ContextTest.setContextByName(ContextTest.ALTERNATIVE_TEST_SCOPE); UUID hostingNodeUUID = createdHN.getHeader().getUUID(); UUID eServiceUUID = createdEService.getHeader().getUUID(); logger.debug("Changing token to test add to scope"); ContextTest.setContextByName(ContextTest.ALTERNATIVE_TEST_SCOPE); try { resourceRegistryClient.exists(EService.class, eServiceUUID); } catch (NotFoundException e) { throw e; } catch (AvailableInAnotherContextException e) { // Good } catch (ResourceRegistryException e) { throw e; } try { resourceRegistryClient.exists(HostingNode.class, hostingNodeUUID); } catch (NotFoundException e) { throw e; } catch (AvailableInAnotherContextException e) { // Good } catch (ResourceRegistryException e) { throw e; } boolean addedToContext = resourceRegistryPublisher.addResourceToCurrentContext(createdHN); Assert.assertTrue(addedToContext); try { resourceRegistryClient.exists(EService.class, eServiceUUID); }catch(AvailableInAnotherContextException e){ logger.debug("Resource with {} Available in another Context as Expected", eServiceUUID.toString()); } boolean deleted = resourceRegistryPublisher.deleteResource(createdHN); Assert.assertTrue(deleted); logger.debug("Restoring original scope"); ContextTest.setContextByName(ContextTest.DEFAULT_TEST_SCOPE); deleted = resourceRegistryPublisher.deleteResource(createdEService); Assert.assertTrue(deleted); } @Test public void testGetAllContexts() throws Exception { List contexts = resourceRegistryPublisher.getAllContext(); logger.debug("{}", contexts); ContextCache contextCache = ContextCache.getInstance(); Map uuidToContextFullName = contextCache.getUUIDToContextFullNameAssociation(); logger.debug("{}", uuidToContextFullName); for(Context c : contexts) { UUID uuid = c.getHeader().getUUID(); if(c.getParent()!=null) { IsParentOf isParentOf = c.getParent(); Context parentContext = isParentOf.getSource(); UUID parentUUID = parentContext.getHeader().getUUID(); Assert.assertEquals(parentContext, contextCache.getContextByUUID(parentUUID)); List children = parentContext.getChildren(); boolean found = false; for(IsParentOf ipo : children) { if(ipo.equals(isParentOf)) { found = true; break; } } Assert.assertTrue(found); logger.debug("{} : {} (parent {} : {})", c.getHeader().getUUID(), contextCache.getContextFullNameByUUID(uuid), parentUUID, contextCache.getContextFullNameByUUID(parentUUID)); }else { logger.debug("{} : {}", c.getHeader().getUUID(), contextCache.getContextFullNameByUUID(uuid)); } } Context currentContext = resourceRegistryPublisher.getCurrentContext(); logger.debug("Current context : {}", currentContext); for(Context c : contexts) { UUID uuid = c.getHeader().getUUID(); Context context = resourceRegistryPublisher.getContext(uuid); String fullName = ContextCache.getInstance().getContextFullNameByUUID(uuid); logger.debug("{} - {} : {}", uuid, fullName, context); } } }