content: package org.rocksdb;
  
  
  import org.junit.ClassRule;
  import org.junit.Rule;
  import org.junit.Test;
  import org.junit.rules.TemporaryFolder;
  
  import static org.assertj.core.api.Assertions.assertThat;
  
  public class CheckPointTest {
  
    @ClassRule
    public static final RocksMemoryResource rocksMemoryResource =
        new RocksMemoryResource();
  
    @Rule
    public TemporaryFolder dbFolder = new TemporaryFolder();
  
    @Rule
    public TemporaryFolder checkpointFolder = new TemporaryFolder();
  
    @Test
    public void checkPoint() throws RocksDBException {
      try (final Options options = new Options().
          setCreateIfMissing(true)) {
  
        try (final RocksDB db = RocksDB.open(options,
            dbFolder.getRoot().getAbsolutePath())) {
          db.put("key".getBytes(), "value".getBytes());
          try (final Checkpoint checkpoint = Checkpoint.create(db)) {
            checkpoint.createCheckpoint(checkpointFolder.
                getRoot().getAbsolutePath() + "/snapshot1");
            db.put("key2".getBytes(), "value2".getBytes());
            checkpoint.createCheckpoint(checkpointFolder.
                getRoot().getAbsolutePath() + "/snapshot2");
          }
        }
  
        try (final RocksDB db = RocksDB.open(options,
            checkpointFolder.getRoot().getAbsolutePath() +
                "/snapshot1")) {
          assertThat(new String(db.get("key".getBytes()))).
              isEqualTo("value");
          assertThat(db.get("key2".getBytes())).isNull();
        }
  
        try (final RocksDB db = RocksDB.open(options,
            checkpointFolder.getRoot().getAbsolutePath() +
                "/snapshot2")) {
          assertThat(new String(db.get("key".getBytes()))).
              isEqualTo("value");
          assertThat(new String(db.get("key2".getBytes()))).
              isEqualTo("value2");
        }
      }
    }
  
    @Test(expected = IllegalArgumentException.class)
    public void failIfDbIsNull() {
      try (final Checkpoint checkpoint = Checkpoint.create(null)) {
  
      }
    }
  
    @Test(expected = IllegalStateException.class)
    public void failIfDbNotInitialized() throws RocksDBException {
      try (final RocksDB db = RocksDB.open(
          dbFolder.getRoot().getAbsolutePath())) {
        db.close();
        Checkpoint.create(db);
      }
    }
  
    @Test(expected = RocksDBException.class)
    public void failWithIllegalPath() throws RocksDBException {
      try (final RocksDB db = RocksDB.open(dbFolder.getRoot().getAbsolutePath());
           final Checkpoint checkpoint = Checkpoint.create(db)) {
        checkpoint.createCheckpoint("/Z:///:\\C:\\TZ/-");
      }
    }
  }
  