// Copyright Epic Games, Inc. All Rights Reserved. using System.Threading; using System.Threading.Tasks; using EpicGames.Core; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.VisualStudio.TestTools.UnitTesting; using UnrealBuildTool.Artifacts; namespace UnrealBuildTool.Tests { [TestClass] public class ArtifactsTest { static readonly Utf8String s_input1Data = new Utf8String("This is some sample input"); static readonly Utf8String s_input2Data = new Utf8String("This is some more sample input"); static readonly Utf8String s_output1Data = new Utf8String("This is the sample output"); private static ArtifactFile MakeInput1() { return new ArtifactFile(ArtifactDirectoryTree.Absolute, new Utf8String("Input1"), IoHash.Compute(s_input1Data.Span)); } private static ArtifactFile MakeInput2() { return new ArtifactFile(ArtifactDirectoryTree.Absolute, new Utf8String("Input2"), IoHash.Compute(s_input2Data.Span)); } private static ArtifactFile MakeOutput1() { return new ArtifactFile(ArtifactDirectoryTree.Absolute, new Utf8String("Output1"), IoHash.Compute(s_output1Data.Span)); } public static ArtifactAction MakeBundle1() { return new ArtifactAction( IoHash.Compute(new Utf8String("SampleKey")), IoHash.Compute(new Utf8String("SampleBundleKey")), [MakeInput1(), MakeInput2()], [MakeOutput1()] ); } public static ArtifactAction MakeBundle2() { return new ArtifactAction( IoHash.Compute(new Utf8String("SampleKey")), IoHash.Compute(new Utf8String("SampleBundleKeyV2")), [MakeInput1(), MakeInput2()], [MakeOutput1()] ); } [TestMethod] public async Task ArtifactBundleStorageTest1Async() { CancellationToken cancellationToken = default; IArtifactCache cache = HordeStorageArtifactCache.CreateMemoryCache(NullLogger.Instance); await cache.WaitForReadyAsync(); Assert.AreEqual(ArtifactCacheState.Available, cache.State); ArtifactAction bundle1 = MakeBundle1(); await cache.SaveArtifactActionsAsync([bundle1], cancellationToken); ArtifactAction[] readBack1 = await cache.QueryArtifactActionsAsync([bundle1.Key], cancellationToken); Assert.AreEqual(1, readBack1.Length); ArtifactAction bundle2 = MakeBundle2(); await cache.SaveArtifactActionsAsync([bundle2], cancellationToken); ArtifactAction[] readBack2 = await cache.QueryArtifactActionsAsync([bundle1.Key], cancellationToken); Assert.AreEqual(2, readBack2.Length); //await cache.FlushChangesAsync(cancellationToken); } } }