/***************************************************************************** * * 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.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.ZepException; import org.zenoss.zep.dao.EventTriggerDao; import org.zenoss.zep.dao.EventTriggerSubscriptionDao; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.UUID; import static org.junit.Assert.*; @ContextConfiguration({ "classpath:zep-config.xml" }) public class EventTriggerSubscriptionDaoImplIT extends AbstractTransactionalJUnit4SpringContextTests { @Autowired public EventTriggerDao triggerDao; @Autowired public EventTriggerSubscriptionDao subscriptionDao; private boolean isInList(EventTriggerSubscription sub, List<EventTriggerSubscription> subscriptionList) throws ZepException { boolean found = false; for (EventTriggerSubscription subscription : subscriptionList) { if (sub.getUuid().equals(subscription.getUuid()) && sub.equals(subscription)) { assertFalse(found); found = true; } } return found; } private EventTrigger createTrigger() throws ZepException { EventTrigger.Builder triggerBuilder = EventTrigger.newBuilder(); triggerBuilder.setEnabled(true); triggerBuilder.setUuid(UUID.randomUUID().toString()); triggerBuilder.setName("my trigger"); triggerBuilder.setRule(Rule.newBuilder().setApiVersion(1) .setSource("False").setType(RuleType.RULE_TYPE_JYTHON).build()); EventTrigger trigger = triggerBuilder.build(); triggerDao.create(trigger); return trigger; } @Test public void testCreate() throws ZepException { EventTrigger trigger = createTrigger(); EventTriggerSubscription.Builder subBuilder = EventTriggerSubscription.newBuilder(); subBuilder.setDelaySeconds(30); subBuilder.setRepeatSeconds(90); subBuilder.setSendInitialOccurrence(false); subBuilder.setSubscriberUuid(UUID.randomUUID().toString()); subBuilder.setTriggerUuid(trigger.getUuid()); subBuilder.setUuid(UUID.randomUUID().toString()); EventTriggerSubscription sub = subBuilder.build(); // Test create assertEquals(sub.getUuid(), subscriptionDao.create(sub)); // Test findByUuid assertEquals(sub, subscriptionDao.findByUuid(sub.getUuid())); // Test findAll assertTrue(isInList(sub, subscriptionDao.findAll())); // Test findBySubscriberUuid assertTrue(isInList(sub, subscriptionDao.findBySubscriberUuid(sub.getSubscriberUuid()))); assertFalse(isInList(sub, subscriptionDao.findBySubscriberUuid(UUID.randomUUID().toString()))); subscriptionDao.delete(sub.getUuid()); assertNull(subscriptionDao.findByUuid(sub.getUuid())); } @Test public void testUpdateSubscriptions() throws ZepException { EventTrigger trigger1 = createTrigger(); EventTrigger trigger2 = createTrigger(); EventTrigger trigger3 = createTrigger(); final String subscriberUuid = UUID.randomUUID().toString(); EventTriggerSubscription.Builder subBuilder = EventTriggerSubscription.newBuilder(); subBuilder.setDelaySeconds(30); subBuilder.setRepeatSeconds(90); subBuilder.setSendInitialOccurrence(false); subBuilder.setSubscriberUuid(subscriberUuid); subBuilder.setTriggerUuid(trigger1.getUuid()); subBuilder.setUuid(UUID.randomUUID().toString()); EventTriggerSubscription subDeleted = subBuilder.build(); subscriptionDao.create(subDeleted); subBuilder.clear(); subBuilder.setDelaySeconds(15); subBuilder.setRepeatSeconds(45); subBuilder.setSendInitialOccurrence(true); subBuilder.setSubscriberUuid(subscriberUuid); subBuilder.setTriggerUuid(trigger2.getUuid()); subBuilder.setUuid(UUID.randomUUID().toString()); EventTriggerSubscription subBefore = subBuilder.build(); subscriptionDao.create(subBefore); // We now have two subscriptions for this subscriber and trigger // Now we call updateSubscriptions with a new trigger and a changed trigger, and verify the changes. subBuilder.setDelaySeconds(90); subBuilder.setRepeatSeconds(120); subBuilder.setSendInitialOccurrence(false); EventTriggerSubscription subAfter = subBuilder.build(); subBuilder.clear(); subBuilder.setDelaySeconds(5); subBuilder.setRepeatSeconds(0); subBuilder.setSendInitialOccurrence(true); subBuilder.setSubscriberUuid(subscriberUuid); subBuilder.setTriggerUuid(trigger3.getUuid()); subBuilder.setUuid(UUID.randomUUID().toString()); EventTriggerSubscription subNew = subBuilder.build(); subscriptionDao.updateSubscriptions(subscriberUuid, Arrays.asList(subAfter, subNew)); assertNull(subscriptionDao.findByUuid(subDeleted.getUuid())); List<EventTriggerSubscription> newSubscriptions = this.subscriptionDao.findBySubscriberUuid(subscriberUuid); assertEquals(2, newSubscriptions.size()); assertTrue(isInList(subAfter, newSubscriptions)); assertTrue(isInList(subNew, newSubscriptions)); assertFalse(isInList(subBefore, newSubscriptions)); assertEquals(subAfter, this.subscriptionDao.findByUuid(subBefore.getUuid())); // Now update with an empty list of subscriptions - verify that all are deleted subscriptionDao.updateSubscriptions(subscriberUuid, Collections.<EventTriggerSubscription> emptyList()); assertEquals(0, this.subscriptionDao.findBySubscriberUuid(subscriberUuid).size()); } }