Add native online success smoke probe
This commit is contained in:
@@ -23,9 +23,9 @@ internal static class Program
|
||||
private static int Main(string[] args)
|
||||
{
|
||||
string mode = args.Length == 0 ? "enumeration" : args.Single();
|
||||
if (mode is not ("enumeration" or "direct-broker" or "online-rejection" or "offline-fallback"))
|
||||
if (mode is not ("enumeration" or "direct-broker" or "online-rejection" or "online-success" or "offline-fallback"))
|
||||
{
|
||||
Console.Error.WriteLine("Usage: SGU.CredentialProvider.SmokeProbe.exe [enumeration|direct-broker|online-rejection|offline-fallback]");
|
||||
Console.Error.WriteLine("Usage: SGU.CredentialProvider.SmokeProbe.exe [enumeration|direct-broker|online-rejection|online-success|offline-fallback]");
|
||||
return 64;
|
||||
}
|
||||
|
||||
@@ -135,8 +135,14 @@ internal static class Program
|
||||
string[] labelArray = labels.ToArray();
|
||||
uint userNameFieldId = checked((uint)Array.IndexOf(labelArray, "Clave institucional"));
|
||||
uint passwordFieldId = checked((uint)Array.IndexOf(labelArray, "Contraseña"));
|
||||
string userName = "DO000000";
|
||||
string password = mode == "offline-fallback"
|
||||
string userName = mode == "online-success"
|
||||
? Environment.GetEnvironmentVariable("SGU_TEST_USERNAME")
|
||||
?? throw new InvalidOperationException("SGU_TEST_USERNAME is required for online-success.")
|
||||
: "DO000000";
|
||||
string password = mode == "online-success"
|
||||
? Environment.GetEnvironmentVariable("SGU_TEST_PASSWORD")
|
||||
?? throw new InvalidOperationException("SGU_TEST_PASSWORD is required for online-success.")
|
||||
: mode == "offline-fallback"
|
||||
? $"Probe-{Guid.NewGuid():N}-áΩ"
|
||||
: $"Probe-{Guid.NewGuid():N}";
|
||||
|
||||
@@ -162,20 +168,20 @@ internal static class Program
|
||||
|
||||
if (mode == "online-rejection")
|
||||
{
|
||||
bool passed = response == (int)SerializationResponse.NoCredentialNotFinished &&
|
||||
bool rejectionPassed = response == (int)SerializationResponse.NoCredentialNotFinished &&
|
||||
serialization.SerializationData == IntPtr.Zero &&
|
||||
statusIcon == (int)StatusIcon.Error &&
|
||||
statusText == "Credenciales institucionales inválidas.";
|
||||
Console.WriteLine(JsonSerializer.Serialize(new
|
||||
{
|
||||
passed,
|
||||
passed = rejectionPassed,
|
||||
mode,
|
||||
response = (SerializationResponse)response,
|
||||
statusIcon = (StatusIcon)statusIcon,
|
||||
statusText,
|
||||
credentialReturned = serialization.SerializationData != IntPtr.Zero
|
||||
}));
|
||||
return passed ? 0 : 1;
|
||||
return rejectionPassed ? 0 : 1;
|
||||
}
|
||||
|
||||
KerberosInteractiveUnlockLogon logon = serialization.SerializationData == IntPtr.Zero
|
||||
@@ -187,17 +193,20 @@ internal static class Program
|
||||
bool passwordPreserved = string.Equals(packedPassword, password, StringComparison.Ordinal);
|
||||
packedPassword = string.Empty;
|
||||
|
||||
bool fallbackPassed = response == (int)SerializationResponse.ReturnCredentialFinished &&
|
||||
bool serializedCredentialPassed = response == (int)SerializationResponse.ReturnCredentialFinished &&
|
||||
serialization.SerializationData != IntPtr.Zero &&
|
||||
serialization.SerializationSize > 0 &&
|
||||
statusIcon == (int)StatusIcon.Warning &&
|
||||
statusText == "Servicio institucional no disponible; Windows validará la última contraseña de dominio registrada." &&
|
||||
string.Equals(packedDomain, "LCI", StringComparison.Ordinal) &&
|
||||
string.Equals(packedUserName, userName, StringComparison.Ordinal) &&
|
||||
passwordPreserved;
|
||||
bool passed = mode == "online-success"
|
||||
? serializedCredentialPassed && statusIcon == (int)StatusIcon.None && string.IsNullOrEmpty(statusText)
|
||||
: serializedCredentialPassed &&
|
||||
statusIcon == (int)StatusIcon.Warning &&
|
||||
statusText == "Servicio institucional no disponible; Windows validará la última contraseña de dominio registrada.";
|
||||
Console.WriteLine(JsonSerializer.Serialize(new
|
||||
{
|
||||
passed = fallbackPassed,
|
||||
passed,
|
||||
mode,
|
||||
response = (SerializationResponse)response,
|
||||
statusIcon = (StatusIcon)statusIcon,
|
||||
@@ -207,7 +216,7 @@ internal static class Program
|
||||
passwordPreserved,
|
||||
serializationSize = serialization.SerializationSize
|
||||
}));
|
||||
return fallbackPassed ? 0 : 1;
|
||||
return passed ? 0 : 1;
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user