diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/security/TestJHSSecurity.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/security/TestJHSSecurity.java index 6115c590d5..9e58d460d1 100644 --- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/security/TestJHSSecurity.java +++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-jobclient/src/test/java/org/apache/hadoop/mapreduce/security/TestJHSSecurity.java @@ -18,7 +18,6 @@ package org.apache.hadoop.mapreduce.security; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.IOException; @@ -26,6 +25,8 @@ import java.security.PrivilegedAction; import java.security.PrivilegedExceptionAction; +import org.apache.hadoop.security.token.SecretManager; +import org.apache.hadoop.test.LambdaTestUtils; import org.junit.Assert; import org.apache.hadoop.conf.Configuration; @@ -61,7 +62,7 @@ public class TestJHSSecurity { LoggerFactory.getLogger(TestJHSSecurity.class); @Test - public void testDelegationToken() throws IOException, InterruptedException { + public void testDelegationToken() throws Exception { org.apache.log4j.Logger rootLogger = LogManager.getRootLogger(); rootLogger.setLevel(Level.DEBUG); @@ -80,7 +81,7 @@ public void testDelegationToken() throws IOException, InterruptedException { final long renewInterval = 10000l; JobHistoryServer jobHistoryServer = null; - MRClientProtocol clientUsingDT = null; + MRClientProtocol clientUsingDT; long tokenFetchTime; try { jobHistoryServer = new JobHistoryServer() { @@ -155,14 +156,11 @@ protected JHSDelegationTokenSecretManager createJHSSecretManager( } Thread.sleep(50l); LOG.info("At time: " + System.currentTimeMillis() + ", token should be invalid"); - // Token should have expired. - try { - clientUsingDT.getJobReport(jobReportRequest); - fail("Should not have succeeded with an expired token"); - } catch (IOException e) { - assertTrue(e.getCause().getMessage().contains("is expired")); - } - + // Token should have expired. + final MRClientProtocol finalClientUsingDT = clientUsingDT; + LambdaTestUtils.intercept(SecretManager.InvalidToken.class, "has expired", + () -> finalClientUsingDT.getJobReport(jobReportRequest)); + // Test cancellation // Stop the existing proxy, start another. if (clientUsingDT != null) {