public void Authenticate_should_use_cache( [Values(false, true)] bool async) { var randomStringGenerator = new ConstantRandomStringGenerator(_clientNonce); var subject = new ScramSha256Authenticator(__credential, randomStringGenerator, serverApi: null); var saslStartResponse = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson( @"{conversationId: 1," + $" payload: BinData(0,\"{ToUtf8Base64(__serverResponse1)}\")," + @" done: false, ok: 1}")); var saslContinueResponse = MessageHelper.BuildCommandResponse(RawBsonDocumentHelper.FromJson( @"{conversationId: 1," + $" payload: BinData(0,\"{ToUtf8Base64(__serverResponse2)}\")," + @" done: true, ok: 1}")); var connection = new MockConnection(__serverId); connection.EnqueueCommandResponseMessage(saslStartResponse); connection.EnqueueCommandResponseMessage(saslContinueResponse); connection.Description = __descriptionCommandWireProtocol; if (async) { subject.AuthenticateAsync(connection, __descriptionCommandWireProtocol, CancellationToken.None) .GetAwaiter() .GetResult(); } else { subject.Authenticate(connection, __descriptionCommandWireProtocol, CancellationToken.None); } SpinWait.SpinUntil(() => connection.GetSentMessages().Count >= 2, TimeSpan.FromSeconds(5)) .Should() .BeTrue(); subject._cache().Should().NotBe(null); subject._cache()._cacheKey().Should().NotBe(null); subject._cache()._cachedEntry().Should().NotBe(null); }