using System; using System.Collections.Concurrent; using System.IO; using System.Threading; using System.Threading.Tasks; using StellaOps.Scanner.Cache.Abstractions; namespace StellaOps.Scanner.Reachability.Tests; internal sealed class FakeFileContentAddressableStore : IFileContentAddressableStore { private readonly ConcurrentDictionary store = new(); public byte[]? GetBytes(string key) => store.TryGetValue(key, out var bytes) ? bytes : null; public ValueTask TryGetAsync(string sha256, CancellationToken cancellationToken = default) { if (store.TryGetValue(sha256, out var bytes)) { return ValueTask.FromResult(new FileCasEntry(sha256, bytes.LongLength, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, sha256 + ".zip")); } return ValueTask.FromResult(null); } public Task PutAsync(FileCasPutRequest request, CancellationToken cancellationToken = default) { using var ms = new MemoryStream(); request.Content.CopyTo(ms); store[request.Sha256] = ms.ToArray(); return Task.FromResult(new FileCasEntry(request.Sha256, ms.Length, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, request.Sha256 + ".zip")); } public Task RemoveAsync(string sha256, CancellationToken cancellationToken = default) => Task.FromResult(store.TryRemove(sha256, out _)); public Task EvictExpiredAsync(CancellationToken cancellationToken = default) => Task.FromResult(0); public Task ExportAsync(string destinationDirectory, CancellationToken cancellationToken = default) => Task.FromResult(0); public Task ImportAsync(string sourceDirectory, CancellationToken cancellationToken = default) => Task.FromResult(0); public Task CompactAsync(CancellationToken cancellationToken = default) => Task.FromResult(0); }