package org.springframework.data.hadoop.config;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.hadoop.TestUtils;
import org.springframework.data.hadoop.test.tests.Assume;
import org.springframework.data.hadoop.test.tests.TestGroup;
import org.springframework.util.Assert;
/**
* tests for yarn:configuration secure.
*
* @author David Liu
* @author Janne Valkealahti
*
*/
public class ConfigurationSecureHdfsTest {
private static final Log log = LogFactory.getLog(ConfigurationSecureHdfsTest.class);
@Test
public void testSecurityConfigWithReadFromKerberizedHdfs() throws Exception {
// This test is guarded by test group to be run manually
// until we have a proper way to use secured miniclusters.
Assume.group(TestGroup.KERBEROS);
AbstractApplicationContext context = new ClassPathXmlApplicationContext(
"ConfigurationSecureHdfsTest-context.xml",
ConfigurationSecureHdfsTest.class);
Assert.notNull(context.getBean("secureHdfsConfig"));
Configuration configuration = context.getBean("secureHdfsConfig", Configuration.class);
Object factory = context.getBean("&secureHdfsConfig");
String userKeytab = TestUtils.readField("userKeytab", factory);
assertThat(userKeytab, containsString("keytab"));
String namenodePrincipal = TestUtils.readField("namenodePrincipal", factory);
assertThat(namenodePrincipal, containsString("hdfs"));
String rmPrincipal = TestUtils.readField("rmManagerPrincipal", factory);
assertThat(rmPrincipal, containsString("yarn"));
FileSystem fs = FileSystem.get(configuration);
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus fileStatus : listStatus) {
log.info("fileStatus: " + fileStatus);
}
context.close();
}
}