@Test
  public void listFilesTest() throws Exception {
    CreateFileOptions options = CreateFileOptions.defaults().setBlockSizeBytes(64);

    HashSet<Long> ids = new HashSet<Long>();
    HashSet<Long> dirIds = new HashSet<Long>();
    for (int i = 0; i < 10; i++) {
      AlluxioURI dir = new AlluxioURI("/i" + i);
      mFsMaster.createDirectory(dir, CreateDirectoryOptions.defaults());
      dirIds.add(mFsMaster.getFileId(dir));
      for (int j = 0; j < 10; j++) {
        ids.add(mFsMaster.createFile(dir.join("j" + j), options));
      }
    }
    HashSet<Long> listedIds = new HashSet<>();
    HashSet<Long> listedDirIds = new HashSet<>();
    List<FileInfo> infoList = mFsMaster.getFileInfoList(new AlluxioURI("/"), true);
    for (FileInfo info : infoList) {
      long id = info.getFileId();
      listedDirIds.add(id);
      for (FileInfo fileInfo : mFsMaster.getFileInfoList(new AlluxioURI(info.getPath()), true)) {
        listedIds.add(fileInfo.getFileId());
      }
    }
    Assert.assertEquals(ids, listedIds);
    Assert.assertEquals(dirIds, listedDirIds);
  }
 @Test
 public void createFileTest() throws Exception {
   mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults());
   FileInfo fileInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFile")));
   Assert.assertFalse(fileInfo.isFolder());
   Assert.assertEquals("", fileInfo.getUserName());
   Assert.assertEquals(0644, (short) fileInfo.getPermission());
 }
 @Test
 public void createDirectoryTest() throws Exception {
   mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults());
   FileInfo fileInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder")));
   Assert.assertTrue(fileInfo.isFolder());
   Assert.assertEquals("", fileInfo.getUserName());
   Assert.assertEquals(0755, (short) fileInfo.getPermission());
 }
 @Test
 public void lastModificationTimeCompleteFileTest() throws Exception {
   long fileId = mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults());
   long opTimeMs = TEST_CURRENT_TIME;
   try (LockedInodePath inodePath =
       mInodeTree.lockFullInodePath(new AlluxioURI("/testFile"), InodeTree.LockMode.WRITE)) {
     mFsMaster.completeFileInternal(new ArrayList<Long>(), inodePath, 0, opTimeMs);
   }
   FileInfo fileInfo = mFsMaster.getFileInfo(fileId);
   Assert.assertEquals(opTimeMs, fileInfo.getLastModificationTimeMs());
 }
 @Test
 public void lastModificationTimeCreateFileTest() throws Exception {
   mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults());
   long opTimeMs = TEST_CURRENT_TIME;
   CreateFileOptions options = CreateFileOptions.defaults().setOperationTimeMs(opTimeMs);
   try (LockedInodePath inodePath =
       mInodeTree.lockInodePath(
           new AlluxioURI("/testFolder/testFile"), InodeTree.LockMode.WRITE)) {
     mFsMaster.createFileInternal(inodePath, options);
   }
   FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder")));
   Assert.assertEquals(opTimeMs, folderInfo.getLastModificationTimeMs());
 }
 @Test
 public void ttlCreateFileTest() throws Exception {
   mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults());
   long ttl = 100;
   CreateFileOptions options = CreateFileOptions.defaults().setTtl(ttl);
   try (LockedInodePath inodePath =
       mInodeTree.lockInodePath(
           new AlluxioURI("/testFolder/testFile"), InodeTree.LockMode.WRITE)) {
     mFsMaster.createFileInternal(inodePath, options);
   }
   FileInfo folderInfo =
       mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile")));
   Assert.assertEquals(ttl, folderInfo.getTtl());
 }
  // TODO(calvin): This test currently relies on the fact the HDFS client is a cached instance to
  // avoid invalid lease exception. This should be fixed.
  @Ignore
  @Test
  public void concurrentCreateJournalTest() throws Exception {
    // Makes sure the file id's are the same between a master info and the journal it creates
    for (int i = 0; i < 5; i++) {
      ConcurrentCreator concurrentCreator =
          new ConcurrentCreator(DEPTH, CONCURRENCY_DEPTH, ROOT_PATH);
      concurrentCreator.call();

      FileSystemMaster fsMaster = createFileSystemMasterFromJournal();
      for (FileInfo info : mFsMaster.getFileInfoList(new AlluxioURI("/"), true)) {
        AlluxioURI path = new AlluxioURI(info.getPath());
        Assert.assertEquals(mFsMaster.getFileId(path), fsMaster.getFileId(path));
      }
      before();
    }
  }
 @Test
 public void ttlExpiredCreateFileTest() throws Exception {
   mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults());
   long ttl = 1;
   CreateFileOptions options = CreateFileOptions.defaults().setTtl(ttl);
   long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile1"), options);
   FileInfo folderInfo =
       mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile1")));
   Assert.assertEquals(fileId, folderInfo.getFileId());
   Assert.assertEquals(ttl, folderInfo.getTtl());
   // Sleep for the ttl expiration.
   CommonUtils.sleepMs(2 * TTL_CHECKER_INTERVAL_MS);
   Assert.assertTrue(
       HeartbeatScheduler.await(HeartbeatContext.MASTER_TTL_CHECK, 10, TimeUnit.SECONDS));
   HeartbeatScheduler.schedule(HeartbeatContext.MASTER_TTL_CHECK);
   Assert.assertTrue(
       HeartbeatScheduler.await(HeartbeatContext.MASTER_TTL_CHECK, 10, TimeUnit.SECONDS));
   mThrown.expect(FileDoesNotExistException.class);
   mFsMaster.getFileInfo(fileId);
 }
  @Test
  public void lastModificationTimeRenameTest() throws Exception {
    mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults());
    long fileId =
        mFsMaster.createFile(new AlluxioURI("/testFolder/testFile1"), CreateFileOptions.defaults());
    long opTimeMs = TEST_CURRENT_TIME;

    try (InodePathPair inodePathPair =
        mInodeTree.lockInodePathPair(
            new AlluxioURI("/testFolder/testFile1"),
            InodeTree.LockMode.WRITE_PARENT,
            new AlluxioURI("/testFolder/testFile2"),
            InodeTree.LockMode.WRITE)) {
      LockedInodePath srcPath = inodePathPair.getFirst();
      LockedInodePath dstPath = inodePathPair.getSecond();
      mFsMaster.renameInternal(srcPath, dstPath, true, opTimeMs);
    }
    FileInfo folderInfo = mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder")));
    Assert.assertEquals(opTimeMs, folderInfo.getLastModificationTimeMs());
  }
  @Test
  public void ttlRenameTest() throws Exception {
    mFsMaster.createDirectory(new AlluxioURI("/testFolder"), CreateDirectoryOptions.defaults());
    long ttl = 1;
    CreateFileOptions options = CreateFileOptions.defaults().setTtl(ttl);
    long fileId = mFsMaster.createFile(new AlluxioURI("/testFolder/testFile1"), options);

    try (InodePathPair inodePathPair =
        mInodeTree.lockInodePathPair(
            new AlluxioURI("/testFolder/testFile1"),
            InodeTree.LockMode.WRITE_PARENT,
            new AlluxioURI("/testFolder/testFile2"),
            InodeTree.LockMode.WRITE)) {
      LockedInodePath srcPath = inodePathPair.getFirst();
      LockedInodePath dstPath = inodePathPair.getSecond();
      mFsMaster.renameInternal(srcPath, dstPath, true, TEST_CURRENT_TIME);
    }
    FileInfo folderInfo =
        mFsMaster.getFileInfo(mFsMaster.getFileId(new AlluxioURI("/testFolder/testFile2")));
    Assert.assertEquals(ttl, folderInfo.getTtl());
  }
    public void exec(int depth, int concurrencyDepth, AlluxioURI path) throws Exception {
      if (depth < 1) {
        return;
      } else if (depth == 1) {
        long fileId = mFsMaster.createFile(path, CreateFileOptions.defaults());
        Assert.assertEquals(fileId, mFsMaster.getFileId(path));
        // verify the user permission for file
        FileInfo fileInfo = mFsMaster.getFileInfo(fileId);
        Assert.assertEquals("", fileInfo.getUserName());
        Assert.assertEquals(0644, (short) fileInfo.getPermission());
      } else {
        mFsMaster.createDirectory(path, CreateDirectoryOptions.defaults());
        Assert.assertNotNull(mFsMaster.getFileId(path));
        long dirId = mFsMaster.getFileId(path);
        Assert.assertNotEquals(-1, dirId);
        FileInfo dirInfo = mFsMaster.getFileInfo(dirId);
        Assert.assertEquals("", dirInfo.getUserName());
        Assert.assertEquals(0755, (short) dirInfo.getPermission());
      }

      if (concurrencyDepth > 0) {
        ExecutorService executor = Executors.newCachedThreadPool();
        try {
          ArrayList<Future<Void>> futures = new ArrayList<Future<Void>>(FILES_PER_NODE);
          for (int i = 0; i < FILES_PER_NODE; i++) {
            Callable<Void> call =
                (new ConcurrentCreator(
                    depth - 1, concurrencyDepth - 1, path.join(Integer.toString(i))));
            futures.add(executor.submit(call));
          }
          for (Future<Void> f : futures) {
            f.get();
          }
        } finally {
          executor.shutdown();
        }
      } else {
        for (int i = 0; i < FILES_PER_NODE; i++) {
          exec(depth - 1, concurrencyDepth, path.join(Integer.toString(i)));
        }
      }
    }
 @Test
 public void clientFileInfoEmptyFileTest() throws Exception {
   long fileId = mFsMaster.createFile(new AlluxioURI("/testFile"), CreateFileOptions.defaults());
   FileInfo fileInfo = mFsMaster.getFileInfo(fileId);
   Assert.assertEquals("testFile", fileInfo.getName());
   Assert.assertEquals(fileId, fileInfo.getFileId());
   Assert.assertEquals(0, fileInfo.getLength());
   Assert.assertTrue(fileInfo.isCacheable());
   Assert.assertFalse(fileInfo.isCompleted());
   Assert.assertFalse(fileInfo.isFolder());
   Assert.assertFalse(fileInfo.isPersisted());
   Assert.assertFalse(fileInfo.isPinned());
   Assert.assertEquals(Constants.NO_TTL, fileInfo.getTtl());
   Assert.assertEquals("", fileInfo.getUserName());
   Assert.assertEquals(0644, (short) fileInfo.getPermission());
 }
 @Test
 public void clientFileInfoDirectoryTest() throws Exception {
   AlluxioURI path = new AlluxioURI("/testFolder");
   mFsMaster.createDirectory(path, CreateDirectoryOptions.defaults());
   long fileId = mFsMaster.getFileId(path);
   FileInfo fileInfo = mFsMaster.getFileInfo(fileId);
   Assert.assertEquals("testFolder", fileInfo.getName());
   Assert.assertEquals(1, fileInfo.getFileId());
   Assert.assertEquals(0, fileInfo.getLength());
   Assert.assertFalse(fileInfo.isCacheable());
   Assert.assertTrue(fileInfo.isCompleted());
   Assert.assertTrue(fileInfo.isFolder());
   Assert.assertFalse(fileInfo.isPersisted());
   Assert.assertFalse(fileInfo.isPinned());
   Assert.assertEquals("", fileInfo.getUserName());
   Assert.assertEquals(0755, (short) fileInfo.getPermission());
 }