This is an automated email from the ASF dual-hosted git repository. pradeep pushed a commit to branch RANGER-5026_master in repository https://gitbox.apache.org/repos/asf/ranger.git
commit 5de414131dc8033f43935658fd31244fb35c2b1b Author: Pradeep AgrawaL <[email protected]> AuthorDate: Mon Dec 16 15:48:28 2024 +0530 RANGER-5026: agents-cred module: update for code readability improvement --- agents-cred/pom.xml | 2 + .../credutils/CredentialsProviderUtil.java | 84 +++--- .../credutils/kerberos/AbstractJaasConf.java | 8 +- .../kerberos/KerberosCredentialsProvider.java | 14 +- .../credutils/kerberos/KeytabJaasConf.java | 1 - .../hadoop/utils/RangerCredentialProvider.java | 84 +++--- .../hadoop/utils/RangerCredentialProviderTest.java | 295 ++++++++++----------- 7 files changed, 232 insertions(+), 256 deletions(-) diff --git a/agents-cred/pom.xml b/agents-cred/pom.xml index 362a4e9a9..aa792c365 100644 --- a/agents-cred/pom.xml +++ b/agents-cred/pom.xml @@ -28,6 +28,8 @@ <name>Credential Support</name> <description>Plugins Common</description> <properties> + <checkstyle.failOnViolation>true</checkstyle.failOnViolation> + <checkstyle.skip>false</checkstyle.skip> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> diff --git a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/CredentialsProviderUtil.java b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/CredentialsProviderUtil.java index 773662211..dab6f9110 100644 --- a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/CredentialsProviderUtil.java +++ b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/CredentialsProviderUtil.java @@ -40,6 +40,7 @@ import javax.security.auth.kerberos.KerberosPrincipal; import javax.security.auth.kerberos.KerberosTicket; import javax.security.auth.login.Configuration; import javax.security.auth.login.LoginContext; + import java.math.BigDecimal; import java.security.AccessControlContext; import java.security.AccessController; @@ -50,35 +51,24 @@ import java.util.Date; import java.util.Set; public class CredentialsProviderUtil { - private static final Logger logger = LoggerFactory.getLogger(CredentialsProviderUtil.class); - private static final Oid SPNEGO_OID = getSpnegoOid(); - private static final String CRED_CONF_NAME = "ESClientLoginConf"; - public static long ticketExpireTime80 = 0; + private static final Logger logger = LoggerFactory.getLogger(CredentialsProviderUtil.class); + private static final Oid SPNEGO_OID = getSpnegoOid(); + private static final String CRED_CONF_NAME = "ESClientLoginConf"; + public static long ticketExpireTime80; - private static Oid getSpnegoOid() { - Oid oid = null; - try { - oid = new Oid("1.3.6.1.5.5.2"); - } catch (GSSException gsse) { - throw new RuntimeException(gsse); - } - return oid; + private CredentialsProviderUtil() { + // to block instantiation } - public static KerberosCredentialsProvider getKerberosCredentials(String user, String password){ + public static KerberosCredentialsProvider getKerberosCredentials(String user, String password) { KerberosCredentialsProvider credentialsProvider = new KerberosCredentialsProvider(); - final GSSManager gssManager = GSSManager.getInstance(); + final GSSManager gssManager = GSSManager.getInstance(); try { - final GSSName gssUserPrincipalName = gssManager.createName(user, GSSName.NT_USER_NAME); - Subject subject = login(user, password); - final AccessControlContext acc = AccessController.getContext(); - final GSSCredential credential = doAsPrivilegedWrapper(subject, - (PrivilegedExceptionAction<GSSCredential>) () -> gssManager.createCredential(gssUserPrincipalName, - GSSCredential.DEFAULT_LIFETIME, SPNEGO_OID, GSSCredential.INITIATE_ONLY), - acc); - credentialsProvider.setCredentials( - new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthSchemes.SPNEGO), - new KerberosCredentials(credential)); + final GSSName gssUserPrincipalName = gssManager.createName(user, GSSName.NT_USER_NAME); + Subject subject = login(user, password); + final AccessControlContext acc = AccessController.getContext(); + final GSSCredential credential = doAsPrivilegedWrapper(subject, (PrivilegedExceptionAction<GSSCredential>) () -> gssManager.createCredential(gssUserPrincipalName, GSSCredential.DEFAULT_LIFETIME, SPNEGO_OID, GSSCredential.INITIATE_ONLY), acc); + credentialsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM, AuthSchemes.SPNEGO), new KerberosCredentials(credential)); } catch (GSSException e) { logger.error("GSSException:", e); throw new RuntimeException(e); @@ -91,7 +81,7 @@ public class CredentialsProviderUtil { public static synchronized KerberosTicket getTGT(Subject subject) { Set<KerberosTicket> tickets = subject.getPrivateCredentials(KerberosTicket.class); - for(KerberosTicket ticket: tickets) { + for (KerberosTicket ticket : tickets) { KerberosPrincipal server = ticket.getServer(); if (server.getName().equals("krbtgt/" + server.getRealm() + "@" + server.getRealm())) { if (logger.isDebugEnabled()) { @@ -104,15 +94,15 @@ public class CredentialsProviderUtil { return null; } - public static Boolean ticketWillExpire(KerberosTicket ticket){ + public static Boolean ticketWillExpire(KerberosTicket ticket) { long ticketExpireTime = ticket.getEndTime().getTime(); - long currrentTime = new Date().getTime(); + long currrentTime = new Date().getTime(); if (logger.isDebugEnabled()) { logger.debug("TicketExpireTime is:" + ticketExpireTime); logger.debug("currrentTime is:" + currrentTime); } if (ticketExpireTime80 == 0) { - long timeDiff = ticketExpireTime - currrentTime; + long timeDiff = ticketExpireTime - currrentTime; long timeDiff20 = Math.round(Float.parseFloat(BigDecimal.valueOf(timeDiff * 0.2).toPlainString())); ticketExpireTime80 = ticketExpireTime - timeDiff20; } @@ -130,21 +120,23 @@ public class CredentialsProviderUtil { } public static synchronized Subject login(String userPrincipalName, String keytabPath) throws PrivilegedActionException { - Subject sub = AccessController.doPrivileged((PrivilegedExceptionAction<Subject>) () -> { - final Subject subject = new Subject(false, Collections.singleton(new KerberosPrincipal(userPrincipalName)), - Collections.emptySet(), Collections.emptySet()); - Configuration conf = new KeytabJaasConf(userPrincipalName, keytabPath, false); - - LoginContext loginContext = new LoginContext(CRED_CONF_NAME, subject, null, conf); - loginContext.login(); - return loginContext.getSubject(); - }); + Subject sub = AccessController.doPrivileged((PrivilegedExceptionAction<Subject>) () -> { + final Subject subject = new Subject(false, Collections.singleton(new KerberosPrincipal(userPrincipalName)), Collections.emptySet(), Collections.emptySet()); + Configuration conf = new KeytabJaasConf(userPrincipalName, keytabPath, false); + LoginContext loginContext = new LoginContext(CRED_CONF_NAME, subject, null, conf); + loginContext.login(); + return loginContext.getSubject(); + }); return sub; } + public static CredentialsProvider getBasicCredentials(String user, String password) { + CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(user, password)); + return credentialsProvider; + } - static <T> T doAsPrivilegedWrapper(final Subject subject, final PrivilegedExceptionAction<T> action, final AccessControlContext acc) - throws PrivilegedActionException { + static <T> T doAsPrivilegedWrapper(final Subject subject, final PrivilegedExceptionAction<T> action, final AccessControlContext acc) throws PrivilegedActionException { try { return AccessController.doPrivileged((PrivilegedExceptionAction<T>) () -> Subject.doAsPrivileged(subject, action, acc)); } catch (PrivilegedActionException pae) { @@ -155,11 +147,13 @@ public class CredentialsProviderUtil { } } - public static CredentialsProvider getBasicCredentials(String user, String password) { - CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(AuthScope.ANY, - new UsernamePasswordCredentials(user, password)); - return credentialsProvider; + private static Oid getSpnegoOid() { + Oid oid = null; + try { + oid = new Oid("1.3.6.1.5.5.2"); + } catch (GSSException gsse) { + throw new RuntimeException(gsse); + } + return oid; } - } diff --git a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/AbstractJaasConf.java b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/AbstractJaasConf.java index ae3c9312d..521c005e0 100644 --- a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/AbstractJaasConf.java +++ b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/AbstractJaasConf.java @@ -21,17 +21,18 @@ package org.apache.ranger.authorization.credutils.kerberos; import javax.security.auth.login.AppConfigurationEntry; import javax.security.auth.login.Configuration; + import java.util.Collections; import java.util.HashMap; import java.util.Map; public abstract class AbstractJaasConf extends Configuration { - private final String userPrincipalName; + private final String userPrincipalName; private final boolean enableDebugLogs; public AbstractJaasConf(final String userPrincipalName, final boolean enableDebugLogs) { this.userPrincipalName = userPrincipalName; - this.enableDebugLogs = enableDebugLogs; + this.enableDebugLogs = enableDebugLogs; } @Override @@ -42,8 +43,7 @@ public abstract class AbstractJaasConf extends Configuration { options.put("storeKey", Boolean.TRUE.toString()); options.put("debug", Boolean.toString(enableDebugLogs)); addOptions(options); - return new AppConfigurationEntry[] { new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", - AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, Collections.unmodifiableMap(options)) }; + return new AppConfigurationEntry[] {new AppConfigurationEntry("com.sun.security.auth.module.Krb5LoginModule", AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, Collections.unmodifiableMap(options))}; } abstract void addOptions(Map<String, String> options); diff --git a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KerberosCredentialsProvider.java b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KerberosCredentialsProvider.java index 6ef3085b7..c8e1bf578 100644 --- a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KerberosCredentialsProvider.java +++ b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KerberosCredentialsProvider.java @@ -25,7 +25,7 @@ import org.apache.http.client.CredentialsProvider; import org.apache.http.client.config.AuthSchemes; public class KerberosCredentialsProvider implements CredentialsProvider { - private AuthScope authScope; + private AuthScope authScope; private Credentials credentials; @Override @@ -33,20 +33,22 @@ public class KerberosCredentialsProvider implements CredentialsProvider { if (authscope.getScheme().regionMatches(true, 0, AuthSchemes.SPNEGO, 0, AuthSchemes.SPNEGO.length()) == false) { throw new IllegalArgumentException("Only " + AuthSchemes.SPNEGO + " auth scheme is supported in AuthScope"); } - this.authScope = authscope; + this.authScope = authscope; this.credentials = credentials; } @Override public Credentials getCredentials(AuthScope authscope) { - assert this.authScope != null && authscope != null; - return authscope.match(this.authScope) > -1 ? this.credentials : null; + Credentials ret = null; + if (this.authScope != null && authscope != null) { + ret = authscope.match(this.authScope) > -1 ? this.credentials : null; + } + return ret; } @Override public void clear() { - this.authScope = null; + this.authScope = null; this.credentials = null; } - } diff --git a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KeytabJaasConf.java b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KeytabJaasConf.java index 4f96f95b2..87a0da666 100644 --- a/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KeytabJaasConf.java +++ b/agents-cred/src/main/java/org/apache/ranger/authorization/credutils/kerberos/KeytabJaasConf.java @@ -34,5 +34,4 @@ public class KeytabJaasConf extends AbstractJaasConf { options.put("keyTab", keytabFilePath); options.put("doNotPrompt", Boolean.TRUE.toString()); } - } diff --git a/agents-cred/src/main/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProvider.java b/agents-cred/src/main/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProvider.java index ac7ccd23c..9983aceb6 100644 --- a/agents-cred/src/main/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProvider.java +++ b/agents-cred/src/main/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProvider.java @@ -19,59 +19,55 @@ package org.apache.ranger.authorization.hadoop.utils; -import java.util.List; - +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.alias.CredentialProvider; import org.apache.hadoop.security.alias.CredentialProviderFactory; -import org.apache.hadoop.conf.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.List; public final class RangerCredentialProvider { + private static final Logger LOG = LoggerFactory.getLogger(RangerCredentialProvider.class); + private static final RangerCredentialProvider CRED_PROVIDER = new RangerCredentialProvider(); - private static final Logger LOG = LoggerFactory.getLogger(RangerCredentialProvider.class); - - private static final RangerCredentialProvider CRED_PROVIDER = new RangerCredentialProvider(); - - protected RangerCredentialProvider() { - // - } - - public static RangerCredentialProvider getInstance() { - return CRED_PROVIDER; - } + protected RangerCredentialProvider() { + // + } - public String getCredentialString(String url, String alias) { - if (url != null && alias != null) { - List<CredentialProvider> providers = getCredentialProviders(url); - if (providers != null) { - for (CredentialProvider provider : providers) { - try { - CredentialProvider.CredentialEntry credEntry = provider.getCredentialEntry(alias); - if (credEntry != null && credEntry.getCredential() != null) { - return new String(credEntry.getCredential()); - } - } catch (Exception ie) { - LOG.error("Unable to get the Credential Provider from the Configuration", ie); - } - } - } - } - return null; - } + public static RangerCredentialProvider getInstance() { + return CRED_PROVIDER; + } - List<CredentialProvider> getCredentialProviders(String url) { - if (url != null) { - try { - Configuration conf = new Configuration(); - conf.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, url); - return CredentialProviderFactory.getProviders(conf); - } catch (Exception ie) { - LOG.error("Unable to get the Credential Provider from the Configuration", ie); - } - } - return null; - } + public String getCredentialString(String url, String alias) { + if (url != null && alias != null) { + List<CredentialProvider> providers = getCredentialProviders(url); + if (providers != null) { + for (CredentialProvider provider : providers) { + try { + CredentialProvider.CredentialEntry credEntry = provider.getCredentialEntry(alias); + if (credEntry != null && credEntry.getCredential() != null) { + return new String(credEntry.getCredential()); + } + } catch (Exception ie) { + LOG.error("Unable to get the Credential Provider from the Configuration", ie); + } + } + } + } + return null; + } + List<CredentialProvider> getCredentialProviders(String url) { + if (url != null) { + try { + Configuration conf = new Configuration(); + conf.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, url); + return CredentialProviderFactory.getProviders(conf); + } catch (Exception ie) { + LOG.error("Unable to get the Credential Provider from the Configuration", ie); + } + } + return null; + } } diff --git a/agents-cred/src/test/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProviderTest.java b/agents-cred/src/test/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProviderTest.java index a3b83977d..7b0e3da5b 100644 --- a/agents-cred/src/test/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProviderTest.java +++ b/agents-cred/src/test/java/org/apache/ranger/authorization/hadoop/utils/RangerCredentialProviderTest.java @@ -6,26 +6,17 @@ * 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 - * + * <p> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p> * 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.ranger.authorization.hadoop.utils; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.List; - import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.security.alias.CredentialProvider; import org.apache.hadoop.security.alias.CredentialShell; @@ -33,151 +24,143 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + public class RangerCredentialProviderTest { - - private final File ksFile; - private final String keystoreFile; - private final String[] argsCreate; - private final String[] argsDelete; - private final String url; - RangerCredentialProvider cp = null; - List<CredentialProvider> providers = null; - - - public RangerCredentialProviderTest() throws IOException { - ksFile = File.createTempFile("testkeystore", "jceks"); - keystoreFile = ksFile.toURI().getPath(); - url = "jceks://file@/" + keystoreFile; - - if (isCredentialShellInteractiveEnabled()) { - argsCreate = new String[] {"create", "TestCredential001", "-f", "-value", "PassworD123", "-provider", "jceks://file@/" + keystoreFile}; - argsDelete = new String[] {"delete", "TestCredential001", "-f" , "-provider", "jceks://file@/" + keystoreFile}; - } else { - argsCreate = new String[] {"create", "TestCredential001", "-value", "PassworD123", "-provider", "jceks://file@/" + keystoreFile}; - argsDelete = new String[] {"delete", "TestCredential001", "-provider", "jceks://file@/" + keystoreFile}; - } - } - - - @Before - public void setup() throws Exception { - int ret; - // - // adding a delete before creating a keystore - // - try { - if (ksFile != null) { - if (ksFile.exists()) { - System.out.println("Keystore File [" + ksFile.getAbsolutePath() + "] is available - and deleting"); - ksFile.delete(); - System.out.println("Keystore File [" + ksFile.getAbsolutePath() + "] is deleted."); - } else { - System.out.println("Keystore File [" + ksFile.getAbsolutePath() + "] is not available"); - } - } else { - System.out.println("Keystore File is NULL"); - } - } catch(Throwable t) { - t.printStackTrace(); - } - - Configuration conf = new Configuration(); - CredentialShell cs = new CredentialShell(); - cs.setConf(conf); - try { - ret = cs.run(argsCreate); - } catch (Exception e) { - throw e; - } - assertEquals(0, ret); - System.out.println("(1) Number of active Threads : " + Thread.activeCount()); - listThreads(); - } - - @After - public void cleanup() throws Exception { - if (ksFile != null && ksFile.exists()) { - ksFile.delete(); - } - } - - @Test - public void testCredentialProvider() { - //test credential provider is registered and return credential providers. - cp = new RangerCredentialProvider(); - providers = cp.getCredentialProviders(url); - if (providers != null) { - assertTrue(url.equals(providers.get(0).toString())); - } - System.out.println("(2) Number of active Threads : " + Thread.activeCount()); - listThreads(); - } - - @Test - public void testCredentialString() { - //test credential provider created is returning the correct credential string. - cp = new RangerCredentialProvider(); - providers = cp.getCredentialProviders(url); - if (providers != null) { - assertTrue("PassworD123".equals(cp.getCredentialString(url, "TestCredential001"))); - } - System.out.println("(3) Number of active Threads : " + Thread.activeCount()); - listThreads(); - } + private final File ksFile; + private final String keystoreFile; + private final String[] argsCreate; + private final String[] argsDelete; + private final String url; + RangerCredentialProvider cp; + List<CredentialProvider> providers; - - @After - public void teardown() throws Exception { - System.out.println("In teardown : Number of active Threads : " + Thread.activeCount() ); - int ret; - Configuration conf = new Configuration(); - CredentialShell cs = new CredentialShell(); - cs.setConf(conf); - try { - ret = cs.run(argsDelete); - } catch (Exception e) { - throw e; - } - assertEquals(0, ret); - listThreads(); - } - - private static void listThreads() { - int ac = Thread.activeCount(); - if (ac > 0) { - Thread[] tlist = new Thread[ac]; - Thread.enumerate(tlist); - for (Thread t : tlist) { - System.out.println("Thread [" + t + "] => {" + t.getClass().getName() + "}"); - } - } - } - - private static boolean isCredentialShellInteractiveEnabled() { - boolean ret = false; - - String fieldName = "interactive"; - - CredentialShell cs = new CredentialShell(); - - try { - Field interactiveField = cs.getClass().getDeclaredField(fieldName); - - if (interactiveField != null) { - interactiveField.setAccessible(true); - ret = interactiveField.getBoolean(cs); - System.out.println("FOUND value of [" + fieldName + "] field in the Class [" + cs.getClass().getName() + "] = [" + ret + "]"); - } - } catch (Throwable e) { - System.out.println("Unable to find the value of [" + fieldName + "] field in the Class [" + cs.getClass().getName() + "]. Skiping -f option"); - e.printStackTrace(); - ret = false; - } - - return ret; - - - } + public RangerCredentialProviderTest() throws IOException { + ksFile = File.createTempFile("testkeystore", "jceks"); + keystoreFile = ksFile.toURI().getPath(); + url = "jceks://file@/" + keystoreFile; + if (isCredentialShellInteractiveEnabled()) { + argsCreate = new String[] {"create", "TestCredential001", "-f", "-value", "PassworD123", "-provider", "jceks://file@/" + keystoreFile}; + argsDelete = new String[] {"delete", "TestCredential001", "-f", "-provider", "jceks://file@/" + keystoreFile}; + } else { + argsCreate = new String[] {"create", "TestCredential001", "-value", "PassworD123", "-provider", "jceks://file@/" + keystoreFile}; + argsDelete = new String[] {"delete", "TestCredential001", "-provider", "jceks://file@/" + keystoreFile}; + } + } -} + @Before + public void setup() throws Exception { + int ret; + // adding a delete before creating a keystore + try { + if (ksFile != null) { + if (ksFile.exists()) { + System.out.println("Keystore File [" + ksFile.getAbsolutePath() + "] is available - and deleting"); + ksFile.delete(); + System.out.println("Keystore File [" + ksFile.getAbsolutePath() + "] is deleted."); + } else { + System.out.println("Keystore File [" + ksFile.getAbsolutePath() + "] is not available"); + } + } else { + System.out.println("Keystore File is NULL"); + } + } catch (Throwable t) { + t.printStackTrace(); + } + + Configuration conf = new Configuration(); + CredentialShell cs = new CredentialShell(); + cs.setConf(conf); + try { + ret = cs.run(argsCreate); + } catch (Exception e) { + throw e; + } + assertEquals(0, ret); + System.out.println("(1) Number of active Threads : " + Thread.activeCount()); + listThreads(); + } + @After + public void cleanup() throws Exception { + if (ksFile != null && ksFile.exists()) { + ksFile.delete(); + } + } + + @Test + public void testCredentialProvider() { + //test credential provider is registered and return credential providers. + cp = new RangerCredentialProvider(); + providers = cp.getCredentialProviders(url); + if (providers != null) { + assertTrue(url.equals(providers.get(0).toString())); + } + System.out.println("(2) Number of active Threads : " + Thread.activeCount()); + listThreads(); + } + + @Test + public void testCredentialString() { + //test credential provider created is returning the correct credential string. + cp = new RangerCredentialProvider(); + providers = cp.getCredentialProviders(url); + if (providers != null) { + assertTrue("PassworD123".equals(cp.getCredentialString(url, "TestCredential001"))); + } + System.out.println("(3) Number of active Threads : " + Thread.activeCount()); + listThreads(); + } + + @After + public void teardown() throws Exception { + System.out.println("In teardown : Number of active Threads : " + Thread.activeCount()); + int ret; + Configuration conf = new Configuration(); + CredentialShell cs = new CredentialShell(); + cs.setConf(conf); + try { + ret = cs.run(argsDelete); + } catch (Exception e) { + throw e; + } + assertEquals(0, ret); + listThreads(); + } + + private static void listThreads() { + int ac = Thread.activeCount(); + if (ac > 0) { + Thread[] tlist = new Thread[ac]; + Thread.enumerate(tlist); + for (Thread t : tlist) { + System.out.println("Thread [" + t + "] => {" + t.getClass().getName() + "}"); + } + } + } + + private static boolean isCredentialShellInteractiveEnabled() { + boolean ret = false; + String fieldName = "interactive"; + CredentialShell cs = new CredentialShell(); + try { + Field interactiveField = cs.getClass().getDeclaredField(fieldName); + if (interactiveField != null) { + interactiveField.setAccessible(true); + ret = interactiveField.getBoolean(cs); + System.out.println("FOUND value of [" + fieldName + "] field in the Class [" + cs.getClass().getName() + "] = [" + ret + "]"); + } + } catch (Throwable e) { + System.out.println("Unable to find the value of [" + fieldName + "] field in the Class [" + cs.getClass().getName() + "]. Skiping -f option"); + e.printStackTrace(); + ret = false; + } + return ret; + } +}
