package org.openstack.atlas.service.domain.repository;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.openstack.atlas.service.domain.Base;
import org.openstack.atlas.service.domain.entities.*;
import org.openstack.atlas.service.domain.exceptions.BadRequestException;
import org.openstack.atlas.service.domain.exceptions.EntityNotFoundException;
import org.openstack.atlas.service.domain.pojos.LbIdAccountId;
import org.openstack.atlas.util.common.CalendarUtils;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.Calendar;
import java.util.Set;
import org.openstack.atlas.util.debug.Debug;
@RunWith(Enclosed.class)
public class LoadBalancerRepositoryITest {
@RunWith(SpringJUnit4ClassRunner.class)
public static class WhenGettingLoadBalancersActiveDuringPeriod extends Base {
@Before
@Override
public void standUp() throws Exception {
super.standUp();
loadBalancer = new LoadBalancer();
loadBalancer.setName("Test Load Balancer");
loadBalancer.setAccountId(accountId);
loadBalancer.setAlgorithm(LoadBalancerAlgorithm.RANDOM);
loadBalancer.setProtocol(LoadBalancerProtocol.HTTP);
loadBalancer.setPort(80);
loadBalancer.setConnectionLogging(false);
loadBalancer.setContentCaching(false);
loadBalancer.setHttpsRedirect(false);
loadBalancer.setHalfClosed(false);
loadBalancer.setTimeout(100);
Node node = new Node();
node.setIpAddress("10.0.0.1");
node.setPort(80);
node.setCondition(NodeCondition.ENABLED);
loadBalancer.addNode(node);
loadBalancer = loadBalancerService.create(loadBalancer);
Debug.nop();
}
@After
@Override
public void tearDown() throws Exception {
loadBalancerRepository.delete(loadBalancer);
super.tearDown();
}
private void setupAccountLimits(LimitType loadbalancerLimitType, LimitType nodeLimitType) throws BadRequestException {
AccountLimit lbLimitForAccount = new AccountLimit();
lbLimitForAccount.setAccountId(accountId);
lbLimitForAccount.setLimitType(loadbalancerLimitType);
lbLimitForAccount.setLimit(20);
try {
accountLimitService.getLimit(accountId, AccountLimitType.LOADBALANCER_LIMIT);
} catch (EntityNotFoundException e) {
accountLimitService.save(lbLimitForAccount);
}
AccountLimit nodeLimitForAccount = new AccountLimit();
nodeLimitForAccount.setAccountId(accountId);
nodeLimitForAccount.setLimitType(nodeLimitType);
nodeLimitForAccount.setLimit(20);
try {
accountLimitService.getLimit(accountId, AccountLimitType.NODE_LIMIT);
} catch (EntityNotFoundException e) {
accountLimitService.save(nodeLimitForAccount);
}
}
private LimitType setupNodeLimit() {
LimitType nodeLimitType = new LimitType();
nodeLimitType.setName(AccountLimitType.NODE_LIMIT);
nodeLimitType.setDescription("Node Limit");
nodeLimitType.setDefaultValue(20);
if(accountLimitRepository.getAllLimitTypes().size() < 2) {
accountLimitRepository.save(nodeLimitType);
}
return nodeLimitType;
}
private LimitType setupLoadBalancerLimit() {
LimitType loadbalancerLimitType = new LimitType();
loadbalancerLimitType.setName(AccountLimitType.LOADBALANCER_LIMIT);
loadbalancerLimitType.setDescription("LB Limit");
loadbalancerLimitType.setDefaultValue(20);
if(accountLimitRepository.getAllLimitTypes().size() < 2) {
accountLimitRepository.save(loadbalancerLimitType);
}
return loadbalancerLimitType;
}
private Host setupTestHost(Cluster cluster) {
Host host = new Host();
host.setCluster(cluster);
host.setName("test host");
host.setHostStatus(HostStatus.ACTIVE_TARGET);
host.setMaxConcurrentConnections(1);
host.setCoreDeviceId("someId");
host.setManagementIp("10.0.0.1");
host.setEndpoint("endpoint");
host.setRestEndpoint("restEndpoint");
host.setTrafficManagerName("trafficManagerName");
if (hostRepository.getAll().isEmpty()) {
hostRepository.save(host);
}
return host;
}
private Cluster setupTestCluster() {
Cluster cluster = new Cluster();
cluster.setDataCenter(DataCenter.DFW);
cluster.setDescription("cluster description");
cluster.setName("testCluster");
cluster.setPassword("cluster password");
cluster.setUsername("cluster username");
cluster.setStatus(org.openstack.atlas.docs.loadbalancers.api.management.v1.ClusterStatus.ACTIVE);
if (clusterRepository.getAll().isEmpty()) {
clusterRepository.save(cluster);
}
return cluster;
}
@Test
public void shouldReturnLoadBalancerWhenTimestampsMatchPeriod() throws Exception {
String provisioned = "2013-04-10 05:00:00";
loadBalancer = loadBalancerRepository.getById(loadBalancer.getId());
loadBalancer.setProvisioned(CalendarUtils.stringToCalendar(provisioned));
loadBalancer.setStatus(LoadBalancerStatus.ACTIVE);
loadBalancer = loadBalancerService.update(loadBalancer);
Assert.assertEquals(provisioned, CalendarUtils.calendarToString(loadBalancer.getProvisioned()));
final Calendar now = Calendar.getInstance();
final Set<LbIdAccountId> loadBalancersActiveDuringPeriod = loadBalancerRepository.getLoadBalancersActiveDuringPeriod(loadBalancer.getProvisioned(), now);
Assert.assertFalse(loadBalancersActiveDuringPeriod.isEmpty());
}
}
}