Skip to content

Commit 5534936

Browse files
authored
Merge pull request #249 from marschall/remove-temp-file
Remove temp file creation for tests
2 parents 479cf9f + c4634bc commit 5534936

File tree

1 file changed

+57
-84
lines changed

1 file changed

+57
-84
lines changed

src/test/java/com/maxmind/db/DecoderTest.java

Lines changed: 57 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,14 @@
66
import static org.junit.jupiter.api.Assertions.assertEquals;
77
import static org.junit.jupiter.api.Assertions.assertThrows;
88

9-
import java.io.File;
109
import java.io.IOException;
11-
import java.io.RandomAccessFile;
1210
import java.math.BigInteger;
1311
import java.nio.ByteBuffer;
14-
import java.nio.MappedByteBuffer;
15-
import java.nio.channels.FileChannel;
16-
import java.nio.channels.FileChannel.MapMode;
1712
import java.nio.charset.StandardCharsets;
1813
import java.util.ArrayList;
1914
import java.util.HashMap;
2015
import java.util.List;
2116
import java.util.Map;
22-
import java.util.UUID;
2317
import org.junit.jupiter.api.Test;
2418

2519
@SuppressWarnings({"boxing", "static-method"})
@@ -404,103 +398,82 @@ public void testArrays() throws IOException {
404398
}
405399

406400
@Test
407-
public void testInvalidControlByte() throws IOException {
408-
try (FileChannel fc = DecoderTest.getFileChannel(new byte[] {0x0, 0xF})) {
409-
MappedByteBuffer mmap = fc.map(MapMode.READ_ONLY, 0, fc.size());
401+
public void testInvalidControlByte() {
402+
ByteBuffer buffer = ByteBuffer.wrap(new byte[] {0x0, 0xF});
410403

411-
Decoder decoder = new Decoder(new CHMCache(), mmap, 0);
412-
InvalidDatabaseException ex = assertThrows(
404+
Decoder decoder = new Decoder(new CHMCache(), buffer, 0);
405+
InvalidDatabaseException ex = assertThrows(
413406
InvalidDatabaseException.class,
414407
() -> decoder.decode(0, String.class));
415-
assertThat(ex.getMessage(),
408+
assertThat(ex.getMessage(),
416409
containsString("The MaxMind DB file's data section contains bad data"));
417-
}
418410
}
419411

420412
private static <T> void testTypeDecoding(Type type, Map<T, byte[]> tests)
421-
throws IOException {
413+
throws IOException {
422414
NodeCache cache = new CHMCache();
423415

424416
for (Map.Entry<T, byte[]> entry : tests.entrySet()) {
425417
T expect = entry.getKey();
426418
byte[] input = entry.getValue();
427419

428420
String desc = "decoded " + type.name() + " - " + expect;
429-
try (FileChannel fc = DecoderTest.getFileChannel(input)) {
430-
MappedByteBuffer mmap = fc.map(MapMode.READ_ONLY, 0, fc.size());
431-
432-
Decoder decoder = new TestDecoder(cache, mmap, 0);
433-
434-
switch (type) {
435-
case BYTES:
436-
assertArrayEquals((byte[]) expect, decoder.decode(0, byte[].class), desc);
437-
break;
438-
case ARRAY:
439-
assertEquals(expect, decoder.decode(0, List.class), desc);
440-
break;
441-
case UINT16:
442-
case INT32:
443-
assertEquals(expect, decoder.decode(0, Integer.class), desc);
444-
break;
445-
case UINT32:
446-
case POINTER:
447-
assertEquals(expect, decoder.decode(0, Long.class), desc);
448-
break;
449-
case UINT64:
450-
case UINT128:
451-
assertEquals(expect, decoder.decode(0, BigInteger.class), desc);
452-
break;
453-
case DOUBLE:
454-
assertEquals(expect, decoder.decode(0, Double.class), desc);
455-
break;
456-
case FLOAT:
457-
assertEquals(expect, decoder.decode(0, Float.class), desc);
458-
break;
459-
case UTF8_STRING:
460-
assertEquals(expect, decoder.decode(0, String.class), desc);
461-
break;
462-
case BOOLEAN:
463-
assertEquals(expect, decoder.decode(0, Boolean.class), desc);
464-
break;
465-
default: {
466-
// We hit this for Type.MAP.
467-
468-
Map<?, ?> got = decoder.decode(0, Map.class);
469-
Map<?, ?> expectMap = (Map<?, ?>) expect;
470-
471-
assertEquals(expectMap.size(), got.size(), desc);
472-
473-
for (Object keyObject : expectMap.keySet()) {
474-
String key = (String) keyObject;
475-
Object value = expectMap.get(key);
476-
477-
if (value instanceof Object[]) {
478-
assertArrayEquals((Object[]) value, (Object[]) got.get(key), desc);
479-
} else {
480-
assertEquals(value, got.get(key), desc);
481-
}
421+
ByteBuffer buffer = ByteBuffer.wrap(input);
422+
423+
Decoder decoder = new TestDecoder(cache, buffer, 0);
424+
425+
switch (type) {
426+
case BYTES:
427+
assertArrayEquals((byte[]) expect, decoder.decode(0, byte[].class), desc);
428+
break;
429+
case ARRAY:
430+
assertEquals(expect, decoder.decode(0, List.class), desc);
431+
break;
432+
case UINT16:
433+
case INT32:
434+
assertEquals(expect, decoder.decode(0, Integer.class), desc);
435+
break;
436+
case UINT32:
437+
case POINTER:
438+
assertEquals(expect, decoder.decode(0, Long.class), desc);
439+
break;
440+
case UINT64:
441+
case UINT128:
442+
assertEquals(expect, decoder.decode(0, BigInteger.class), desc);
443+
break;
444+
case DOUBLE:
445+
assertEquals(expect, decoder.decode(0, Double.class), desc);
446+
break;
447+
case FLOAT:
448+
assertEquals(expect, decoder.decode(0, Float.class), desc);
449+
break;
450+
case UTF8_STRING:
451+
assertEquals(expect, decoder.decode(0, String.class), desc);
452+
break;
453+
case BOOLEAN:
454+
assertEquals(expect, decoder.decode(0, Boolean.class), desc);
455+
break;
456+
default: {
457+
// We hit this for Type.MAP.
458+
459+
Map<?, ?> got = decoder.decode(0, Map.class);
460+
Map<?, ?> expectMap = (Map<?, ?>) expect;
461+
462+
assertEquals(expectMap.size(), got.size(), desc);
463+
464+
for (Object keyObject : expectMap.keySet()) {
465+
String key = (String) keyObject;
466+
Object value = expectMap.get(key);
467+
468+
if (value instanceof Object[]) {
469+
assertArrayEquals((Object[]) value, (Object[]) got.get(key), desc);
470+
} else {
471+
assertEquals(value, got.get(key), desc);
482472
}
483473
}
484474
}
485475
}
486476
}
487477
}
488478

489-
/*
490-
* I really didn't want to create temporary files for these tests, but it is
491-
* pretty hard to abstract away from the file io system in a way that is
492-
* Java 6 compatible
493-
*/
494-
private static FileChannel getFileChannel(byte[] data) throws IOException {
495-
File file = File.createTempFile(UUID.randomUUID().toString(), "tmp");
496-
file.deleteOnExit();
497-
RandomAccessFile raf = new RandomAccessFile(file, "rw");
498-
FileChannel fc = raf.getChannel();
499-
fc.write(ByteBuffer.wrap(data));
500-
raf.close();
501-
fc.close();
502-
raf = new RandomAccessFile(file, "r");
503-
return raf.getChannel();
504-
}
505-
506479
}

0 commit comments

Comments
 (0)