Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.AuthUtil;
import org.apache.hadoop.hbase.HBaseClassTestRule;
Expand Down Expand Up @@ -65,11 +67,19 @@ public class TestUsersOperationsWithSecureHadoop {
private static String CLIENT_NAME;

@BeforeClass
public static void destroyAndSetup() throws Exception {
//destroy localhost kerberos users
Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", "kdestroy"});
process.waitFor(2, TimeUnit.SECONDS);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This previous waitFor call doesn't check the return value. It's possible the call failed but the test didn't notice.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, the previous exec w/ its kdestroy is better than klist with a 'notice' IMO. What tends to happen is you run test suite and then one hour in, it will fail with complaint about unmatched user for old ticket. WIth kdestroy, that doesn't happen. Means old ticket gets killed which should be fine most of the time -- you just re-kinit (unless you running test suite on some critical system).

Nick's idea of narrowing test so it only concerned about test ticket would be best. Not sure how to do that though myself.

// setup mini kdc
public static void checkAndSetup() throws Exception {
// check localhost kerberos users
Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", "klist"});
boolean wait = process.waitFor(2, TimeUnit.SECONDS);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think a simple assertTrue is sufficient for this case.

if (wait) {
int ret = process.exitValue();
if (ret == 0) {
throw new ConfigurationException("localhost holds kerberos tickets currently, need to destroy first!");
}
} else {
throw new TimeoutException("check localhost kerberos users timeout(exec cmd 'klist')!");
}
// setup MiniKdc
KDC = TEST_UTIL.setupMiniKdc(KEYTAB_FILE);
PRINCIPAL = "hbase/" + HOST;
CLIENT_NAME = "foo";
Expand Down