Add native online success smoke probe

This commit is contained in:
2026-08-31 18:02:28 -06:00
parent 1f43f200b4
commit 289a67e371
@@ -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
{