/***************************************************************************** * * Copyright (C) Zenoss, Inc. 2010, 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.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.Event; import org.zenoss.protobufs.zep.Zep.EventSummary; import org.zenoss.protobufs.zep.Zep.EventTrigger; import org.zenoss.protobufs.zep.Zep.EventTriggerSubscription; import org.zenoss.protobufs.zep.Zep.Rule; import org.zenoss.protobufs.zep.Zep.RuleType; import org.zenoss.zep.UUIDGenerator; import org.zenoss.zep.ZepException; import org.zenoss.zep.dao.EventSignalSpool; import org.zenoss.zep.dao.EventSignalSpoolDao; import org.zenoss.zep.dao.EventSummaryDao; import org.zenoss.zep.dao.EventTriggerDao; import org.zenoss.zep.dao.EventTriggerSubscriptionDao; import org.zenoss.zep.impl.EventPreCreateContextImpl; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; import static org.junit.Assert.*; @ContextConfiguration({ "classpath:zep-config.xml" }) public class EventSignalSpoolDaoImplIT extends AbstractTransactionalJUnit4SpringContextTests { @Autowired public EventSignalSpoolDao dao; @Autowired public EventSummaryDao eventSummaryDao; @Autowired public EventTriggerDao triggerDao; @Autowired public EventTriggerSubscriptionDao subscriptionDao; @Autowired public UUIDGenerator uuidGenerator; private EventSummary createSummary(Event event) throws ZepException { String uuid = eventSummaryDao.create(event, new EventPreCreateContextImpl()); return eventSummaryDao.findByUuid(uuid); } private EventSummary createSampleSummary() throws ZepException { Event event = EventTestUtils.createSampleEvent(); return createSummary(event); } private EventTrigger createTrigger() throws ZepException { EventTrigger.Builder triggerBuilder = EventTrigger.newBuilder(); triggerBuilder.setUuid(UUID.randomUUID().toString()); Rule.Builder ruleBuilder = Rule.newBuilder(); ruleBuilder.setApiVersion(5); ruleBuilder.setSource("my content"); ruleBuilder.setType(RuleType.RULE_TYPE_JYTHON); triggerBuilder.setRule(ruleBuilder.build()); final EventTrigger trigger = triggerBuilder.build(); triggerDao.create(trigger); return trigger; } private EventTriggerSubscription createSubscription() throws ZepException { final EventTrigger trigger = createTrigger(); EventTriggerSubscription.Builder subscriptionBuilder = EventTriggerSubscription.newBuilder(); subscriptionBuilder.setSubscriberUuid(UUID.randomUUID().toString()); subscriptionBuilder.setTriggerUuid(trigger.getUuid()); EventTriggerSubscription triggerSubscription = subscriptionBuilder.build(); String uuid = subscriptionDao.create(triggerSubscription); return EventTriggerSubscription.newBuilder(triggerSubscription).setUuid(uuid).build(); } private void compareSpool(EventSignalSpool existing, EventSignalSpool found) { assertEquals(existing.getUuid(), found.getUuid()); assertEquals(existing.getEventCount(), found.getEventCount()); assertEquals(existing.getCreated(), found.getCreated()); assertEquals(existing.getEventSummaryUuid(), found.getEventSummaryUuid()); assertEquals(existing.getSubscriptionUuid(), found.getSubscriptionUuid()); assertEquals(existing.getFlushTime(), found.getFlushTime()); assertEquals(existing.isSentSignal(), found.isSentSignal()); } @Test public void testInsert() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); compareSpool(spool, dao.findByUuid(spool.getUuid())); dao.delete(spool.getUuid()); assertNull(dao.findByUuid(spool.getUuid())); // Test creating with sentSignal=true spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); spool.setSentSignal(true); dao.create(spool); compareSpool(spool, dao.findByUuid(spool.getUuid())); dao.delete(spool.getUuid()); assertNull(dao.findByUuid(spool.getUuid())); } @Test public void testDeleteByTriggerAndSummary() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); compareSpool(spool, dao.findByUuid(spool.getUuid())); assertEquals( 1, dao.delete(subscription.getTriggerUuid(), eventSummary.getUuid())); assertNull(dao.findByUuid(spool.getUuid())); } @Test public void testDeleteByTrigger() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); compareSpool(spool, dao.findByUuid(spool.getUuid())); assertEquals(1, dao.deleteByTriggerUuid(subscription.getTriggerUuid())); assertNull(dao.findByUuid(spool.getUuid())); } @Test public void testUpdateFlushTime() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); compareSpool(spool, dao.findByUuid(spool.getUuid())); spool.setFlushTime(spool.getFlushTime() + 600L); dao.update(spool); assertEquals(spool.getFlushTime(), dao.findByUuid(spool.getUuid()).getFlushTime()); } @Test public void testFindByTriggerAndSummary() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); compareSpool(spool, dao.findBySubscriptionAndEventSummaryUuids(subscription.getUuid(), eventSummary.getUuid())); } @Test public void findAllDue() throws ZepException { // Create two events with past flush time, two with future Set<String> pastUuids = new HashSet<String>(); Set<String> futureUuids = new HashSet<String>(); for (int i = 0; i < 4; i++) { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); if (i < 2) { pastUuids.add(spool.getUuid()); spool.setFlushTime(System.currentTimeMillis() - 5000L); } else { futureUuids.add(spool.getUuid()); spool.setFlushTime(System.currentTimeMillis() + 5000L); } dao.create(spool); } List<EventSignalSpool> due = dao.findAllDue(); assertEquals(pastUuids.size(), due.size()); for (EventSignalSpool dueSpool : due) { assertTrue(pastUuids.contains(dueSpool.getUuid())); } } @Test public void testFindBySummaryUuid() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); List<EventSignalSpool> spools = dao.findAllByEventSummaryUuid(eventSummary.getUuid()); assertEquals(1, spools.size()); compareSpool(spool, spools.get(0)); } @Test public void testDeleteByEventSummaryUuid() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); assertEquals(1, dao.deleteByEventSummaryUuid(eventSummary.getUuid())); assertEquals(0, dao.findAllByEventSummaryUuid(eventSummary.getUuid()).size()); } @Test public void testDeleteByEventSummaryUuids() throws ZepException { // Ensure deleting an empty collection doesn't trigger an error assertEquals(0, dao.deleteByEventSummaryUuids(Collections.<String>emptyList())); EventTriggerSubscription subscription1 = createSubscription(); EventSummary eventSummary1 = createSampleSummary(); EventSignalSpool spool1 = EventSignalSpool.buildSpool(subscription1, eventSummary1, uuidGenerator); dao.create(spool1); EventTriggerSubscription subscription2 = createSubscription(); EventSummary eventSummary2 = createSampleSummary(); EventSignalSpool spool2 = EventSignalSpool.buildSpool(subscription2, eventSummary2, uuidGenerator); dao.create(spool2); List<String> uuids = Arrays.asList(eventSummary1.getUuid(), eventSummary2.getUuid()); assertEquals(2, dao.deleteByEventSummaryUuids(uuids)); for (String uuid : uuids) { assertEquals(0, dao.findAllByEventSummaryUuid(uuid).size()); } } @Test public void testUpdate() throws ZepException { EventTriggerSubscription subscription = createSubscription(); EventSummary eventSummary = createSampleSummary(); EventSignalSpool spool = EventSignalSpool.buildSpool(subscription, eventSummary, uuidGenerator); dao.create(spool); spool.setFlushTime(System.currentTimeMillis()); spool.setEventCount(55); spool.setSentSignal(true); assertEquals(1, dao.update(spool)); compareSpool(spool, dao.findByUuid(spool.getUuid())); } }