Files

48 lines
2.0 KiB
C#

using WxAgent.Core;
using Xunit;
namespace WxAgent.Core.Tests;
public sealed class KeyCachePlannerTests
{
private static AccountKeySet CachedAccount(string fingerprint, params string[] paths) => new(
fingerprint, "C:\\xwechat_files\\" + fingerprint, "4.1.13.63", DateTimeOffset.UtcNow,
paths.Select(path => new DatabaseKeyEvidence(path, "salt", "key", 42, DateTimeOffset.UtcNow, KeyBindingConfidence.PageHmacVerified)).ToArray());
private static AccountDatabaseEntry Entry(string fingerprint, string path) => new(fingerprint, path);
[Fact]
public void VerifiedKeysCoversEveryCachedDatabasePath()
{
var cached = new[] { CachedAccount("a", "contact.db", "message_0.db"), CachedAccount("b", "message_0.db") };
var verified = KeyCachePlanner.VerifiedKeys(cached);
Assert.Contains(KeyCachePlanner.Key("a", "contact.db"), verified);
Assert.Contains(KeyCachePlanner.Key("a", "message_0.db"), verified);
Assert.Contains(KeyCachePlanner.Key("b", "message_0.db"), verified);
}
[Fact]
public void HasPendingIsFalseWhenAllDiscoveredDatabasesAreCached()
{
var cached = new[] { CachedAccount("a", "contact.db", "message_0.db") };
var verified = KeyCachePlanner.VerifiedKeys(cached);
var discovered = new[] { Entry("a", "contact.db"), Entry("a", "message_0.db") };
Assert.False(KeyCachePlanner.HasPending(discovered, verified));
}
[Fact]
public void HasPendingIsTrueForNewDatabaseOrNewAccount()
{
var cached = new[] { CachedAccount("a", "contact.db") };
var verified = KeyCachePlanner.VerifiedKeys(cached);
Assert.True(KeyCachePlanner.HasPending([Entry("a", "message_0.db")], verified));
Assert.True(KeyCachePlanner.HasPending([Entry("b", "contact.db")], verified));
}
[Fact]
public void CacheKeyIsCaseInsensitiveForWindowsPaths()
{
var verified = KeyCachePlanner.VerifiedKeys([CachedAccount("a", "Contact.DB")]);
Assert.True(verified.Contains(KeyCachePlanner.Key("a", "contact.db")));
}
}