aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorGiorgos Gaganis <gaganis@yahoo.com>2017-03-21 13:57:32 +0200
committerrnveach <rveach02@gmail.com>2017-03-22 09:41:49 -0400
commite6eb91a09f457233873370cea1725f47bef9637f (patch)
treecd3f1ff436ed05f6f840de841c461d39821b0955 /src/test
parente76321214095de771762216c5dbbe3db0203c541 (diff)
downloadcheckstyle-e6eb91a09f457233873370cea1725f47bef9637f.tar.gz
Issue #3962: Use Use try-catch to fix leaking unclosed InputStream in ImportControlLoader
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlLoaderTest.java54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlLoaderTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlLoaderTest.java
index 8866afd1d..a4f88987b 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlLoaderTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportControlLoaderTest.java
@@ -26,19 +26,31 @@ import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URI;
+import java.net.URL;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.BDDMockito;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.AttributesImpl;
import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ImportControlLoader.class, URI.class})
public class ImportControlLoaderTest {
private static String getPath(String filename) {
return "src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/" + filename;
@@ -114,4 +126,46 @@ public class ImportControlLoaderTest {
assertTrue(ex.getCause().getMessage().startsWith("unable to read"));
}
}
+
+ @Test
+ public void testInputStreamThatFailsOnClose() throws Exception {
+ final InputStream inputStream = PowerMockito.mock(InputStream.class);
+ Mockito.doThrow(IOException.class).when(inputStream).close();
+ final int available = Mockito.doThrow(IOException.class).when(inputStream).available();
+
+ final URL url = PowerMockito.mock(URL.class);
+ BDDMockito.given(url.openStream()).willReturn(inputStream);
+
+ final URI uri = PowerMockito.mock(URI.class);
+ BDDMockito.given(uri.toURL()).willReturn(url);
+
+ try {
+ ImportControlLoader.load(uri);
+ //Using available to bypass 'ignored result' warning
+ fail("exception expected " + available);
+ } catch (CheckstyleException ex) {
+ assertSame(IOException.class, ex.getCause().getClass());
+ }
+ Mockito.verify(inputStream).close();
+ }
+
+ @Test
+ public void testInputStreamFailsOnRead() throws Exception {
+ final InputStream inputStream = PowerMockito.mock(InputStream.class);
+ final int available = Mockito.doThrow(IOException.class).when(inputStream).available();
+
+ final URL url = PowerMockito.mock(URL.class);
+ BDDMockito.given(url.openStream()).willReturn(inputStream);
+
+ final URI uri = PowerMockito.mock(URI.class);
+ BDDMockito.given(uri.toURL()).willReturn(url);
+
+ try {
+ ImportControlLoader.load(uri);
+ //Using available to bypass 'ignored result' warning
+ fail("exception expected " + available);
+ } catch (CheckstyleException ex) {
+ assertSame(SAXParseException.class, ex.getCause().getClass());
+ }
+ }
}