package alien4cloud.tosca.container.model.topology;
import java.util.HashSet;
import org.alien4cloud.tosca.catalog.index.ICsarDependencyLoader;
import org.alien4cloud.tosca.model.CSARDependency;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import com.google.common.collect.Sets;
import alien4cloud.tosca.container.ToscaTypeLoader;
public class ToscaTypeLoaderTest {
private ICsarDependencyLoader dependencyLoader;
private ToscaTypeLoader loader;
private CSARDependency baseTypes = new CSARDependency("tosca-base-types", "1.0");
private CSARDependency baseTypesV2 = new CSARDependency("tosca-base-types", "2.0");
private CSARDependency javaTypes = new CSARDependency("java-types", "1.0");
private CSARDependency javaTypesV2 = new CSARDependency("java-types", "2.0");
@Before
public void before() {
dependencyLoader = Mockito.mock(ICsarDependencyLoader.class);
Mockito.when(dependencyLoader.getDependencies("tosca-base-types", "1.0")).thenReturn(new HashSet<CSARDependency>());
Mockito.when(dependencyLoader.getDependencies("java-types", "1.0")).thenReturn(Sets.newHashSet(baseTypes));
Mockito.when(dependencyLoader.getDependencies("java-types", "2.0")).thenReturn(Sets.newHashSet(baseTypesV2));
loader = new ToscaTypeLoader(dependencyLoader);
}
private void loadTomcatGroup() {
// All nodes are placed first
loader.loadType("tosca.nodes.Compute", baseTypes);
loader.loadType("tosca.nodes.Java", javaTypes);
loader.loadType("tosca.nodes.Tomcat", javaTypes);
loader.loadType("tosca.nodes.War", javaTypes);
// Java hosted on compute
loader.loadType("tosca.relationships.HostedOn", baseTypes);
// Tomcat hosted on compute
loader.loadType("tosca.relationships.HostedOn", baseTypes);
// War hosted on tomcat
loader.loadType("tosca.relationships.WarDeployedOn", javaTypes);
// Tomcat depends on Java
loader.loadType("tosca.relationships.DependsOn", baseTypes);
}
private void loadGigaSpacesGroup() {
// All gigaspaces group nodes are placed first
loader.loadType("tosca.nodes.Compute", baseTypesV2);
loader.loadType("tosca.nodes.Java", javaTypesV2);
loader.loadType("tosca.nodes.GigaSpaces", javaTypesV2);
// Java hosted on compute
loader.loadType("tosca.relationships.HostedOn", baseTypesV2);
// GigaSpaces hosted on compute
loader.loadType("tosca.relationships.HostedOn", baseTypes);
// GigaSpaces depends on Java
loader.loadType("tosca.relationships.DependsOn", baseTypes);
// War connect to gigaspaces
loader.loadType("tosca.relationships.ConnectedTo", baseTypes);
}
private void unloadTomcatGroup() {
// _______________________________________________________________
// Delete compute will trigger following actions on type loader
loader.unloadType("tosca.nodes.Compute");
// Java hosted on compute
loader.unloadType("tosca.relationships.HostedOn");
// _______________________________________________________________
// Delete relationship Tomcat depends on Java
loader.unloadType("tosca.relationships.DependsOn");
// _______________________________________________________________
// Delete java
loader.unloadType("tosca.nodes.Java");
// _______________________________________________________________
// Delete tomcat will trigger following actions on type loader
loader.unloadType("tosca.nodes.Tomcat");
// Tomcat hosted on compute
loader.unloadType("tosca.relationships.HostedOn");
// War hosted on tomcat
loader.unloadType("tosca.relationships.WarDeployedOn");
// _______________________________________________________________
loader.unloadType("tosca.nodes.War");
}
private void unloadGigaSpacesGroup() {
// _______________________________________________________________
// War connected to GigaSpaces
loader.unloadType("tosca.relationships.ConnectedTo");
// _______________________________________________________________
// Delete compute will trigger following actions on type loader
loader.unloadType("tosca.nodes.Compute");
// Java hosted on compute
loader.unloadType("tosca.relationships.HostedOn");
// GigaSpaces hosted on compute
loader.unloadType("tosca.relationships.HostedOn");
// _______________________________________________________________
// Delete relationship GigaSpaces depends on Java
loader.unloadType("tosca.relationships.DependsOn");
// _______________________________________________________________
// Delete java
loader.unloadType("tosca.nodes.Java");
// _______________________________________________________________
// Delete GigaSpaces will trigger following actions on type loader
loader.unloadType("tosca.nodes.GigaSpaces");
}
@Test
public void testStandardUseCase() {
loadTomcatGroup();
Assert.assertEquals(2, loader.getDependenciesMap().keySet().size());
Assert.assertTrue(loader.getDependenciesMap().containsKey(baseTypes));
Assert.assertTrue(loader.getDependenciesMap().containsKey(javaTypes));
Assert.assertEquals(Sets.newHashSet("tosca.nodes.Compute", "tosca.nodes.Java", "tosca.relationships.HostedOn", "tosca.relationships.DependsOn",
"tosca.relationships.WarDeployedOn", "tosca.nodes.War", "tosca.nodes.Tomcat"), loader.getDependenciesMap().get(baseTypes));
Assert.assertEquals(Sets.newHashSet("tosca.nodes.Java", "tosca.nodes.Tomcat", "tosca.nodes.War", "tosca.relationships.WarDeployedOn"),
loader.getDependenciesMap().get(javaTypes));
Assert.assertEquals(1, loader.getTypeUsagesMap().get("tosca.nodes.Compute").intValue());
Assert.assertEquals(1, loader.getTypeUsagesMap().get("tosca.nodes.Java").intValue());
Assert.assertEquals(1, loader.getTypeUsagesMap().get("tosca.nodes.Tomcat").intValue());
Assert.assertEquals(1, loader.getTypeUsagesMap().get("tosca.nodes.War").intValue());
Assert.assertEquals(2, loader.getTypeUsagesMap().get("tosca.relationships.HostedOn").intValue());
Assert.assertEquals(1, loader.getTypeUsagesMap().get("tosca.relationships.DependsOn").intValue());
Assert.assertEquals(1, loader.getTypeUsagesMap().get("tosca.relationships.WarDeployedOn").intValue());
unloadTomcatGroup();
Assert.assertTrue(loader.getDependenciesMap().isEmpty());
Assert.assertTrue(loader.getTypeUsagesMap().isEmpty());
}
@Test
public void testOverride() {
// All tomcat group nodes are placed first
loadTomcatGroup();
loadGigaSpacesGroup();
Assert.assertEquals(2, loader.getDependenciesMap().keySet().size());
Assert.assertTrue(loader.getDependenciesMap().containsKey(baseTypesV2));
Assert.assertTrue(loader.getDependenciesMap().containsKey(javaTypesV2));
Assert.assertEquals(Sets.newHashSet("tosca.nodes.Compute", "tosca.nodes.Java", "tosca.nodes.Tomcat", "tosca.relationships.HostedOn",
"tosca.relationships.DependsOn", "tosca.relationships.WarDeployedOn", "tosca.nodes.War", "tosca.nodes.GigaSpaces",
"tosca.relationships.ConnectedTo"), loader.getDependenciesMap().get(baseTypesV2));
Assert.assertEquals(
Sets.newHashSet("tosca.nodes.Java", "tosca.nodes.Tomcat", "tosca.nodes.War", "tosca.nodes.GigaSpaces", "tosca.relationships.WarDeployedOn"),
loader.getDependenciesMap().get(javaTypesV2));
unloadTomcatGroup();
unloadGigaSpacesGroup();
Assert.assertTrue(loader.getDependenciesMap().isEmpty());
Assert.assertTrue(loader.getTypeUsagesMap().isEmpty());
}
}