package alien4cloud.orchestrators.services;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import alien4cloud.dao.IGenericSearchDAO;
import alien4cloud.model.orchestrators.locations.Location;
import alien4cloud.model.orchestrators.locations.LocationResourceTemplate;
import org.alien4cloud.tosca.model.templates.NodeTemplate;
import alien4cloud.orchestrators.locations.services.ILocationResourceService;
import alien4cloud.orchestrators.plugin.ILocationResourceAccessor;
import com.google.common.collect.Lists;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application-context-test.xml")
public class LocationResourceServiceTest {
@Resource(name = "alien-es-dao")
private IGenericSearchDAO alienDAO;
@Resource(name = "location-resource-service")
private ILocationResourceService locationResourceService;
private static final String LOCATION_ID = "location";
private static final String UNCONFIGURED_LOCATION_ID = "unconfigured-location";
private static final String CONFIGURED_TYPE = "configured_type";
private static final int TYPE_CONFIGURED_ELEMENTS = 20;
private static final int LOCATION_CONFIGURED_ELEMENTS = 100;
private static final String UNCONFIGURED_TYPE = "unconfigured_type";
@Before
public void init() {
alienDAO.delete(LocationResourceTemplate.class, QueryBuilders.matchAllQuery());
Assert.assertEquals(0, alienDAO.count(LocationResourceTemplate.class, QueryBuilders.matchAllQuery()));
// initialize random data for multiple locations
initLocation(LOCATION_ID);
}
private void initLocation(String locationId) {
Location location = new Location();
location.setId(LOCATION_ID);
alienDAO.save(location);
location.setId(UNCONFIGURED_LOCATION_ID);
alienDAO.save(location);
for (int i = 0; i < 5; i++) {
for (int j = 0; j < TYPE_CONFIGURED_ELEMENTS; j++) {
String type = i == 0 ? CONFIGURED_TYPE : CONFIGURED_TYPE + "." + i;
NodeTemplate template = new NodeTemplate();
template.setType(type);
template.setName("template_" + i + "_" + j);
LocationResourceTemplate lrt = new LocationResourceTemplate();
lrt.setId(UUID.randomUUID().toString());
lrt.setLocationId(locationId);
lrt.setGenerated(false);
lrt.setEnabled(true);
lrt.setService(false);
lrt.setTemplate(template);
lrt.setTypes(Lists.newArrayList(template.getType()));
alienDAO.save(lrt);
}
}
}
@Test
public void getResources() {
ILocationResourceAccessor accessor = locationResourceService.accessor(LOCATION_ID);
List<LocationResourceTemplate> resources = accessor.getResources();
Assert.assertEquals(LOCATION_CONFIGURED_ELEMENTS, resources.size());
}
@Test
public void getResourcesForUnconfiguredLocationShouldReturnEmptyList() {
ILocationResourceAccessor accessor = locationResourceService.accessor(UNCONFIGURED_LOCATION_ID);
List<LocationResourceTemplate> resources = accessor.getResources();
Assert.assertEquals(0, resources.size());
}
@Test
public void getResourcesOfType() {
ILocationResourceAccessor accessor = locationResourceService.accessor(LOCATION_ID);
List<LocationResourceTemplate> resources = accessor.getResources(CONFIGURED_TYPE);
Assert.assertEquals(TYPE_CONFIGURED_ELEMENTS, resources.size());
}
@Test
public void getResourcesOfTypeForUnconfiguredTypeShouldReturnEmptyList() {
ILocationResourceAccessor accessor = locationResourceService.accessor(LOCATION_ID);
List<LocationResourceTemplate> resources = accessor.getResources(UNCONFIGURED_TYPE);
Assert.assertEquals(0, resources.size());
}
@Test
public void getResourcesOfTypeForUnconfiguredLocationShouldReturnEmptyList() {
ILocationResourceAccessor accessor = locationResourceService.accessor(UNCONFIGURED_LOCATION_ID);
List<LocationResourceTemplate> resources = accessor.getResources(CONFIGURED_TYPE);
Assert.assertEquals(0, resources.size());
}
}