public class org.apache.zookeeper.KerberosTicketRenewalTest extends java.lang.Object
{
private static final org.slf4j.Logger LOG;
private static final java.lang.String JAAS_CONFIG_SECTION;
private static final java.lang.String TICKET_LIFETIME;
private static java.io.File testTempDir;
private static org.apache.zookeeper.server.quorum.auth.MiniKdc kdc;
private static java.io.File kdcWorkDir;
private static java.lang.String PRINCIPAL;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login;
public void <init>()
{
org.apache.zookeeper.KerberosTicketRenewalTest v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
public static void setupClass() throws java.lang.Exception
{
java.lang.String v, v, v, v;
java.io.File v;
staticinvoke <java.lang.System: java.lang.String setProperty(java.lang.String,java.lang.String)>("zookeeper.kerberos.minReLoginTimeMs", "500");
v = staticinvoke <org.apache.zookeeper.test.ClientBase: java.io.File createTmpDir()>();
<org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File testTempDir> = v;
staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: void startMiniKdcAndAddPrincipal()>();
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.KerberosTestUtils: java.lang.String getKeytabFile()>();
v = staticinvoke <org.apache.commons.io.FilenameUtils: java.lang.String normalize(java.lang.String,boolean)>(v, 1);
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.lang.String PRINCIPAL>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("ClientUsingKerberos {\n  com.sun.security.auth.module.Krb5LoginModule required\n  storeKey=\"false\"\n  useTicketCache=\"false\"\n  useKeyTab=\"true\"\n  doNotPrompt=\"true\"\n  debug=\"true\"\n  refreshKrb5Config=\"true\"\n  keyTab=\"\u0001\"\n  principal=\"\u0001\";\n};\n");
staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: void setupJaasConfig(java.lang.String)>(v);
return;
}
public static void tearDownClass()
{
java.io.File v, v;
staticinvoke <java.lang.System: java.lang.String clearProperty(java.lang.String)>("zookeeper.kerberos.minReLoginTimeMs");
staticinvoke <java.lang.System: java.lang.String clearProperty(java.lang.String)>("java.security.auth.login.config");
staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: void stopMiniKdc()>();
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File testTempDir>;
if v == null goto label;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File testTempDir>;
staticinvoke <org.apache.commons.io.FileUtils: boolean deleteQuietly(java.io.File)>(v);
label:
return;
}
public void tearDownTest() throws java.lang.Exception
{
org.apache.zookeeper.KerberosTicketRenewalTest v;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin v, v, v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
if v == null goto label;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void shutdown()>();
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void logout()>();
label:
return;
}
public void shouldLoginUsingKerberos() throws java.lang.Exception
{
org.apache.zookeeper.KerberosTicketRenewalTest v;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin v, v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
v = new org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin;
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void <init>()>();
v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login> = v;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void startThreadIfNeeded()>();
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest: void assertPrincipalLoggedIn()>();
return;
}
public void shouldRenewTicketUsingKerberos() throws java.lang.Exception
{
org.apache.zookeeper.KerberosTicketRenewalTest v;
long v, v;
byte v;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin v, v, v, v;
java.time.Duration v;
boolean v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
v = new org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin;
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void <init>()>();
v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login> = v;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void startThreadIfNeeded()>();
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: long getLastLogin()>();
v = staticinvoke <java.time.Duration: java.time.Duration ofSeconds(long)>(15L);
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest: void assertTicketRefreshHappenedUntil(java.time.Duration)>(v);
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest: void assertPrincipalLoggedIn()>();
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: long getLastLogin()>();
v = v cmp v;
if v >= 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
staticinvoke <org.junit.jupiter.api.Assertions: void assertTrue(boolean)>(v);
return;
}
public void shouldRecoverIfKerberosNotAvailableForSomeTime() throws java.lang.Exception
{
org.apache.zookeeper.KerberosTicketRenewalTest v;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin v, v, v, v;
java.time.Duration v, v, v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
v = new org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin;
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void <init>()>();
v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login> = v;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void startThreadIfNeeded()>();
v = staticinvoke <java.time.Duration: java.time.Duration ofSeconds(long)>(15L);
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest: void assertTicketRefreshHappenedUntil(java.time.Duration)>(v);
staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: void stopMiniKdc()>();
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = staticinvoke <java.time.Duration: java.time.Duration ofSeconds(long)>(15L);
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void assertRefreshFailsEventually(java.time.Duration)>(v);
staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: void startMiniKdcAndAddPrincipal()>();
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: void continueWithRetryAfterFailedRefresh()>();
v = staticinvoke <java.time.Duration: java.time.Duration ofSeconds(long)>(15L);
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest: void assertTicketRefreshHappenedUntil(java.time.Duration)>(v);
specialinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest: void assertPrincipalLoggedIn()>();
return;
}
private void assertPrincipalLoggedIn()
{
int v;
java.lang.String v, v, v, v;
java.util.Iterator v;
org.apache.zookeeper.KerberosTicketRenewalTest v;
java.util.Set v, v;
javax.security.auth.Subject v, v, v;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin v, v, v, v;
java.lang.Object v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.lang.String PRINCIPAL>;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: java.lang.String getUserName()>();
staticinvoke <org.junit.jupiter.api.Assertions: void assertEquals(java.lang.Object,java.lang.Object)>(v, v);
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: javax.security.auth.Subject getSubject()>();
staticinvoke <org.junit.jupiter.api.Assertions: void assertNotNull(java.lang.Object)>(v);
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: javax.security.auth.Subject getSubject()>();
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrincipals()>();
v = interfaceinvoke v.<java.util.Set: int size()>();
staticinvoke <org.junit.jupiter.api.Assertions: void assertEquals(int,int)>(1, v);
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: javax.security.auth.Subject getSubject()>();
v = virtualinvoke v.<javax.security.auth.Subject: java.util.Set getPrincipals()>();
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.lang.String PRINCIPAL>;
v = interfaceinvoke v.<java.security.Principal: java.lang.String getName()>();
staticinvoke <org.junit.jupiter.api.Assertions: void assertEquals(java.lang.Object,java.lang.Object)>(v, v);
return;
}
private void assertTicketRefreshHappenedUntil(java.time.Duration)
{
org.apache.zookeeper.KerberosTicketRenewalTest v;
org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin v;
java.time.Duration v;
long v;
java.util.function.Supplier v;
v := @this: org.apache.zookeeper.KerberosTicketRenewalTest;
v := @parameter: java.time.Duration;
v = v.<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin login>;
v = virtualinvoke v.<org.apache.zookeeper.KerberosTicketRenewalTest$TestableKerberosLogin: long getLastLogin()>();
v = staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest$lambda_assertTicketRefreshHappenedUntil_0__9: java.util.function.Supplier bootstrap$(org.apache.zookeeper.KerberosTicketRenewalTest,long)>(v, v);
staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: void assertEventually(java.time.Duration,java.util.function.Supplier)>(v, v);
return;
}
private static void assertEventually(java.time.Duration, java.util.function.Supplier)
{
java.util.function.Supplier v;
org.junit.jupiter.api.function.Executable v;
java.time.Duration v;
v := @parameter: java.time.Duration;
v := @parameter: java.util.function.Supplier;
v = staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest$lambda_assertEventually_1__10: org.junit.jupiter.api.function.Executable bootstrap$(java.util.function.Supplier)>(v);
staticinvoke <org.junit.jupiter.api.Assertions: void assertTimeout(java.time.Duration,org.junit.jupiter.api.function.Executable)>(v, v);
return;
}
public static void startMiniKdcAndAddPrincipal() throws java.lang.Exception
{
java.util.Properties v;
java.lang.String[] v;
java.io.File v, v, v, v;
org.apache.zookeeper.server.quorum.auth.MiniKdc v, v, v;
int v;
java.lang.String v, v, v, v;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File testTempDir>;
v = staticinvoke <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File createTmpDirInside(java.io.File)>(v);
<org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File kdcWorkDir> = v;
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.MiniKdc: java.util.Properties createConf()>();
virtualinvoke v.<java.util.Properties: java.lang.Object setProperty(java.lang.String,java.lang.String)>("max.ticket.lifetime", "5000");
virtualinvoke v.<java.util.Properties: java.lang.Object setProperty(java.lang.String,java.lang.String)>("min.ticket.lifetime", "5000");
v = new org.apache.zookeeper.server.quorum.auth.MiniKdc;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File kdcWorkDir>;
specialinvoke v.<org.apache.zookeeper.server.quorum.auth.MiniKdc: void <init>(java.util.Properties,java.io.File)>(v, v);
<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.server.quorum.auth.MiniKdc kdc> = v;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.server.quorum.auth.MiniKdc kdc>;
virtualinvoke v.<org.apache.zookeeper.server.quorum.auth.MiniKdc: void start()>();
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.lang.String PRINCIPAL>;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.lang.String PRINCIPAL>;
v = virtualinvoke v.<java.lang.String: int lastIndexOf(java.lang.String)>("@");
v = virtualinvoke v.<java.lang.String: java.lang.String substring(int,int)>(0, v);
v = <org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.server.quorum.auth.MiniKdc kdc>;
v = new java.io.File;
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.KerberosTestUtils: java.lang.String getKeytabFile()>();
specialinvoke v.<java.io.File: void <init>(java.lang.String)>(v);
v = newarray (java.lang.String)[1];
v[0] = v;
virtualinvoke v.<org.apache.zookeeper.server.quorum.auth.MiniKdc: void createPrincipal(java.io.File,java.lang.String[])>(v, v);
return;
}
private static void stopMiniKdc()
{
org.apache.zookeeper.server.quorum.auth.MiniKdc v, v;
java.io.File v, v;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.server.quorum.auth.MiniKdc kdc>;
if v == null goto label;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.server.quorum.auth.MiniKdc kdc>;
virtualinvoke v.<org.apache.zookeeper.server.quorum.auth.MiniKdc: void stop()>();
<org.apache.zookeeper.KerberosTicketRenewalTest: org.apache.zookeeper.server.quorum.auth.MiniKdc kdc> = null;
label:
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File kdcWorkDir>;
if v == null goto label;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File kdcWorkDir>;
staticinvoke <org.apache.commons.io.FileUtils: boolean deleteQuietly(java.io.File)>(v);
<org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File kdcWorkDir> = null;
label:
return;
}
private static java.io.File createTmpDirInside(java.io.File) throws java.io.IOException
{
java.lang.String v;
java.io.File v, v, v;
boolean v, v;
v := @parameter: java.io.File;
v = staticinvoke <java.io.File: java.io.File createTempFile(java.lang.String,java.lang.String,java.io.File)>("test", ".junit", v);
v = new java.io.File;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.io.File)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u.dir");
specialinvoke v.<java.io.File: void <init>(java.lang.String)>(v);
v = virtualinvoke v.<java.io.File: boolean exists()>();
staticinvoke <org.junit.jupiter.api.Assertions: void assertFalse(boolean)>(v);
v = virtualinvoke v.<java.io.File: boolean mkdirs()>();
staticinvoke <org.junit.jupiter.api.Assertions: void assertTrue(boolean)>(v);
return v;
}
private static void setupJaasConfig(java.lang.String)
{
org.slf4j.Logger v;
java.io.FileWriter v;
java.io.IOException v;
java.io.File v, v;
java.lang.String v, v;
javax.security.auth.login.Configuration v;
v := @parameter: java.lang.String;
label:
v = new java.io.File;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: java.io.File testTempDir>;
specialinvoke v.<java.io.File: void <init>(java.io.File,java.lang.String)>(v, "jaas.conf");
v = new java.io.FileWriter;
specialinvoke v.<java.io.FileWriter: void <init>(java.io.File)>(v);
virtualinvoke v.<java.io.FileWriter: void write(java.lang.String)>(v);
virtualinvoke v.<java.io.FileWriter: void close()>();
v = virtualinvoke v.<java.io.File: java.lang.String getAbsolutePath()>();
staticinvoke <java.lang.System: java.lang.String setProperty(java.lang.String,java.lang.String)>("java.security.auth.login.config", v);
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.zookeeper.KerberosTicketRenewalTest: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("Failed to initialize JAAS conf file", v);
label:
v = staticinvoke <javax.security.auth.login.Configuration: javax.security.auth.login.Configuration getConfiguration()>();
virtualinvoke v.<javax.security.auth.login.Configuration: void refresh()>();
return;
catch java.io.IOException from label to label with label;
}
static void <clinit>()
{
java.lang.String v;
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/zookeeper/KerberosTicketRenewalTest;");
<org.apache.zookeeper.KerberosTicketRenewalTest: org.slf4j.Logger LOG> = v;
v = staticinvoke <org.apache.zookeeper.server.quorum.auth.KerberosTestUtils: java.lang.String getClientPrincipal()>();
<org.apache.zookeeper.KerberosTicketRenewalTest: java.lang.String PRINCIPAL> = v;
return;
}
}