Skip to content

Commit 8aa99a1

Browse files
committed
gh-279 Improve Env.copy tests
1 parent 2ce1c76 commit 8aa99a1

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

‎src/test/java/org/lmdbjava/EnvTest.java‎

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.util.concurrent.atomic.AtomicBoolean;
4646
import java.util.concurrent.atomic.AtomicLong;
4747
import java.util.concurrent.atomic.LongAdder;
48+
import java.util.stream.Stream;
4849
import org.assertj.core.api.Assertions;
4950
import org.junit.jupiter.api.AfterEach;
5051
import org.junit.jupiter.api.BeforeEach;
@@ -285,10 +286,58 @@ void copyFileBased() {
285286
final Path dest = tempDir.createTempFile();
286287
assertThat(Files.exists(dest)).isFalse();
287288
final Path src = tempDir.createTempFile();
289+
290+
// Create the source env and put an entry
288291
try (Env<ByteBuffer> env =
289292
Env.create().setSafeClose().setMaxReaders(1).setEnvFlags(MDB_NOSUBDIR).open(src)) {
293+
final Dbi<ByteBuffer> rwDb =
294+
env.createDbi().setDbName(DB_1).withDefaultComparator().setDbiFlags(MDB_CREATE).open();
295+
rwDb.put(bb(1), bb(42));
296+
297+
env.copy(dest, MDB_CP_COMPACT);
298+
}
299+
300+
// Check the destination env and get the entry
301+
try (Env<ByteBuffer> env =
302+
Env.create().setSafeClose().setMaxReaders(1).setEnvFlags(MDB_NOSUBDIR).open(dest)) {
303+
final Dbi<ByteBuffer> dbi =
304+
env.createDbi().setDbName(DB_1).withDefaultComparator().setDbiFlags(MDB_CREATE).open();
305+
try (Txn<ByteBuffer> txn = env.txnRead()) {
306+
final ByteBuffer byteBuffer = dbi.get(txn, bb(1));
307+
assertThat(byteBuffer).isNotNull();
308+
assertThat(byteBuffer.getInt()).isEqualTo(42);
309+
}
310+
}
311+
assertThat(FileUtil.size(dest)).isGreaterThan(0L);
312+
}
313+
314+
@Test
315+
void copyDirBased() {
316+
final Path dest = tempDir.createTempDir();
317+
assertThat(isEmptyDir(dest)).isTrue();
318+
final Path src = tempDir.createTempDir();
319+
assertThat(isEmptyDir(src)).isTrue();
320+
// Create the source env and put an entry
321+
try (Env<ByteBuffer> env = Env.create().setSafeClose().setMaxReaders(1).open(src)) {
322+
final Dbi<ByteBuffer> rwDb =
323+
env.createDbi().setDbName(DB_1).withDefaultComparator().setDbiFlags(MDB_CREATE).open();
324+
rwDb.put(bb(1), bb(42));
325+
290326
env.copy(dest, MDB_CP_COMPACT);
291327
}
328+
329+
// Check the destination env and get the entry
330+
try (Env<ByteBuffer> env = Env.create().setSafeClose().setMaxReaders(1).open(dest)) {
331+
final Dbi<ByteBuffer> dbi =
332+
env.createDbi().setDbName(DB_1).withDefaultComparator().setDbiFlags(MDB_CREATE).open();
333+
try (Txn<ByteBuffer> txn = env.txnRead()) {
334+
final ByteBuffer byteBuffer = dbi.get(txn, bb(1));
335+
assertThat(byteBuffer).isNotNull();
336+
assertThat(byteBuffer.getInt()).isEqualTo(42);
337+
}
338+
}
339+
assertThat(isEmptyDir(dest)).isFalse();
340+
assertThat(isEmptyDir(src)).isFalse();
292341
assertThat(FileUtil.size(dest)).isGreaterThan(0L);
293342
}
294343

@@ -1110,6 +1159,14 @@ void testToString() {
11101159
}
11111160
}
11121161

1162+
private boolean isEmptyDir(final Path dir) {
1163+
try (Stream<Path> pathStream = Files.list(dir)) {
1164+
return !pathStream.findAny().isPresent();
1165+
} catch (IOException e) {
1166+
throw new RuntimeException(e);
1167+
}
1168+
}
1169+
11131170
private void testEnvUse(final BooleanArg safeClose, final BooleanArg singleThreaded) {
11141171
final Path file = tempDir.createTempFile();
11151172

0 commit comments

Comments
 (0)