/***************************************************************************** * * Copyright (C) Zenoss, Inc. 2011, all rights reserved. * * This content is made available according to terms specified in * License.zenoss under the directory where your Zenoss product is installed. * ****************************************************************************/ package org.zenoss.zep.dao.impl; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.zenoss.protobufs.zep.Zep.EventTime; import org.zenoss.zep.UUIDGenerator; import org.zenoss.zep.ZepException; import org.zenoss.zep.dao.EventSummaryDao; import org.zenoss.zep.dao.EventTimeDao; import java.util.ArrayList; import java.util.Date; import java.util.List; import static org.junit.Assert.*; @ContextConfiguration({ "classpath:zep-config.xml" }) public class EventTimeDaoImplIT extends AbstractTransactionalJUnit4SpringContextTests { @Autowired public EventTimeDao dao; @Autowired public EventSummaryDao eventSummaryDao; @Autowired public UUIDGenerator uuidGenerator; @After public void truncateTable() { // The event_time table is MyISAM instead of InnoDB so it doesn't support transactions. To get accurate // results from the unit tests we have to manually wipe the database contents after each test here. this.deleteFromTables(EventConstants.TABLE_EVENT_TIME); } private EventTime createEventTime(){ long time = System.currentTimeMillis(); return createEventTime(time); } private EventTime createEventTime(long processedTime){ String uuid = uuidGenerator.generate().toString(); return EventTime.newBuilder().setCreatedTime(processedTime).setProcessedTime(processedTime) .setFirstSeenTime(processedTime).setSummaryUuid(uuid).build(); } @Test public void testInsert() throws ZepException { EventTime evTime = createEventTime(); long time = evTime.getProcessedTime(); dao.save(evTime); List<EventTime> result = dao.findProcessedSince(new Date(time), 100); assertNotNull(result); assertEquals(1, result.size()); EventTime timeResult = result.iterator().next(); assertEquals(evTime, timeResult); } @Test public void testFindProcessedSinceDateGreater() throws Exception { int limit = 10; List<EventTime> et = new ArrayList<EventTime>(limit); for(int i = 0; i< limit; i++){ EventTime evTime = createEventTime(); et.add(evTime); dao.save(evTime); } //test using a time after all the events are processed long time = System.currentTimeMillis() + 1000; List<EventTime> result = dao.findProcessedSince(new Date(time), 100); assertNotNull(result); assertEquals(0, result.size()); } @Test public void testFindProcessedSince() throws Exception { int limit = 10; List<EventTime> et = new ArrayList<EventTime>(limit); long time = System.currentTimeMillis(); for(int i = 0; i< limit; i++){ //Make sure each event has a unique time so the sort properly when the query returns them EventTime evTime = createEventTime(time + i); et.add(evTime); dao.save(evTime); } //test using the time from first event time time = et.get(0).getProcessedTime(); List<EventTime> result = dao.findProcessedSince(new Date(time), 100); assertNotNull(result); assertEquals(10, result.size()); assertEquals(et, result); } @Test public void testFindProcessedSinceLimit() throws Exception { int limit = 10; List<EventTime> et = new ArrayList<EventTime>(limit); long processedTime = System.currentTimeMillis(); for(int i = 0; i< limit; i++){ //Make sure each event has a unique time so they sort properly when the query returns them EventTime evTime = createEventTime(processedTime + i); et.add(evTime); dao.save(evTime); } //test using time from the first event time long time = et.get(0).getProcessedTime(); List<EventTime> result = dao.findProcessedSince(new Date(time), 2); assertNotNull(result); assertEquals(2, result.size()); assertEquals(et.subList(0,2), result); //test using time from the 5th event time time = et.get(4).getProcessedTime(); result = dao.findProcessedSince(new Date(time), 2); assertNotNull(result); assertEquals(2, result.size()); assertEquals(et.subList(4,6), result); } }