@VisibleForTesting
   public DU(File path, long interval, long jitter, long initialUsed)
      throws IOException {
    super(path, interval, jitter, initialUsed);
    this.duShell = new DUShell();
  }
@Test
  public void testDU() throws IOException, InterruptedException {
    final int writtenSize = 32*1024;   // writing 32K
    // Allow for extra 4K on-disk slack for local file systems
    // that may store additional file metadata (eg ext attrs).
    final int slack = 4*1024;
    File file = new File(DU_DIR, "data");
    createFile(file, writtenSize);

    Thread.sleep(5000); // let the metadata updater catch up

    DU du = new DU(file, 10000, 0, -1);
    du.init();
    long duSize = du.getUsed();
    du.close();

    assertTrue("Invalid on-disk size",
        duSize >= writtenSize &&
        writtenSize <= (duSize + slack));

    //test with 0 interval, will not launch thread
    du = new DU(file, 0, 1, -1);
    du.init();
    duSize = du.getUsed();
    du.close();

    assertTrue("Invalid on-disk size",
        duSize >= writtenSize &&
        writtenSize <= (duSize + slack));

    //test without launching thread
    du = new DU(file, 10000, 0, -1);
    du.init();
    duSize = du.getUsed();

    assertTrue("Invalid on-disk size",
        duSize >= writtenSize &&
        writtenSize <= (duSize + slack));
  }