1616import java .util .HashMap ;
1717import java .util .Map ;
1818
19+ import org .junit .After ;
20+ import org .junit .Before ;
1921import org .junit .Rule ;
2022import org .junit .Test ;
2123import org .junit .rules .ExpectedException ;
2729public class ReaderTest {
2830 private final ObjectMapper om = new ObjectMapper ();
2931
32+ private Reader testReader ;
33+
34+ @ Before
35+ public void setupReader () {
36+ testReader = null ;
37+ }
38+
39+ @ After
40+ public void teardownReader () throws IOException {
41+ if (testReader != null ) {
42+ testReader .close ();
43+ }
44+ }
45+
3046 @ Test
3147 public void test () throws IOException , URISyntaxException {
3248 for (long recordSize : new long [] { 24 , 28 , 32 }) {
@@ -37,15 +53,14 @@ public void test() throws IOException, URISyntaxException {
3753 Reader reader = new Reader (new File (file ));
3854 try {
3955 this .testMetadata (reader , ipVersion , recordSize );
56+ if (ipVersion == 4 ) {
57+ this .testIpV4 (reader , file );
58+ } else {
59+ this .testIpV6 (reader , file );
60+ }
4061 } finally {
4162 reader .close ();
4263 }
43-
44- if (ipVersion == 4 ) {
45- this .testIpV4 (reader , file );
46- } else {
47- this .testIpV6 (reader , file );
48- }
4964 }
5065 }
5166 }
@@ -57,8 +72,8 @@ public void testNoIpV4SearchTreeFile() throws IOException,
5772 "/maxmind-db/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb" )
5873 .toURI ();
5974
60- Reader reader = new Reader (new File (file ));
61- this .testNoIpV4SearchTree (reader );
75+ testReader = new Reader (new File (file ));
76+ this .testNoIpV4SearchTree (testReader );
6277 }
6378
6479 @ Test
@@ -67,8 +82,8 @@ public void testNoIpV4SearchTreeURL() throws IOException,
6782 InputStream stream = ReaderTest .class .getResource (
6883 "/maxmind-db/test-data/MaxMind-DB-no-ipv4-search-tree.mmdb" )
6984 .openStream ();
70- Reader reader = new Reader (stream );
71- this .testNoIpV4SearchTree (reader );
85+ testReader = new Reader (stream );
86+ this .testNoIpV4SearchTree (testReader );
7287 }
7388
7489 private void testNoIpV4SearchTree (Reader reader ) throws IOException ,
@@ -85,8 +100,8 @@ public void testDecodingTypesFile() throws URISyntaxException, IOException {
85100 URI file = ReaderTest .class .getResource (
86101 "/maxmind-db/test-data/MaxMind-DB-test-decoder.mmdb" ).toURI ();
87102
88- Reader reader = new Reader (new File (file ));
89- this .testDecodingTypes (reader );
103+ testReader = new Reader (new File (file ));
104+ this .testDecodingTypes (testReader );
90105 }
91106
92107 @ Test
@@ -95,8 +110,8 @@ public void testDecodingTypesURL() throws URISyntaxException, IOException {
95110 "/maxmind-db/test-data/MaxMind-DB-test-decoder.mmdb" )
96111 .openStream ();
97112
98- Reader reader = new Reader (stream );
99- this .testDecodingTypes (reader );
113+ testReader = new Reader (stream );
114+ this .testDecodingTypes (testReader );
100115 }
101116
102117 private void testDecodingTypes (Reader reader ) throws URISyntaxException ,
@@ -148,8 +163,8 @@ public void testZerosFile() throws URISyntaxException, IOException {
148163 URI file = ReaderTest .class .getResource (
149164 "/maxmind-db/test-data/MaxMind-DB-test-decoder.mmdb" ).toURI ();
150165
151- Reader reader = new Reader (new File (file ));
152- this .testZeros (reader );
166+ testReader = new Reader (new File (file ));
167+ this .testZeros (testReader );
153168 }
154169
155170 @ Test
@@ -158,8 +173,8 @@ public void testZerosURL() throws URISyntaxException, IOException {
158173 "/maxmind-db/test-data/MaxMind-DB-test-decoder.mmdb" )
159174 .openStream ();
160175
161- Reader reader = new Reader (stream );
162- this .testZeros (reader );
176+ testReader = new Reader (stream );
177+ this .testZeros (testReader );
163178 }
164179
165180 private void testZeros (Reader reader ) throws URISyntaxException ,
@@ -197,8 +212,8 @@ public void testBrokenDatabaseFile() throws URISyntaxException, IOException {
197212 "/maxmind-db/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb" )
198213 .toURI ();
199214
200- Reader reader = new Reader (new File (file ));
201- this .testBrokenDatabase (reader );
215+ testReader = new Reader (new File (file ));
216+ this .testBrokenDatabase (testReader );
202217 }
203218
204219 @ Test
@@ -208,8 +223,8 @@ public void testBrokenDatabaseURL() throws URISyntaxException, IOException {
208223 "/maxmind-db/test-data/GeoIP2-City-Test-Broken-Double-Format.mmdb" )
209224 .openStream ();
210225
211- Reader reader = new Reader (stream );
212- this .testBrokenDatabase (reader );
226+ testReader = new Reader (stream );
227+ this .testBrokenDatabase (testReader );
213228 }
214229
215230 private void testBrokenDatabase (Reader reader ) throws URISyntaxException ,
@@ -230,8 +245,8 @@ public void testBrokenSearchTreePointerFile() throws URISyntaxException,
230245 "/maxmind-db/test-data/MaxMind-DB-test-broken-pointers-24.mmdb" )
231246 .toURI ();
232247
233- Reader reader = new Reader (new File (file ));
234- this .testBrokenSearchTreePointer (reader );
248+ testReader = new Reader (new File (file ));
249+ this .testBrokenSearchTreePointer (testReader );
235250 }
236251
237252 @ Test
@@ -242,8 +257,8 @@ public void testBrokenSearchTreePointerURL() throws URISyntaxException,
242257 "/maxmind-db/test-data/MaxMind-DB-test-broken-pointers-24.mmdb" )
243258 .openStream ();
244259
245- Reader reader = new Reader (stream );
246- this .testBrokenSearchTreePointer (reader );
260+ testReader = new Reader (stream );
261+ this .testBrokenSearchTreePointer (testReader );
247262 }
248263
249264 private void testBrokenSearchTreePointer (Reader reader )
@@ -264,8 +279,8 @@ public void testBrokenDataPointerFile() throws IOException,
264279 "/maxmind-db/test-data/MaxMind-DB-test-broken-pointers-24.mmdb" )
265280 .toURI ();
266281
267- Reader reader = new Reader (new File (file ));
268- this .testBrokenDataPointer (reader );
282+ testReader = new Reader (new File (file ));
283+ this .testBrokenDataPointer (testReader );
269284 }
270285
271286 @ Test
@@ -276,8 +291,8 @@ public void testBrokenDataPointerURL() throws IOException,
276291 "/maxmind-db/test-data/MaxMind-DB-test-broken-pointers-24.mmdb" )
277292 .openStream ();
278293
279- Reader reader = new Reader (stream );
280- this .testBrokenDataPointer (reader );
294+ testReader = new Reader (stream );
295+ this .testBrokenDataPointer (testReader );
281296 }
282297
283298 private void testBrokenDataPointer (Reader reader ) throws IOException ,
@@ -290,6 +305,19 @@ private void testBrokenDataPointer(Reader reader) throws IOException,
290305 reader .get (InetAddress .getByName ("1.1.1.16" ));
291306 }
292307
308+ @ Test
309+ public void testClosedReaderThrowsException () throws IOException , URISyntaxException {
310+ URI file = ReaderTest .class .getResource (
311+ "/maxmind-db/test-data/MaxMind-DB-test-decoder.mmdb" ).toURI ();
312+ Reader reader = new Reader (new File (file ));
313+
314+ this .thrown .expect (ClosedDatabaseException .class );
315+ this .thrown .expectMessage ("The MaxMind DB has been closed." );
316+
317+ reader .close ();
318+ reader .get (InetAddress .getByName ("1.1.1.16" ));
319+ }
320+
293321 private void testMetadata (Reader reader , int ipVersion , long recordSize ) {
294322
295323 Metadata metadata = reader .getMetadata ();
0 commit comments