Files
git.stella-ops.org/src/__Libraries/__Tests/StellaOps.ReachGraph.Cache.Tests/ReachGraphValkeyCacheSetTests.cs

63 lines
2.3 KiB
C#

using Moq;
using StackExchange.Redis;
using StellaOps.TestKit;
using Xunit;
namespace StellaOps.ReachGraph.Cache.Tests;
public sealed class ReachGraphValkeyCacheSetTests
{
[Fact]
[Trait("Category", TestCategories.Unit)]
public async Task SetAsyncStoresCompressedGraph()
{
var options = new ReachGraphCacheOptions { DefaultTtl = TimeSpan.FromMinutes(5) };
var harness = new ReachGraphValkeyCacheHarness("tenant-1", options);
var graph = ReachGraphValkeyCacheTestData.CreateGraph("sha256:graph");
harness.Database
.Setup(db => db.StringSetAsync(
It.IsAny<RedisKey>(),
It.IsAny<RedisValue>(),
It.IsAny<TimeSpan?>(),
It.IsAny<When>(),
It.IsAny<CommandFlags>()))
.ReturnsAsync(true);
await harness.Cache.SetAsync("sha256:graph", graph, ttl: TimeSpan.FromMinutes(2));
var invocation = Assert.Single(harness.Database.Invocations, i => i.Method.Name == "StringSetAsync");
var key = (RedisKey)invocation.Arguments[0]!;
var storedValue = (RedisValue)invocation.Arguments[1]!;
var stored = (byte[]?)storedValue;
var ttl = (Expiration)invocation.Arguments[2]!;
var json = harness.Serializer.SerializeMinimal(graph);
Assert.NotNull(stored);
var decompressed = ReachGraphValkeyCacheTestData.Decompress(stored);
Assert.Equal("reachgraph:tenant-1:sha256:graph", key.ToString());
Assert.Equal((Expiration)TimeSpan.FromMinutes(2), ttl);
Assert.Equal(json, decompressed);
}
[Fact]
[Trait("Category", TestCategories.Unit)]
public async Task SetAsyncSkipsWhenGraphTooLarge()
{
var options = new ReachGraphCacheOptions { MaxGraphSizeBytes = 1 };
var harness = new ReachGraphValkeyCacheHarness("tenant-1", options);
var graph = ReachGraphValkeyCacheTestData.CreateGraph("sha256:graph");
await harness.Cache.SetAsync("sha256:graph", graph);
harness.Database.Verify(
db => db.StringSetAsync(
It.IsAny<RedisKey>(),
It.IsAny<RedisValue>(),
It.IsAny<TimeSpan?>(),
It.IsAny<When>(),
It.IsAny<CommandFlags>()),
Times.Never);
}
}