package com.telefonica.euro_iaas.placement.core;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Vector;
import org.drools.agent.KnowledgeAgent;
import org.drools.agent.KnowledgeAgentFactory;
import org.drools.io.ResourceFactory;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import static org.mockito.Mockito.*;
import com.telefonica.euro_iaas.placement.dao.CloudProviderDao;
import com.telefonica.euro_iaas.placement.exception.EntityNotFoundException;
import com.telefonica.euro_iaas.placement.model.application.ServiceApplication;
import com.telefonica.euro_iaas.placement.model.application.VDC;
import com.telefonica.euro_iaas.placement.model.application.VEERequired;
import com.telefonica.euro_iaas.placement.model.provider.CloudProvider;
import com.telefonica.euro_iaas.placement.model.provider.Location;
import com.telefonica.euro_iaas.placement.model.provider.MemoryConf;
import com.telefonica.euro_iaas.placement.model.provider.VEE;
public class ProviderServiceTest {
ProviderService providerService;
@Before
public void setUp() {
List<CloudProvider> listCloudProviders = getCloudProviders();
CloudProviderDao cloudProviderDao = mock(CloudProviderDao.class);
when(cloudProviderDao.findAll()).thenReturn(listCloudProviders);
KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "MyAgent" );
kagent.applyChangeSet( ResourceFactory.newClassPathResource("changeset.xml"));
providerService = new ProviderService();
providerService.setCloudProviderDao(cloudProviderDao);
providerService.setkAgent(kagent);
}
private List<CloudProvider> getCloudProviders() {
List<CloudProvider> listCloudProvider = new Vector<CloudProvider>();
listCloudProvider.add(getCloudProvider("Amazon", 10, 10));
listCloudProvider.add(getCloudProvider("FlexiScale", 20, 20));
listCloudProvider.add(getCloudProvider("Dropbox", 5, 40));
listCloudProvider.add(getCloudProvider("Terabox", 100, 100));
return listCloudProvider;
}
private CloudProvider getCloudProvider(String name, int memory, int cost) {
CloudProvider cp = new CloudProvider();
Location loccp1 = new Location();
loccp1.setName("Madrid");
VEE vee1cp1 = new VEE();
vee1cp1.setName("VEE1" + name);
vee1cp1.setCost(cost);
MemoryConf memconfvee1cp1 = new MemoryConf();
memconfvee1cp1.setQuantity(memory);
vee1cp1.setMemoryConf(memconfvee1cp1);
VEE vee2cp1 = new VEE();
vee2cp1.setName("VEE2" + name);
vee2cp1.setCost(1);
MemoryConf memconfvee2cp1 = new MemoryConf();
memconfvee2cp1.setQuantity(1);
vee2cp1.setMemoryConf(memconfvee2cp1);
cp.setLocation(loccp1);
cp.setUri("http://www." + name + ".com");
cp.setName(name);
cp.setVees(new HashSet<VEE>(Arrays.asList(new VEE[] {vee1cp1, vee2cp1})));
vee1cp1.setCloudProvider(cp);
vee2cp1.setCloudProvider(cp);
return cp;
}
private VDC getVDC(int memory) {
ServiceApplication as1vdc = new ServiceApplication();
MemoryConf memconfvee1as1vdc = new MemoryConf();
memconfvee1as1vdc.setQuantity(memory);
VEERequired vee1as1vdc = new VEERequired();
vee1as1vdc.setMemoryConf(memconfvee1as1vdc);
vee1as1vdc.setName("veeRequired 1");
MemoryConf memconfvee2as1vdc = new MemoryConf();
memconfvee2as1vdc.setQuantity(1);
VEERequired vee2as1vdc = new VEERequired();
vee2as1vdc.setMemoryConf(memconfvee2as1vdc);
vee2as1vdc.setName("veeRequired 2");
as1vdc.setVeesRequired(new HashSet<VEERequired>(Arrays.asList(new VEERequired[] { vee1as1vdc, vee2as1vdc})));
vee1as1vdc.setServiceApplication(as1vdc);
vee2as1vdc.setServiceApplication(as1vdc);
VDC vdc = new VDC();
vdc.setName("Telefonica");
as1vdc.setvDC(vdc);
vdc.setServiceApplications(new HashSet<ServiceApplication>(Arrays
.asList(new ServiceApplication[] { as1vdc })));
return vdc;
}
@Test
public void testNotMatch() {
CloudProvider bestCloudProvider = null;
try {
bestCloudProvider = providerService.getBestCloudProvider(getVDC(120));
} catch (EntityNotFoundException e) {
e.printStackTrace();
}
Assert.assertNull(bestCloudProvider);
}
@Test
public void testBestMatch() {
CloudProvider bestCloudProvider = null;
try {
bestCloudProvider = providerService.getBestCloudProvider(getVDC(10));
} catch (EntityNotFoundException e) {
e.printStackTrace();
}
Assert.assertNotNull(bestCloudProvider);
}
@Test
public void testManyMatches() {
List<CloudProvider> cloudProviders = null;
try {
cloudProviders = providerService.getAllowedCloudProviders(getVDC(10));
} catch (EntityNotFoundException e) {
e.printStackTrace();
}
Assert.assertNotNull(cloudProviders);
Assert.assertTrue(cloudProviders.size() > 1);
}
}