package org.dcache.acl.parser; import org.junit.Test; import org.dcache.acl.ACE; import org.dcache.acl.enums.AccessMask; import org.dcache.acl.enums.Who; import static org.dcache.acl.enums.AceType.*; import static org.dcache.acl.enums.AceFlags.*; import static org.dcache.acl.enums.AccessMask.*; import static org.dcache.acl.parser.ACEParser.*; import static org.junit.Assert.*; public class ACEParserTest { @Test public void testParseAllowOnOwner() { int mask = toAccessMask(APPEND_DATA, READ_DATA, WRITE_DATA); ACE ace = new ACE(ACCESS_ALLOWED_ACE_TYPE, 0, mask, Who.OWNER, -1); ACE parsed = parseLinuxAce("A::OWNER@:rwa"); assertEquals(ace, parsed); } @Test public void testParseDenyOnOwner() { int mask = toAccessMask(WRITE_DATA); ACE ace = new ACE(ACCESS_DENIED_ACE_TYPE, 0, mask, Who.OWNER, -1); ACE parsed = parseLinuxAce("D::OWNER@:w"); assertEquals(ace, parsed); } @Test public void testParseAlloOnPrimaryGroup() { int mask = toAccessMask(APPEND_DATA, READ_DATA, WRITE_DATA); ACE ace = new ACE(ACCESS_ALLOWED_ACE_TYPE, 0, mask, Who.OWNER_GROUP, -1); ACE parsed = parseLinuxAce("A::GROUP@:rwa"); assertEquals(ace, parsed); } @Test public void testParseDenyOnPrimaryGroup() { int mask = toAccessMask(WRITE_DATA); ACE ace = new ACE(ACCESS_DENIED_ACE_TYPE, 0, mask, Who.OWNER_GROUP, -1); ACE parsed = parseLinuxAce("D::GROUP@:w"); assertEquals(ace, parsed); } @Test public void testParseAlloOnUser() { int mask = toAccessMask(APPEND_DATA, READ_DATA, WRITE_DATA); ACE ace = new ACE(ACCESS_ALLOWED_ACE_TYPE, 0, mask, Who.USER, 123); ACE parsed = parseLinuxAce("A::123:rwa"); assertEquals(ace, parsed); } @Test public void testParseDenyOnUser() { int mask = toAccessMask(WRITE_DATA); ACE ace = new ACE(ACCESS_DENIED_ACE_TYPE, 0, mask, Who.USER, 123); ACE parsed = parseLinuxAce("D::123:w"); assertEquals(ace, parsed); } @Test public void testParseAlloOnGroup() { int mask = toAccessMask(APPEND_DATA, READ_DATA, WRITE_DATA); ACE ace = new ACE(ACCESS_ALLOWED_ACE_TYPE, IDENTIFIER_GROUP.getValue(), mask, Who.GROUP, 123); ACE parsed = parseLinuxAce("A:g:123:rwa"); assertEquals(ace, parsed); } @Test public void testParseDenyOnGroup() { int mask = toAccessMask(WRITE_DATA); ACE ace = new ACE(ACCESS_DENIED_ACE_TYPE, IDENTIFIER_GROUP.getValue(), mask, Who.GROUP, 123); ACE parsed = parseLinuxAce("D:g:123:w"); assertEquals(ace, parsed); } @Test(expected = IllegalArgumentException.class) public void testWrongFormat() { parseLinuxAce("D:g:123"); } @Test(expected = IllegalArgumentException.class) public void testWrongType() { parseLinuxAce("H:g:123:w"); } @Test(expected = IllegalArgumentException.class) public void testWrongTypeLen() { parseLinuxAce("AB:g:123:w"); } @Test(expected = IllegalArgumentException.class) public void testWrongFlag() { parseLinuxAce("D:x:123:w"); } @Test(expected = IllegalArgumentException.class) public void testWrongMask() { parseLinuxAce("D:g:123:g"); } @Test(expected = IllegalArgumentException.class) public void testWrongPrincipal() { parseLinuxAce("D:g:someone:w"); } @Test(expected = IllegalArgumentException.class) public void testWrongSpecialPrincipal() { parseLinuxAce("D:g:SOMEONW@:w"); } public static int toAccessMask(AccessMask...masks) { int mask = 0; for(AccessMask am: masks) { mask |= am.getValue(); } return mask; } }