requestedQueue = queuePolicy.assignAppToQueue(requestedQueue, userName); if (StringUtils.isNotBlank(requestedQueue)) { LOG.debug("Setting queue name to " + requestedQueue + " for user "
@Test(expected=IOException.class) public void testEmptyGroupsPrimaryGroupRule() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='primaryGroup' create=\"false\" />"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); // Add a static mapping that returns empty groups for users conf.setStrings(CommonConfigurationKeys .HADOOP_USER_GROUP_STATIC_OVERRIDES, "emptygroupuser="); QueuePlacementPolicy policy = parse(sb.toString()); policy.assignAppToQueue(null, "emptygroupuser"); }
@Test public void testSpecifiedThenReject() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' />"); sb.append(" <rule name='reject' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "someuser")); assertEquals(null, policy.assignAppToQueue("default", "someuser")); }
@Test public void testNoCreate() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' />"); sb.append(" <rule name='user' create=\"false\" />"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); configuredQueues.get(FSQueueType.LEAF).add("root.someuser"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "someuser")); assertEquals("root.someuser", policy.assignAppToQueue("default", "someuser")); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "otheruser")); assertEquals("root.default", policy.assignAppToQueue("default", "otheruser")); }
@Test public void testSpecifiedThenReject() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' />"); sb.append(" <rule name='reject' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "someuser")); assertEquals(null, policy.assignAppToQueue("default", "someuser")); }
@Test public void testDefaultRuleWithQueueAttribute() throws Exception { // This test covers the use case where we would like default rule // to point to a different queue by default rather than root.default configuredQueues.get(FSQueueType.LEAF).add("root.someDefaultQueue"); StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='default' queue='root.someDefaultQueue'/>"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.someDefaultQueue", policy.assignAppToQueue("root.default", "user1")); }
@Test public void testNoCreate() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' />"); sb.append(" <rule name='user' create=\"false\" />"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); configuredQueues.get(FSQueueType.LEAF).add("root.someuser"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "someuser")); assertEquals("root.someuser", policy.assignAppToQueue("default", "someuser")); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "otheruser")); assertEquals("root.default", policy.assignAppToQueue("default", "otheruser")); }
@Test public void testDefaultRuleWithQueueAttribute() throws Exception { // This test covers the use case where we would like default rule // to point to a different queue by default rather than root.default configuredQueues.get(FSQueueType.LEAF).add("root.someDefaultQueue"); StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='default' queue='root.someDefaultQueue'/>"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.someDefaultQueue", policy.assignAppToQueue("root.default", "user1")); }
@Test public void testSpecifiedUserPolicy() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' />"); sb.append(" <rule name='user' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "someuser")); assertEquals("root.someuser", policy.assignAppToQueue("default", "someuser")); assertEquals("root.otheruser", policy.assignAppToQueue("default", "otheruser")); }
@Test public void testSpecifiedUserPolicy() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' />"); sb.append(" <rule name='user' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.specifiedq", policy.assignAppToQueue("specifiedq", "someuser")); assertEquals("root.someuser", policy.assignAppToQueue("default", "someuser")); assertEquals("root.otheruser", policy.assignAppToQueue("default", "otheruser")); }
@Test public void testTerminals() throws Exception { // Should make it through without an exception StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='secondaryGroupExistingQueue' create='true'/>"); sb.append(" <rule name='default' queue='otherdefault' create='false'/>"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); try { policy.assignAppToQueue("root.otherdefault", "user1"); fail("Expect exception from having default rule with create=\'false\'"); } catch (IllegalStateException se) { } }
@Test public void testNestedUserQueueDefaultRule() throws Exception { // This test covers the use case where we would like user queues to be // created under a default parent queue configuredQueues.get(FSQueueType.PARENT).add("root.parentq"); StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='default' queue='root.parentq'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.parentq.user1", policy.assignAppToQueue("root.default", "user1")); }
@Test public void testNestedUserQueueDefaultRule() throws Exception { // This test covers the use case where we would like user queues to be // created under a default parent queue configuredQueues.get(FSQueueType.PARENT).add("root.parentq"); StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='default' queue='root.parentq'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.parentq.user1", policy.assignAppToQueue("root.default", "user1")); }
@Test public void testNestedUserQueueSpecificRule() throws Exception { // This test covers the use case where users can specify different parent // queues and want user queues under those. StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='specified' create='false'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); // Let's create couple of parent queues configuredQueues.get(FSQueueType.PARENT).add("root.parent1"); configuredQueues.get(FSQueueType.PARENT).add("root.parent2"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.parent1.user1", policy.assignAppToQueue("root.parent1", "user1")); assertEquals("root.parent2.user2", policy.assignAppToQueue("root.parent2", "user2")); }
@Test public void testNestedUserQueueSpecificRule() throws Exception { // This test covers the use case where users can specify different parent // queues and want user queues under those. StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='specified' create='false'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); // Let's create couple of parent queues configuredQueues.get(FSQueueType.PARENT).add("root.parent1"); configuredQueues.get(FSQueueType.PARENT).add("root.parent2"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.parent1.user1", policy.assignAppToQueue("root.parent1", "user1")); assertEquals("root.parent2.user2", policy.assignAppToQueue("root.parent2", "user2")); }
@Test public void testUserContainsPeriod() throws Exception { // This test covers the user case where the username contains periods. StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='user' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.first_dot_last", policy.assignAppToQueue("default", "first.last")); sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='default'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); policy = parse(sb.toString()); assertEquals("root.default.first_dot_last", policy.assignAppToQueue("root.default", "first.last")); }
@Test public void testNestedUserQueueSecondaryGroup() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='secondaryGroupExistingQueue'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); // Should return root.default since secondary groups are not configured assertEquals("root.default", policy.assignAppToQueue("root.default", "user1")); // configure secondary group for user1 configuredQueues.get(FSQueueType.PARENT).add("root.user1subgroup1"); policy = parse(sb.toString()); // user queue created should be created under secondary group assertEquals("root.user1subgroup1.user1", policy.assignAppToQueue("root.default", "user1")); }
@Test public void testNestedUserQueueSecondaryGroup() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='secondaryGroupExistingQueue'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); QueuePlacementPolicy policy = parse(sb.toString()); // Should return root.default since secondary groups are not configured assertEquals("root.default", policy.assignAppToQueue("root.default", "user1")); // configure secondary group for user1 configuredQueues.get(FSQueueType.PARENT).add("root.user1subgroup1"); policy = parse(sb.toString()); // user queue created should be created under secondary group assertEquals("root.user1subgroup1.user1", policy.assignAppToQueue("root.default", "user1")); }
@Test public void testGroupContainsPeriod() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='primaryGroup'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING, PeriodGroupsMapping.class, GroupMappingServiceProvider.class); // User queue would be created under primary group queue, and the period // in the group name should be converted into _dot_ QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.user1_dot_group.user1", policy.assignAppToQueue("root.default", "user1")); conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING, SimpleGroupsMapping.class, GroupMappingServiceProvider.class); }
@Test public void testGroupContainsPeriod() throws Exception { StringBuffer sb = new StringBuffer(); sb.append("<queuePlacementPolicy>"); sb.append(" <rule name='specified' create='false' />"); sb.append(" <rule name='nestedUserQueue'>"); sb.append(" <rule name='primaryGroup'/>"); sb.append(" </rule>"); sb.append(" <rule name='default' />"); sb.append("</queuePlacementPolicy>"); conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING, PeriodGroupsMapping.class, GroupMappingServiceProvider.class); // User queue would be created under primary group queue, and the period // in the group name should be converted into _dot_ QueuePlacementPolicy policy = parse(sb.toString()); assertEquals("root.user1_dot_group.user1", policy.assignAppToQueue("root.default", "user1")); conf.setClass(CommonConfigurationKeys.HADOOP_SECURITY_GROUP_MAPPING, SimpleGroupsMapping.class, GroupMappingServiceProvider.class); }