HDFS-12175. Ozone: Fix Leaking in TestStorageContainerManager#testRpcPermission. Contributed by Xiaoyu Yao.
This commit is contained in:
parent
c081e831d7
commit
91b089c8e3
@ -20,24 +20,16 @@
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.hadoop.ozone.scm.StorageContainerManager;
|
||||
import org.apache.hadoop.scm.client.ScmClient;
|
||||
import org.apache.hadoop.scm.container.common.helpers.Pipeline;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Assert;
|
||||
// TODO : We need this when we enable these tests back.
|
||||
import org.junit.Test;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.After;
|
||||
import org.junit.rules.ExpectedException;
|
||||
|
||||
import org.apache.hadoop.io.IOUtils;
|
||||
import org.apache.hadoop.scm.protocol.LocatedContainer;
|
||||
import org.apache.hadoop.scm.protocolPB.StorageContainerLocationProtocolClientSideTranslatorPB;
|
||||
import org.junit.rules.Timeout;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
@ -54,24 +46,9 @@ public class TestStorageContainerManager {
|
||||
@Rule
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
private static MiniOzoneCluster cluster;
|
||||
private static OzoneConfiguration conf;
|
||||
private static StorageContainerLocationProtocolClientSideTranslatorPB
|
||||
storageContainerLocationClient;
|
||||
|
||||
@Rule
|
||||
public ExpectedException exception = ExpectedException.none();
|
||||
|
||||
@BeforeClass
|
||||
public static void init() throws IOException {
|
||||
conf = new OzoneConfiguration();
|
||||
}
|
||||
|
||||
@After
|
||||
public void shutdown() throws InterruptedException {
|
||||
IOUtils.cleanup(null, storageContainerLocationClient, cluster);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRpcPermission() throws IOException {
|
||||
// Test with default configuration
|
||||
@ -91,65 +68,70 @@ public void testRpcPermission() throws IOException {
|
||||
private void testRpcPermissionWithConf(
|
||||
OzoneConfiguration ozoneConf, String fakeRemoteUsername,
|
||||
boolean expectPermissionDenied) throws IOException {
|
||||
cluster = new MiniOzoneCluster.Builder(ozoneConf).numDataNodes(1)
|
||||
.setHandlerType(OzoneConsts.OZONE_HANDLER_DISTRIBUTED).build();
|
||||
|
||||
String fakeUser = fakeRemoteUsername;
|
||||
StorageContainerManager mockScm = Mockito.spy(
|
||||
cluster.getStorageContainerManager());
|
||||
Mockito.when(mockScm.getPpcRemoteUsername())
|
||||
.thenReturn(fakeUser);
|
||||
MiniOzoneCluster cluster =
|
||||
new MiniOzoneCluster.Builder(ozoneConf).numDataNodes(1)
|
||||
.setHandlerType(OzoneConsts.OZONE_HANDLER_DISTRIBUTED).build();
|
||||
|
||||
try {
|
||||
mockScm.deleteContainer("container1");
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} catch (Exception e) {
|
||||
if (expectPermissionDenied) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
} else {
|
||||
// If passes permission check, it should fail with
|
||||
// container not exist exception.
|
||||
Assert.assertTrue(e.getMessage()
|
||||
.contains("container doesn't exist"));
|
||||
}
|
||||
}
|
||||
String fakeUser = fakeRemoteUsername;
|
||||
StorageContainerManager mockScm = Mockito.spy(
|
||||
cluster.getStorageContainerManager());
|
||||
Mockito.when(mockScm.getPpcRemoteUsername())
|
||||
.thenReturn(fakeUser);
|
||||
|
||||
try {
|
||||
Pipeline pipeLine2 = mockScm.allocateContainer("container2");
|
||||
if(expectPermissionDenied) {
|
||||
try {
|
||||
mockScm.deleteContainer("container1");
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} else {
|
||||
Assert.assertEquals("container2", pipeLine2.getContainerName());
|
||||
} catch (Exception e) {
|
||||
if (expectPermissionDenied) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
} else {
|
||||
// If passes permission check, it should fail with
|
||||
// container not exist exception.
|
||||
Assert.assertTrue(e.getMessage()
|
||||
.contains("container doesn't exist"));
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
}
|
||||
|
||||
try {
|
||||
Pipeline pipeLine3 = mockScm.allocateContainer("container3",
|
||||
ScmClient.ReplicationFactor.ONE);
|
||||
if(expectPermissionDenied) {
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} else {
|
||||
Assert.assertEquals("container3", pipeLine3.getContainerName());
|
||||
Assert.assertEquals(1, pipeLine3.getMachines().size());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
}
|
||||
|
||||
try {
|
||||
mockScm.getContainer("container4");
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} catch (Exception e) {
|
||||
if (expectPermissionDenied) {
|
||||
try {
|
||||
Pipeline pipeLine2 = mockScm.allocateContainer("container2");
|
||||
if (expectPermissionDenied) {
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} else {
|
||||
Assert.assertEquals("container2", pipeLine2.getContainerName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
} else {
|
||||
// If passes permission check, it should fail with
|
||||
// key not exist exception.
|
||||
Assert.assertTrue(e.getMessage()
|
||||
.contains("Specified key does not exist"));
|
||||
}
|
||||
|
||||
try {
|
||||
Pipeline pipeLine3 = mockScm.allocateContainer("container3",
|
||||
ScmClient.ReplicationFactor.ONE);
|
||||
if (expectPermissionDenied) {
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} else {
|
||||
Assert.assertEquals("container3", pipeLine3.getContainerName());
|
||||
Assert.assertEquals(1, pipeLine3.getMachines().size());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
}
|
||||
|
||||
try {
|
||||
mockScm.getContainer("container4");
|
||||
fail("Operation should fail, expecting an IOException here.");
|
||||
} catch (Exception e) {
|
||||
if (expectPermissionDenied) {
|
||||
verifyPermissionDeniedException(e, fakeUser);
|
||||
} else {
|
||||
// If passes permission check, it should fail with
|
||||
// key not exist exception.
|
||||
Assert.assertTrue(e.getMessage()
|
||||
.contains("Specified key does not exist"));
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
IOUtils.cleanup(null, cluster);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user