You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2024/12/16 10:19:48 UTC
(ranger) 01/01: RANGER-5026: agents-cred module: update for code readability improvement
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 <pr...@apache.org>
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;
+ }
+}