azkaban-aplcache

Test cleanup: Close InputStream & refactor (#1752) - Close

5/11/2018 2:35:40 PM

Details

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();
+    }
+  }
+
 }