diff --git a/azkaban-common/src/test/java/azkaban/executor/mail/DefaultMailCreatorTest.java b/azkaban-common/src/test/java/azkaban/executor/mail/DefaultMailCreatorTest.java
index 3fbb68f..b590f4c 100644
--- a/azkaban-common/src/test/java/azkaban/executor/mail/DefaultMailCreatorTest.java
+++ b/azkaban-common/src/test/java/azkaban/executor/mail/DefaultMailCreatorTest.java
@@ -13,11 +13,9 @@ import azkaban.flow.Node;
import azkaban.project.Project;
import azkaban.utils.EmailMessage;
import azkaban.utils.EmailMessageCreator;
-import com.google.common.base.Charsets;
+import azkaban.utils.TestUtils;
import com.google.common.collect.ImmutableList;
-import java.io.InputStream;
import java.util.TimeZone;
-import org.apache.commons.io.IOUtils;
import org.joda.time.DateTimeUtils;
import org.junit.After;
import org.junit.Before;
@@ -45,11 +43,6 @@ public class DefaultMailCreatorTest {
private String clientPortNumber;
private TimeZone defaultTz;
- public static String read(final String file) throws Exception {
- final InputStream is = DefaultMailCreatorTest.class.getResourceAsStream(file);
- return IOUtils.toString(is, Charsets.UTF_8).trim();
- }
-
@Before
public void setUp() throws Exception {
this.defaultTz = TimeZone.getDefault();
@@ -104,7 +97,8 @@ public class DefaultMailCreatorTest {
this.executableFlow, this.message, this.azkabanName, this.scheme, this.clientHostname,
this.clientPortNumber));
assertEquals("Flow 'mail-creator-test' has failed on unit-tests", this.message.getSubject());
- assertThat(read("errorEmail.html")).isEqualToIgnoringWhitespace(this.message.getBody());
+ assertThat(TestUtils.readResource("errorEmail.html", this))
+ .isEqualToIgnoringWhitespace(this.message.getBody());
}
@Test
@@ -116,7 +110,8 @@ public class DefaultMailCreatorTest {
this.clientPortNumber));
assertEquals("Flow 'mail-creator-test' has encountered a failure on unit-tests",
this.message.getSubject());
- assertThat(read("firstErrorMessage.html")).isEqualToIgnoringWhitespace(this.message.getBody());
+ assertThat(TestUtils.readResource("firstErrorMessage.html", this))
+ .isEqualToIgnoringWhitespace(this.message.getBody());
}
@Test
@@ -128,7 +123,8 @@ public class DefaultMailCreatorTest {
this.executableFlow, this.message, this.azkabanName, this.scheme, this.clientHostname,
this.clientPortNumber));
assertEquals("Flow 'mail-creator-test' has succeeded on unit-tests", this.message.getSubject());
- assertThat(read("successEmail.html")).isEqualToIgnoringWhitespace(this.message.getBody());
+ assertThat(TestUtils.readResource("successEmail.html", this))
+ .isEqualToIgnoringWhitespace(this.message.getBody());
}
}
diff --git a/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java b/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
index 11f72fa..e5c263e 100644
--- a/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
+++ b/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import azkaban.executor.ExecutableFlow;
-import azkaban.executor.mail.DefaultMailCreatorTest;
import azkaban.flow.Flow;
import azkaban.metrics.CommonMetrics;
import azkaban.metrics.MetricsManager;
@@ -94,7 +93,7 @@ public class EmailerTest {
emailer.alertOnError(exFlow);
verify(this.message).addAllToAddress(this.receiveAddrList);
verify(this.message).setSubject("Flow 'jobe' has failed on azkaban");
- assertThat(DefaultMailCreatorTest.read("errorEmail2.html"))
+ assertThat(TestUtils.readResource("errorEmail2.html", this))
.isEqualToIgnoringWhitespace(this.message.getBody());
}
diff --git a/azkaban-common/src/test/java/azkaban/utils/TestUtils.java b/azkaban-common/src/test/java/azkaban/utils/TestUtils.java
index 13e9ac5..df15785 100644
--- a/azkaban-common/src/test/java/azkaban/utils/TestUtils.java
+++ b/azkaban-common/src/test/java/azkaban/utils/TestUtils.java
@@ -24,8 +24,12 @@ import azkaban.test.executions.ExecutionsTestUtil;
import azkaban.user.User;
import azkaban.user.UserManager;
import azkaban.user.XmlUserManager;
+import com.google.common.base.Charsets;
+import org.apache.commons.io.IOUtils;
+
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
/**
@@ -77,4 +81,19 @@ public class TestUtils {
return manager;
}
+ /**
+ * Reads a resource into a String
+ *
+ * @param name Relative path to the resource (relative to the parent object's package)
+ * @param parent Instance of the class to use in finding the resource. The resource is looked up in the same package
+ * where the class of the parent object is in.
+ * @return Resource content as a String
+ * @throws IOException if an I/O error occurs
+ */
+ public static String readResource(final String name, final Object parent) throws IOException {
+ try (final InputStream is = parent.getClass().getResourceAsStream(name)) {
+ return IOUtils.toString(is, Charsets.UTF_8).trim();
+ }
+ }
+
}