@Before public void standUp() throws EntityNotFoundException, UnprocessableEntityException { lb = new LoadBalancer(); lbRepository = mock(LoadBalancerRepository.class); lbService = new LoadBalancerServiceImpl(); lbService.setLoadBalancerRepository(lbRepository); SslTermination sslTermination = new SslTermination(); sslTermination.setIntermediateCertificate("iCert"); sslTermination.setCertificate("cert"); sslTermination.setPrivatekey("aKey"); sslTermination.setEnabled(true); sslTermination.setSecurePort(445); sslTermination.setSecureTrafficOnly(false); lb.setSslTermination(sslTermination); lb.setStatus(LoadBalancerStatus.ACTIVE); defaultProtocol = new LoadBalancerProtocolObject(LoadBalancerProtocol.HTTP, "HTTP Protocol", 80, true); when(lbRepository.getByIdAndAccountId(Matchers.<Integer>any(), Matchers.<Integer>any())) .thenReturn(lb); // when(lbRepository.testAndSetStatus(Matchers.<Integer>any(), // Matchers.<Integer>any(),Matchers.<LoadBalancerStatus>any(), // Matchers.<Boolean>any())).thenReturn(true); }
@Test public void shouldSetStatusToBuildWhenStatusIsModified() { lb.setStatus(LoadBalancerStatus.ERROR); lbService.addDefaultValues(lb); Assert.assertEquals(LoadBalancerStatus.BUILD, lb.getStatus()); }
@Test(expected = BadRequestException.class) public void shouldRejectUpdateProtocolIfUsingSslTermination() throws Exception { LoadBalancer loadBalancer = new LoadBalancer(); loadBalancer.setProtocol(LoadBalancerProtocol.HTTPS); loadBalancer.setStatus(LoadBalancerStatus.ACTIVE); lbService.prepareForUpdate(loadBalancer); }
@Test(expected = BadRequestException.class) public void shouldFailWhenUpdatingPortToSSLPort() throws Exception { LoadBalancer loadBalancer = new LoadBalancer(); loadBalancer.setStatus(LoadBalancerStatus.ACTIVE); loadBalancer.setPort(445); lbService.prepareForUpdate(loadBalancer); }
@Test(expected = BadRequestException.class) public void shouldVerifySharedVipLbs() throws Exception { List<LoadBalancer> lbs = new ArrayList<LoadBalancer>(); LoadBalancer loadBalancer = new LoadBalancer(); loadBalancer.setId(3333); loadBalancer.setAccountId(55555); Set<LoadBalancerJoinVip> jvips = new HashSet<LoadBalancerJoinVip>(); LoadBalancerJoinVip jvip = new LoadBalancerJoinVip(); jvip.setVirtualIp(new VirtualIp()); jvip.setId(new LoadBalancerJoinVip.Id(loadBalancer.getId(), 676)); jvip.setLoadBalancer(lb); jvips.add(jvip); loadBalancer.setLoadBalancerJoinVipSet(jvips); List<LoadBalancer> sharedlbs = new ArrayList<LoadBalancer>(); LoadBalancer sharedlb = new LoadBalancer(); sharedlb.setId(9844); sharedlbs.add(sharedlb); when(virtualIpRepository.getLoadBalancersByVipId(Matchers.anyInt())).thenReturn(sharedlbs); lbs.add(loadBalancer); when(lbRepository.getById(Matchers.anyInt())).thenReturn(loadBalancer); List<LoadBalancer> newLbs; newLbs = lbService.reassignLoadBalancerHost(lbs); LoadBalancer newLb; newLb = newLbs.get(0); Assert.assertEquals((Object) 55555, newLb.getAccountId()); }
private void sendErrorToEventResource(LoadBalancer lb) { String title = "Error Updating Session Persistence"; String desc = "Could not update the session persistence settings at this time."; notificationService.saveSessionPersistenceEvent( lb.getUserName(), lb.getAccountId(), lb.getId(), title, desc, UPDATE_SESSION_PERSISTENCE, UPDATE, CRITICAL); }
@Test public void shouldNotAddDefaultValuesWhenValuesAreSet() { lb.setAlgorithm(LoadBalancerAlgorithm.LEAST_CONNECTIONS); lb.setProtocol(LoadBalancerProtocol.IMAPv3); lb.setConnectionLogging(true); lb.setPort(1234); lb.setSessionPersistence(SessionPersistence.HTTP_COOKIE); lbService.addDefaultValues(lb); Assert.assertEquals(LoadBalancerAlgorithm.LEAST_CONNECTIONS, lb.getAlgorithm()); Assert.assertEquals(LoadBalancerProtocol.IMAPv3, lb.getProtocol()); Assert.assertTrue(lb.isConnectionLogging()); Assert.assertEquals(1234, lb.getPort().intValue()); Assert.assertEquals(SessionPersistence.HTTP_COOKIE, lb.getSessionPersistence()); }
@Test public void shouldUpdateNodesStatusAndWeightsAppropriately() { Set<Node> nodes = new HashSet<Node>(); Node node1 = new Node(); Node node2 = new Node(); Node node3 = new Node(); node1.setCondition(NodeCondition.ENABLED); node2.setCondition(NodeCondition.DRAINING); node3.setCondition(NodeCondition.DISABLED); node1.setWeight(null); node2.setWeight(0); node3.setWeight(10); nodes.add(node1); nodes.add(node2); nodes.add(node3); lb.setNodes(nodes); lbService.addDefaultValues(lb); Assert.assertEquals(NodeStatus.ONLINE, node1.getStatus()); Assert.assertEquals(NodeStatus.ONLINE, node2.getStatus()); Assert.assertEquals(NodeStatus.ONLINE, node3.getStatus()); Assert.assertEquals(1, node1.getWeight().intValue()); Assert.assertEquals(0, node2.getWeight().intValue()); Assert.assertEquals(10, node3.getWeight().intValue()); }
@Test(expected = BadRequestException.class) public void shouldFailIfLbisSticky() throws Exception { when(lbRepository.getById(Matchers.<Integer>any())).thenReturn(lb); List<LoadBalancer> lbs = new ArrayList<LoadBalancer>(); LoadBalancer loadBalancer = new LoadBalancer(); loadBalancer.setId(3333); lb.setSticky(true); lbs.add(loadBalancer); List<LoadBalancer> newLbs; newLbs = lbService.reassignLoadBalancerHost(lbs); LoadBalancer newLb; newLb = newLbs.get(0); Assert.assertEquals((Object) 555555, newLb.getAccountId()); }
protected static void setupIvars() { Set<LoadBalancerJoinVip> vipList = new HashSet<LoadBalancerJoinVip>(); vip1 = new VirtualIp(); vip1.setId(TEST_VIP_ID); vip1.setIpAddress("10.69.0.59"); vip2 = new VirtualIp(); vip2.setId(TEST_VIP_ID + 1); vip2.setIpAddress("10.69.0.60"); LoadBalancerJoinVip loadBalancerJoinVip = new LoadBalancerJoinVip(); loadBalancerJoinVip.setVirtualIp(vip1); vipList.add(loadBalancerJoinVip); loadBalancerJoinVip = new LoadBalancerJoinVip(); loadBalancerJoinVip.setVirtualIp(vip2); vipList.add(loadBalancerJoinVip); Set<Node> nodeList = new HashSet<Node>(); node1 = new Node(); node2 = new Node(); node1.setIpAddress("127.0.0.1"); node2.setIpAddress("127.0.0.2"); node1.setPort(80); node2.setPort(80); node1.setCondition(ENABLED); node2.setCondition(DISABLED); node1.setWeight(1); node2.setWeight(1); nodeList.add(node1); nodeList.add(node2); LoadBalancer lb = new LoadBalancer(); lb.setId(TEST_LOADBALANCER_ID); lb.setAccountId(TEST_ACCOUNT_ID); lb.setPort(80); lb.setAlgorithm(ROUND_ROBIN); lb.setName("STM-TESTER"); lb.setProtocol(HTTP); lb.setNodes(nodeList); lb.setLoadBalancerJoinVipSet(vipList); lb.setUserPages(new UserPages()); STMTestBase.lb = lb; }
@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()); }
@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); }
@Test public void shouldAddDefaultValuesWhenNoValuesAreSet() { lbService.addDefaultValues(lb); Assert.assertEquals(LoadBalancerAlgorithm.RANDOM, lb.getAlgorithm()); Assert.assertEquals(LoadBalancerProtocol.HTTP, lb.getProtocol()); Assert.assertFalse(lb.isConnectionLogging()); Assert.assertEquals(defaultProtocol.getPort(), lb.getPort()); Assert.assertEquals(SessionPersistence.NONE, lb.getSessionPersistence()); Assert.assertEquals(LoadBalancerStatus.BUILD, lb.getStatus()); Assert.assertEquals(false, lb.isHalfClosed()); }
@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); }
protected static String errorFileName() throws InsufficientRequestException { return ZxtmNameBuilder.generateErrorPageName(lb.getId(), lb.getAccountId()); }
@Before public void standUp() throws EntityNotFoundException, UnprocessableEntityException, ClusterStatusException, NoAvailableClusterException { lb = new LoadBalancer(); lbRepository = mock(LoadBalancerRepository.class); lbService = new LoadBalancerServiceImpl(); lbService.setLoadBalancerRepository(lbRepository); hostService = new HostServiceImpl(); hostService.setLoadBalancerRepository(lbRepository); hostRepository = mock(HostRepository.class); hostService.setHostRepository(hostRepository); clusterService = new ClusterServiceImpl(); clusterService.setLoadBalancerRepository(lbRepository); clusterRepository = mock(ClusterRepository.class); clusterService.setClusterRepository(clusterRepository); virtualIpRepository = mock(VirtualIpRepository.class); loadBalancerStatusHistoryRepository = mock(LoadBalancerStatusHistoryRepository.class); loadBalancerStatusHistoryService = new LoadBalancerStatusHistoryServiceImpl(); loadBalancerStatusHistoryService.setLoadBalancerStatusHistoryRepository( loadBalancerStatusHistoryRepository); hostService.setClusterRepository(clusterRepository); // lbService.setHostService(hostService); // lbService.setLoadBalancerStatusHistoryService(loadBalancerStatusHistoryService); lbService.setVirtualIpRepository(virtualIpRepository); lb.setStatus(LoadBalancerStatus.ACTIVE); lb.setAccountId(555555); lb.setId(3333); lb.setPort(33); lb.setProtocol(LoadBalancerProtocol.HTTP); Host host = new Host(); host.setId(2); host.setHostStatus(HostStatus.ACTIVE); Cluster cluster = new Cluster(); cluster.setId(3); lb.setHost(host); when(hostRepository.getById(Matchers.<Integer>any())).thenReturn(host); when(hostRepository.getDefaultActiveHost(Matchers.<Integer>any())).thenReturn(host); when(clusterRepository.getActiveCluster(null, false)).thenReturn(cluster); when(hostService.getById(Matchers.<Integer>any())).thenReturn(host); when(loadBalancerStatusHistoryRepository.save( Matchers.<LoadBalancerStatusHistory>anyObject())) .thenReturn(new LoadBalancerStatusHistory()); // when(loadBalancerStatusHistoryService.save(lb.getAccountId(), lb.getId(), // status);) // when(lbRepository.testAndSetStatus(Matchers.<Integer>any(), // Matchers.<Integer>any(),Matchers.<LoadBalancerStatus>any(), // Matchers.<Boolean>any())).thenReturn(true); }
public static LoadBalancer generateLoadBalancer() { LoadBalancer loadBalancer = new LoadBalancer(); loadBalancer.setPort(port); Set<AccessList> accessLists = new HashSet<AccessList>(); AccessList item = new AccessList(); item.setUserName(username); item.setId(id); item.setIpAddress(ipv42); item.setType(AccessListType.DENY); item.setLoadbalancer(loadBalancer); accessLists.add(item); loadBalancer.setAccessLists(accessLists); loadBalancer.setAccountId(accountId); loadBalancer.setAlgorithm(LoadBalancerAlgorithm.ROUND_ROBIN); ConnectionLimit limit = new ConnectionLimit(); limit.setId(id); limit.setUserName(username); limit.setLoadBalancer(loadBalancer); limit.setMaxConnectionRate(maxConnectRate); limit.setMaxConnections(maxConnections); limit.setMinConnections(minConnections); limit.setRateInterval(rateInterval); loadBalancer.setConnectionLimit(limit); loadBalancer.setConnectionLogging(active); loadBalancer.setContentCaching(active); loadBalancer.setCreated(Calendar.getInstance()); loadBalancer.setUpdated(Calendar.getInstance()); loadBalancer.setHalfClosed(active); HealthMonitor monitor = new HealthMonitor(); monitor.setUserName(username); monitor.setId(id); monitor.setAttemptsBeforeDeactivation(numAttempts); monitor.setBodyRegex(regex); monitor.setDelay(delay); monitor.setHostHeader(header); monitor.setLoadbalancer(loadBalancer); monitor.setStatusRegex(regex); monitor.setPath(path); monitor.setTimeout(timeout); monitor.setType(HealthMonitorType.CONNECT); loadBalancer.setHealthMonitor(monitor); loadBalancer.setHost(new Host()); loadBalancer.setName(name); Set<Node> nodes = new HashSet<Node>(); Node node = new Node(); node.setId(id); node.setPort(port); node.setLoadbalancer(loadBalancer); node.setCondition(NodeCondition.ENABLED); node.setIpAddress(ipv43); List<NodeMeta> nodeMetadata = new ArrayList<NodeMeta>(); NodeMeta nodeMeta = new NodeMeta(); nodeMeta.setKey(metaKey); nodeMeta.setNode(node); nodeMeta.setValue(metaValue); nodeMeta.setId(id); nodeMeta.setUserName(username); nodeMetadata.add(nodeMeta); node.setNodeMetadata(nodeMetadata); node.setStatus(NodeStatus.ONLINE); node.setType(NodeType.PRIMARY); node.setWeight(weight); nodes.add(node); node = new Node(); node.setId(id + 1); node.setPort(port); node.setLoadbalancer(loadBalancer); node.setCondition(NodeCondition.ENABLED); node.setIpAddress(ipv44); nodeMetadata = new ArrayList<NodeMeta>(); nodeMeta = new NodeMeta(); nodeMeta.setKey(metaKey); nodeMeta.setNode(node); nodeMeta.setValue(metaValue); nodeMeta.setId(id + 1); nodeMeta.setUserName(username); nodeMetadata.add(nodeMeta); node.setNodeMetadata(nodeMetadata); node.setStatus(NodeStatus.ONLINE); node.setType(NodeType.PRIMARY); node.setWeight(weight); nodes.add(node); loadBalancer.setNodes(nodes); Set<LoadbalancerMeta> lbMetadata = new HashSet<LoadbalancerMeta>(); LoadbalancerMeta lbMeta = new LoadbalancerMeta(); lbMeta.setUserName(username); lbMeta.setId(id); lbMeta.setKey(metaKey); lbMeta.setValue(metaValue); lbMeta.setLoadbalancer(loadBalancer); lbMetadata.add(lbMeta); loadBalancer.setLoadbalancerMetadata(lbMetadata); loadBalancer.setProtocol(LoadBalancerProtocol.HTTP); RateLimit limits = new RateLimit(); limits.setLoadbalancer(loadBalancer); limits.setId(id); limits.setUserName(username); limits.setExpirationTime(Calendar.getInstance()); limits.setMaxRequestsPerSecond(maxRequests); Ticket ticket = new Ticket(); ticket.setUserName(username); ticket.setId(id); ticket.setLoadbalancer(loadBalancer); ticket.setComment(comment); ticket.setTicketId(ticketId); limits.setTicket(ticket); loadBalancer.setRateLimit(limits); loadBalancer.setSessionPersistence(SessionPersistence.HTTP_COOKIE); SslTermination termination = new SslTermination(); termination.setId(id); termination.setEnabled(active); termination.setUserName(username); termination.setSecurePort(securePort); termination.setCertificate(cert); termination.setPrivatekey(key); termination.setSecureTrafficOnly(inactive); termination.setLoadbalancer(loadBalancer); loadBalancer.setSslTermination(termination); loadBalancer.setStatus(LoadBalancerStatus.ACTIVE); loadBalancer.setSticky(inactive); Suspension suspension = new Suspension(); suspension.setUserName(username); suspension.setId(id); suspension.setLoadbalancer(loadBalancer); suspension.setUser(user); suspension.setReason(reason); suspension.setTicket(ticket); loadBalancer.setSuspension(suspension); Set<Ticket> tickets = new HashSet<Ticket>(); tickets.add(ticket); loadBalancer.setTickets(tickets); loadBalancer.setTimeout(timeout); UserPages pages = new UserPages(); pages.setLoadbalancer(loadBalancer); pages.setId(id); pages.setUserName(username); pages.setErrorpage(errorPage); loadBalancer.setUserPages(pages); loadBalancer.setId(id); loadBalancer.setUserName(username); Set<LoadBalancerJoinVip> vipList = spy(new HashSet<LoadBalancerJoinVip>()); VirtualIp vip = new VirtualIp(); vip.setId(1234); vip.setIpAddress("10.69.0.60"); LoadBalancerJoinVip loadBalancerJoinVip = new LoadBalancerJoinVip(); loadBalancerJoinVip.setVirtualIp(vip); vipList.add(loadBalancerJoinVip); loadBalancer.setLoadBalancerJoinVipSet(vipList); return loadBalancer; }
@Override public void doOnMessage(final Message message) throws Exception { LOG.debug("Entering " + getClass()); LOG.debug(message); LoadBalancer queueLb = getLoadbalancerFromMessage(message); LoadBalancer dbLoadBalancer; try { dbLoadBalancer = loadBalancerService.get(queueLb.getId(), queueLb.getAccountId()); } catch (EntityNotFoundException enfe) { String alertDescription = String.format("Load balancer '%d' not found in database.", queueLb.getId()); LOG.error(alertDescription, enfe); notificationService.saveAlert( queueLb.getAccountId(), queueLb.getId(), enfe, DATABASE_FAILURE.name(), alertDescription); sendErrorToEventResource(queueLb); return; } try { if (isRestAdapter()) { LOG.debug( String.format( "Updating session persistence for load balancer '%d' in STM...", dbLoadBalancer.getId())); reverseProxyLoadBalancerStmService.updateLoadBalancer( dbLoadBalancer, queueLb, loadBalancerService.getUserPages(queueLb.getId(), queueLb.getAccountId())); LOG.debug( String.format( "Successfully updated session persistence for load balancer '%d' in Zeus...", dbLoadBalancer.getId())); } else { if (dbLoadBalancer.getSessionPersistence() != SessionPersistence.NONE) { LOG.debug( String.format( "Updating session persistence for load balancer '%d' in ZXTM...", dbLoadBalancer.getId())); reverseProxyLoadBalancerService.updateSessionPersistence( dbLoadBalancer.getId(), dbLoadBalancer.getAccountId(), dbLoadBalancer.getSessionPersistence()); LOG.debug( String.format( "Successfully updated session persistence for load balancer '%d' in Zeus...", dbLoadBalancer.getId())); } } } catch (Exception e) { loadBalancerService.setStatus(dbLoadBalancer, LoadBalancerStatus.ERROR); String alertDescription = String.format( "Error updating session persistence in Zeus for loadbalancer '%d'.", dbLoadBalancer.getId()); LOG.error(alertDescription, e); notificationService.saveAlert( dbLoadBalancer.getAccountId(), dbLoadBalancer.getId(), e, ZEUS_FAILURE.name(), alertDescription); sendErrorToEventResource(queueLb); return; } // Update load balancer status in DB loadBalancerService.setStatus(dbLoadBalancer, LoadBalancerStatus.ACTIVE); if (dbLoadBalancer.getSessionPersistence() != SessionPersistence.NONE) { // Add atom entry String atomSummary = String.format( "Session persistence successfully updated to '%s'", dbLoadBalancer.getSessionPersistence().name()); notificationService.saveSessionPersistenceEvent( queueLb.getUserName(), dbLoadBalancer.getAccountId(), dbLoadBalancer.getId(), UPDATE_PERSISTENCE_TITLE, atomSummary, UPDATE_SESSION_PERSISTENCE, UPDATE, INFO); } LOG.info( String.format( "Update session persistence operation complete for load balancer '%d'.", dbLoadBalancer.getId())); }