63 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|