package org.openstack.atlas.service.domain.services;
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.usage.entities.LoadBalancerHostUsage;
import org.openstack.atlas.service.domain.usage.entities.LoadBalancerMergedHostUsage;
import org.openstack.atlas.service.domain.usage.repository.HostUsageRefactorRepository;
import org.openstack.atlas.service.domain.usage.repository.LoadBalancerMergedHostUsageRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@RunWith(Enclosed.class)
public class UsageRefactorServiceIntegrationTest {
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:context.xml"})
@Transactional
public static class WhenTestingProcessRecordsNoEvents {
int hostId;
int accountId;
int loadBalancerId;
int itemId1;
int itemId2;
Calendar firstTime;
Calendar secondTime;
LoadBalancerHostUsage usage1;
LoadBalancerHostUsage usage2;
List<LoadBalancerHostUsage> usageList;
LoadBalancerMergedHostUsage mergedUsage1;
LoadBalancerMergedHostUsage mergedUsage2;
List<LoadBalancerMergedHostUsage> mergedUsageList;
@Autowired
public UsageRefactorService usageRefactorService;
@Autowired
public HostUsageRefactorRepository usageRefactorRepository;
@Autowired
public LoadBalancerMergedHostUsageRepository mergedUsageRepository;
@Before
public void standUp() {
usageRefactorRepository = mock(HostUsageRefactorRepository.class);
itemId1 = 1;
itemId2 = 2;
hostId = 1;
loadBalancerId = 121;
accountId = 12321;
firstTime = Calendar.getInstance();
firstTime.add(Calendar.HOUR, -1);
firstTime.add(Calendar.MINUTE, 10);
secondTime = Calendar.getInstance();
secondTime.add(Calendar.HOUR, -1);
secondTime.add(Calendar.MINUTE, 15);
usageList = new ArrayList<LoadBalancerHostUsage>();
usage1 = new LoadBalancerHostUsage();
usage1.setId(1L);
usage1.setHostId(hostId);
usage1.setPollTime(firstTime);
usage1.setNumVips(2);
usage1.setTagsBitmask(0);
usage1.setAccountId(accountId);
usage1.setConcurrentConnections(10);
usage1.setConcurrentConnectionsSsl(0);
usage1.setIncomingTransfer(100);
usage1.setIncomingTransferSsl(0);
usage1.setOutgoingTransfer(100);
usage1.setOutgoingTransferSsl(0);
usage1.setLoadbalancerId(loadBalancerId);
usageList.add(usage1);
usage2 = new LoadBalancerHostUsage();
usage2.setId(2L);
usage2.setHostId(hostId);
usage2.setPollTime(secondTime);
usage2.setNumVips(2);
usage2.setTagsBitmask(0);
usage2.setAccountId(accountId);
usage2.setConcurrentConnections(10);
usage2.setConcurrentConnectionsSsl(0);
usage2.setIncomingTransfer(100);
usage2.setIncomingTransferSsl(0);
usage2.setOutgoingTransfer(100);
usage2.setOutgoingTransferSsl(0);
usage2.setLoadbalancerId(loadBalancerId);
usageList.add(usage2);
mergedUsageList = new ArrayList<LoadBalancerMergedHostUsage>();
mergedUsage1 = new LoadBalancerMergedHostUsage();
mergedUsage1.setPollTime(firstTime);
mergedUsage1.setNumVips(2);
mergedUsage1.setTagsBitmask(0);
mergedUsage1.setAccountId(accountId);
mergedUsage1.setConcurrentConnections(10);
mergedUsage1.setConcurrentConnectionsSsl(0);
mergedUsage1.setIncomingTransfer(100);
mergedUsage1.setIncomingTransferSsl(0);
mergedUsage1.setOutgoingTransfer(100);
mergedUsage1.setOutgoingTransferSsl(0);
mergedUsage1.setLoadbalancerId(loadBalancerId);
mergedUsageList.add(mergedUsage1);
mergedUsage2 = new LoadBalancerMergedHostUsage();
mergedUsage2.setPollTime(secondTime);
mergedUsage2.setNumVips(2);
mergedUsage2.setTagsBitmask(0);
mergedUsage2.setAccountId(accountId);
mergedUsage2.setConcurrentConnections(10);
mergedUsage2.setConcurrentConnectionsSsl(0);
mergedUsage2.setIncomingTransfer(100);
mergedUsage2.setIncomingTransferSsl(0);
mergedUsage2.setOutgoingTransfer(100);
mergedUsage2.setOutgoingTransferSsl(0);
mergedUsage2.setLoadbalancerId(loadBalancerId);
mergedUsageList.add(mergedUsage2);
}
@Test
public void shouldSuccessfullyAddOneRecordForAnEvent() {
usage1.setId(null);
usageRefactorService.createUsageEvent(usage1);
Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> map = usageRefactorService.getAllLoadBalancerHostUsages();
assertTrue(map.size() == 1);
}
@Test
public void shouldAddMultipleRecordsForHostUsages() {
usageRefactorService.batchCreateLoadBalancerHostUsages(usageList);
Map<Integer,Map<Integer, List<LoadBalancerHostUsage>>> map = usageRefactorService.getAllLoadBalancerHostUsages();
assertTrue(map.get(loadBalancerId).get(hostId).size() == 2);
}
@Test
public void shouldAddMultipleRecordsForMergedHostUsages() {
usageRefactorService.batchCreateLoadBalancerMergedHostUsages(mergedUsageList);
List<LoadBalancerMergedHostUsage> map = mergedUsageRepository.getAllUsageRecordsInOrder();
assertTrue(map.size() == 2);
}
@Test
public void shouldDeleteOldMergedHostUsages() {
usageRefactorService.batchCreateLoadBalancerMergedHostUsages(mergedUsageList);
List<LoadBalancerMergedHostUsage> addMap = mergedUsageRepository.getAllUsageRecordsInOrder();
assertTrue(addMap.size() == 2);
usageRefactorService.batchDeleteLoadBalancerMergedHostUsages(addMap);
List<LoadBalancerMergedHostUsage> deleteMap = mergedUsageRepository.getAllUsageRecordsInOrder();
assertTrue(deleteMap.size() == 0);
}
@Test
public void shouldDeleteOldHostUsagesLessThanMaxId() {
usageRefactorService.batchCreateLoadBalancerHostUsages(usageList);
Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> addMap = usageRefactorService.getAllLoadBalancerHostUsages();
assertTrue(addMap.get(loadBalancerId).get(hostId).size() == 2);
usageRefactorService.deleteOldLoadBalancerHostUsages(Calendar.getInstance(), null, 1L);
Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> deleteMap = usageRefactorService.getAllLoadBalancerHostUsages();
assertTrue(deleteMap.size() == 1);
}
@Test
public void shouldDeleteOldHostUsagesButNotLoadBalancerIdsSpecified() {
ArrayList<Integer> loadbalancerIdsToKeep = new ArrayList<Integer>();
loadbalancerIdsToKeep.add(121);
usageRefactorService.batchCreateLoadBalancerHostUsages(usageList);
Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> addMap = usageRefactorService.getAllLoadBalancerHostUsages();
assertTrue(addMap.get(loadBalancerId).get(hostId).size() == 2);
usageRefactorService.deleteOldLoadBalancerHostUsages(Calendar.getInstance(), loadbalancerIdsToKeep, 2L);
Map<Integer, Map<Integer, List<LoadBalancerHostUsage>>> deleteMap = usageRefactorService.getAllLoadBalancerHostUsages();
assertTrue(deleteMap.get(loadBalancerId).get(hostId).size() == 2);
}
}
}