package org.openstack.atlas.atom.mapper;
import com.rackspace.docs.usage.lbaas.CloudLoadBalancersType;
import com.rackspace.docs.usage.lbaas.StatusEnum;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.openstack.atlas.atomhopper.exception.AtomHopperMappingException;
import org.openstack.atlas.atomhopper.factory.UsageEntryFactory;
import org.openstack.atlas.atomhopper.factory.UsageEntryFactoryImpl;
import org.openstack.atlas.atomhopper.util.UUIDUtil;
import org.openstack.atlas.cfg.Configuration;
import org.openstack.atlas.restclients.atomhopper.config.AtomHopperConfiguration;
import org.openstack.atlas.restclients.atomhopper.util.AtomHopperUtil;
import org.openstack.atlas.service.domain.entities.LoadBalancer;
import org.openstack.atlas.service.domain.entities.Usage;
import org.w3._2005.atom.Type;
import org.w3._2005.atom.UsageEntry;
import javax.xml.bind.JAXBElement;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
@RunWith(Enclosed.class)
public class LbaasUsageDataMapperTest {
public static class WhenMappingUsageRecordToEntry {
Usage usageRecord1;
private Configuration configuration = new AtomHopperConfiguration();
UsageEntryFactory usageEntryFactory = new UsageEntryFactoryImpl();
@Before
public void standUp() {
usageRecord1 = new Usage();
usageRecord1.setEventType("CREATE_LOADBALANCER");
usageRecord1.setStartTime(AtomHopperUtil.getStartCal());
usageRecord1.setEndTime(AtomHopperUtil.getNow());
usageRecord1.setAccountId(12345);
usageRecord1.setAverageConcurrentConnections((double) 2345556);
usageRecord1.setAverageConcurrentConnectionsSsl((double) 234892357);
usageRecord1.setEntryVersion(1);
usageRecord1.setIncomingTransfer((long) 234235);
usageRecord1.setIncomingTransferSsl((long) 2343566);
usageRecord1.setNeedsPushed(true);
usageRecord1.setNumberOfPolls(23);
usageRecord1.setNumVips(2);
usageRecord1.setOutgoingTransfer((long) 26435);
usageRecord1.setOutgoingTransferSsl((long) 26435);
usageRecord1.setTags(1);
usageRecord1.setId(234);
LoadBalancer lb = new LoadBalancer();
lb.setId(234);
lb.setAccountId(12345);
usageRecord1.setLoadbalancer(lb);
}
@Test
public void shouldMapBasicRecord() throws AtomHopperMappingException {
usageEntryFactory.createEntry(usageRecord1);
}
@Test
public void shouldMapAvgCC() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((Object) usageRecord1.getAverageConcurrentConnections(), lbaasEntry.getValue().getAvgConcurrentConnections());
}
@Test
public void shouldMapAvgCCSSL() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((Object) usageRecord1.getAverageConcurrentConnectionsSsl(), lbaasEntry.getValue().getAvgConcurrentConnectionsSsl());
}
@Test
public void shouldMapProductSchemaVersion() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((Object) usageRecord1.getEntryVersion(), Integer.valueOf(lbaasEntry.getValue().getVersion()));
}
@Test
public void shouldMapBandwidthIn() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((long) usageRecord1.getIncomingTransfer(), lbaasEntry.getValue().getBandWidthIn());
}
@Test
public void shouldMapBandwidthInSSL() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((long) usageRecord1.getIncomingTransferSsl(), lbaasEntry.getValue().getBandWidthInSsl());
}
@Test
public void shouldMapBandwidthOut() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((long) usageRecord1.getOutgoingTransfer(), lbaasEntry.getValue().getBandWidthOut());
}
@Test
public void shouldMapBandwidthOutSSL() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((long) usageRecord1.getOutgoingTransferSsl(), lbaasEntry.getValue().getBandWidthOutSsl());
}
@Test
public void shouldMapNumPolls() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((Object) usageRecord1.getNumberOfPolls(), lbaasEntry.getValue().getNumPolls());
}
@Test
public void shouldMapNumVips() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals((Object) usageRecord1.getNumVips(), lbaasEntry.getValue().getNumVips());
}
@Test
public void shouldMapCoreEntryTitle() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertEquals("cloudLoadBalancers", entry.getTitle().getValue());
Assert.assertEquals(Type.TEXT, entry.getTitle().getType());
}
@Test
public void shouldMapCategory() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertEquals("loadBalancerUsage", entry.getCategory().get(0).getLabel());
Assert.assertEquals("plain", entry.getCategory().get(0).getTerm());
}
@Test
public void shouldGenerateUUIDMD5Hash() throws AtomHopperMappingException, NoSuchAlgorithmException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
String usageID = entry.getContent().getEvent().getId();
String uuid = usageRecord1.getId() + "_" + usageRecord1.getLoadbalancer().getId() + "_" + "DFW";
Assert.assertNotNull(UUIDUtil.genUUIDMD5Hash(uuid).toString());
}
@Test
public void shouldMapStatusSuspendedIfLBSuspended() throws AtomHopperMappingException {
usageRecord1.setEventType("SUSPEND_LOADBALANCER");
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals(StatusEnum.SUSPENDED, lbaasEntry.getValue().getStatus());
}
@Test
public void shouldMapStatusActive() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
JAXBElement<CloudLoadBalancersType> lbaasEntry = (JAXBElement<CloudLoadBalancersType>) entry.getContent().getEvent().getAny().get(0);
Assert.assertEquals(StatusEnum.ACTIVE, lbaasEntry.getValue().getStatus());
}
@Test
public void shouldSetEventTimeForDelete() throws AtomHopperMappingException {
usageRecord1.setEventType("DELETE_LOADBALANCER");
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertNotNull(entry.getContent().getEvent().getEventTime());
Assert.assertNull(entry.getContent().getEvent().getStartTime());
Assert.assertNull(entry.getContent().getEvent().getEndTime());
}
@Test
public void shouldNotSetEventTimeforNonDelete() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertNull(entry.getContent().getEvent().getEventTime());
Assert.assertNotNull(entry.getContent().getEvent().getStartTime());
Assert.assertNotNull(entry.getContent().getEvent().getEndTime());
}
@Test
public void shouldNotUpdateRefIdIfUUIDIsNull() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertNull(entry.getContent().getEvent().getReferenceId());
}
@Test
public void shouldUpdateRefIdIfCorrectedUsage() throws AtomHopperMappingException {
usageRecord1.setUuid("52ab8665-1a1c-3765-96cd-29d54d0f7624");
usageRecord1.setCorrected(true);
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertNotNull(entry.getContent().getEvent().getReferenceId());
Assert.assertNotSame(entry.getId(), entry.getContent().getEvent().getReferenceId());
Assert.assertNotSame(entry.getId(), usageRecord1.getUuid());
}
@Test
public void shouldNotUpdateRefIdIfUUIDNotNullAndCorrectedUsageFalse() throws AtomHopperMappingException {
usageRecord1.setUuid("52ab8665-1a1c-3765-96cd-29d54d0f7624");
usageRecord1.setCorrected(false);
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
Assert.assertNull(entry.getContent().getEvent().getReferenceId());
}
@Test
public void shouldNotMapRefIdForNewEntry() throws AtomHopperMappingException {
Map<Object, Object> entryMap = usageEntryFactory.createEntry(usageRecord1);
usageRecord1.setCorrected(true);
UsageEntry entry = (UsageEntry) entryMap.get("entryobject");
String entrystring = (String) entryMap.get("entrystring");
// System.out.print(entrystring);
Assert.assertFalse(entrystring.contains("referenceId"));
Assert.assertNull(entry.getContent().getEvent().getReferenceId());
}
}
}