public void testCreate() throws Exception {
Configuration conf = new Configuration();
conf.setBoolean("dfs.permissions", true);
conf.setInt(FsPermission.UMASK_LABEL, 0);
MiniDFSCluster cluster = new MiniDFSCluster(conf, 3, true, null);
cluster.waitActive();
FileSystem fs = FileSystem.get(conf);
try {
FsPermission rootPerm = checkPermission(fs, "/", null);
FsPermission inheritPerm = FsPermission.createImmutable(
(short)(rootPerm.toShort() | 0300));
FsPermission dirPerm = new FsPermission((short)0777);
fs.mkdirs(new Path("/a1/a2/a3"), dirPerm);
checkPermission(fs, "/a1", inheritPerm);
checkPermission(fs, "/a1/a2", inheritPerm);
checkPermission(fs, "/a1/a2/a3", dirPerm);
FsPermission filePerm = new FsPermission((short)0444);
FSDataOutputStream out = fs.create(new Path("/b1/b2/b3.txt"), filePerm,
true, conf.getInt("io.file.buffer.size", 4096),
fs.getDefaultReplication(), fs.getDefaultBlockSize(), null);
out.write(123);
out.close();
checkPermission(fs, "/b1", inheritPerm);
checkPermission(fs, "/b1/b2", inheritPerm);
checkPermission(fs, "/b1/b2/b3.txt", filePerm);
conf.setInt(FsPermission.UMASK_LABEL, 0022);
FsPermission permission =
FsPermission.createImmutable((short)0666);
FileSystem.mkdirs(fs, new Path("/c1"), new FsPermission(permission));
FileSystem.create(fs, new Path("/c1/c2.txt"),
new FsPermission(permission));
checkPermission(fs, "/c1", permission);
checkPermission(fs, "/c1/c2.txt", permission);
}
finally {
try{fs.close();} catch(Exception e) {}
try{cluster.shutdown();} catch(Exception e) {}
}
}