File: CacheEntryTests.cs
Web Access
Project: src\test\Libraries\Microsoft.Extensions.AI.Evaluation.Reporting.Tests\Microsoft.Extensions.AI.Evaluation.Reporting.Tests.csproj (Microsoft.Extensions.AI.Evaluation.Reporting.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
using Microsoft.Extensions.AI.Evaluation.Reporting.JsonSerialization;
using Xunit;
using CacheEntry = Microsoft.Extensions.AI.Evaluation.Reporting.Storage.DiskBasedResponseCache.CacheEntry;
 
namespace Microsoft.Extensions.AI.Evaluation.Reporting.Tests;
 
public class CacheEntryTests
{
    [Fact]
    public void SerializeCacheEntry()
    {
        var entry =
            new CacheEntry(
                scenarioName: "Scenario1",
                iterationName: "Iteration2",
                creation: DateTime.UtcNow,
                expiration: DateTime.UtcNow.Add(TimeSpan.FromMinutes(5)));
 
        string json = JsonSerializer.Serialize(entry, SerializerContext.Default.CacheEntry);
        CacheEntry? deserialized = JsonSerializer.Deserialize<CacheEntry>(json, SerializerContext.Default.CacheEntry);
 
        Assert.NotNull(deserialized);
        Assert.Equal(entry.ScenarioName, deserialized!.ScenarioName);
        Assert.Equal(entry.IterationName, deserialized.IterationName);
        Assert.Equal(entry.Creation, deserialized.Creation);
        Assert.Equal(entry.Expiration, deserialized.Expiration);
    }
 
    [Fact]
    public void SerializeCacheEntryCompact()
    {
        var entry =
            new CacheEntry(
                scenarioName: "Scenario1",
                iterationName: "Iteration2",
                creation: DateTime.UtcNow,
                expiration: DateTime.UtcNow.Add(TimeSpan.FromMinutes(5)));
 
        string json = JsonSerializer.Serialize(entry, SerializerContext.Compact.CacheEntry);
        CacheEntry? deserialized = JsonSerializer.Deserialize<CacheEntry>(json, SerializerContext.Default.CacheEntry);
 
        Assert.NotNull(deserialized);
        Assert.Equal(entry.ScenarioName, deserialized!.ScenarioName);
        Assert.Equal(entry.IterationName, deserialized.IterationName);
        Assert.Equal(entry.Creation, deserialized.Creation);
        Assert.Equal(entry.Expiration, deserialized.Expiration);
    }
 
    [Fact]
    public void SerializeCacheEntryToFile()
    {
        var entry =
            new CacheEntry(
                scenarioName: "Scenario1",
                iterationName: "Iteration2",
                creation: DateTime.UtcNow,
                expiration: DateTime.UtcNow.Add(TimeSpan.FromMinutes(5)));
 
        string tempFilePath = Path.GetTempFileName();
        entry.Write(tempFilePath);
        CacheEntry? deserialized = CacheEntry.Read(tempFilePath);
 
        Assert.NotNull(deserialized);
        Assert.Equal(entry.ScenarioName, deserialized.ScenarioName);
        Assert.Equal(entry.IterationName, deserialized.IterationName);
        Assert.Equal(entry.Creation, deserialized.Creation);
        Assert.Equal(entry.Expiration, deserialized.Expiration);
    }
 
    [Fact]
    public async Task SerializeCacheEntryToFileAsync()
    {
        var entry =
            new CacheEntry(
                scenarioName: "Scenario1",
                iterationName: "Iteration2",
                creation: DateTime.UtcNow,
                expiration: DateTime.UtcNow.Add(TimeSpan.FromMinutes(5)));
 
        string tempFilePath = Path.GetTempFileName();
        await entry.WriteAsync(tempFilePath);
        CacheEntry? deserialized = await CacheEntry.ReadAsync(tempFilePath);
 
        Assert.NotNull(deserialized);
        Assert.Equal(entry.ScenarioName, deserialized.ScenarioName);
        Assert.Equal(entry.IterationName, deserialized.IterationName);
        Assert.Equal(entry.Creation, deserialized.Creation);
        Assert.Equal(entry.Expiration, deserialized.Expiration);
    }
 
}