This is an automated email from the ASF dual-hosted git repository.
snemeth pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 66a08e9 YARN-11038. Fix testQueueSubmitWithACL* tests in
TestAppManager. Contributed by Tamas Domok
66a08e9 is described below
commit 66a08e933ae8f1737f8771e1316bb44c97aa6500
Author: Szilard Nemeth <[email protected]>
AuthorDate: Wed Dec 8 16:41:35 2021 +0100
YARN-11038. Fix testQueueSubmitWithACL* tests in TestAppManager.
Contributed by Tamas Domok
---
.../server/resourcemanager/TestAppManager.java | 129 ++++++++++-----------
1 file changed, 62 insertions(+), 67 deletions(-)
diff --git
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
index f916264..4a393cc 100644
---
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
+++
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestAppManager.java
@@ -274,10 +274,41 @@ public class TestAppManager extends AppManagerTestBase{
setupDispatcher(rmContext, conf);
}
+ private static PlacementManager createMockPlacementManager(
+ String userRegex, String placementQueue, String placementParentQueue
+ ) throws YarnException {
+ PlacementManager placementMgr = mock(PlacementManager.class);
+ doAnswer(new Answer<ApplicationPlacementContext>() {
+
+ @Override
+ public ApplicationPlacementContext answer(InvocationOnMock invocation)
+ throws Throwable {
+ return new ApplicationPlacementContext(placementQueue,
placementParentQueue);
+ }
+
+ }).when(placementMgr).placeApplication(
+ any(ApplicationSubmissionContext.class),
+ matches(userRegex),
+ any(Boolean.class));
+
+ return placementMgr;
+ }
+
+ private TestRMAppManager createAppManager(RMContext context, Configuration
configuration) {
+ ApplicationMasterService masterService = new
ApplicationMasterService(context,
+ context.getScheduler());
+
+ return new TestRMAppManager(context,
+ new ClientToAMTokenSecretManagerInRM(),
+ context.getScheduler(), masterService,
+ new ApplicationACLsManager(configuration), configuration);
+ }
+
@Test
public void testQueueSubmitWithACLsEnabledWithQueueMapping()
- throws IOException, YarnException, InterruptedException {
- YarnConfiguration conf = new YarnConfiguration();
+ throws YarnException {
+ YarnConfiguration conf = new YarnConfiguration(new Configuration(false));
+ conf.set(YarnConfiguration.YARN_ACL_ENABLE, "true");
conf.setClass(YarnConfiguration.RM_SCHEDULER, CapacityScheduler.class,
ResourceScheduler.class);
@@ -285,11 +316,11 @@ public class TestAppManager extends AppManagerTestBase{
CapacitySchedulerConfiguration(conf, false);
csConf.set(PREFIX + "root.queues", "default,test");
- csConf.setFloat(PREFIX + "root.default.capacity", 50.0f);
- csConf.setFloat(PREFIX + "root.default.maximum-capacity", 100.0f);
+ csConf.setCapacity("root.default", 50.0f);
+ csConf.setMaximumCapacity("root.default", 100.0f);
- csConf.setFloat(PREFIX + "root.test.capacity", 50.0f);
- csConf.setFloat(PREFIX + "root.test.maximum-capacity", 100.0f);
+ csConf.setCapacity("root.test", 50.0f);
+ csConf.setMaximumCapacity("root.test", 100.0f);
csConf.set(PREFIX + "root.acl_submit_applications", " ");
csConf.set(PREFIX + "root.acl_administer_queue", " ");
@@ -300,55 +331,30 @@ public class TestAppManager extends AppManagerTestBase{
csConf.set(PREFIX + "root.test.acl_submit_applications", "test");
csConf.set(PREFIX + "root.test.acl_administer_queue", "test");
- csConf.set(PREFIX + "root.test.acl_submit_applications", "test");
- csConf.set(PREFIX + "root.test.acl_administer_queue", "test");
-
- csConf.set(YarnConfiguration.YARN_ACL_ENABLE, "true");
-
- // Setup a PlacementManager returns a new queue
- PlacementManager placementMgr = mock(PlacementManager.class);
- doAnswer(new Answer<ApplicationPlacementContext>() {
-
- @Override
- public ApplicationPlacementContext answer(InvocationOnMock invocation)
- throws Throwable {
- return new ApplicationPlacementContext("test");
- }
-
- }).when(placementMgr).placeApplication(
- any(ApplicationSubmissionContext.class), matches("test"));
-
- asContext.setQueue("oldQueue");
+ asContext.setQueue("test");
- MockRM newMockRM = new MockRM(conf);
+ MockRM newMockRM = new MockRM(csConf);
RMContext newMockRMContext = newMockRM.getRMContext();
- newMockRMContext.setQueuePlacementManager(placementMgr);
- ApplicationMasterService masterService =
- new ApplicationMasterService(newMockRMContext,
- newMockRMContext.getScheduler());
-
- TestRMAppManager newAppMonitor = new TestRMAppManager(newMockRMContext,
- new ClientToAMTokenSecretManagerInRM(),
- newMockRMContext.getScheduler(), masterService,
- new ApplicationACLsManager(conf), conf);
+
newMockRMContext.setQueuePlacementManager(createMockPlacementManager("test",
"test", null));
+ TestRMAppManager newAppMonitor = createAppManager(newMockRMContext, conf);
- //only user test has permission to submit to 'test' queue
newAppMonitor.submitApplication(asContext, "test");
+ RMApp app = newMockRMContext.getRMApps().get(appId);
+ Assert.assertNotNull("app should not be null", app);
+ Assert.assertEquals("the queue should be placed on 'test' queue", "test",
app.getQueue());
try {
- //should fail since user does not have permission to submit to queue
- // 'test'
asContext.setApplicationId(appId = MockApps.newAppID(2));
newAppMonitor.submitApplication(asContext, "test1");
+ Assert.fail("should fail since test1 does not have permission to submit
to queue");
} catch(YarnException e) {
assertTrue(e.getCause() instanceof AccessControlException);
}
}
@Test
- public void
- testQueueSubmitWithACLsEnabledWithQueueMappingForAutoCreatedQueue()
- throws IOException, YarnException, InterruptedException {
+ public void
testQueueSubmitWithACLsEnabledWithQueueMappingForAutoCreatedQueue()
+ throws IOException, YarnException {
YarnConfiguration conf = new YarnConfiguration();
conf.set(YarnConfiguration.YARN_ACL_ENABLE, "true");
conf.setClass(YarnConfiguration.RM_SCHEDULER, CapacityScheduler.class,
@@ -358,8 +364,11 @@ public class TestAppManager extends AppManagerTestBase{
conf, false);
csConf.set(PREFIX + "root.queues", "default,managedparent");
- csConf.setFloat(PREFIX + "root.default.capacity", 50.0f);
- csConf.setFloat(PREFIX + "root.default.maximum-capacity", 100.0f);
+ csConf.setCapacity("root.default", 50.0f);
+ csConf.setMaximumCapacity("root.default", 100.0f);
+
+ csConf.setCapacity("root.managedparent", 50.0f);
+ csConf.setMaximumCapacity("root.managedparent", 100.0f);
csConf.set(PREFIX + "root.acl_submit_applications", " ");
csConf.set(PREFIX + "root.acl_administer_queue", " ");
@@ -374,22 +383,9 @@ public class TestAppManager extends AppManagerTestBase{
csConf.setAutoCreatedLeafQueueConfigCapacity("root.managedparent", 30f);
csConf.setAutoCreatedLeafQueueConfigMaxCapacity("root.managedparent",
100f);
- // Setup a PlacementManager returns a new queue
- PlacementManager placementMgr = mock(PlacementManager.class);
- doAnswer(new Answer<ApplicationPlacementContext>() {
-
- @Override
- public ApplicationPlacementContext answer(InvocationOnMock invocation)
- throws Throwable {
- return new ApplicationPlacementContext("user1", "managedparent");
- }
-
- }).when(placementMgr).placeApplication(
- any(ApplicationSubmissionContext.class), matches("user1|user2"));
-
asContext.setQueue("oldQueue");
- MockRM newMockRM = new MockRM(conf);
+ MockRM newMockRM = new MockRM(csConf);
CapacityScheduler cs =
((CapacityScheduler) newMockRM.getResourceScheduler());
ManagedParentQueue managedParentQueue = new ManagedParentQueue(cs,
@@ -398,22 +394,21 @@ public class TestAppManager extends AppManagerTestBase{
managedParentQueue);
RMContext newMockRMContext = newMockRM.getRMContext();
- newMockRMContext.setQueuePlacementManager(placementMgr);
- ApplicationMasterService masterService = new ApplicationMasterService(
- newMockRMContext, newMockRMContext.getScheduler());
-
- TestRMAppManager newAppMonitor = new TestRMAppManager(newMockRMContext,
- new ClientToAMTokenSecretManagerInRM(),
newMockRMContext.getScheduler(),
- masterService, new ApplicationACLsManager(conf), conf);
+ newMockRMContext.setQueuePlacementManager(createMockPlacementManager(
+ "user1|user2", "user1", "managedparent"));
+ TestRMAppManager newAppMonitor = createAppManager(newMockRMContext, conf);
- //only user test has permission to submit to 'user1' queue
newAppMonitor.submitApplication(asContext, "user1");
+ RMApp app = newMockRMContext.getRMApps().get(appId);
+ Assert.assertNotNull("app should not be null", app);
+ Assert.assertEquals("the queue should be placed on 'managedparent.user1'
queue",
+ "managedparent.user1",
+ app.getQueue());
try {
- //should fail since user does not have permission to submit to queue
- // 'managedparent'
asContext.setApplicationId(appId = MockApps.newAppID(2));
newAppMonitor.submitApplication(asContext, "user2");
+ Assert.fail("should fail since user2 does not have permission to submit
to queue");
} catch (YarnException e) {
assertTrue(e.getCause() instanceof AccessControlException);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]