|
@@ -18,11 +18,16 @@ package org.apache.hadoop.ozone.ksm;
|
|
|
|
|
|
import org.apache.hadoop.hdfs.DFSUtil;
|
|
|
import org.apache.hadoop.hdfs.protocol.proto.HdfsProtos;
|
|
|
+import org.apache.hadoop.ksm.helpers.KsmBucketArgs;
|
|
|
import org.apache.hadoop.ksm.helpers.KsmBucketInfo;
|
|
|
import org.apache.hadoop.ozone.OzoneConsts;
|
|
|
import org.apache.hadoop.ozone.ksm.exceptions.KSMException;
|
|
|
import org.apache.hadoop.ozone.ksm.exceptions
|
|
|
.KSMException.ResultCodes;
|
|
|
+import org.apache.hadoop.ozone.protocol.proto
|
|
|
+ .KeySpaceManagerProtocolProtos.OzoneAclInfo;
|
|
|
+import org.apache.hadoop.ozone.protocolPB.KSMPBHelper;
|
|
|
+import org.apache.hadoop.ozone.web.request.OzoneAcl;
|
|
|
import org.junit.Assert;
|
|
|
import org.junit.Rule;
|
|
|
import org.junit.Test;
|
|
@@ -34,8 +39,10 @@ import org.mockito.runners.MockitoJUnitRunner;
|
|
|
import org.mockito.stubbing.Answer;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
-import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.LinkedList;
|
|
|
import java.util.concurrent.locks.ReadWriteLock;
|
|
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
|
|
|
@@ -176,4 +183,129 @@ public class TestBucketManagerImpl {
|
|
|
result.getStorageType());
|
|
|
Assert.assertEquals(false, result.getIsVersionEnabled());
|
|
|
}
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testSetBucketPropertyAddACL() throws IOException {
|
|
|
+ MetadataManager metaMgr = getMetadataManagerMock("sampleVol");
|
|
|
+ List<OzoneAclInfo> acls = new LinkedList<>();
|
|
|
+ OzoneAcl ozoneAcl = new OzoneAcl(OzoneAcl.OzoneACLType.USER,
|
|
|
+ "root", OzoneAcl.OzoneACLRights.READ);
|
|
|
+ acls.add(KSMPBHelper.convertOzoneAcl(ozoneAcl));
|
|
|
+ BucketManager bucketManager = new BucketManagerImpl(metaMgr);
|
|
|
+ KsmBucketInfo bucketInfo = KsmBucketInfo.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setAcls(acls)
|
|
|
+ .setStorageType(HdfsProtos.StorageTypeProto.DISK)
|
|
|
+ .setIsVersionEnabled(false)
|
|
|
+ .build();
|
|
|
+ bucketManager.createBucket(bucketInfo);
|
|
|
+ KsmBucketInfo result = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertEquals("sampleVol", result.getVolumeName());
|
|
|
+ Assert.assertEquals("bucketOne", result.getBucketName());
|
|
|
+ Assert.assertEquals(1, result.getAcls().size());
|
|
|
+ List<OzoneAclInfo> addAcls = new LinkedList<>();
|
|
|
+ OzoneAcl newAcl = new OzoneAcl(OzoneAcl.OzoneACLType.USER,
|
|
|
+ "ozone", OzoneAcl.OzoneACLRights.READ);
|
|
|
+ addAcls.add(KSMPBHelper.convertOzoneAcl(newAcl));
|
|
|
+ KsmBucketArgs bucketArgs = KsmBucketArgs.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setAddAcls(addAcls)
|
|
|
+ .build();
|
|
|
+ bucketManager.setBucketProperty(bucketArgs);
|
|
|
+ KsmBucketInfo updatedResult = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertEquals(2, updatedResult.getAcls().size());
|
|
|
+ Assert.assertTrue(updatedResult.getAcls().contains(
|
|
|
+ KSMPBHelper.convertOzoneAcl(newAcl)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testSetBucketPropertyRemoveACL() throws IOException {
|
|
|
+ MetadataManager metaMgr = getMetadataManagerMock("sampleVol");
|
|
|
+ List<OzoneAclInfo> acls = new LinkedList<>();
|
|
|
+ OzoneAcl aclOne = new OzoneAcl(OzoneAcl.OzoneACLType.USER,
|
|
|
+ "root", OzoneAcl.OzoneACLRights.READ);
|
|
|
+ OzoneAcl aclTwo = new OzoneAcl(OzoneAcl.OzoneACLType.USER,
|
|
|
+ "ozone", OzoneAcl.OzoneACLRights.READ);
|
|
|
+ acls.add(KSMPBHelper.convertOzoneAcl(aclOne));
|
|
|
+ acls.add(KSMPBHelper.convertOzoneAcl(aclTwo));
|
|
|
+ BucketManager bucketManager = new BucketManagerImpl(metaMgr);
|
|
|
+ KsmBucketInfo bucketInfo = KsmBucketInfo.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setAcls(acls)
|
|
|
+ .setStorageType(HdfsProtos.StorageTypeProto.DISK)
|
|
|
+ .setIsVersionEnabled(false)
|
|
|
+ .build();
|
|
|
+ bucketManager.createBucket(bucketInfo);
|
|
|
+ KsmBucketInfo result = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertEquals(2, result.getAcls().size());
|
|
|
+ List<OzoneAclInfo> removeAcls = new LinkedList<>();
|
|
|
+ removeAcls.add(KSMPBHelper.convertOzoneAcl(aclTwo));
|
|
|
+ KsmBucketArgs bucketArgs = KsmBucketArgs.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setRemoveAcls(removeAcls)
|
|
|
+ .build();
|
|
|
+ bucketManager.setBucketProperty(bucketArgs);
|
|
|
+ KsmBucketInfo updatedResult = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertEquals(1, updatedResult.getAcls().size());
|
|
|
+ Assert.assertFalse(updatedResult.getAcls().contains(
|
|
|
+ KSMPBHelper.convertOzoneAcl(aclTwo)));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testSetBucketPropertyChangeStorageType() throws IOException {
|
|
|
+ MetadataManager metaMgr = getMetadataManagerMock("sampleVol");
|
|
|
+ BucketManager bucketManager = new BucketManagerImpl(metaMgr);
|
|
|
+ KsmBucketInfo bucketInfo = KsmBucketInfo.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setStorageType(HdfsProtos.StorageTypeProto.DISK)
|
|
|
+ .build();
|
|
|
+ bucketManager.createBucket(bucketInfo);
|
|
|
+ KsmBucketInfo result = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertEquals(HdfsProtos.StorageTypeProto.DISK,
|
|
|
+ result.getStorageType());
|
|
|
+ KsmBucketArgs bucketArgs = KsmBucketArgs.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setStorageType(HdfsProtos.StorageTypeProto.SSD)
|
|
|
+ .build();
|
|
|
+ bucketManager.setBucketProperty(bucketArgs);
|
|
|
+ KsmBucketInfo updatedResult = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertEquals(HdfsProtos.StorageTypeProto.SSD,
|
|
|
+ updatedResult.getStorageType());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testSetBucketPropertyChangeVersioning() throws IOException {
|
|
|
+ MetadataManager metaMgr = getMetadataManagerMock("sampleVol");
|
|
|
+ BucketManager bucketManager = new BucketManagerImpl(metaMgr);
|
|
|
+ KsmBucketInfo bucketInfo = KsmBucketInfo.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setIsVersionEnabled(false)
|
|
|
+ .build();
|
|
|
+ bucketManager.createBucket(bucketInfo);
|
|
|
+ KsmBucketInfo result = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertFalse(result.getIsVersionEnabled());
|
|
|
+ KsmBucketArgs bucketArgs = KsmBucketArgs.newBuilder()
|
|
|
+ .setVolumeName("sampleVol")
|
|
|
+ .setBucketName("bucketOne")
|
|
|
+ .setIsVersionEnabled(true)
|
|
|
+ .build();
|
|
|
+ bucketManager.setBucketProperty(bucketArgs);
|
|
|
+ KsmBucketInfo updatedResult = bucketManager.getBucketInfo(
|
|
|
+ "sampleVol", "bucketOne");
|
|
|
+ Assert.assertTrue(updatedResult.getIsVersionEnabled());
|
|
|
+ }
|
|
|
}
|