diff options
author | Giorgos Gaganis <gaganis@yahoo.com> | 2017-03-21 13:57:32 +0200 |
---|---|---|
committer | rnveach <rveach02@gmail.com> | 2017-03-22 09:41:49 -0400 |
commit | e6eb91a09f457233873370cea1725f47bef9637f (patch) | |
tree | cd3f1ff436ed05f6f840de841c461d39821b0955 /src/test | |
parent | e76321214095de771762216c5dbbe3db0203c541 (diff) | |
download | checkstyle-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.java | 54 |
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()); + } + } } |