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.EntityNotFoundException; 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 javax.persistence.PersistenceException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @Ignore @RunWith(Enclosed.class) public class LoadBalancerServiceImplIntegrationTest { @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:db-services-test.xml"}) @Transactional public static class WhenCreatingLoadBalancer { @Autowired private LoadBalancerService loadBalancerService; @PersistenceContext(unitName = "loadbalancing") private EntityManager entityManager; private LoadBalancer loadBalancer; @Before public void setUp() { 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("198.9.23.94"); 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); } @After public void tearDown() { } @Test(expected = PersistenceException.class) public void shouldThrowExceptionWhenLoadBalancerIsNull() throws Exception { loadBalancer = new LoadBalancer(); loadBalancerService.create(loadBalancer); } @Test public void shouldAssignIdLoadBalancerWhenCreateSucceeds() throws Exception { LoadBalancer dbLoadBalancer = loadBalancerService.create(loadBalancer); Assert.assertNotNull(dbLoadBalancer.getId()); } @Test public void shouldPutInBuildStatusWhenCreateSucceeds() throws Exception { LoadBalancer dbLoadBalancer = loadBalancerService.create(loadBalancer); Assert.assertEquals(dbLoadBalancer.getStatus(), LoadBalancerStatus.BUILD); } @Test public void shouldRetrieveLoadBalancerByIdAndAccountId() throws Exception { LoadBalancer dbLoadBalancer = loadBalancerService.create(loadBalancer); LoadBalancer loadBalancer = loadBalancerService.get(dbLoadBalancer.getId(), dbLoadBalancer.getAccountId()); Assert.assertNotNull(loadBalancer.getId()); } @Test(expected = EntityNotFoundException.class) public void shouldThrowExceptionWhenRetrieveingLoadBalancerByWrongAccountId() throws Exception { LoadBalancer dbLoadBalancer = loadBalancerService.create(loadBalancer); LoadBalancer loadBalancer = loadBalancerService.get(dbLoadBalancer.getId(), -99999); } @Test public void shouldRetrieveingLoadBalancerByStatus() throws Exception { List<LoadBalancer> dbLoadBalancers = loadBalancerService.getLoadbalancersGeneric(loadBalancer.getAccountId(), "BUILD", null, null, null, null, null); LoadBalancer dbLoadBalancer = loadBalancerService.create(loadBalancer); List<LoadBalancer> dbLoadBalancers1 = loadBalancerService.getLoadbalancersGeneric(loadBalancer.getAccountId(), "BUILD", null, null, null, null, null); Assert.assertEquals(dbLoadBalancers.size(), dbLoadBalancers1.size() - 1); } @Test public void shouldAllowUDPTCPVariationsOnSamePort() throws Exception { loadBalancer.setPort(50); loadBalancer.setProtocol(LoadBalancerProtocol.UDP); LoadBalancer dbLb = loadBalancerService.create(loadBalancer); LoadBalancer lb2 = loadBalancer; lb2.setPort(50); lb2.setProtocol(LoadBalancerProtocol.TCP); LoadBalancer dbLb2 = loadBalancerService.create(lb2); Assert.assertEquals(LoadBalancerProtocol.UDP, dbLb.getProtocol()); Assert.assertEquals(LoadBalancerProtocol.TCP, dbLb2.getProtocol()); Assert.assertEquals(true, dbLb.getPort().compareTo(50)); Assert.assertEquals(true, dbLb2.getPort().compareTo(50)); } @Test(expected = BadRequestException.class) public void shouldFailNONUDPTCPVariationsOnSamePort() throws Exception { loadBalancer.setPort(50); loadBalancer.setProtocol(LoadBalancerProtocol.UDP); LoadBalancer dbLb = loadBalancerService.create(loadBalancer); LoadBalancer lb2 = loadBalancer; lb2.setPort(50); lb2.setProtocol(LoadBalancerProtocol.HTTP); LoadBalancer dbLb2 = loadBalancerService.create(lb2); } @Test public void shouldGetFullLoadBalancerListFromNodeAddress() { //TODO: Add integration testing for accountid/loadbalancers?nodeaddress=10.1.1.1 when core refactoring Assert.assertTrue(true); } //TODO:Move.. @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:db-services-test.xml"}) @Transactional public static class WhenBatchDeletingLoadBalancer { @Autowired private LoadBalancerService loadBalancerService; @PersistenceContext(unitName = "loadbalancing") private EntityManager entityManager; private LoadBalancer loadBalancer; private List<LoadBalancer> loadBalancers; private List<Integer> ids; @Before public void setUp() { 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); } @After public void tearDown() { } @Test() public void shouldPassDeleteLbsToNextLayer() throws Exception { ids = new ArrayList<Integer>(); loadBalancers = new ArrayList<LoadBalancer>(); //not needed here... for (int i = 0; i <= 10; i++) { 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); loadBalancers.add(loadBalancerService.create(loadBalancer)); } for (LoadBalancer l : loadBalancers) { l.setStatus(LoadBalancerStatus.ACTIVE); ids.add(l.getId()); } loadBalancerService.prepareForDelete(1000, ids); } @Test(expected = BadRequestException.class) public void shouldThrowBadRequestExceptionIfOneOrManyNotActive() throws Exception { ids = new ArrayList<Integer>(); loadBalancers = new ArrayList<LoadBalancer>(); //not needed here... for (int i = 0; i <= 10; i++) { 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); loadBalancers.add(loadBalancerService.create(loadBalancer)); } for (LoadBalancer l : loadBalancers) { ids.add(l.getId()); } loadBalancerService.prepareForDelete(1000, ids); } } } }