package rocks.inspectit.shared.cs.ci;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.everyItem;
import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isIn;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.sameInstance;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.mockito.InjectMocks;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import rocks.inspectit.shared.all.testbase.TestBase;
import rocks.inspectit.shared.cs.ci.AlertingDefinition.ThresholdType;
/**
* @author Marius Oehler
*
*/
public class AlertingDefinitionTest extends TestBase {
@InjectMocks
AlertingDefinition alertingDefinition;
Map<String, String> tagMap = ImmutableMap.of("key1", "val1", "key2", "val2", "key3", "val3");
Map<String, String> tagMapBroken = ImmutableMap.of("key1", "val1", "", "val2", "key3", "");
List<String> emailList = Arrays.asList("test@example.com", "test2@example.com", "test3@example.com");
List<String> emailListBroken = Arrays.asList("test@example.com", null, "test3@example.com", "not_an_email@");
/**
* Test the {@link AlertingDefinition#putTag(String, String)},
* {@link AlertingDefinition#getTags()} and {@link AlertingDefinition#removeTag(String)}
* methods.
*/
public static class PutTag extends AlertingDefinitionTest {
@Test
public void putValidTag() {
String tagKey = "tagKey";
String tagValue = "tagValue";
alertingDefinition.putTag(tagKey, tagValue);
assertThat(alertingDefinition.getTags().entrySet(), hasSize(1));
assertThat(alertingDefinition.getTags(), hasEntry(tagKey, tagValue));
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putNullTagKey() {
alertingDefinition.putTag(null, "tagValue");
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putNullTagValue() {
alertingDefinition.putTag("tagKey", null);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putEmptyTagKey() {
alertingDefinition.putTag("", "tagValue");
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putEmptyTagValue() {
alertingDefinition.putTag("tagKey", "");
}
}
/**
* Test the {@link AlertingDefinition#removeTag(String)} method.
*/
public static class RemoveTag extends AlertingDefinitionTest {
@Test
public void removeTag() {
String key = "tagKey";
assertThat(alertingDefinition.getTags().size(), equalTo(0));
alertingDefinition.putTag(key, "tagValue");
assertThat(alertingDefinition.getTags().size(), equalTo(1));
alertingDefinition.removeTag(key);
assertThat(alertingDefinition.getTags().size(), equalTo(0));
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void removeNullTag() {
assertThat(alertingDefinition.getTags().size(), equalTo(0));
alertingDefinition.putTag("tagKey", "tagValue");
assertThat(alertingDefinition.getTags().size(), equalTo(1));
alertingDefinition.removeTag(null);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void removeEmptyTag() {
assertThat(alertingDefinition.getTags().size(), equalTo(0));
alertingDefinition.putTag("tagKey", "tagValue");
assertThat(alertingDefinition.getTags().size(), equalTo(1));
alertingDefinition.removeTag("");
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void removeUnknownTag() {
assertThat(alertingDefinition.getTags().size(), equalTo(0));
alertingDefinition.putTag("tagKey", "tagValue");
assertThat(alertingDefinition.getTags().size(), equalTo(1));
alertingDefinition.removeTag("unknownKey");
}
}
/**
* Test the {@link AlertingDefinition#replaceTags(Map)} method.
*/
public static class ReplaceTag extends AlertingDefinitionTest {
@Test
public void replaceTags() {
assertThat(alertingDefinition.getTags().size(), equalTo(0));
alertingDefinition.putTag("tagKey", "tagValue");
assertThat(alertingDefinition.getTags().size(), equalTo(1));
alertingDefinition.replaceTags(tagMap);
assertThat(alertingDefinition.getTags().size(), equalTo(3));
assertThat(alertingDefinition.getTags().entrySet(), everyItem(isIn(tagMap.entrySet())));
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void replaceNullTags() {
alertingDefinition.replaceTags(null);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void replaceBrokenTags() {
assertThat(alertingDefinition.getTags().size(), equalTo(0));
alertingDefinition.putTag("tagKey1", "tagValue");
alertingDefinition.putTag("tagKey2", "tagValue");
assertThat(alertingDefinition.getTags().size(), equalTo(2));
alertingDefinition.replaceTags(tagMapBroken);
}
}
/**
* Test the {@link AlertingDefinition#addNotificationEmailAddress(String)} method.
*/
public static class AddNotificationEmailAddress extends AlertingDefinitionTest {
@Test
public void putValidEmail() {
String mailAddress = "test@example.com";
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress(mailAddress);
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
String returnedEmail = alertingDefinition.getNotificationEmailAddresses().get(0);
assertThat(returnedEmail, equalTo(mailAddress));
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putDuplicateEmail() {
String mailAddress = "test@example.com";
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress(mailAddress);
alertingDefinition.addNotificationEmailAddress(mailAddress);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putEmptyEmail() {
alertingDefinition.addNotificationEmailAddress("");
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putNullEmail() {
alertingDefinition.addNotificationEmailAddress(null);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void putInvalidEmail() {
alertingDefinition.addNotificationEmailAddress("not_an_email@");
}
}
/**
* Test the {@link AlertingDefinition#removeNotificationEmailAddress(String)} method.
*/
public static class RemoveNotificationEmailAddress extends AlertingDefinitionTest {
@Test
public void removeEmail() {
String mailAddress = "test@example.com";
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress(mailAddress);
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
boolean result = alertingDefinition.removeNotificationEmailAddress(mailAddress);
assertThat(result, is(true));
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void removeNullEmail() {
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress("test@example.com");
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
alertingDefinition.removeNotificationEmailAddress(null);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void removeEmptyEmail() {
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress("test@example.com");
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
alertingDefinition.removeNotificationEmailAddress("");
}
@Test
public void removeUnknownEmail() {
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress("test@example.com");
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
boolean result = alertingDefinition.removeNotificationEmailAddress("other@example.com");
assertThat(result, is(false));
}
}
/**
* Test the {@link AlertingDefinition#replaceNotificationEmailAddresses(List)} method.
*/
public static class ReplaceNotificationEmailAddress extends AlertingDefinitionTest {
@Test
public void replaceEmails() {
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress("test@example.com");
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
alertingDefinition.replaceNotificationEmailAddresses(emailList);
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(3));
assertThat(alertingDefinition.getNotificationEmailAddresses(), everyItem(isIn(emailList)));
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void replaceBrokenEmails() {
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress("test@example.com");
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
alertingDefinition.replaceNotificationEmailAddresses(emailListBroken);
}
@Test(expectedExceptions = { IllegalArgumentException.class })
public void replaceEmailsByNull() {
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(0));
alertingDefinition.addNotificationEmailAddress("test@example.com");
assertThat(alertingDefinition.getNotificationEmailAddresses(), hasSize(1));
alertingDefinition.replaceNotificationEmailAddresses(null);
}
}
/**
* Test the {@link AlertingDefinition#clone()} method.
*/
public static class Clone extends AlertingDefinitionTest {
@Test
public void testClone() {
AlertingDefinition alertingDefinition = new AlertingDefinition();
alertingDefinition.setField("field");
alertingDefinition.setMeasurement("measurement");
alertingDefinition.setThreshold(1D);
alertingDefinition.setThresholdType(ThresholdType.LOWER_THRESHOLD);
alertingDefinition.setTimeRange(1L, TimeUnit.MINUTES);
alertingDefinition.addNotificationEmailAddress("test@example.com");
alertingDefinition.putTag("tagKey", "tagVal");
AlertingDefinition clone = new AlertingDefinition(alertingDefinition);
assertThat(alertingDefinition, not(sameInstance(clone)));
assertThat(alertingDefinition, equalTo(clone));
}
@Test
public void testCloneNull() {
AlertingDefinition clone = new AlertingDefinition(null);
assertThat(clone, notNullValue());
}
}
}