HADOOP-13353. LdapGroupsMapping getPassward shouldn't return null when IOException throws. Contributed by Zhaohao Liang and Wei-Chiu Chuang.

(cherry picked from commit 49ba09a922)
This commit is contained in:
Wei-Chiu Chuang 2016-08-05 16:32:44 -07:00
parent 0e48f29937
commit d875dfef3d
2 changed files with 25 additions and 8 deletions

View File

@ -616,19 +616,15 @@ public synchronized void setConf(Configuration conf) {
}
String getPassword(Configuration conf, String alias, String defaultPass) {
String password = null;
String password = defaultPass;
try {
char[] passchars = conf.getPassword(alias);
if (passchars != null) {
password = new String(passchars);
}
else {
password = defaultPass;
}
}
catch (IOException ioe) {
LOG.warn("Exception while trying to password for alias " + alias + ": "
+ ioe.getMessage());
} catch (IOException ioe) {
LOG.warn("Exception while trying to get password for alias " + alias
+ ": ", ioe);
}
return password;
}

View File

@ -57,6 +57,7 @@
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -364,4 +365,24 @@ public void run() {
}
}
/**
* Make sure that when
* {@link Configuration#getPassword(String)} throws an IOException,
* {@link LdapGroupsMapping#setConf(Configuration)} does not throw an NPE.
*
* @throws Exception
*/
@Test(timeout = 10000)
public void testSetConf() throws Exception {
Configuration conf = new Configuration();
Configuration mockConf = Mockito.spy(conf);
when(mockConf.getPassword(anyString()))
.thenThrow(new IOException("injected IOException"));
// Set a dummy LDAP server URL.
mockConf.set(LdapGroupsMapping.LDAP_URL_KEY, "ldap://test");
LdapGroupsMapping groupsMapping = getGroupsMapping();
groupsMapping.setConf(mockConf);
}
}