private void verifyACLPersistence() throws IOException,
InterruptedException {
// Set the job up.
final JobConf myConf = mr.createJobConf();
myConf.set(JobContext.JOB_ACL_VIEW_JOB, viewColleague + " group2");
// Submit the job as user1
RunningJob job = submitJobAsUser(myConf, jobSubmitter);
final JobID jobId = job.getID();
// Kill the job and wait till it is actually killed so that it is written to
// CompletedJobStore
job.killJob();
while (job.getJobState() != JobStatus.KILLED) {
LOG.info("Waiting for the job to be killed successfully..");
Thread.sleep(200);
}
// Now kill the cluster, so that the job is 'forgotten'
tearDown();
// Re-start the cluster
startCluster(true);
final JobConf myNewJobConf = mr.createJobConf();
// Now verify view-job works off CompletedJobStore
verifyViewJobAsAuthorizedUser(myNewJobConf, jobId, viewColleague);
verifyViewJobAsAuthorizedUser(myNewJobConf, jobId, qAdmin);
// Only JobCounters is persisted on the JobStore. So test counters only.
UserGroupInformation unauthorizedUGI =
UserGroupInformation.createUserForTesting(
modifyColleague, new String[] {});
unauthorizedUGI.doAs(new PrivilegedExceptionAction() {
@SuppressWarnings("null")
@Override
public Object run() {
RunningJob myJob = null;
try {
JobClient client = new JobClient(myNewJobConf);
myJob = client.getJob(jobId);
} catch (Exception e) {
fail("Exception .." + e);
}
assertNotNull("Job " + jobId + " is not known to the JobTracker!",
myJob);
// Tests authorization failure with getCounters
try {
myJob.getCounters();
fail("'cannot perform operation VIEW_JOB_COUNTERS' expected..");
} catch (IOException ioe) {
assertTrue(ioe.getMessage(), ioe.getMessage().contains("cannot perform operation VIEW_JOB_COUNTERS"));
}
return null;
}
});
}