Author: todd
Date: Tue Dec 18 01:15:28 2012
New Revision: 1423241
URL: http://svn.apache.org/viewvc?rev=1423241&view=rev
Log:
HADOOP-9004. Allow security unit tests to use external KDC. Contributed by
Stephen Chu.
Added:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUGIWithExternalKdc.java
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/SecurityUtilTestHelper.java
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1423241&r1=1423240&r2=1423241&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/CHANGES.txt
Tue Dec 18 01:15:28 2012
@@ -98,6 +98,9 @@ Release 2.0.3-alpha - Unreleased
HADOOP-9127. Update documentation for ZooKeeper Failover Controller.
(Daisuke Kobayashi via atm)
+ HADOOP-9004. Allow security unit tests to use external KDC. (Stephen Chu
+ via suresh)
+
OPTIMIZATIONS
HADOOP-8866. SampleQuantiles#query is O(N^2) instead of O(N). (Andrew Wang
Modified:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/SecurityUtilTestHelper.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/SecurityUtilTestHelper.java?rev=1423241&r1=1423240&r2=1423241&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/SecurityUtilTestHelper.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/SecurityUtilTestHelper.java
Tue Dec 18 01:15:28 2012
@@ -27,4 +27,19 @@ public class SecurityUtilTestHelper {
public static void setTokenServiceUseIp(boolean flag) {
SecurityUtil.setTokenServiceUseIp(flag);
}
+
+ /**
+ * Return true if externalKdc=true and the location of the krb5.conf
+ * file has been specified, and false otherwise.
+ */
+ public static boolean isExternalKdcRunning() {
+ String externalKdc = System.getProperty("externalKdc");
+ String krb5Conf = System.getProperty("java.security.krb5.conf");
+ if(externalKdc == null || !externalKdc.equals("true") ||
+ krb5Conf == null) {
+ return false;
+ }
+ return true;
+ }
+
}
Added:
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUGIWithExternalKdc.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUGIWithExternalKdc.java?rev=1423241&view=auto
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUGIWithExternalKdc.java
(added)
+++
hadoop/common/branches/branch-2/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUGIWithExternalKdc.java
Tue Dec 18 01:15:28 2012
@@ -0,0 +1,74 @@
+/**
+ * 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.security;
+
+import java.io.IOException;
+
+import junit.framework.Assert;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.CommonConfigurationKeys;
+import static
org.apache.hadoop.security.SecurityUtilTestHelper.isExternalKdcRunning;
+import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests kerberos keytab login using a user-specified external KDC
+ *
+ * To run, users must specify the following system properties:
+ * externalKdc=true
+ * java.security.krb5.conf
+ * user.principal
+ * user.keytab
+ */
+public class TestUGIWithExternalKdc {
+
+ @Before
+ public void testExternalKdcRunning() {
+ Assume.assumeTrue(isExternalKdcRunning());
+ }
+
+ @Test
+ public void testLogin() throws IOException {
+ String userPrincipal = System.getProperty("user.principal");
+ String userKeyTab = System.getProperty("user.keytab");
+ Assert.assertNotNull("User principal was not specified", userPrincipal);
+ Assert.assertNotNull("User keytab was not specified", userKeyTab);
+
+ Configuration conf = new Configuration();
+ conf.set(CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION,
+ "kerberos");
+ UserGroupInformation.setConfiguration(conf);
+
+ UserGroupInformation ugi = UserGroupInformation
+ .loginUserFromKeytabAndReturnUGI(userPrincipal, userKeyTab);
+
+ Assert.assertEquals(AuthenticationMethod.KERBEROS,
+ ugi.getAuthenticationMethod());
+
+ try {
+ UserGroupInformation
+ .loginUserFromKeytabAndReturnUGI("[email protected]", userKeyTab);
+ Assert.fail("Login should have failed");
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+}