/**
   * This tests whether the RocksDB backends uses the temp directories that are provided from the
   * {@link Environment} when no db storage path is set.
   *
   * @throws Exception
   */
  @Test
  public void testUseTempDirectories() throws Exception {
    String checkpointPath = tempFolder.newFolder().toURI().toString();
    RocksDBStateBackend rocksDbBackend = new RocksDBStateBackend(checkpointPath);

    File dir1 = tempFolder.newFolder();
    File dir2 = tempFolder.newFolder();

    File[] tempDirs = new File[] {dir1, dir2};

    assertNull(rocksDbBackend.getDbStoragePaths());

    Environment env = getMockEnvironment(tempDirs);
    RocksDBKeyedStateBackend<Integer> keyedBackend =
        (RocksDBKeyedStateBackend<Integer>)
            rocksDbBackend.createKeyedStateBackend(
                env,
                env.getJobID(),
                "test_op",
                IntSerializer.INSTANCE,
                1,
                new KeyGroupRange(0, 0),
                env.getTaskKvStateRegistry());

    File instanceBasePath = keyedBackend.getInstanceBasePath();
    assertThat(
        instanceBasePath.getAbsolutePath(),
        anyOf(startsWith(dir1.getAbsolutePath()), startsWith(dir2.getAbsolutePath())));
  }
  @Test
  public void testSetDbPath() throws Exception {
    String checkpointPath = tempFolder.newFolder().toURI().toString();
    File testDir1 = tempFolder.newFolder();
    File testDir2 = tempFolder.newFolder();

    RocksDBStateBackend rocksDbBackend = new RocksDBStateBackend(checkpointPath);

    assertNull(rocksDbBackend.getDbStoragePaths());

    rocksDbBackend.setDbStoragePath(testDir1.getAbsolutePath());
    assertArrayEquals(
        new String[] {testDir1.getAbsolutePath()}, rocksDbBackend.getDbStoragePaths());

    rocksDbBackend.setDbStoragePath(null);
    assertNull(rocksDbBackend.getDbStoragePaths());

    rocksDbBackend.setDbStoragePaths(testDir1.getAbsolutePath(), testDir2.getAbsolutePath());
    assertArrayEquals(
        new String[] {testDir1.getAbsolutePath(), testDir2.getAbsolutePath()},
        rocksDbBackend.getDbStoragePaths());

    Environment env = getMockEnvironment(new File[] {});
    RocksDBKeyedStateBackend<Integer> keyedBackend =
        (RocksDBKeyedStateBackend<Integer>)
            rocksDbBackend.createKeyedStateBackend(
                env,
                env.getJobID(),
                "test_op",
                IntSerializer.INSTANCE,
                1,
                new KeyGroupRange(0, 0),
                env.getTaskKvStateRegistry());

    File instanceBasePath = keyedBackend.getInstanceBasePath();
    assertThat(
        instanceBasePath.getAbsolutePath(),
        anyOf(startsWith(testDir1.getAbsolutePath()), startsWith(testDir2.getAbsolutePath())));

    //noinspection NullArgumentToVariableArgMethod
    rocksDbBackend.setDbStoragePaths(null);
    assertNull(rocksDbBackend.getDbStoragePaths());
  }