@@ -770,7 +770,7 @@ public void testCreatePathsAndPermissionsWithBucketWildcardResource() {
770770 final Set <S3Action > actions = Collections .singleton (IamSessionPolicyResolver .S3Action .PUT_BUCKET_ACL );
771771 final Set <IamSessionPolicyResolver .ResourceSpec > resourceSpecs = Collections .singleton (
772772 new IamSessionPolicyResolver .ResourceSpec (S3ResourceType .BUCKET_WILDCARD , "bucket1*" , null , null ));
773- final Set <IOzoneObj > writeAclObject = objSet (bucket ("bucket1*" ));
773+ final Set <IOzoneObj > readReadAclAndWriteAclObject = objSet (bucket ("bucket1*" ));
774774 final Set <IOzoneObj > readVolume = objSet (volume ());
775775
776776 expectIllegalArgumentException (
@@ -781,7 +781,8 @@ public void testCreatePathsAndPermissionsWithBucketWildcardResource() {
781781 createPathsAndPermissions (VOLUME , RANGER , actions , resourceSpecs , null , objToAclsMapRanger );
782782 final Set <OzoneGrant > resultRanger = groupObjectsByAcls (objToAclsMapRanger );
783783 assertThat (resultRanger ).containsExactlyInAnyOrder (
784- new OzoneGrant (writeAclObject , acls (WRITE_ACL )), new OzoneGrant (readVolume , acls (READ )));
784+ new OzoneGrant (readReadAclAndWriteAclObject , acls (READ , READ_ACL , WRITE_ACL )),
785+ new OzoneGrant (readVolume , acls (READ )));
785786 }
786787
787788 @ Test
@@ -829,6 +830,48 @@ public void testCreatePathsAndPermissionsWithObjectExactResource() {
829830 assertThat (resultRanger ).containsExactly (new OzoneGrant (readObjects , acls (READ )));
830831 }
831832
833+ @ Test
834+ public void testCreatePathsAndPermissionsWithDeleteObjectGrantsDeleteOnKey () {
835+ final Set <S3Action > actions = Collections .singleton (S3Action .DELETE_OBJECT );
836+ final Set <IamSessionPolicyResolver .ResourceSpec > resourceSpecs = Collections .singleton (
837+ new IamSessionPolicyResolver .ResourceSpec (S3ResourceType .OBJECT_EXACT , "bucket1" , null , "key.txt" ));
838+ final Set <IOzoneObj > readVolumeAndBucket = objSet (volume (), bucket ("bucket1" ));
839+ final Set <IOzoneObj > deleteKey = objSet (key ("bucket1" , "key.txt" ));
840+
841+ final Map <IOzoneObj , Set <ACLType >> objToAclsMapNative = new LinkedHashMap <>();
842+ createPathsAndPermissions (VOLUME , NATIVE , actions , resourceSpecs , null , objToAclsMapNative );
843+ final Set <OzoneGrant > resultNative = groupObjectsByAcls (objToAclsMapNative );
844+ assertThat (resultNative ).containsExactlyInAnyOrder (
845+ new OzoneGrant (readVolumeAndBucket , acls (READ )), new OzoneGrant (deleteKey , acls (DELETE )));
846+
847+ final Map <IOzoneObj , Set <ACLType >> objToAclsMapRanger = new LinkedHashMap <>();
848+ createPathsAndPermissions (VOLUME , RANGER , actions , resourceSpecs , null , objToAclsMapRanger );
849+ final Set <OzoneGrant > resultRanger = groupObjectsByAcls (objToAclsMapRanger );
850+ assertThat (resultRanger ).containsExactlyInAnyOrder (
851+ new OzoneGrant (readVolumeAndBucket , acls (READ )), new OzoneGrant (deleteKey , acls (DELETE )));
852+ }
853+
854+ @ Test
855+ public void testCreatePathsAndPermissionsWithAbortMultipartUploadGrantsWriteOnKey () {
856+ final Set <S3Action > actions = Collections .singleton (S3Action .ABORT_MULTIPART_UPLOAD );
857+ final Set <IamSessionPolicyResolver .ResourceSpec > resourceSpecs = Collections .singleton (
858+ new IamSessionPolicyResolver .ResourceSpec (S3ResourceType .OBJECT_EXACT , "bucket1" , null , "key.txt" ));
859+ final Set <IOzoneObj > readVolumeAndBucket = objSet (volume (), bucket ("bucket1" ));
860+ final Set <IOzoneObj > writeKey = objSet (key ("bucket1" , "key.txt" ));
861+
862+ final Map <IOzoneObj , Set <ACLType >> objToAclsMapNative = new LinkedHashMap <>();
863+ createPathsAndPermissions (VOLUME , NATIVE , actions , resourceSpecs , null , objToAclsMapNative );
864+ final Set <OzoneGrant > resultNative = groupObjectsByAcls (objToAclsMapNative );
865+ assertThat (resultNative ).containsExactlyInAnyOrder (
866+ new OzoneGrant (readVolumeAndBucket , acls (READ )), new OzoneGrant (writeKey , acls (WRITE )));
867+
868+ final Map <IOzoneObj , Set <ACLType >> objToAclsMapRanger = new LinkedHashMap <>();
869+ createPathsAndPermissions (VOLUME , RANGER , actions , resourceSpecs , null , objToAclsMapRanger );
870+ final Set <OzoneGrant > resultRanger = groupObjectsByAcls (objToAclsMapRanger );
871+ assertThat (resultRanger ).containsExactlyInAnyOrder (
872+ new OzoneGrant (readVolumeAndBucket , acls (READ )), new OzoneGrant (writeKey , acls (WRITE )));
873+ }
874+
832875 @ Test
833876 public void testCreatePathsAndPermissionsWithObjectPrefixResource () {
834877 final Set <S3Action > actions = Collections .singleton (S3Action .GET_OBJECT );
@@ -989,20 +1032,22 @@ public void testCreatePathsAndPermissionsDeduplicatesAcrossSameResourceTypes() {
9891032 .collect (Collectors .toSet ());
9901033 final Set <IamSessionPolicyResolver .ResourceSpec > resourceSpecs = Collections .singleton (
9911034 new IamSessionPolicyResolver .ResourceSpec (S3ResourceType .OBJECT_EXACT , "bucket1" , null , "key.txt" ));
992- final Set <IOzoneObj > readAndDeleteObject = objSet (key ("bucket1" , "key.txt" ));
1035+ final Set <IOzoneObj > readAndDeleteAndWriteObject = objSet (key ("bucket1" , "key.txt" ));
9931036 final Set <IOzoneObj > readObjects = objSet (bucket ("bucket1" ), volume ());
9941037
9951038 final Map <IOzoneObj , Set <ACLType >> objToAclsMapNative = new LinkedHashMap <>();
9961039 createPathsAndPermissions (VOLUME , NATIVE , actions , resourceSpecs , null , objToAclsMapNative );
9971040 final Set <OzoneGrant > resultNative = groupObjectsByAcls (objToAclsMapNative );
9981041 assertThat (resultNative ).containsExactlyInAnyOrder (
999- new OzoneGrant (readAndDeleteObject , acls (READ , DELETE )), new OzoneGrant (readObjects , acls (READ )));
1042+ new OzoneGrant (readAndDeleteAndWriteObject , acls (READ , DELETE , WRITE )),
1043+ new OzoneGrant (readObjects , acls (READ )));
10001044
10011045 final Map <IOzoneObj , Set <ACLType >> objToAclsMapRanger = new LinkedHashMap <>();
10021046 createPathsAndPermissions (VOLUME , RANGER , actions , resourceSpecs , null , objToAclsMapRanger );
10031047 final Set <OzoneGrant > resultRanger = groupObjectsByAcls (objToAclsMapRanger );
10041048 assertThat (resultRanger ).containsExactlyInAnyOrder (
1005- new OzoneGrant (readAndDeleteObject , acls (READ , DELETE )), new OzoneGrant (readObjects , acls (READ )));
1049+ new OzoneGrant (readAndDeleteAndWriteObject , acls (READ , DELETE , WRITE )),
1050+ new OzoneGrant (readObjects , acls (READ )));
10061051 }
10071052
10081053 @ Test
@@ -1973,20 +2018,24 @@ public void testWildcardActionGroupListStar() throws OMException {
19732018
19742019 // Ensure what we got is what we expected
19752020 final Set <OzoneGrant > expectedResolvedNative = new LinkedHashSet <>();
1976- // Expected for native: READ, LIST bucket acls, READ and LIST acl on prefix "" under bucket; volume READ
1977- final Set <IOzoneObj > readAndListsObjectsNative = objSet (bucket ("my-bucket" ), prefix ( "my-bucket" , " " ));
2021+ // Expected for native: READ, LIST bucket acls, LIST acl on prefix "" under bucket; volume READ
2022+ final Set <IOzoneObj > readAndListsObjectNative = objSet (bucket ("my-bucket" ));
19782023 final Set <IOzoneObj > readObjectNative = objSet (volume ());
1979- expectedResolvedNative .add (new OzoneGrant (readAndListsObjectsNative , acls (READ , LIST )));
2024+ final Set <IOzoneObj > listObjectNative = objSet (prefix ("my-bucket" , "" ));
2025+ expectedResolvedNative .add (new OzoneGrant (readAndListsObjectNative , acls (READ , LIST )));
19802026 expectedResolvedNative .add (new OzoneGrant (readObjectNative , acls (READ )));
2027+ expectedResolvedNative .add (new OzoneGrant (listObjectNative , acls (LIST )));
19812028 assertThat (resolvedFromNativeAuthorizer ).isEqualTo (expectedResolvedNative );
19822029
19832030 final Set <OzoneGrant > expectedResolvedRanger = new LinkedHashSet <>();
1984- // Expected for Ranger: READ, LIST bucket acls; READ and LIST key acl for resource type KEY with key name "*";
2031+ // Expected for Ranger: READ, LIST bucket acls; LIST key acl for resource type KEY with key name "*";
19852032 // volume READ
1986- final Set <IOzoneObj > readAndListObjectsRanger = objSet (bucket ("my-bucket" ), key ( "my-bucket" , "* " ));
2033+ final Set <IOzoneObj > readAndListObjectRanger = objSet (bucket ("my-bucket" ));
19872034 final Set <IOzoneObj > readObjectRanger = objSet (volume ());
1988- expectedResolvedRanger .add (new OzoneGrant (readAndListObjectsRanger , acls (READ , LIST )));
2035+ final Set <IOzoneObj > listObjectRanger = objSet (key ("my-bucket" , "*" ));
2036+ expectedResolvedRanger .add (new OzoneGrant (readAndListObjectRanger , acls (READ , LIST )));
19892037 expectedResolvedRanger .add (new OzoneGrant (readObjectRanger , acls (READ )));
2038+ expectedResolvedRanger .add (new OzoneGrant (listObjectRanger , acls (LIST )));
19902039 assertThat (resolvedFromRangerAuthorizer ).isEqualTo (expectedResolvedRanger );
19912040 }
19922041
@@ -2008,9 +2057,9 @@ public void testWildcardActionGroupPutStar() throws OMException {
20082057
20092058 // Ensure what we got is what we expected
20102059 final Set <OzoneGrant > expectedResolvedNative = new LinkedHashSet <>();
2011- // Expected for native: bucket READ, WRITE_ACL acl
2060+ // Expected for native: bucket READ, READ_ACL, WRITE_ACL acl
20122061 final Set <IOzoneObj > bucketSet = objSet (bucket ("my-bucket" ));
2013- final Set <ACLType > bucketAcl = acls (READ , WRITE_ACL );
2062+ final Set <ACLType > bucketAcl = acls (READ , READ_ACL , WRITE_ACL );
20142063 expectedResolvedNative .add (new OzoneGrant (bucketSet , bucketAcl ));
20152064 // Expected for native: CREATE, WRITE acls on prefix "" under bucket
20162065 final Set <IOzoneObj > keyPrefixSet = objSet (prefix ("my-bucket" , "" ));
@@ -2021,7 +2070,7 @@ public void testWildcardActionGroupPutStar() throws OMException {
20212070 assertThat (resolvedFromNativeAuthorizer ).isEqualTo (expectedResolvedNative );
20222071
20232072 final Set <OzoneGrant > expectedResolvedRanger = new LinkedHashSet <>();
2024- // Expected for Ranger: bucket READ, WRITE_ACL acl
2073+ // Expected for Ranger: bucket READ, READ_ACL, WRITE_ACL acl
20252074 expectedResolvedRanger .add (new OzoneGrant (bucketSet , bucketAcl ));
20262075 // Expected for Ranger: CREATE, WRITE key acls for resource type KEY with key name "*"
20272076 final Set <IOzoneObj > rangerKeySet = objSet (key ("my-bucket" , "*" ));
@@ -2049,17 +2098,17 @@ public void testWildcardActionGroupDeleteStar() throws OMException {
20492098
20502099 // Ensure what we got is what we expected
20512100 final Set <OzoneGrant > expectedResolvedNative = new LinkedHashSet <>();
2052- // Expected for native: DELETE on prefix "" under bucket; bucket READ, DELETE; volume READ
2101+ // Expected for native: DELETE and WRITE on prefix "" under bucket; bucket READ, DELETE; volume READ
20532102 final Set <IOzoneObj > resourceSetNative = objSet (prefix ("my-bucket" , "" ));
2054- expectedResolvedNative .add (new OzoneGrant (resourceSetNative , acls (DELETE )));
2103+ expectedResolvedNative .add (new OzoneGrant (resourceSetNative , acls (DELETE , WRITE )));
20552104 expectedResolvedNative .add (new OzoneGrant (objSet (bucket ("my-bucket" )), acls (READ , DELETE )));
20562105 expectedResolvedNative .add (new OzoneGrant (objSet (volume ()), acls (READ )));
20572106 assertThat (resolvedFromNativeAuthorizer ).isEqualTo (expectedResolvedNative );
20582107
20592108 final Set <OzoneGrant > expectedResolvedRanger = new LinkedHashSet <>();
2060- // Expected for Ranger: DELETE on resource type KEY with key name "*"; bucket READ, DELETE; volume READ
2109+ // Expected for Ranger: DELETE and WRITE on resource type KEY with key name "*"; bucket READ, DELETE; volume READ
20612110 final Set <IOzoneObj > resourceSetRanger = objSet (key ("my-bucket" , "*" ));
2062- expectedResolvedRanger .add (new OzoneGrant (resourceSetRanger , acls (DELETE )));
2111+ expectedResolvedRanger .add (new OzoneGrant (resourceSetRanger , acls (DELETE , WRITE )));
20632112 expectedResolvedRanger .add (new OzoneGrant (objSet (bucket ("my-bucket" )), acls (READ , DELETE )));
20642113 expectedResolvedRanger .add (new OzoneGrant (objSet (volume ()), acls (READ )));
20652114 assertThat (resolvedFromRangerAuthorizer ).isEqualTo (expectedResolvedRanger );
0 commit comments