[ https://issues.apache.org/jira/browse/GOBBLIN-2208?focusedWorklogId=970118&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-970118 ]
ASF GitHub Bot logged work on GOBBLIN-2208: ------------------------------------------- Author: ASF GitHub Bot Created on: 21/May/25 05:49 Start Date: 21/May/25 05:49 Worklog Time Spent: 10m Work Description: vsinghal85 commented on code in PR #4117: URL: https://github.com/apache/gobblin/pull/4117#discussion_r2099409354 ########## gobblin-utility/src/test/java/org/apache/gobblin/util/HadoopUtilsTest.java: ########## @@ -333,4 +344,166 @@ public void testMoveToTrash() throws IOException { Assert.assertFalse(fs.exists(hadoopUtilsTestDir)); Assert.assertTrue(fs.exists(trashPath)); } + + @Test + public void testEnsureDirectoryExistsWithAclPreservation() throws Exception { + final Path testDir = new Path(new Path(TEST_DIR_PATH), "HadoopUtilsTestDir"); + FileSystem fs = Mockito.mock(FileSystem.class); + Path targetDir = new Path(testDir, "target"); + + Mockito.when(fs.exists(targetDir)).thenReturn(false); + Mockito.when(fs.exists(targetDir.getParent())).thenReturn(true); + + // Create ACL entries + List<AclEntry> aclEntries = Lists.newArrayList( + new AclEntry.Builder() + .setName("user1") + .setType(AclEntryType.USER) + .setScope(AclEntryScope.ACCESS) + .setPermission(FsAction.ALL) + .build(), + new AclEntry.Builder() + .setName("group1") + .setType(AclEntryType.GROUP) + .setScope(AclEntryScope.ACCESS) + .setPermission(FsAction.READ_EXECUTE) + .build() + ); + + // Create OwnerAndPermission with the ACLs + OwnerAndPermission ownerAndPermission = getOwnerAndPermissionForAclEntries(aclEntries); + + // Mock mkdirs to return true + Mockito.when(fs.mkdirs(targetDir)).thenReturn(true); + // Call ensureDirectoryExists with copyOnlySourceAclToDest=true + HadoopUtils.ensureDirectoryExists(fs, targetDir, + Collections.singletonList(ownerAndPermission).listIterator(), + true, true); + // Verify mkdirs was called + Mockito.verify(fs).mkdirs(targetDir); + Mockito.verify(fs).removeAcl(targetDir); + // Verify modifyAclEntries was called with correct ACLs + Mockito.verify(fs).modifyAclEntries(targetDir, aclEntries); + } + + @Test + public void testEnsureDirectoryExistsWithExistingDirectory() throws Exception { + final Path testDir = new Path(new Path(TEST_DIR_PATH), TEST_CHILD_DIR_NAME); + FileSystem fs = Mockito.mock(FileSystem.class); + // Create target directory path + Path targetDir = new Path(testDir, "target"); + + Mockito.when(fs.exists(targetDir)).thenReturn(true); + Mockito.when(fs.exists(targetDir.getParent())).thenReturn(true); Review Comment: I prefer it this way, since this is more readable, combining in one line would be over optimization here. Issue Time Tracking ------------------- Worklog Id: (was: 970118) Remaining Estimate: 0h Time Spent: 10m > ACL Mismatch between source and dest for Manifest based copy > ------------------------------------------------------------ > > Key: GOBBLIN-2208 > URL: https://issues.apache.org/jira/browse/GOBBLIN-2208 > Project: Apache Gobblin > Issue Type: Bug > Reporter: Vaibhav Singhal > Priority: Major > Time Spent: 10m > Remaining Estimate: 0h > > During manifest based copy due to default ACL inheritence in the destination, > after manifest based copy source and destination end up having different > ACL's for source and destination -- This message was sent by Atlassian Jira (v8.20.10#820010)