Skip to content

Commit d1a00a4

Browse files
committed
Merge #517 from branch 'closeHttpOpenerResources' of github.com:metafacture/metafacture-core
2 parents db1a32b + 3beb8c4 commit d1a00a4

File tree

5 files changed

+74
-43
lines changed

5 files changed

+74
-43
lines changed

metafacture-io/src/main/java/org/metafacture/io/HttpOpener.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,16 @@ public void process(final String input) {
295295
final HttpURLConnection connection = requestBody != null ?
296296
doOutput(urlToOpen, requestBody) : doRedirects(urlToOpen);
297297

298-
final InputStream inputStream = getInputStream(connection);
299298
final String charset = getContentCharset(connection);
300299

301-
getReceiver().process(new InputStreamReader(
300+
try (
301+
InputStream inputStream = getInputStream(connection);
302+
Reader reader = new InputStreamReader(
302303
"gzip".equalsIgnoreCase(connection.getContentEncoding()) ?
303-
new GZIPInputStream(inputStream) : inputStream, charset));
304+
new GZIPInputStream(inputStream) : inputStream, charset)
305+
) {
306+
getReceiver().process(reader);
307+
}
304308
}
305309
catch (final IOException e) {
306310
throw new MetafactureException(e);

metafacture-io/src/test/java/org/metafacture/io/FileOpenerCompressionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void testOpenCompressedFiles() throws IOException {
9393
Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
9494
}
9595

96-
FileOpenerTest.assertData(receiver, DATA, file, o -> o.setCompression(compression));
96+
TestHelpers.assertFile(receiver, DATA, file, o -> o.setCompression(compression));
9797
}
9898

9999
}

metafacture-io/src/test/java/org/metafacture/io/FileOpenerTest.java

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.junit.Test;
2626
import org.junit.rules.TemporaryFolder;
2727
import org.mockito.Mock;
28-
import org.mockito.Mockito;
2928
import org.mockito.junit.MockitoJUnit;
3029
import org.mockito.junit.MockitoRule;
3130

@@ -40,7 +39,6 @@
4039
import java.nio.charset.StandardCharsets;
4140
import java.nio.file.Files;
4241
import java.nio.file.StandardCopyOption;
43-
import java.util.function.Consumer;
4442

4543
/**
4644
* Tests for class {@link FileOpener}.
@@ -66,7 +64,7 @@ public void testUtf8IsDefaultEncoding() throws IOException {
6664
Assume.assumeFalse("Default encoding is UTF-8: It is not possible to test whether FileOpener sets " +
6765
"the encoding to UTF-8 correctly.", StandardCharsets.UTF_8.equals(Charset.defaultCharset()));
6866

69-
assertData(receiver, DATA, createTestFile(), null);
67+
TestHelpers.assertFile(receiver, DATA, createTestFile(), null);
7068
}
7169

7270
@Test
@@ -93,27 +91,10 @@ private void testDecompressConcatenated(final boolean decompressConcatenated) th
9391
final String data = sb.toString();
9492
Assert.assertTrue(data.length() + " > " + maxBytes, data.length() > maxBytes);
9593

96-
assertData(receiver, decompressConcatenated ? data : data.substring(0, maxBytes),
94+
TestHelpers.assertFile(receiver, decompressConcatenated ? data : data.substring(0, maxBytes),
9795
copyResourceToTempFile("compressed-large.txt.bgzf"), o -> o.setDecompressConcatenated(decompressConcatenated));
9896
}
9997

100-
/*package-private*/ static void assertData(final ObjectReceiver<Reader> receiver, final String expected, final File file, final Consumer<FileOpener> consumer) {
101-
final StringBuilder sb = new StringBuilder();
102-
Mockito.doAnswer(i -> sb.append(ResourceUtil.readAll(i.getArgument(0)))).when(receiver).process(Mockito.any(Reader.class));
103-
104-
final FileOpener opener = new FileOpener();
105-
if (consumer != null) {
106-
consumer.accept(opener);
107-
}
108-
109-
opener.setReceiver(receiver);
110-
opener.process(file.getAbsolutePath());
111-
opener.closeStream();
112-
113-
Mockito.verify(receiver).process(Mockito.any(Reader.class));
114-
Assert.assertEquals(expected, sb.toString());
115-
}
116-
11798
private File createTestFile() throws IOException {
11899
final File file = tempFolder.newFile();
119100
try (OutputStream stream = new FileOutputStream(file)) {

metafacture-io/src/test/java/org/metafacture/io/HttpOpenerTest.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,12 @@
1616

1717
package org.metafacture.io;
1818

19-
import org.metafacture.commons.ResourceUtil;
2019
import org.metafacture.framework.ObjectReceiver;
2120

2221
import com.github.tomakehurst.wiremock.client.MappingBuilder;
2322
import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
2423
import com.github.tomakehurst.wiremock.client.WireMock;
2524
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
26-
import com.github.tomakehurst.wiremock.http.HttpHeader;
27-
import com.github.tomakehurst.wiremock.http.HttpHeaders;
2825
import com.github.tomakehurst.wiremock.http.RequestMethod;
2926
import com.github.tomakehurst.wiremock.junit.WireMockRule;
3027
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
@@ -34,10 +31,7 @@
3431
import org.junit.ComparisonFailure;
3532
import org.junit.Rule;
3633
import org.junit.Test;
37-
import org.mockito.ArgumentCaptor;
38-
import org.mockito.Captor;
3934
import org.mockito.Mock;
40-
import org.mockito.Mockito;
4135
import org.mockito.junit.MockitoJUnit;
4236
import org.mockito.junit.MockitoRule;
4337

@@ -49,8 +43,6 @@
4943
import java.util.function.Consumer;
5044
import java.util.zip.GZIPOutputStream;
5145

52-
import static org.mockito.Mockito.times;
53-
5446
/**
5547
* Tests for class {@link HttpOpener}.
5648
*
@@ -92,9 +84,6 @@ public final class HttpOpenerTest {
9284
@Mock
9385
private ObjectReceiver<Reader> receiver;
9486

95-
@Captor
96-
private ArgumentCaptor<Reader> processedObject;
97-
9887
@Test
9988
public void shouldPerformGetRequestWithInputAsUrlByDefault() throws IOException {
10089
shouldPerformRequest(TEST_URL, HttpOpener.Method.GET, (o, u) -> {});
@@ -341,17 +330,16 @@ private void shouldPerformRequest(final String input, final HttpOpener.Method me
341330

342331
WireMock.stubFor(stub);
343332

344-
opener.process(String.format(input, baseUrl));
333+
TestHelpers.assertReader(receiver, () -> {
334+
opener.process(String.format(input, baseUrl));
345335

346-
// use the opener a second time in a workflow:
347-
opener.process(String.format(input, baseUrl));
336+
// use the opener a second time in a workflow:
337+
opener.process(String.format(input, baseUrl));
348338

349-
opener.closeStream();
339+
opener.closeStream();
340+
}, responseBody, responseBody);
350341

351342
WireMock.verify(request);
352-
353-
Mockito.verify(receiver, times(2)).process(processedObject.capture());
354-
Assert.assertEquals(responseBody, ResourceUtil.readAll(processedObject.getValue()));
355343
}
356344

357345
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright 2024 hbz NRW
3+
*
4+
* Licensed under the Apache License, Version 2.0 the "License";
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.metafacture.io;
18+
19+
import org.metafacture.commons.ResourceUtil;
20+
import org.metafacture.framework.ObjectReceiver;
21+
22+
import org.junit.Assert;
23+
import org.mockito.Mockito;
24+
25+
import java.io.File;
26+
import java.io.Reader;
27+
import java.util.ArrayList;
28+
import java.util.Arrays;
29+
import java.util.List;
30+
import java.util.function.Consumer;
31+
32+
public final class TestHelpers {
33+
34+
public static void assertFile(final ObjectReceiver<Reader> receiver, final String expected, final File file, final Consumer<FileOpener> consumer) {
35+
assertReader(receiver, () -> {
36+
final FileOpener opener = new FileOpener();
37+
if (consumer != null) {
38+
consumer.accept(opener);
39+
}
40+
41+
opener.setReceiver(receiver);
42+
opener.process(file.getAbsolutePath());
43+
opener.closeStream();
44+
}, expected);
45+
}
46+
47+
public static void assertReader(final ObjectReceiver<Reader> receiver, final Runnable runnable, final String... expected) {
48+
final List<String> actual = new ArrayList<>();
49+
Mockito.doAnswer(i -> actual.add(ResourceUtil.readAll(i.getArgument(0)))).when(receiver).process(Mockito.any(Reader.class));
50+
51+
runnable.run();
52+
53+
Mockito.verify(receiver, Mockito.times(expected.length)).process(Mockito.any(Reader.class));
54+
Arrays.stream(expected).forEach(i -> Assert.assertEquals(i, actual.remove(0)));
55+
Assert.assertEquals(0, actual.size());
56+
}
57+
58+
}

0 commit comments

Comments
 (0)