/***************************************************************************** * * 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.rest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.zenoss.protobufs.JsonFormat; import org.zenoss.protobufs.zep.Zep.EventTrigger; import org.zenoss.protobufs.zep.Zep.EventTriggerSet; import org.zenoss.protobufs.zep.Zep.EventTriggerSubscription; import org.zenoss.protobufs.zep.Zep.EventTriggerSubscriptionSet; import org.zenoss.protobufs.zep.Zep.Rule; import org.zenoss.protobufs.zep.Zep.RuleType; import java.io.IOException; import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.List; import java.util.UUID; import static org.junit.Assert.*; public class TriggersResourceIT { private static final String TRIGGERS_URI = "/zeneventserver/api/1.0/triggers"; private RestClient client; @Before public void setup() { this.client = new RestClient(EventTrigger.getDefaultInstance(), EventTriggerSet.getDefaultInstance(), EventTriggerSubscriptionSet.getDefaultInstance()); } @After public void shutdown() throws IOException { this.client.close(); } private EventTrigger createTrigger() throws IOException { EventTrigger.Builder triggerBuilder = EventTrigger.newBuilder(); triggerBuilder.setUuid(UUID.randomUUID().toString()); Rule.Builder ruleBuilder = Rule.newBuilder(); ruleBuilder.setApiVersion(1); ruleBuilder.setSource("False"); ruleBuilder.setType(RuleType.RULE_TYPE_JYTHON); triggerBuilder.setRule(ruleBuilder.build()); final EventTrigger trigger = triggerBuilder.build(); assertEquals( HttpURLConnection.HTTP_CREATED, client.putProtobuf(TRIGGERS_URI + "/" + trigger.getUuid(), trigger).getResponseCode()); return trigger; } @Test public void testRest() throws IOException { client.getProtobuf(TRIGGERS_URI); client.getJson(TRIGGERS_URI); EventTrigger trigger = createTrigger(); String triggerUri = TRIGGERS_URI + "/" + trigger.getUuid(); { EventTrigger triggerFromRest = (EventTrigger) client.getProtobuf( triggerUri).getMessage(); assertEquals(trigger.getUuid(), triggerFromRest.getUuid()); assertEquals(trigger.getRule(), triggerFromRest.getRule()); } { EventTrigger triggerFromRest = (EventTrigger) client.getJson( triggerUri).getMessage(); assertEquals(trigger.getUuid(), triggerFromRest.getUuid()); assertEquals(trigger.getRule(), triggerFromRest.getRule()); } { EventTriggerSet set = (EventTriggerSet) client.getProtobuf( TRIGGERS_URI).getMessage(); boolean found = false; for (EventTrigger triggerFromRest : set.getTriggersList()) { if (triggerFromRest.getUuid().equals(trigger.getUuid()) && trigger.getRule().equals(triggerFromRest.getRule())) { found = true; break; } } assertTrue("Didn't find trigger in list of all triggers", found); } { EventTriggerSet set = (EventTriggerSet) client .getJson(TRIGGERS_URI).getMessage(); boolean found = false; for (EventTrigger triggerFromRest : set.getTriggersList()) { if (triggerFromRest.getUuid().equals(trigger.getUuid()) && trigger.getRule().equals(triggerFromRest.getRule())) { found = true; break; } } assertTrue("Didn't find trigger in list of all triggers", found); } } private void assertSubscriptionsEqual(EventTriggerSubscriptionSet expected, EventTriggerSubscriptionSet actual) throws IOException { assertEquals(expected.getSubscriptionsCount(), actual.getSubscriptionsCount()); int numFound = 0; for (EventTriggerSubscription subscription : expected.getSubscriptionsList()) { for (EventTriggerSubscription subscriptionFromRest : actual.getSubscriptionsList()) { if (subscription.equals(EventTriggerSubscription .newBuilder(subscriptionFromRest).clearUuid().build())) { numFound++; break; } } } assertEquals(String.format("EXPECTED:%n%s%nACTUAL:%n%s", JsonFormat.writeAsString(expected), JsonFormat.writeAsString(actual)), numFound, expected.getSubscriptionsCount()); } @Test public void testSubscriptions() throws IOException { /* Create subscriptions to 5 triggers */ String subscriberUuid = UUID.randomUUID().toString(); EventTriggerSubscriptionSet.Builder subscriptionBuilder = EventTriggerSubscriptionSet .newBuilder(); for (int i = 0; i < 5; i++) { EventTrigger trigger = createTrigger(); EventTriggerSubscription.Builder subBuilder = EventTriggerSubscription .newBuilder(); subBuilder.setDelaySeconds(30); subBuilder.setRepeatSeconds(60); subBuilder.setSendInitialOccurrence(false); subBuilder.setSubscriberUuid(subscriberUuid); subBuilder.setTriggerUuid(trigger.getUuid()); subscriptionBuilder.addSubscriptions(subBuilder.build()); } String subscriptionUri = TRIGGERS_URI + "/subscriptions/" + subscriberUuid; EventTriggerSubscriptionSet subscriptions = subscriptionBuilder.build(); assertEquals(HttpURLConnection.HTTP_NO_CONTENT, client.putProtobuf(subscriptionUri, subscriptions) .getResponseCode()); /* Verify all subscriptions are returned */ assertSubscriptionsEqual( subscriptions, (EventTriggerSubscriptionSet) client.getProtobuf( subscriptionUri).getMessage()); assertSubscriptionsEqual(subscriptions, (EventTriggerSubscriptionSet) client.getJson(subscriptionUri) .getMessage()); /* Remove all subscriptions with an empty set */ assertEquals( HttpURLConnection.HTTP_NO_CONTENT, client.putProtobuf(subscriptionUri, EventTriggerSubscriptionSet.getDefaultInstance()) .getResponseCode()); assertEquals( 0, ((EventTriggerSubscriptionSet) client.getProtobuf( subscriptionUri).getMessage()).getSubscriptionsCount()); assertEquals(0, ((EventTriggerSubscriptionSet) client.getJson(subscriptionUri) .getMessage()).getSubscriptionsCount()); /* Create all subscriptions again */ assertEquals(HttpURLConnection.HTTP_NO_CONTENT, client.putProtobuf(subscriptionUri, subscriptions) .getResponseCode()); assertSubscriptionsEqual( subscriptions, (EventTriggerSubscriptionSet) client.getProtobuf( subscriptionUri).getMessage()); assertSubscriptionsEqual(subscriptions, (EventTriggerSubscriptionSet) client.getJson(subscriptionUri) .getMessage()); /* Delete a few and update properties of others */ List<EventTriggerSubscription> tempSubscriptions = new ArrayList<EventTriggerSubscription>( subscriptions.getSubscriptionsList()); /* Remove a few triggers */ tempSubscriptions.remove(1); tempSubscriptions.remove(2); /* Modify a few triggers */ tempSubscriptions.set(1, EventTriggerSubscription.newBuilder(tempSubscriptions.get(1)) .setDelaySeconds(90).setRepeatSeconds(120).setSendInitialOccurrence(false).build()); tempSubscriptions.set(2, EventTriggerSubscription.newBuilder(tempSubscriptions.get(2)) .setDelaySeconds(150).setRepeatSeconds(720).setSendInitialOccurrence(false).build()); /* Add a new trigger */ tempSubscriptions.add(EventTriggerSubscription.newBuilder() .setDelaySeconds(600).setRepeatSeconds(0).setSendInitialOccurrence(false) .setSubscriberUuid(subscriberUuid) .setTriggerUuid(createTrigger().getUuid()).build()); subscriptions = EventTriggerSubscriptionSet.newBuilder() .addAllSubscriptions(tempSubscriptions).build(); assertEquals(HttpURLConnection.HTTP_NO_CONTENT, client.putProtobuf(subscriptionUri, subscriptions) .getResponseCode()); assertSubscriptionsEqual( subscriptions, (EventTriggerSubscriptionSet) client.getProtobuf( subscriptionUri).getMessage()); assertSubscriptionsEqual(subscriptions, (EventTriggerSubscriptionSet) client.getJson(subscriptionUri) .getMessage()); } }