test(ldap): sequence connection factory for failover tests
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
using ZB.MOM.WW.Auth.Ldap.Internal;
|
||||||
|
|
||||||
|
namespace ZB.MOM.WW.Auth.Ldap.Tests;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test double for <see cref="ILdapConnectionFactory"/> that hands out pre-scripted
|
||||||
|
/// <see cref="FakeLdapConnection"/> instances in order, one per <see cref="Create"/> call —
|
||||||
|
/// exactly matching the failover walk, which opens a fresh connection per endpoint attempt.
|
||||||
|
/// Records every created connection for inspection. When the script runs out, returns a
|
||||||
|
/// bare unscripted fake (which yields user-not-found) so a miscounted test fails loudly
|
||||||
|
/// rather than reusing a stale fake.
|
||||||
|
/// </summary>
|
||||||
|
internal sealed class SequenceLdapConnectionFactory : ILdapConnectionFactory
|
||||||
|
{
|
||||||
|
private readonly Queue<FakeLdapConnection> _script;
|
||||||
|
|
||||||
|
/// <summary>Scripts the connections handed out, in the order the walk will request them.</summary>
|
||||||
|
public SequenceLdapConnectionFactory(params FakeLdapConnection[] fakes)
|
||||||
|
=> _script = new Queue<FakeLdapConnection>(fakes);
|
||||||
|
|
||||||
|
/// <summary>Every connection handed out, in creation order (scripted or overflow).</summary>
|
||||||
|
public List<FakeLdapConnection> Created { get; } = new();
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public ILdapConnection Create()
|
||||||
|
{
|
||||||
|
var fake = _script.Count > 0 ? _script.Dequeue() : new FakeLdapConnection();
|
||||||
|
Created.Add(fake);
|
||||||
|
return fake;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Smoke test: verifies the sequencing and overflow behaviour the failover tests rely on.
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public class SequenceLdapConnectionFactorySmokeTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Create_ReturnsScriptedFakesInOrder_ThenOverflows()
|
||||||
|
{
|
||||||
|
var first = new FakeLdapConnection().ThrowOnConnect();
|
||||||
|
var second = new FakeLdapConnection();
|
||||||
|
var factory = new SequenceLdapConnectionFactory(first, second);
|
||||||
|
|
||||||
|
Assert.Same(first, factory.Create());
|
||||||
|
Assert.Same(second, factory.Create());
|
||||||
|
Assert.NotSame(second, factory.Create()); // overflow: fresh bare fake
|
||||||
|
Assert.Equal(3, factory.Created.Count);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user