blob: e36a6c3b2564c59b34ac14f27415d95f2faaaa9d [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.oozie.util;
import java.util.Map;
import javax.security.auth.login.AppConfigurationEntry;
import org.apache.oozie.test.XTestCase;
public class TestJaasConfiguration extends XTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
// We won't test actually using it to authenticate because that gets messy and may conflict with other tests; but we can test
// that it otherwise behaves correctly
public void test() throws Exception {
String krb5LoginModuleName;
if (System.getProperty("java.vendor").contains("IBM")) {
krb5LoginModuleName = "com.ibm.security.auth.module.Krb5LoginModule";
}
else {
krb5LoginModuleName = "com.sun.security.auth.module.Krb5LoginModule";
}
JaasConfiguration.clearEntries();
assertTrue(JaasConfiguration.getEntries().isEmpty());
JaasConfiguration.addEntry("foo", "foo/localhost", "/some/location/foo");
assertEquals(1, JaasConfiguration.getEntries().size());
JaasConfiguration.addEntry("bar", "bar/localhost", "/some/location/bar");
assertEquals(2, JaasConfiguration.getEntries().size());
JaasConfiguration.addEntry("zoo", "zoo/localhost", "/some/location/zoo");
assertEquals(3, JaasConfiguration.getEntries().size());
checkEntry(krb5LoginModuleName, "foo", "foo/localhost", "/some/location/foo");
checkEntry(krb5LoginModuleName, "bar", "bar/localhost", "/some/location/bar");
checkEntry(krb5LoginModuleName, "zoo", "zoo/localhost", "/some/location/zoo");
JaasConfiguration.removeEntry("bar");
assertEquals(2, JaasConfiguration.getEntries().size());
checkEntry(krb5LoginModuleName, "foo", "foo/localhost", "/some/location/foo");
checkEntry(krb5LoginModuleName, "zoo", "zoo/localhost", "/some/location/zoo");
JaasConfiguration.clearEntries();
assertTrue(JaasConfiguration.getEntries().isEmpty());
}
private void checkEntry(String loginModuleName, String name, String principal, String keytab) {
AppConfigurationEntry entry = JaasConfiguration.getEntries().get(name);
assertEquals(loginModuleName, entry.getLoginModuleName());
assertEquals(AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, entry.getControlFlag());
Map<String, ?> options = entry.getOptions();
assertEquals(principal, options.get("principal"));
if (loginModuleName.equals("com.ibm.security.auth.module.Krb5LoginModule")){
assertEquals(keytab.startsWith("file://") ? keytab : "file://" + keytab, options.get("useKeytab"));
assertEquals("both",options.get("credsType"));
assertEquals(3, options.size());
}
else{
assertEquals("true", options.get("useKeyTab"));
assertEquals(keytab, options.get("keyTab"));
assertEquals("true", options.get("storeKey"));
assertEquals("false", options.get("useTicketCache"));
assertEquals(5, options.size());
}
}
}