package org.openstack.atlas.service.domain.services;
import org.junit.*;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.openstack.atlas.service.domain.entities.*;
import org.openstack.atlas.service.domain.exceptions.BadRequestException;
import org.openstack.atlas.service.domain.exceptions.ImmutableEntityException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Ignore
@RunWith(Enclosed.class)
public class AccessListServiceImplIntegrationTest {
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:db-services-test.xml"})
@Transactional
public static class WhenAddingAccessLists {
@Autowired
private AccessListService accessListService;
@Autowired
private LoadBalancerService loadBalancerService;
@PersistenceContext(unitName = "loadbalancing")
private EntityManager entityManager;
private AccessList accessList;
private LoadBalancer loadBalancer;
@Before
public void setUp() throws Exception {
loadBalancer = new LoadBalancer();
loadBalancer.setAccountId(1000);
loadBalancer.setName("integration testing");
loadBalancer.setPort(80);
loadBalancer.setProtocol(LoadBalancerProtocol.POP3);
Set<Node> nodes = new HashSet<Node>();
Node node = new Node();
node.setIpAddress("2.2.2.2");
node.setPort(80);
node.setCondition(NodeCondition.ENABLED);
nodes.add(node);
loadBalancer.setNodes(nodes);
UserPages userPages = new UserPages();
userPages.setErrorpage("aError");
userPages.setLoadbalancer(loadBalancer);
loadBalancer.setUserPages(userPages);
loadBalancer = createLoadBalancerInActiveStatus(loadBalancer);
accessList = new AccessList();
accessList.setIpAddress("new ip");
accessList.setType(AccessListType.ALLOW);
}
@After
public void tearDown() {
}
@Test
public void shouldAddNewAccessListLoadBalancerWhenOperationSucceeds() throws Exception {
List<AccessList> accessListsBefore = accessListService.getAccessListByAccountIdLoadBalancerId(loadBalancer.getAccountId(), loadBalancer.getId());
LoadBalancer newLoadBalancer = new LoadBalancer();
newLoadBalancer.setId(loadBalancer.getId());
newLoadBalancer.setAccountId(loadBalancer.getAccountId());
accessList.setLoadbalancer(loadBalancer);
newLoadBalancer.addAccessList(accessList);
accessListService.updateAccessList(newLoadBalancer);
List<AccessList> accessListsAfter = accessListService.getAccessListByAccountIdLoadBalancerId(loadBalancer.getAccountId(), loadBalancer.getId());
Assert.assertEquals(accessListsBefore.size() + 1, accessListsAfter.size());
}
@Test(expected = ImmutableEntityException.class)
public void shouldThrowExceptionWhenLoaBalancerNotActive() throws Exception {
loadBalancerService.setStatus(loadBalancer, LoadBalancerStatus.ERROR);
LoadBalancer newLoadBalancer = new LoadBalancer();
newLoadBalancer.setId(loadBalancer.getId());
newLoadBalancer.setAccountId(loadBalancer.getAccountId());
newLoadBalancer.addAccessList(accessList);
accessListService.updateAccessList(newLoadBalancer);
}
@Test(expected = BadRequestException.class)
public void shouldThrowExceptionWhenDuplicateAccessLists() throws Exception {
LoadBalancer newLoadBalancer = new LoadBalancer();
newLoadBalancer.setId(loadBalancer.getId());
newLoadBalancer.setAccountId(loadBalancer.getAccountId());
accessList.setLoadbalancer(loadBalancer);
newLoadBalancer.addAccessList(accessList);
accessListService.updateAccessList(newLoadBalancer);
loadBalancerService.setStatus(loadBalancer, LoadBalancerStatus.ACTIVE);
newLoadBalancer.addAccessList(accessList);
accessListService.updateAccessList(newLoadBalancer);
}
@Test(expected = BadRequestException.class)
public void shouldThrowExceptionWhenAccessListLimitExceeded() throws Exception {
LoadBalancer newLoadBalancer = new LoadBalancer();
newLoadBalancer.setId(loadBalancer.getId());
newLoadBalancer.setAccountId(loadBalancer.getAccountId());
accessList.setLoadbalancer(loadBalancer);
for (int i = 0; i < 101; i++) {
accessList = new AccessList();
accessList.setIpAddress("new ip " + i);
accessList.setType(AccessListType.ALLOW);
newLoadBalancer.addAccessList(accessList);
}
accessListService.updateAccessList(newLoadBalancer);
}
private LoadBalancer createLoadBalancerInActiveStatus(LoadBalancer loadBalancer) throws Exception {
LoadBalancer dbLoadBalancer = loadBalancerService.create(loadBalancer);
loadBalancerService.setStatus(dbLoadBalancer, LoadBalancerStatus.ACTIVE);
return dbLoadBalancer;
}
}
}