/**
 * 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());
            FsPermission f2 = new FsPermission(f);
            assertEquals(s, f2.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());
  }
}
