You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sz...@apache.org on 2012/11/18 23:31:44 UTC
svn commit: r1411007 - in
/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common: ./
src/main/docs/ src/main/java/ src/main/java/org/apache/hadoop/fs/shell/
src/main/java/org/apache/hadoop/http/ src/main/java/org/apache/hadoop/ipc/
src/m...
Author: szetszwo
Date: Sun Nov 18 22:31:28 2012
New Revision: 1411007
URL: http://svn.apache.org/viewvc?rev=1411007&view=rev
Log:
Merge r1408927 through r1410997 from trunk
Added:
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/NoCacheFilter.java
- copied unchanged from r1410997, hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/NoCacheFilter.java
Modified:
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/CHANGES.txt (contents, props changed)
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/docs/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Test.java
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/core/ (props changed)
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java
hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/CHANGES.txt Sun Nov 18 22:31:28 2012
@@ -277,6 +277,9 @@ Trunk (Unreleased)
HADOOP-8974. TestDFVariations fails on Windows. (Chris Nauroth via suresh)
+ HADOOP-9037. Bug in test-patch.sh and precommit build process (Kihwal Lee
+ via jlowe)
+
OPTIMIZATIONS
HADOOP-7761. Improve the performance of raw comparisons. (todd)
@@ -364,6 +367,10 @@ Release 2.0.3-alpha - Unreleased
HADOOP-9021. Enforce configured SASL method on the server (daryn via
bobby)
+ HADOO-8998. set Cache-Control no-cache header on all dynamic content. (tucu)
+
+ HADOOP-9035. Generalize setup of LoginContext (daryn via bobby)
+
OPTIMIZATIONS
HADOOP-8866. SampleQuantiles#query is O(N^2) instead of O(N). (Andrew Wang
@@ -426,6 +433,8 @@ Release 2.0.3-alpha - Unreleased
HADOOP-8999. SASL negotiation is flawed (daryn)
+ HADOOP-6607. Add different variants of non caching HTTP headers. (tucu)
+
Release 2.0.2-alpha - 2012-09-07
INCOMPATIBLE CHANGES
@@ -1116,6 +1125,18 @@ Release 2.0.0-alpha - 05-23-2012
HADOOP-8655. Fix TextInputFormat for large deliminators. (Gelesh via
bobby)
+Release 0.23.6 - UNRELEASED
+
+ INCOMPATIBLE CHANGES
+
+ NEW FEATURES
+
+ IMPROVEMENTS
+
+ OPTIMIZATIONS
+
+ BUG FIXES
+
Release 0.23.5 - UNRELEASED
INCOMPATIBLE CHANGES
@@ -1151,7 +1172,7 @@ Release 0.23.5 - UNRELEASED
HADOOP-9025. org.apache.hadoop.tools.TestCopyListing failing (Jonathan
Eagles via jlowe)
-Release 0.23.4 - UNRELEASED
+Release 0.23.4
INCOMPATIBLE CHANGES
Propchange: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/CHANGES.txt
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt:r1408927-1410997
Propchange: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/docs/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/docs:r1408927-1410997
Propchange: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java:r1408927-1410997
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Test.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Test.java?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Test.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/Test.java Sun Nov 18 22:31:28 2012
@@ -91,8 +91,6 @@ class Test extends FsCommand {
@Override
protected void processNonexistentPath(PathData item) throws IOException {
- // NOTE: errors for FNF is not how the shell works!
- if (flag != 'e') displayError(new PathNotFoundException(item.toString()));
exitCode = 1;
}
}
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer.java Sun Nov 18 22:31:28 2012
@@ -26,6 +26,7 @@ import java.net.InetSocketAddress;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
@@ -103,6 +104,7 @@ public class HttpServer implements Filte
public static final String CONF_CONTEXT_ATTRIBUTE = "hadoop.conf";
public static final String ADMINS_ACL = "admins.acl";
public static final String SPNEGO_FILTER = "SpnegoFilter";
+ public static final String NO_CACHE_FILTER = "NoCacheFilter";
public static final String BIND_ADDRESS = "bind.address";
@@ -255,6 +257,7 @@ public class HttpServer implements Filte
webAppContext.setWar(appDir + "/" + name);
webAppContext.getServletContext().setAttribute(CONF_CONTEXT_ATTRIBUTE, conf);
webAppContext.getServletContext().setAttribute(ADMINS_ACL, adminsAcl);
+ addNoCacheFilter(webAppContext);
webServer.addHandler(webAppContext);
addDefaultApps(contexts, appDir, conf);
@@ -279,6 +282,12 @@ public class HttpServer implements Filte
}
}
+ @SuppressWarnings("unchecked")
+ private void addNoCacheFilter(WebAppContext ctxt) {
+ defineFilter(ctxt, NO_CACHE_FILTER,
+ NoCacheFilter.class.getName(), Collections.EMPTY_MAP, new String[] { "/*"});
+ }
+
/**
* Create a required listener for the Jetty instance listening on the port
* provided. This wrapper and all subclasses must create at least one
@@ -338,6 +347,7 @@ public class HttpServer implements Filte
}
logContext.setDisplayName("logs");
setContextAttributes(logContext, conf);
+ addNoCacheFilter(webAppContext);
defaultContexts.put(logContext, true);
}
// set up the context for "/static/*"
@@ -369,6 +379,7 @@ public class HttpServer implements Filte
public void addContext(Context ctxt, boolean isFiltered)
throws IOException {
webServer.addHandler(ctxt);
+ addNoCacheFilter(webAppContext);
defaultContexts.put(ctxt, isFiltered);
}
@@ -462,7 +473,7 @@ public class HttpServer implements Filte
holder.setName(name);
}
webAppContext.addServlet(holder, pathSpec);
-
+
if(requireAuth && UserGroupInformation.isSecurityEnabled()) {
LOG.info("Adding Kerberos (SPNEGO) filter to " + name);
ServletHandler handler = webAppContext.getServletHandler();
@@ -954,7 +965,7 @@ public class HttpServer implements Filte
@Override
public Enumeration<String> getParameterNames() {
return new Enumeration<String>() {
- private Enumeration<String> rawIterator =
+ private Enumeration<String> rawIterator =
rawRequest.getParameterNames();
@Override
public boolean hasMoreElements() {
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java Sun Nov 18 22:31:28 2012
@@ -294,14 +294,15 @@ public class Client {
}
}
+ AuthenticationMethod authentication;
if (token != null) {
- authMethod = AuthenticationMethod.TOKEN.getAuthMethod();
- } else if (UserGroupInformation.isSecurityEnabled()) {
- // eventually just use the ticket's authMethod
- authMethod = AuthMethod.KERBEROS;
- } else {
- authMethod = AuthMethod.SIMPLE;
+ authentication = AuthenticationMethod.TOKEN;
+ } else if (ticket != null) {
+ authentication = ticket.getRealAuthenticationMethod();
+ } else { // this only happens in lazy tests
+ authentication = AuthenticationMethod.SIMPLE;
}
+ authMethod = authentication.getAuthMethod();
if (LOG.isDebugEnabled())
LOG.debug("Use " + authMethod + " authentication for protocol "
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java Sun Nov 18 22:31:28 2012
@@ -17,7 +17,6 @@
*/
package org.apache.hadoop.security;
-import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_SECURITY_AUTHENTICATION;
import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_KERBEROS_MIN_SECONDS_BEFORE_RELOGIN;
import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_KERBEROS_MIN_SECONDS_BEFORE_RELOGIN_DEFAULT;
@@ -133,7 +132,7 @@ public class UserGroupInformation {
}
Principal user = null;
// if we are using kerberos, try it out
- if (useKerberos) {
+ if (isAuthenticationMethodEnabled(AuthenticationMethod.KERBEROS)) {
user = getCanonicalUser(KerberosPrincipal.class);
if (LOG.isDebugEnabled()) {
LOG.debug("using kerberos user:"+user);
@@ -191,8 +190,8 @@ public class UserGroupInformation {
static UgiMetrics metrics = UgiMetrics.create();
/** Are the static variables that depend on configuration initialized? */
private static boolean isInitialized = false;
- /** Should we use Kerberos configuration? */
- private static boolean useKerberos;
+ /** The auth method to use */
+ private static AuthenticationMethod authenticationMethod;
/** Server-side groups fetching service */
private static Groups groups;
/** Min time (in seconds) before relogin for Kerberos */
@@ -237,20 +236,7 @@ public class UserGroupInformation {
* @param conf the configuration to use
*/
private static synchronized void initUGI(Configuration conf) {
- AuthenticationMethod auth = SecurityUtil.getAuthenticationMethod(conf);
- switch (auth) {
- case SIMPLE:
- case TOKEN:
- useKerberos = false;
- break;
- case KERBEROS:
- useKerberos = true;
- break;
- default:
- throw new IllegalArgumentException("Invalid attribute value for " +
- HADOOP_SECURITY_AUTHENTICATION +
- " of " + auth);
- }
+ authenticationMethod = SecurityUtil.getAuthenticationMethod(conf);
try {
kerberosMinSecondsBeforeRelogin = 1000L * conf.getLong(
HADOOP_KERBEROS_MIN_SECONDS_BEFORE_RELOGIN,
@@ -288,8 +274,14 @@ public class UserGroupInformation {
* @return true if UGI is working in a secure environment
*/
public static boolean isSecurityEnabled() {
+ return !isAuthenticationMethodEnabled(AuthenticationMethod.SIMPLE);
+ }
+
+ @InterfaceAudience.Private
+ @InterfaceStability.Evolving
+ private static boolean isAuthenticationMethodEnabled(AuthenticationMethod method) {
ensureInitialized();
- return useKerberos;
+ return (authenticationMethod == method);
}
/**
@@ -585,7 +577,7 @@ public class UserGroupInformation {
@InterfaceStability.Evolving
public static UserGroupInformation getUGIFromTicketCache(
String ticketCache, String user) throws IOException {
- if (!isSecurityEnabled()) {
+ if (!isAuthenticationMethodEnabled(AuthenticationMethod.KERBEROS)) {
return getBestUGI(null, user);
}
try {
@@ -638,19 +630,12 @@ public class UserGroupInformation {
public synchronized
static UserGroupInformation getLoginUser() throws IOException {
if (loginUser == null) {
+ ensureInitialized();
try {
Subject subject = new Subject();
- LoginContext login;
- AuthenticationMethod authenticationMethod;
- if (isSecurityEnabled()) {
- authenticationMethod = AuthenticationMethod.KERBEROS;
- login = newLoginContext(HadoopConfiguration.USER_KERBEROS_CONFIG_NAME,
- subject, new HadoopConfiguration());
- } else {
- authenticationMethod = AuthenticationMethod.SIMPLE;
- login = newLoginContext(HadoopConfiguration.SIMPLE_CONFIG_NAME,
- subject, new HadoopConfiguration());
- }
+ LoginContext login =
+ newLoginContext(authenticationMethod.getLoginAppName(),
+ subject, new HadoopConfiguration());
login.login();
loginUser = new UserGroupInformation(subject);
loginUser.setLogin(login);
@@ -675,6 +660,14 @@ public class UserGroupInformation {
return loginUser;
}
+ @InterfaceAudience.Private
+ @InterfaceStability.Unstable
+ synchronized static void setLoginUser(UserGroupInformation ugi) {
+ // if this is to become stable, should probably logout the currently
+ // logged in ugi if it's different
+ loginUser = ugi;
+ }
+
/**
* Is this user logged in from a keytab file?
* @return true if the credentials are from a keytab file.
@@ -1027,22 +1020,38 @@ public class UserGroupInformation {
public static enum AuthenticationMethod {
// currently we support only one auth per method, but eventually a
// subtype is needed to differentiate, ex. if digest is token or ldap
- SIMPLE(AuthMethod.SIMPLE),
- KERBEROS(AuthMethod.KERBEROS),
+ SIMPLE(AuthMethod.SIMPLE,
+ HadoopConfiguration.SIMPLE_CONFIG_NAME),
+ KERBEROS(AuthMethod.KERBEROS,
+ HadoopConfiguration.USER_KERBEROS_CONFIG_NAME),
TOKEN(AuthMethod.DIGEST),
CERTIFICATE(null),
KERBEROS_SSL(null),
PROXY(null);
private final AuthMethod authMethod;
+ private final String loginAppName;
+
private AuthenticationMethod(AuthMethod authMethod) {
+ this(authMethod, null);
+ }
+ private AuthenticationMethod(AuthMethod authMethod, String loginAppName) {
this.authMethod = authMethod;
+ this.loginAppName = loginAppName;
}
public AuthMethod getAuthMethod() {
return authMethod;
}
+ String getLoginAppName() {
+ if (loginAppName == null) {
+ throw new UnsupportedOperationException(
+ this + " login authentication is not supported");
+ }
+ return loginAppName;
+ }
+
public static AuthenticationMethod valueOf(AuthMethod authMethod) {
for (AuthenticationMethod value : values()) {
if (value.getAuthMethod() == authMethod) {
@@ -1334,7 +1343,21 @@ public class UserGroupInformation {
public synchronized AuthenticationMethod getAuthenticationMethod() {
return user.getAuthenticationMethod();
}
-
+
+ /**
+ * Get the authentication method from the real user's subject. If there
+ * is no real user, return the given user's authentication method.
+ *
+ * @return AuthenticationMethod in the subject, null if not present.
+ */
+ public synchronized AuthenticationMethod getRealAuthenticationMethod() {
+ UserGroupInformation ugi = getRealUser();
+ if (ugi == null) {
+ ugi = this;
+ }
+ return ugi.getAuthenticationMethod();
+ }
+
/**
* Returns the authentication method of a ugi. If the authentication method is
* PROXY, returns the authentication method of the real user.
Propchange: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/core/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/core:r1408927-1410997
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/http/TestHttpServer.java Sun Nov 18 22:31:28 2012
@@ -539,4 +539,17 @@ public class TestHttpServer extends Http
}
return server;
}
+
+ @Test
+ public void testNoCacheHeader() throws Exception {
+ URL url = new URL(baseUrl, "/echo?a=b&c=d");
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode());
+ assertEquals("no-cache", conn.getHeaderField("Cache-Control"));
+ assertEquals("no-cache", conn.getHeaderField("Pragma"));
+ assertNotNull(conn.getHeaderField("Expires"));
+ assertNotNull(conn.getHeaderField("Date"));
+ assertEquals(conn.getHeaderField("Expires"), conn.getHeaderField("Date"));
+ }
+
}
Modified: hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java?rev=1411007&r1=1411006&r2=1411007&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java (original)
+++ hadoop/common/branches/HDFS-2802/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java Sun Nov 18 22:31:28 2012
@@ -70,16 +70,75 @@ public class TestUserGroupInformation {
/** configure ugi */
@BeforeClass
public static void setup() {
+ javax.security.auth.login.Configuration.setConfiguration(
+ new DummyLoginConfiguration());
+ }
+
+ @Before
+ public void setupUgi() {
conf = new Configuration();
conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTH_TO_LOCAL,
"RULE:[2:$1@$0](.*@HADOOP.APACHE.ORG)s/@.*//" +
"RULE:[1:$1@$0](.*@HADOOP.APACHE.ORG)s/@.*//"
+ "DEFAULT");
UserGroupInformation.setConfiguration(conf);
- javax.security.auth.login.Configuration.setConfiguration(
- new DummyLoginConfiguration());
+ UserGroupInformation.setLoginUser(null);
+ }
+
+ @After
+ public void resetUgi() {
+ UserGroupInformation.setLoginUser(null);
+ }
+
+ @Test
+ public void testSimpleLogin() throws IOException {
+ tryLoginAuthenticationMethod(AuthenticationMethod.SIMPLE, true);
+ }
+
+ @Test
+ public void testTokenLogin() throws IOException {
+ tryLoginAuthenticationMethod(AuthenticationMethod.TOKEN, false);
+ }
+
+ @Test
+ public void testProxyLogin() throws IOException {
+ tryLoginAuthenticationMethod(AuthenticationMethod.PROXY, false);
}
+ private void tryLoginAuthenticationMethod(AuthenticationMethod method,
+ boolean expectSuccess)
+ throws IOException {
+ SecurityUtil.setAuthenticationMethod(method, conf);
+ UserGroupInformation.setConfiguration(conf); // pick up changed auth
+
+ UserGroupInformation ugi = null;
+ Exception ex = null;
+ try {
+ ugi = UserGroupInformation.getLoginUser();
+ } catch (Exception e) {
+ ex = e;
+ }
+ if (expectSuccess) {
+ assertNotNull(ugi);
+ assertEquals(method, ugi.getAuthenticationMethod());
+ } else {
+ assertNotNull(ex);
+ assertEquals(UnsupportedOperationException.class, ex.getClass());
+ assertEquals(method + " login authentication is not supported",
+ ex.getMessage());
+ }
+ }
+
+ @Test
+ public void testGetRealAuthenticationMethod() {
+ UserGroupInformation ugi = UserGroupInformation.createRemoteUser("user1");
+ ugi.setAuthenticationMethod(AuthenticationMethod.SIMPLE);
+ assertEquals(AuthenticationMethod.SIMPLE, ugi.getAuthenticationMethod());
+ assertEquals(AuthenticationMethod.SIMPLE, ugi.getRealAuthenticationMethod());
+ ugi = UserGroupInformation.createProxyUser("user2", ugi);
+ assertEquals(AuthenticationMethod.PROXY, ugi.getAuthenticationMethod());
+ assertEquals(AuthenticationMethod.SIMPLE, ugi.getRealAuthenticationMethod());
+ }
/** Test login method */
@Test
public void testLogin() throws Exception {