package org.openstack.atlas.api.mgmt.helpers;
import org.openstack.atlas.service.domain.pojos.HostUsageRecord;
import org.openstack.atlas.service.domain.usage.entities.HostUsage;
import org.openstack.atlas.api.helpers.CalendarHelper;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class HostUsageProcessorTest {
private List<HostUsage> rawHostUsage;
@Before
public void standUp() {
rawHostUsage = new ArrayList<HostUsage>();
}
@Test
public void shouldReturnNoUsageWhenPassingNull() {
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(null);
Assert.assertTrue(hostUsageRecords.isEmpty());
}
@Test
public void shouldReturnNoUsageWhenThereIsNoRawData() {
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(new ArrayList<HostUsage>());
Assert.assertTrue(hostUsageRecords.isEmpty());
}
@Test
public void shouldReturnOneUsageRecordWithZeroUsagePerHostWhenThereIsOneSnapshotRecordPerHost() {
Calendar now = Calendar.getInstance();
HostUsage usage1 = createHostUsage(1, 1, 100l, 100l, now);
rawHostUsage.add(usage1);
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(rawHostUsage);
Assert.assertEquals(1, hostUsageRecords.size());
final HostUsageRecord record = hostUsageRecords.get(0);
Assert.assertEquals(new Long(0), record.getHostUsages().get(0).getBandwidthIn());
Assert.assertEquals(new Long(0), record.getHostUsages().get(0).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(now), record.getHostUsages().get(0).getDay());
}
@Test
public void shouldReturnProperUsageWhenThereAreValidRawUsageRecordsInOneDay() {
Calendar startOfToday = CalendarHelper.zeroOutTime(Calendar.getInstance());
Calendar fiveMinutesLater = startOfToday;
fiveMinutesLater.add(Calendar.MINUTE, 5);
HostUsage usage1 = createHostUsage(1, 1, 100l, 100l, startOfToday);
HostUsage usage2 = createHostUsage(1, 1, 500l, 500l, fiveMinutesLater);
rawHostUsage.add(usage1);
rawHostUsage.add(usage2);
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(rawHostUsage);
Assert.assertEquals(1, hostUsageRecords.size());
final HostUsageRecord record = hostUsageRecords.get(0);
Assert.assertEquals(new Long(400), record.getHostUsages().get(0).getBandwidthIn());
Assert.assertEquals(new Long(400), record.getHostUsages().get(0).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfToday), record.getHostUsages().get(0).getDay());
}
@Test
public void shouldReturnProperUsageWhenThereAreValidRawUsageRecordsBelowThresholdInTwoDays() {
Calendar startOfToday = CalendarHelper.zeroOutTime(Calendar.getInstance());
Calendar fiveMinutesLater = startOfToday;
fiveMinutesLater.add(Calendar.MINUTE, 5);
Calendar tenMinutesLater = startOfToday;
tenMinutesLater.add(Calendar.MINUTE, 10);
Calendar startOfTomorrow = CalendarHelper.zeroOutTime(Calendar.getInstance());
startOfTomorrow.add(Calendar.DAY_OF_YEAR, 1);
Calendar tomorrowFiveMinutesLater = startOfTomorrow;
tomorrowFiveMinutesLater.add(Calendar.MINUTE, 5);
HostUsage usage1 = createHostUsage(1, 1, 100l, 100l, startOfToday);
HostUsage usage2 = createHostUsage(1, 1, 500l, 500l, fiveMinutesLater);
HostUsage usage3 = createHostUsage(1, 1, 500l, 500l, tenMinutesLater);
HostUsage usage4 = createHostUsage(1, 1, 900l, 900l, startOfTomorrow);
HostUsage usage5 = createHostUsage(1, 1, 300l, 300l, tomorrowFiveMinutesLater); // This record should get ignored
rawHostUsage.add(usage1);
rawHostUsage.add(usage2);
rawHostUsage.add(usage3);
rawHostUsage.add(usage4);
rawHostUsage.add(usage5);
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(rawHostUsage);
Assert.assertEquals(1, hostUsageRecords.size());
final HostUsageRecord record = hostUsageRecords.get(0);
Assert.assertEquals(new Long(400), record.getHostUsages().get(0).getBandwidthIn());
Assert.assertEquals(new Long(400), record.getHostUsages().get(0).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfToday), record.getHostUsages().get(0).getDay());
Assert.assertEquals(new Long(400), record.getHostUsages().get(1).getBandwidthIn());
Assert.assertEquals(new Long(400), record.getHostUsages().get(1).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfTomorrow), record.getHostUsages().get(1).getDay());
}
@Test
public void shouldReturnProperUsageWhenThereAreValidRawUsageRecordsAboveThresholdInTwoDays() {
Calendar startOfToday = CalendarHelper.zeroOutTime(Calendar.getInstance());
Calendar fiveMinutesLater = startOfToday;
fiveMinutesLater.add(Calendar.MINUTE, 5);
Calendar tenMinutesLater = startOfToday;
tenMinutesLater.add(Calendar.MINUTE, 10);
Calendar startOfTomorrow = CalendarHelper.zeroOutTime(Calendar.getInstance());
startOfTomorrow.add(Calendar.DAY_OF_YEAR, 1);
Calendar tomorrowFiveMinutesLater = startOfTomorrow;
tomorrowFiveMinutesLater.add(Calendar.MINUTE, 5);
HostUsage usage1 = createHostUsage(1, 1, 10000000000l, 10000000000l, startOfToday);
HostUsage usage2 = createHostUsage(1, 1, 50000000000l, 50000000000l, fiveMinutesLater);
HostUsage usage3 = createHostUsage(1, 1, 50000000000l, 50000000000l, tenMinutesLater);
HostUsage usage4 = createHostUsage(1, 1, 80000000000l, 80000000000l, startOfTomorrow);
HostUsage usage5 = createHostUsage(1, 1, 30000000000l, 30000000000l, tomorrowFiveMinutesLater);
rawHostUsage.add(usage1);
rawHostUsage.add(usage2);
rawHostUsage.add(usage3);
rawHostUsage.add(usage4);
rawHostUsage.add(usage5);
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(rawHostUsage);
Assert.assertEquals(1, hostUsageRecords.size());
final HostUsageRecord record = hostUsageRecords.get(0);
Assert.assertEquals(new Long(40000000000l), record.getHostUsages().get(0).getBandwidthIn());
Assert.assertEquals(new Long(40000000000l), record.getHostUsages().get(0).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfToday), record.getHostUsages().get(0).getDay());
Assert.assertEquals(new Long(60000000000l), record.getHostUsages().get(1).getBandwidthIn());
Assert.assertEquals(new Long(60000000000l), record.getHostUsages().get(1).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfTomorrow), record.getHostUsages().get(1).getDay());
}
@Test
public void shouldReturnProperUsageWhenThereAreValidRawUsageRecordsInTwoDaysAndZeusResets() {
Calendar startOfToday = CalendarHelper.zeroOutTime(Calendar.getInstance());
Calendar fiveMinutesLater = startOfToday;
fiveMinutesLater.add(Calendar.MINUTE, 5);
Calendar startOfTomorrow = CalendarHelper.zeroOutTime(Calendar.getInstance());
startOfTomorrow.add(Calendar.DAY_OF_YEAR, 1);
Calendar tomorrowFiveMinutesLater = startOfTomorrow;
tomorrowFiveMinutesLater.add(Calendar.MINUTE, 5);
HostUsage usage1 = createHostUsage(1, 1, 100l, 100l, startOfToday);
HostUsage usage2 = createHostUsage(1, 1, 500l, 500l, fiveMinutesLater);
HostUsage usage3 = createHostUsage(1, 1, 0l, 0l, startOfTomorrow);
HostUsage usage4 = createHostUsage(1, 1, 300l, 300l, tomorrowFiveMinutesLater);
rawHostUsage.add(usage1);
rawHostUsage.add(usage2);
rawHostUsage.add(usage3);
rawHostUsage.add(usage4);
List<org.openstack.atlas.service.domain.pojos.HostUsageRecord> hostUsageRecords = HostUsageProcessor.processRawHostUsageData(rawHostUsage);
Assert.assertEquals(1, hostUsageRecords.size());
final HostUsageRecord record = hostUsageRecords.get(0);
Assert.assertEquals(new Long(400), record.getHostUsages().get(0).getBandwidthIn());
Assert.assertEquals(new Long(400), record.getHostUsages().get(0).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfToday), record.getHostUsages().get(0).getDay());
Assert.assertEquals(new Long(300), record.getHostUsages().get(1).getBandwidthIn());
Assert.assertEquals(new Long(300), record.getHostUsages().get(1).getBandwidthOut());
Assert.assertEquals(CalendarHelper.zeroOutTime(startOfTomorrow), record.getHostUsages().get(1).getDay());
}
private HostUsage createHostUsage(Integer id, Integer hostId, Long bandwidthInSnapshot, Long bandwidthOutSnapshot, Calendar snapshotTime) {
HostUsage hostUsage = new HostUsage();
hostUsage.setId(id);
hostUsage.setHostId(hostId);
hostUsage.setBandwidthBytesIn(bandwidthInSnapshot);
hostUsage.setBandwidthBytesOut(bandwidthOutSnapshot);
hostUsage.setSnapshotTime(snapshotTime);
return hostUsage;
}
}