blob: 3dc8417311303110727fd6ab01e28637105c8e9d [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.fs.permission;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import junit.framework.TestCase;
import static org.apache.hadoop.fs.permission.FsAction.*;
public class TestFsPermission extends TestCase {
public void testFsAction() {
//implies
for(FsAction a : FsAction.values()) {
assertTrue(ALL.implies(a));
}
for(FsAction a : FsAction.values()) {
assertTrue(a == NONE? NONE.implies(a): !NONE.implies(a));
}
for(FsAction a : FsAction.values()) {
assertTrue(a == READ_EXECUTE || a == READ || a == EXECUTE || a == NONE?
READ_EXECUTE.implies(a): !READ_EXECUTE.implies(a));
}
//masks
assertEquals(EXECUTE, EXECUTE.and(READ_EXECUTE));
assertEquals(READ, READ.and(READ_EXECUTE));
assertEquals(NONE, WRITE.and(READ_EXECUTE));
assertEquals(READ, READ_EXECUTE.and(READ_WRITE));
assertEquals(NONE, READ_EXECUTE.and(WRITE));
assertEquals(WRITE_EXECUTE, ALL.and(WRITE_EXECUTE));
}
/**
* Ensure that when manually specifying permission modes we get
* the expected values back out for all combinations
*/
public void testConvertingPermissions() {
for(short s = 0; s < 01777; s++) {
assertEquals(s, new FsPermission(s).toShort());
}
short s = 0;
for(boolean sb : new boolean [] { false, true }) {
for(FsAction u : FsAction.values()) {
for(FsAction g : FsAction.values()) {
for(FsAction o : FsAction.values()) {
FsPermission f = new FsPermission(u, g, o, sb);
assertEquals(s, f.toShort());
s++;
}
}
}
}
}
public void testStickyBitToString() {
// Check that every permission has its sticky bit represented correctly
for(boolean sb : new boolean [] { false, true }) {
for(FsAction u : FsAction.values()) {
for(FsAction g : FsAction.values()) {
for(FsAction o : FsAction.values()) {
FsPermission f = new FsPermission(u, g, o, sb);
if(f.getStickyBit() && f.getOtherAction().implies(EXECUTE))
assertEquals('t', f.toString().charAt(8));
else if(f.getStickyBit() && !f.getOtherAction().implies(EXECUTE))
assertEquals('T', f.toString().charAt(8));
else if(!f.getStickyBit() && f.getOtherAction().implies(EXECUTE))
assertEquals('x', f.toString().charAt(8));
else
assertEquals('-', f.toString().charAt(8));
}
}
}
}
}
public void testFsPermission() {
String symbolic = "-rwxrwxrwx";
StringBuilder b = new StringBuilder("-123456789");
for(int i = 0; i < (1<<9); i++) {
for(int j = 1; j < 10; j++) {
b.setCharAt(j, '-');
}
String binary = Integer.toBinaryString(i);
int len = binary.length();
for(int j = 0; j < len; j++) {
if (binary.charAt(j) == '1') {
int k = 9 - (len - 1 - j);
b.setCharAt(k, symbolic.charAt(k));
}
}
assertEquals(i, FsPermission.valueOf(b.toString()).toShort());
}
}
public void testUMaskParser() throws IOException {
Configuration conf = new Configuration();
// Ensure that we get the right octal values back for all legal values
for(FsAction u : FsAction.values()) {
for(FsAction g : FsAction.values()) {
for(FsAction o : FsAction.values()) {
FsPermission f = new FsPermission(u, g, o);
String asOctal = String.format("%1$03o", f.toShort());
conf.set(FsPermission.UMASK_LABEL, asOctal);
FsPermission fromConf = FsPermission.getUMask(conf);
assertEquals(f, fromConf);
}
}
}
}
public void testSymbolicUmasks() {
Configuration conf = new Configuration();
// Test some symbolic to octal settings
// Symbolic umask list is generated in linux shell using by the command:
// umask 0; umask <octal number>; umask -S
String [][] symbolic = new String [][] {
{"a+rw", "111",},
{"u=rwx,g=rwx,o=rwx", "0",},
{"u=rwx,g=rwx,o=rw", "1",},
{"u=rwx,g=rwx,o=rx", "2",},
{"u=rwx,g=rwx,o=r", "3",},
{"u=rwx,g=rwx,o=wx", "4",},
{"u=rwx,g=rwx,o=w", "5",},
{"u=rwx,g=rwx,o=x", "6",},
{"u=rwx,g=rwx,o=", "7",},
{"u=rwx,g=rw,o=rwx", "10",},
{"u=rwx,g=rw,o=rw", "11",},
{"u=rwx,g=rw,o=rx", "12",},
{"u=rwx,g=rw,o=r", "13",},
{"u=rwx,g=rw,o=wx", "14",},
{"u=rwx,g=rw,o=w", "15",},
{"u=rwx,g=rw,o=x", "16",},
{"u=rwx,g=rw,o=", "17",},
{"u=rwx,g=rx,o=rwx", "20",},
{"u=rwx,g=rx,o=rw", "21",},
{"u=rwx,g=rx,o=rx", "22",},
{"u=rwx,g=rx,o=r", "23",},
{"u=rwx,g=rx,o=wx", "24",},
{"u=rwx,g=rx,o=w", "25",},
{"u=rwx,g=rx,o=x", "26",},
{"u=rwx,g=rx,o=", "27",},
{"u=rwx,g=r,o=rwx", "30",},
{"u=rwx,g=r,o=rw", "31",},
{"u=rwx,g=r,o=rx", "32",},
{"u=rwx,g=r,o=r", "33",},
{"u=rwx,g=r,o=wx", "34",},
{"u=rwx,g=r,o=w", "35",},
{"u=rwx,g=r,o=x", "36",},
{"u=rwx,g=r,o=", "37",},
{"u=rwx,g=wx,o=rwx", "40",},
{"u=rwx,g=wx,o=rw", "41",},
{"u=rwx,g=wx,o=rx", "42",},
{"u=rwx,g=wx,o=r", "43",},
{"u=rwx,g=wx,o=wx", "44",},
{"u=rwx,g=wx,o=w", "45",},
{"u=rwx,g=wx,o=x", "46",},
{"u=rwx,g=wx,o=", "47",},
{"u=rwx,g=w,o=rwx", "50",},
{"u=rwx,g=w,o=rw", "51",},
{"u=rwx,g=w,o=rx", "52",},
{"u=rwx,g=w,o=r", "53",},
{"u=rwx,g=w,o=wx", "54",},
{"u=rwx,g=w,o=w", "55",},
{"u=rwx,g=w,o=x", "56",},
{"u=rwx,g=w,o=", "57",},
{"u=rwx,g=x,o=rwx", "60",},
{"u=rwx,g=x,o=rw", "61",},
{"u=rwx,g=x,o=rx", "62",},
{"u=rwx,g=x,o=r", "63",},
{"u=rwx,g=x,o=wx", "64",},
{"u=rwx,g=x,o=w", "65",},
{"u=rwx,g=x,o=x", "66",},
{"u=rwx,g=x,o=", "67",},
{"u=rwx,g=,o=rwx", "70",},
{"u=rwx,g=,o=rw", "71",},
{"u=rwx,g=,o=rx", "72",},
{"u=rwx,g=,o=r", "73",},
{"u=rwx,g=,o=wx", "74",},
{"u=rwx,g=,o=w", "75",},
{"u=rwx,g=,o=x", "76",},
{"u=rwx,g=,o=", "77",},
{"u=rw,g=rwx,o=rwx", "100",},
{"u=rw,g=rwx,o=rw", "101",},
{"u=rw,g=rwx,o=rx", "102",},
{"u=rw,g=rwx,o=r", "103",},
{"u=rw,g=rwx,o=wx", "104",},
{"u=rw,g=rwx,o=w", "105",},
{"u=rw,g=rwx,o=x", "106",},
{"u=rw,g=rwx,o=", "107",},
{"u=rw,g=rw,o=rwx", "110",},
{"u=rw,g=rw,o=rw", "111",},
{"u=rw,g=rw,o=rx", "112",},
{"u=rw,g=rw,o=r", "113",},
{"u=rw,g=rw,o=wx", "114",},
{"u=rw,g=rw,o=w", "115",},
{"u=rw,g=rw,o=x", "116",},
{"u=rw,g=rw,o=", "117",},
{"u=rw,g=rx,o=rwx", "120",},
{"u=rw,g=rx,o=rw", "121",},
{"u=rw,g=rx,o=rx", "122",},
{"u=rw,g=rx,o=r", "123",},
{"u=rw,g=rx,o=wx", "124",},
{"u=rw,g=rx,o=w", "125",},
{"u=rw,g=rx,o=x", "126",},
{"u=rw,g=rx,o=", "127",},
{"u=rw,g=r,o=rwx", "130",},
{"u=rw,g=r,o=rw", "131",},
{"u=rw,g=r,o=rx", "132",},
{"u=rw,g=r,o=r", "133",},
{"u=rw,g=r,o=wx", "134",},
{"u=rw,g=r,o=w", "135",},
{"u=rw,g=r,o=x", "136",},
{"u=rw,g=r,o=", "137",},
{"u=rw,g=wx,o=rwx", "140",},
{"u=rw,g=wx,o=rw", "141",},
{"u=rw,g=wx,o=rx", "142",},
{"u=rw,g=wx,o=r", "143",},
{"u=rw,g=wx,o=wx", "144",},
{"u=rw,g=wx,o=w", "145",},
{"u=rw,g=wx,o=x", "146",},
{"u=rw,g=wx,o=", "147",},
{"u=rw,g=w,o=rwx", "150",},
{"u=rw,g=w,o=rw", "151",},
{"u=rw,g=w,o=rx", "152",},
{"u=rw,g=w,o=r", "153",},
{"u=rw,g=w,o=wx", "154",},
{"u=rw,g=w,o=w", "155",},
{"u=rw,g=w,o=x", "156",},
{"u=rw,g=w,o=", "157",},
{"u=rw,g=x,o=rwx", "160",},
{"u=rw,g=x,o=rw", "161",},
{"u=rw,g=x,o=rx", "162",},
{"u=rw,g=x,o=r", "163",},
{"u=rw,g=x,o=wx", "164",},
{"u=rw,g=x,o=w", "165",},
{"u=rw,g=x,o=x", "166",},
{"u=rw,g=x,o=", "167",},
{"u=rw,g=,o=rwx", "170",},
{"u=rw,g=,o=rw", "171",},
{"u=rw,g=,o=rx", "172",},
{"u=rw,g=,o=r", "173",},
{"u=rw,g=,o=wx", "174",},
{"u=rw,g=,o=w", "175",},
{"u=rw,g=,o=x", "176",},
{"u=rw,g=,o=", "177",},
{"u=rx,g=rwx,o=rwx", "200",},
{"u=rx,g=rwx,o=rw", "201",},
{"u=rx,g=rwx,o=rx", "202",},
{"u=rx,g=rwx,o=r", "203",},
{"u=rx,g=rwx,o=wx", "204",},
{"u=rx,g=rwx,o=w", "205",},
{"u=rx,g=rwx,o=x", "206",},
{"u=rx,g=rwx,o=", "207",},
{"u=rx,g=rw,o=rwx", "210",},
{"u=rx,g=rw,o=rw", "211",},
{"u=rx,g=rw,o=rx", "212",},
{"u=rx,g=rw,o=r", "213",},
{"u=rx,g=rw,o=wx", "214",},
{"u=rx,g=rw,o=w", "215",},
{"u=rx,g=rw,o=x", "216",},
{"u=rx,g=rw,o=", "217",},
{"u=rx,g=rx,o=rwx", "220",},
{"u=rx,g=rx,o=rw", "221",},
{"u=rx,g=rx,o=rx", "222",},
{"u=rx,g=rx,o=r", "223",},
{"u=rx,g=rx,o=wx", "224",},
{"u=rx,g=rx,o=w", "225",},
{"u=rx,g=rx,o=x", "226",},
{"u=rx,g=rx,o=", "227",},
{"u=rx,g=r,o=rwx", "230",},
{"u=rx,g=r,o=rw", "231",},
{"u=rx,g=r,o=rx", "232",},
{"u=rx,g=r,o=r", "233",},
{"u=rx,g=r,o=wx", "234",},
{"u=rx,g=r,o=w", "235",},
{"u=rx,g=r,o=x", "236",},
{"u=rx,g=r,o=", "237",},
{"u=rx,g=wx,o=rwx", "240",},
{"u=rx,g=wx,o=rw", "241",},
{"u=rx,g=wx,o=rx", "242",},
{"u=rx,g=wx,o=r", "243",},
{"u=rx,g=wx,o=wx", "244",},
{"u=rx,g=wx,o=w", "245",},
{"u=rx,g=wx,o=x", "246",},
{"u=rx,g=wx,o=", "247",},
{"u=rx,g=w,o=rwx", "250",},
{"u=rx,g=w,o=rw", "251",},
{"u=rx,g=w,o=rx", "252",},
{"u=rx,g=w,o=r", "253",},
{"u=rx,g=w,o=wx", "254",},
{"u=rx,g=w,o=w", "255",},
{"u=rx,g=w,o=x", "256",},
{"u=rx,g=w,o=", "257",},
{"u=rx,g=x,o=rwx", "260",},
{"u=rx,g=x,o=rw", "261",},
{"u=rx,g=x,o=rx", "262",},
{"u=rx,g=x,o=r", "263",},
{"u=rx,g=x,o=wx", "264",},
{"u=rx,g=x,o=w", "265",},
{"u=rx,g=x,o=x", "266",},
{"u=rx,g=x,o=", "267",},
{"u=rx,g=,o=rwx", "270",},
{"u=rx,g=,o=rw", "271",},
{"u=rx,g=,o=rx", "272",},
{"u=rx,g=,o=r", "273",},
{"u=rx,g=,o=wx", "274",},
{"u=rx,g=,o=w", "275",},
{"u=rx,g=,o=x", "276",},
{"u=rx,g=,o=", "277",},
{"u=r,g=rwx,o=rwx", "300",},
{"u=r,g=rwx,o=rw", "301",},
{"u=r,g=rwx,o=rx", "302",},
{"u=r,g=rwx,o=r", "303",},
{"u=r,g=rwx,o=wx", "304",},
{"u=r,g=rwx,o=w", "305",},
{"u=r,g=rwx,o=x", "306",},
{"u=r,g=rwx,o=", "307",},
{"u=r,g=rw,o=rwx", "310",},
{"u=r,g=rw,o=rw", "311",},
{"u=r,g=rw,o=rx", "312",},
{"u=r,g=rw,o=r", "313",},
{"u=r,g=rw,o=wx", "314",},
{"u=r,g=rw,o=w", "315",},
{"u=r,g=rw,o=x", "316",},
{"u=r,g=rw,o=", "317",},
{"u=r,g=rx,o=rwx", "320",},
{"u=r,g=rx,o=rw", "321",},
{"u=r,g=rx,o=rx", "322",},
{"u=r,g=rx,o=r", "323",},
{"u=r,g=rx,o=wx", "324",},
{"u=r,g=rx,o=w", "325",},
{"u=r,g=rx,o=x", "326",},
{"u=r,g=rx,o=", "327",},
{"u=r,g=r,o=rwx", "330",},
{"u=r,g=r,o=rw", "331",},
{"u=r,g=r,o=rx", "332",},
{"u=r,g=r,o=r", "333",},
{"u=r,g=r,o=wx", "334",},
{"u=r,g=r,o=w", "335",},
{"u=r,g=r,o=x", "336",},
{"u=r,g=r,o=", "337",},
{"u=r,g=wx,o=rwx", "340",},
{"u=r,g=wx,o=rw", "341",},
{"u=r,g=wx,o=rx", "342",},
{"u=r,g=wx,o=r", "343",},
{"u=r,g=wx,o=wx", "344",},
{"u=r,g=wx,o=w", "345",},
{"u=r,g=wx,o=x", "346",},
{"u=r,g=wx,o=", "347",},
{"u=r,g=w,o=rwx", "350",},
{"u=r,g=w,o=rw", "351",},
{"u=r,g=w,o=rx", "352",},
{"u=r,g=w,o=r", "353",},
{"u=r,g=w,o=wx", "354",},
{"u=r,g=w,o=w", "355",},
{"u=r,g=w,o=x", "356",},
{"u=r,g=w,o=", "357",},
{"u=r,g=x,o=rwx", "360",},
{"u=r,g=x,o=rw", "361",},
{"u=r,g=x,o=rx", "362",},
{"u=r,g=x,o=r", "363",},
{"u=r,g=x,o=wx", "364",},
{"u=r,g=x,o=w", "365",},
{"u=r,g=x,o=x", "366",},
{"u=r,g=x,o=", "367",},
{"u=r,g=,o=rwx", "370",},
{"u=r,g=,o=rw", "371",},
{"u=r,g=,o=rx", "372",},
{"u=r,g=,o=r", "373",},
{"u=r,g=,o=wx", "374",},
{"u=r,g=,o=w", "375",},
{"u=r,g=,o=x", "376",},
{"u=r,g=,o=", "377",},
{"u=wx,g=rwx,o=rwx", "400",},
{"u=wx,g=rwx,o=rw", "401",},
{"u=wx,g=rwx,o=rx", "402",},
{"u=wx,g=rwx,o=r", "403",},
{"u=wx,g=rwx,o=wx", "404",},
{"u=wx,g=rwx,o=w", "405",},
{"u=wx,g=rwx,o=x", "406",},
{"u=wx,g=rwx,o=", "407",},
{"u=wx,g=rw,o=rwx", "410",},
{"u=wx,g=rw,o=rw", "411",},
{"u=wx,g=rw,o=rx", "412",},
{"u=wx,g=rw,o=r", "413",},
{"u=wx,g=rw,o=wx", "414",},
{"u=wx,g=rw,o=w", "415",},
{"u=wx,g=rw,o=x", "416",},
{"u=wx,g=rw,o=", "417",},
{"u=wx,g=rx,o=rwx", "420",},
{"u=wx,g=rx,o=rw", "421",},
{"u=wx,g=rx,o=rx", "422",},
{"u=wx,g=rx,o=r", "423",},
{"u=wx,g=rx,o=wx", "424",},
{"u=wx,g=rx,o=w", "425",},
{"u=wx,g=rx,o=x", "426",},
{"u=wx,g=rx,o=", "427",},
{"u=wx,g=r,o=rwx", "430",},
{"u=wx,g=r,o=rw", "431",},
{"u=wx,g=r,o=rx", "432",},
{"u=wx,g=r,o=r", "433",},
{"u=wx,g=r,o=wx", "434",},
{"u=wx,g=r,o=w", "435",},
{"u=wx,g=r,o=x", "436",},
{"u=wx,g=r,o=", "437",},
{"u=wx,g=wx,o=rwx", "440",},
{"u=wx,g=wx,o=rw", "441",},
{"u=wx,g=wx,o=rx", "442",},
{"u=wx,g=wx,o=r", "443",},
{"u=wx,g=wx,o=wx", "444",},
{"u=wx,g=wx,o=w", "445",},
{"u=wx,g=wx,o=x", "446",},
{"u=wx,g=wx,o=", "447",},
{"u=wx,g=w,o=rwx", "450",},
{"u=wx,g=w,o=rw", "451",},
{"u=wx,g=w,o=rx", "452",},
{"u=wx,g=w,o=r", "453",},
{"u=wx,g=w,o=wx", "454",},
{"u=wx,g=w,o=w", "455",},
{"u=wx,g=w,o=x", "456",},
{"u=wx,g=w,o=", "457",},
{"u=wx,g=x,o=rwx", "460",},
{"u=wx,g=x,o=rw", "461",},
{"u=wx,g=x,o=rx", "462",},
{"u=wx,g=x,o=r", "463",},
{"u=wx,g=x,o=wx", "464",},
{"u=wx,g=x,o=w", "465",},
{"u=wx,g=x,o=x", "466",},
{"u=wx,g=x,o=", "467",},
{"u=wx,g=,o=rwx", "470",},
{"u=wx,g=,o=rw", "471",},
{"u=wx,g=,o=rx", "472",},
{"u=wx,g=,o=r", "473",},
{"u=wx,g=,o=wx", "474",},
{"u=wx,g=,o=w", "475",},
{"u=wx,g=,o=x", "476",},
{"u=wx,g=,o=", "477",},
{"u=w,g=rwx,o=rwx", "500",},
{"u=w,g=rwx,o=rw", "501",},
{"u=w,g=rwx,o=rx", "502",},
{"u=w,g=rwx,o=r", "503",},
{"u=w,g=rwx,o=wx", "504",},
{"u=w,g=rwx,o=w", "505",},
{"u=w,g=rwx,o=x", "506",},
{"u=w,g=rwx,o=", "507",},
{"u=w,g=rw,o=rwx", "510",},
{"u=w,g=rw,o=rw", "511",},
{"u=w,g=rw,o=rx", "512",},
{"u=w,g=rw,o=r", "513",},
{"u=w,g=rw,o=wx", "514",},
{"u=w,g=rw,o=w", "515",},
{"u=w,g=rw,o=x", "516",},
{"u=w,g=rw,o=", "517",},
{"u=w,g=rx,o=rwx", "520",},
{"u=w,g=rx,o=rw", "521",},
{"u=w,g=rx,o=rx", "522",},
{"u=w,g=rx,o=r", "523",},
{"u=w,g=rx,o=wx", "524",},
{"u=w,g=rx,o=w", "525",},
{"u=w,g=rx,o=x", "526",},
{"u=w,g=rx,o=", "527",},
{"u=w,g=r,o=rwx", "530",},
{"u=w,g=r,o=rw", "531",},
{"u=w,g=r,o=rx", "532",},
{"u=w,g=r,o=r", "533",},
{"u=w,g=r,o=wx", "534",},
{"u=w,g=r,o=w", "535",},
{"u=w,g=r,o=x", "536",},
{"u=w,g=r,o=", "537",},
{"u=w,g=wx,o=rwx", "540",},
{"u=w,g=wx,o=rw", "541",},
{"u=w,g=wx,o=rx", "542",},
{"u=w,g=wx,o=r", "543",},
{"u=w,g=wx,o=wx", "544",},
{"u=w,g=wx,o=w", "545",},
{"u=w,g=wx,o=x", "546",},
{"u=w,g=wx,o=", "547",},
{"u=w,g=w,o=rwx", "550",},
{"u=w,g=w,o=rw", "551",},
{"u=w,g=w,o=rx", "552",},
{"u=w,g=w,o=r", "553",},
{"u=w,g=w,o=wx", "554",},
{"u=w,g=w,o=w", "555",},
{"u=w,g=w,o=x", "556",},
{"u=w,g=w,o=", "557",},
{"u=w,g=x,o=rwx", "560",},
{"u=w,g=x,o=rw", "561",},
{"u=w,g=x,o=rx", "562",},
{"u=w,g=x,o=r", "563",},
{"u=w,g=x,o=wx", "564",},
{"u=w,g=x,o=w", "565",},
{"u=w,g=x,o=x", "566",},
{"u=w,g=x,o=", "567",},
{"u=w,g=,o=rwx", "570",},
{"u=w,g=,o=rw", "571",},
{"u=w,g=,o=rx", "572",},
{"u=w,g=,o=r", "573",},
{"u=w,g=,o=wx", "574",},
{"u=w,g=,o=w", "575",},
{"u=w,g=,o=x", "576",},
{"u=w,g=,o=", "577",},
{"u=x,g=rwx,o=rwx", "600",},
{"u=x,g=rwx,o=rw", "601",},
{"u=x,g=rwx,o=rx", "602",},
{"u=x,g=rwx,o=r", "603",},
{"u=x,g=rwx,o=wx", "604",},
{"u=x,g=rwx,o=w", "605",},
{"u=x,g=rwx,o=x", "606",},
{"u=x,g=rwx,o=", "607",},
{"u=x,g=rw,o=rwx", "610",},
{"u=x,g=rw,o=rw", "611",},
{"u=x,g=rw,o=rx", "612",},
{"u=x,g=rw,o=r", "613",},
{"u=x,g=rw,o=wx", "614",},
{"u=x,g=rw,o=w", "615",},
{"u=x,g=rw,o=x", "616",},
{"u=x,g=rw,o=", "617",},
{"u=x,g=rx,o=rwx", "620",},
{"u=x,g=rx,o=rw", "621",},
{"u=x,g=rx,o=rx", "622",},
{"u=x,g=rx,o=r", "623",},
{"u=x,g=rx,o=wx", "624",},
{"u=x,g=rx,o=w", "625",},
{"u=x,g=rx,o=x", "626",},
{"u=x,g=rx,o=", "627",},
{"u=x,g=r,o=rwx", "630",},
{"u=x,g=r,o=rw", "631",},
{"u=x,g=r,o=rx", "632",},
{"u=x,g=r,o=r", "633",},
{"u=x,g=r,o=wx", "634",},
{"u=x,g=r,o=w", "635",},
{"u=x,g=r,o=x", "636",},
{"u=x,g=r,o=", "637",},
{"u=x,g=wx,o=rwx", "640",},
{"u=x,g=wx,o=rw", "641",},
{"u=x,g=wx,o=rx", "642",},
{"u=x,g=wx,o=r", "643",},
{"u=x,g=wx,o=wx", "644",},
{"u=x,g=wx,o=w", "645",},
{"u=x,g=wx,o=x", "646",},
{"u=x,g=wx,o=", "647",},
{"u=x,g=w,o=rwx", "650",},
{"u=x,g=w,o=rw", "651",},
{"u=x,g=w,o=rx", "652",},
{"u=x,g=w,o=r", "653",},
{"u=x,g=w,o=wx", "654",},
{"u=x,g=w,o=w", "655",},
{"u=x,g=w,o=x", "656",},
{"u=x,g=w,o=", "657",},
{"u=x,g=x,o=rwx", "660",},
{"u=x,g=x,o=rw", "661",},
{"u=x,g=x,o=rx", "662",},
{"u=x,g=x,o=r", "663",},
{"u=x,g=x,o=wx", "664",},
{"u=x,g=x,o=w", "665",},
{"u=x,g=x,o=x", "666",},
{"u=x,g=x,o=", "667",},
{"u=x,g=,o=rwx", "670",},
{"u=x,g=,o=rw", "671",},
{"u=x,g=,o=rx", "672",},
{"u=x,g=,o=r", "673",},
{"u=x,g=,o=wx", "674",},
{"u=x,g=,o=w", "675",},
{"u=x,g=,o=x", "676",},
{"u=x,g=,o=", "677",},
{"u=,g=rwx,o=rwx", "700",},
{"u=,g=rwx,o=rw", "701",},
{"u=,g=rwx,o=rx", "702",},
{"u=,g=rwx,o=r", "703",},
{"u=,g=rwx,o=wx", "704",},
{"u=,g=rwx,o=w", "705",},
{"u=,g=rwx,o=x", "706",},
{"u=,g=rwx,o=", "707",},
{"u=,g=rw,o=rwx", "710",},
{"u=,g=rw,o=rw", "711",},
{"u=,g=rw,o=rx", "712",},
{"u=,g=rw,o=r", "713",},
{"u=,g=rw,o=wx", "714",},
{"u=,g=rw,o=w", "715",},
{"u=,g=rw,o=x", "716",},
{"u=,g=rw,o=", "717",},
{"u=,g=rx,o=rwx", "720",},
{"u=,g=rx,o=rw", "721",},
{"u=,g=rx,o=rx", "722",},
{"u=,g=rx,o=r", "723",},
{"u=,g=rx,o=wx", "724",},
{"u=,g=rx,o=w", "725",},
{"u=,g=rx,o=x", "726",},
{"u=,g=rx,o=", "727",},
{"u=,g=r,o=rwx", "730",},
{"u=,g=r,o=rw", "731",},
{"u=,g=r,o=rx", "732",},
{"u=,g=r,o=r", "733",},
{"u=,g=r,o=wx", "734",},
{"u=,g=r,o=w", "735",},
{"u=,g=r,o=x", "736",},
{"u=,g=r,o=", "737",},
{"u=,g=wx,o=rwx", "740",},
{"u=,g=wx,o=rw", "741",},
{"u=,g=wx,o=rx", "742",},
{"u=,g=wx,o=r", "743",},
{"u=,g=wx,o=wx", "744",},
{"u=,g=wx,o=w", "745",},
{"u=,g=wx,o=x", "746",},
{"u=,g=wx,o=", "747",},
{"u=,g=w,o=rwx", "750",},
{"u=,g=w,o=rw", "751",},
{"u=,g=w,o=rx", "752",},
{"u=,g=w,o=r", "753",},
{"u=,g=w,o=wx", "754",},
{"u=,g=w,o=w", "755",},
{"u=,g=w,o=x", "756",},
{"u=,g=w,o=", "757",},
{"u=,g=x,o=rwx", "760",},
{"u=,g=x,o=rw", "761",},
{"u=,g=x,o=rx", "762",},
{"u=,g=x,o=r", "763",},
{"u=,g=x,o=wx", "764",},
{"u=,g=x,o=w", "765",},
{"u=,g=x,o=x", "766",},
{"u=,g=x,o=", "767",},
{"u=,g=,o=rwx", "770",},
{"u=,g=,o=rw", "771",},
{"u=,g=,o=rx", "772",},
{"u=,g=,o=r", "773",},
{"u=,g=,o=wx", "774",},
{"u=,g=,o=w", "775",},
{"u=,g=,o=x", "776",},
{"u=,g=,o=", "777"}
};
for(int i = 0; i < symbolic.length; i += 2) {
conf.set(FsPermission.UMASK_LABEL, symbolic[i][0]);
short val = Short.valueOf(symbolic[i][1], 8);
assertEquals(val, FsPermission.getUMask(conf).toShort());
}
}
public void testBadUmasks() {
Configuration conf = new Configuration();
for(String b : new String [] {"1777", "22", "99", "foo", ""}) {
conf.set(FsPermission.UMASK_LABEL, b);
try {
FsPermission.getUMask(conf);
fail("Shouldn't have been able to parse bad umask");
} catch(IllegalArgumentException iae) {
assertTrue("Exception should specify parsing error and invalid umask: "
+ iae.getMessage(), isCorrectExceptionMessage(iae.getMessage(), b));
}
}
}
private boolean isCorrectExceptionMessage(String msg, String umask) {
return msg.contains("Unable to parse") &&
msg.contains(umask) &&
msg.contains("octal or symbolic");
}
// Ensure that when the deprecated decimal umask key is used, it is correctly
// parsed as such and converted correctly to an FsPermission value
public void testDeprecatedUmask() {
Configuration conf = new Configuration();
conf.set(FsPermission.DEPRECATED_UMASK_LABEL, "302"); // 302 = 0456
FsPermission umask = FsPermission.getUMask(conf);
assertEquals(0456, umask.toShort());
}
}