String getPasswordFromCredentialProviders(
      Configuration config, String alias, String defaultPass) {
    String password = defaultPass;
    try {
      char[] passchars = config.getPasswordFromCredentialProviders(alias);
      if (passchars != null) {
        password = new String(passchars);
      }
    } catch (IOException ioe) {
      LOG.warn("Exception while trying to get password for alias {}: ",
          alias, ioe);
    }
    return password;
  }
@Test
  public void testConfGetPasswordUsingAlias() throws Exception {
    File testDir = GenericTestUtils.getTestDir();
    Configuration conf = getBaseConf();
    final Path jksPath = new Path(testDir.toString(), "test.jks");
    final String ourUrl =
        JavaKeyStoreProvider.SCHEME_NAME + "://file" + jksPath.toUri();

    File file = new File(testDir, "test.jks");
    file.delete();
    conf.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, ourUrl);

    // Set alias
    String bindpassAlias = "bindpassAlias";
    conf.set(LdapGroupsMapping.BIND_PASSWORD_ALIAS_KEY, bindpassAlias);

    CredentialProvider provider =
        CredentialProviderFactory.getProviders(conf).get(0);
    char[] bindpass = "bindpass".toCharArray();

    // Ensure that we get null when the key isn't there
    assertNull(provider.getCredentialEntry(bindpassAlias));

    // Create credential for the alias
    provider.createCredentialEntry(bindpassAlias, bindpass);
    provider.flush();

    // Make sure we get back the right key
    assertArrayEquals(bindpass, provider.getCredentialEntry(
        bindpassAlias).getCredential());

    LdapGroupsMapping mapping = new LdapGroupsMapping();
    Assert.assertEquals("bindpass",
        mapping.getPasswordFromCredentialProviders(conf, bindpassAlias, ""));

    // Empty for an invalid alias
    Assert.assertEquals("", mapping.getPasswordFromCredentialProviders(
        conf, "invalid-alias", ""));
  }