Author: sandy
Date: Tue Oct 22 06:22:46 2013
New Revision: 1534508
URL: http://svn.apache.org/r1534508
Log:
YARN-1315. TestQueueACLs should also test FairScheduler (Sandy Ryza)
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/QueueACLsTestBase.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerQueueACLs.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerQueueACLs.java
Removed:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestQueueACLs.java
Modified:
hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java
Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1534508&r1=1534507&r2=1534508&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Tue Oct 22 06:22:46 2013
@@ -97,6 +97,8 @@ Release 2.2.1 - UNRELEASED
YARN-1288. Make Fair Scheduler ACLs more user friendly (Sandy Ryza)
+ YARN-1315. TestQueueACLs should also test FairScheduler (Sandy Ryza)
+
OPTIMIZATIONS
BUG FIXES
Modified:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java?rev=1534508&r1=1534507&r2=1534508&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java
(original)
+++
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairSchedulerConfiguration.java
Tue Oct 22 06:22:46 2013
@@ -50,7 +50,7 @@ public class FairSchedulerConfiguration
private static final String CONF_PREFIX = "yarn.scheduler.fair.";
- protected static final String ALLOCATION_FILE = CONF_PREFIX +
"allocation.file";
+ public static final String ALLOCATION_FILE = CONF_PREFIX + "allocation.file";
protected static final String DEFAULT_ALLOCATION_FILE = "fair-scheduler.xml";
protected static final String EVENT_LOG_DIR = "eventlog.dir";
@@ -113,6 +113,10 @@ public class FairSchedulerConfiguration
protected static final String MAX_ASSIGN = CONF_PREFIX + "max.assign";
protected static final int DEFAULT_MAX_ASSIGN = -1;
+ public FairSchedulerConfiguration() {
+ super();
+ }
+
public FairSchedulerConfiguration(Configuration conf) {
super(conf);
}
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/QueueACLsTestBase.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/QueueACLsTestBase.java?rev=1534508&view=auto
==============================================================================
---
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/QueueACLsTestBase.java
(added)
+++
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/QueueACLsTestBase.java
Tue Oct 22 06:22:46 2013
@@ -0,0 +1,268 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.apache.hadoop.yarn.server.resourcemanager;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.security.PrivilegedExceptionAction;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.security.authorize.AccessControlList;
+import org.apache.hadoop.service.Service.STATE;
+import org.apache.hadoop.yarn.api.ApplicationClientProtocol;
+import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportRequest;
+import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationReportResponse;
+import org.apache.hadoop.yarn.api.protocolrecords.GetNewApplicationRequest;
+import org.apache.hadoop.yarn.api.protocolrecords.KillApplicationRequest;
+import org.apache.hadoop.yarn.api.protocolrecords.SubmitApplicationRequest;
+import org.apache.hadoop.yarn.api.records.ApplicationAccessType;
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
+import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
+import org.apache.hadoop.yarn.api.records.Resource;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.hadoop.yarn.ipc.YarnRPC;
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
+import org.apache.hadoop.yarn.server.utils.BuilderUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public abstract class QueueACLsTestBase {
+
+ protected static final String COMMON_USER = "common_user";
+ protected static final String QUEUE_A_USER = "queueA_user";
+ protected static final String QUEUE_B_USER = "queueB_user";
+ protected static final String ROOT_ADMIN = "root_admin";
+ protected static final String QUEUE_A_ADMIN = "queueA_admin";
+ protected static final String QUEUE_B_ADMIN = "queueB_admin";
+
+ protected static final String QUEUEA = "queueA";
+ protected static final String QUEUEB = "queueB";
+
+ private static final Log LOG = LogFactory.getLog(TestApplicationACLs.class);
+
+ MockRM resourceManager;
+ Configuration conf;
+ YarnRPC rpc;
+ InetSocketAddress rmAddress;
+
+ @Before
+ public void setup() throws InterruptedException, IOException {
+ conf = createConfiguration();
+ rpc = YarnRPC.create(conf);
+ rmAddress = conf.getSocketAddr(
+ YarnConfiguration.RM_ADDRESS, YarnConfiguration.DEFAULT_RM_ADDRESS,
+ YarnConfiguration.DEFAULT_RM_PORT);
+
+ AccessControlList adminACL = new AccessControlList("");
+ conf.set(YarnConfiguration.YARN_ADMIN_ACL, adminACL.getAclString());
+
+ resourceManager = new MockRM(conf) {
+ protected ClientRMService createClientRMService() {
+ return new ClientRMService(getRMContext(), this.scheduler,
+ this.rmAppManager, this.applicationACLsManager,
+ this.queueACLsManager, this.rmDTSecretManager);
+ };
+
+ @Override
+ protected void doSecureLogin() throws IOException {
+ }
+ };
+ new Thread() {
+ public void run() {
+ resourceManager.start();
+ };
+ }.start();
+ int waitCount = 0;
+ while (resourceManager.getServiceState() == STATE.INITED
+ && waitCount++ < 60) {
+ LOG.info("Waiting for RM to start...");
+ Thread.sleep(1500);
+ }
+ if (resourceManager.getServiceState() != STATE.STARTED) {
+ // RM could have failed.
+ throw new IOException("ResourceManager failed to start. Final state is "
+ + resourceManager.getServiceState());
+ }
+ }
+
+ @After
+ public void tearDown() {
+ if (resourceManager != null) {
+ resourceManager.stop();
+ }
+ }
+
+ @Test
+ public void testApplicationACLs() throws Exception {
+
+ verifyKillAppSuccess(QUEUE_A_USER, QUEUE_A_USER, QUEUEA, true);
+ verifyKillAppSuccess(QUEUE_A_USER, QUEUE_A_ADMIN, QUEUEA, true);
+ verifyKillAppSuccess(QUEUE_A_USER, COMMON_USER, QUEUEA, true);
+ verifyKillAppSuccess(QUEUE_A_USER, ROOT_ADMIN, QUEUEA, true);
+ verifyKillAppFailure(QUEUE_A_USER, QUEUE_B_USER, QUEUEA, true);
+ verifyKillAppFailure(QUEUE_A_USER, QUEUE_B_ADMIN, QUEUEA, true);
+
+ verifyKillAppSuccess(QUEUE_B_USER, QUEUE_B_USER, QUEUEB, true);
+ verifyKillAppSuccess(QUEUE_B_USER, QUEUE_B_ADMIN, QUEUEB, true);
+ verifyKillAppSuccess(QUEUE_B_USER, COMMON_USER, QUEUEB, true);
+ verifyKillAppSuccess(QUEUE_B_USER, ROOT_ADMIN, QUEUEB, true);
+
+ verifyKillAppFailure(QUEUE_B_USER, QUEUE_A_USER, QUEUEB, true);
+ verifyKillAppFailure(QUEUE_B_USER, QUEUE_A_ADMIN, QUEUEB, true);
+
+ verifyKillAppSuccess(ROOT_ADMIN, ROOT_ADMIN, QUEUEA, false);
+ verifyKillAppSuccess(ROOT_ADMIN, ROOT_ADMIN, QUEUEB, false);
+
+ verifyGetClientAMToken(QUEUE_A_USER, ROOT_ADMIN, QUEUEA, true);
+
+ }
+
+ private void verifyGetClientAMToken(String submitter, String queueAdmin,
+ String queueName, boolean setupACLs) throws Exception {
+ ApplicationId applicationId =
+ submitAppAndGetAppId(submitter, queueName, setupACLs);
+ final GetApplicationReportRequest appReportRequest =
+ GetApplicationReportRequest.newInstance(applicationId);
+
+ ApplicationClientProtocol submitterClient = getRMClientForUser(submitter);
+ ApplicationClientProtocol adMinUserClient = getRMClientForUser(queueAdmin);
+
+ GetApplicationReportResponse submitterGetReport =
+ submitterClient.getApplicationReport(appReportRequest);
+ GetApplicationReportResponse adMinUserGetReport =
+ adMinUserClient.getApplicationReport(appReportRequest);
+
+ Assert.assertEquals(submitterGetReport.getApplicationReport()
+ .getClientToAMToken(), adMinUserGetReport.getApplicationReport()
+ .getClientToAMToken());
+ }
+
+ private void verifyKillAppFailure(String submitter, String killer,
+ String queueName, boolean setupACLs) throws Exception {
+
+ ApplicationId applicationId =
+ submitAppAndGetAppId(submitter, queueName, setupACLs);
+
+ final KillApplicationRequest finishAppRequest =
+ KillApplicationRequest.newInstance(applicationId);
+
+ ApplicationClientProtocol killerClient = getRMClientForUser(killer);
+
+ // Kill app as the killer
+ try {
+ killerClient.forceKillApplication(finishAppRequest);
+ Assert.fail("App killing by the enemy should fail!!");
+ } catch (YarnException e) {
+ LOG.info("Got exception while killing app as the enemy", e);
+ Assert.assertTrue(e.getMessage().contains(
+ "User " + killer + " cannot perform operation MODIFY_APP on "
+ + applicationId));
+ }
+
+ getRMClientForUser(submitter).forceKillApplication(finishAppRequest);
+ }
+
+ private void verifyKillAppSuccess(String submitter, String killer,
+ String queueName, boolean setupACLs) throws Exception {
+ ApplicationId applicationId =
+ submitAppAndGetAppId(submitter, queueName, setupACLs);
+
+ final KillApplicationRequest finishAppRequest =
+ KillApplicationRequest.newInstance(applicationId);
+
+ ApplicationClientProtocol ownerClient = getRMClientForUser(killer);
+
+ // Kill app as killer
+ ownerClient.forceKillApplication(finishAppRequest);
+ resourceManager.waitForState(applicationId, RMAppState.KILLED);
+ }
+
+ private ApplicationId submitAppAndGetAppId(String submitter,
+ String queueName, boolean setupACLs) throws Exception {
+
+ GetNewApplicationRequest newAppRequest =
+ GetNewApplicationRequest.newInstance();
+
+ ApplicationClientProtocol submitterClient = getRMClientForUser(submitter);
+ ApplicationId applicationId =
+ submitterClient.getNewApplication(newAppRequest).getApplicationId();
+
+ Resource resource = BuilderUtils.newResource(1024, 1);
+ Map<ApplicationAccessType, String> acls = createACLs(submitter, setupACLs);
+ ContainerLaunchContext amContainerSpec =
+ ContainerLaunchContext.newInstance(null, null, null, null, null, acls);
+
+ ApplicationSubmissionContext appSubmissionContext =
+ ApplicationSubmissionContext.newInstance(applicationId,
+ "applicationName", queueName, null, amContainerSpec, false, true, 1,
+ resource, "applicationType");
+ appSubmissionContext.setApplicationId(applicationId);
+ appSubmissionContext.setQueue(queueName);
+
+ SubmitApplicationRequest submitRequest =
+ SubmitApplicationRequest.newInstance(appSubmissionContext);
+ submitterClient.submitApplication(submitRequest);
+ resourceManager.waitForState(applicationId, RMAppState.ACCEPTED);
+ return applicationId;
+ }
+
+ private Map<ApplicationAccessType, String> createACLs(String submitter,
+ boolean setupACLs) {
+ AccessControlList viewACL = new AccessControlList("");
+ AccessControlList modifyACL = new AccessControlList("");
+ if (setupACLs) {
+ viewACL.addUser(submitter);
+ viewACL.addUser(COMMON_USER);
+ modifyACL.addUser(submitter);
+ modifyACL.addUser(COMMON_USER);
+ }
+ Map<ApplicationAccessType, String> acls =
+ new HashMap<ApplicationAccessType, String>();
+ acls.put(ApplicationAccessType.VIEW_APP, viewACL.getAclString());
+ acls.put(ApplicationAccessType.MODIFY_APP, modifyACL.getAclString());
+ return acls;
+ }
+
+ private ApplicationClientProtocol getRMClientForUser(String user)
+ throws IOException, InterruptedException {
+ UserGroupInformation userUGI = UserGroupInformation.createRemoteUser(user);
+ ApplicationClientProtocol userClient =
+ userUGI
+ .doAs(new PrivilegedExceptionAction<ApplicationClientProtocol>() {
+ @Override
+ public ApplicationClientProtocol run() throws Exception {
+ return (ApplicationClientProtocol) rpc.getProxy(
+ ApplicationClientProtocol.class, rmAddress, conf);
+ }
+ });
+ return userClient;
+ }
+
+ protected abstract Configuration createConfiguration() throws IOException;
+}
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerQueueACLs.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerQueueACLs.java?rev=1534508&view=auto
==============================================================================
---
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerQueueACLs.java
(added)
+++
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacitySchedulerQueueACLs.java
Tue Oct 22 06:22:46 2013
@@ -0,0 +1,73 @@
+/**
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.security.authorize.AccessControlList;
+import org.apache.hadoop.yarn.api.records.QueueACL;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.QueueACLsTestBase;
+
+public class TestCapacitySchedulerQueueACLs extends QueueACLsTestBase {
+ @Override
+ protected Configuration createConfiguration() {
+ CapacitySchedulerConfiguration csConf =
+ new CapacitySchedulerConfiguration();
+ csConf.setQueues(CapacitySchedulerConfiguration.ROOT, new String[] {
+ QUEUEA, QUEUEB });
+
+ csConf.setCapacity(CapacitySchedulerConfiguration.ROOT + "." + QUEUEA,
50f);
+ csConf.setCapacity(CapacitySchedulerConfiguration.ROOT + "." + QUEUEB,
50f);
+
+ Map<QueueACL, AccessControlList> aclsOnQueueA =
+ new HashMap<QueueACL, AccessControlList>();
+ AccessControlList submitACLonQueueA = new AccessControlList(QUEUE_A_USER);
+ submitACLonQueueA.addUser(COMMON_USER);
+ AccessControlList adminACLonQueueA = new AccessControlList(QUEUE_A_ADMIN);
+ aclsOnQueueA.put(QueueACL.SUBMIT_APPLICATIONS, submitACLonQueueA);
+ aclsOnQueueA.put(QueueACL.ADMINISTER_QUEUE, adminACLonQueueA);
+ csConf.setAcls(CapacitySchedulerConfiguration.ROOT + "." + QUEUEA,
+ aclsOnQueueA);
+
+ Map<QueueACL, AccessControlList> aclsOnQueueB =
+ new HashMap<QueueACL, AccessControlList>();
+ AccessControlList submitACLonQueueB = new AccessControlList(QUEUE_B_USER);
+ submitACLonQueueB.addUser(COMMON_USER);
+ AccessControlList adminACLonQueueB = new AccessControlList(QUEUE_B_ADMIN);
+ aclsOnQueueB.put(QueueACL.SUBMIT_APPLICATIONS, submitACLonQueueB);
+ aclsOnQueueB.put(QueueACL.ADMINISTER_QUEUE, adminACLonQueueB);
+ csConf.setAcls(CapacitySchedulerConfiguration.ROOT + "." + QUEUEB,
+ aclsOnQueueB);
+
+ Map<QueueACL, AccessControlList> aclsOnRootQueue =
+ new HashMap<QueueACL, AccessControlList>();
+ AccessControlList submitACLonRoot = new AccessControlList("");
+ AccessControlList adminACLonRoot = new AccessControlList(ROOT_ADMIN);
+ aclsOnRootQueue.put(QueueACL.SUBMIT_APPLICATIONS, submitACLonRoot);
+ aclsOnRootQueue.put(QueueACL.ADMINISTER_QUEUE, adminACLonRoot);
+ csConf.setAcls(CapacitySchedulerConfiguration.ROOT, aclsOnRootQueue);
+
+ csConf.setBoolean(YarnConfiguration.YARN_ACL_ENABLE, true);
+ csConf.set("yarn.resourcemanager.scheduler.class",
CapacityScheduler.class.getName());
+
+ return csConf;
+ }
+}
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerQueueACLs.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerQueueACLs.java?rev=1534508&view=auto
==============================================================================
---
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerQueueACLs.java
(added)
+++
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/TestFairSchedulerQueueACLs.java
Tue Oct 22 06:22:46 2013
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.QueueACLsTestBase;
+
+public class TestFairSchedulerQueueACLs extends QueueACLsTestBase {
+ @Override
+ protected Configuration createConfiguration() throws IOException {
+ FairSchedulerConfiguration fsConf = new FairSchedulerConfiguration();
+
+ final String TEST_DIR = new File(System.getProperty("test.build.data",
+ "/tmp")).getAbsolutePath();
+ final String ALLOC_FILE = new File(TEST_DIR, "test-queues.xml")
+ .getAbsolutePath();
+ PrintWriter out = new PrintWriter(new FileWriter(ALLOC_FILE));
+ out.println("<?xml version=\"1.0\"?>");
+ out.println("<allocations>");
+ out.println("<queue name=\"root\">");
+ out.println(" <aclSubmitApps> </aclSubmitApps>");
+ out.println(" <aclAdministerApps>root_admin </aclAdministerApps>");
+ out.println(" <queue name=\"queueA\">");
+ out.println(" <aclSubmitApps>queueA_user,common_user </aclSubmitApps>");
+ out.println(" <aclAdministerApps>queueA_admin </aclAdministerApps>");
+ out.println(" </queue>");
+ out.println(" <queue name=\"queueB\">");
+ out.println(" <aclSubmitApps>queueB_user,common_user </aclSubmitApps>");
+ out.println(" <aclAdministerApps>queueB_admin </aclAdministerApps>");
+ out.println(" </queue>");
+ out.println("</queue>");
+ out.println("</allocations>");
+ out.close();
+ fsConf.set(FairSchedulerConfiguration.ALLOCATION_FILE, ALLOC_FILE);
+
+ fsConf.setBoolean(YarnConfiguration.YARN_ACL_ENABLE, true);
+ fsConf.set("yarn.resourcemanager.scheduler.class",
FairScheduler.class.getName());
+
+ return fsConf;
+ }
+}