// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Data/ChunkData.h" #include "Tests/TestHelpers.h" #include "Common/StatsCollector.h" #include "Memory/MemoryView.h" #if WITH_DEV_AUTOMATION_TESTS namespace BuildPatchServices { class FMockChunkDataSerialization : public IChunkDataSerialization { public: typedef TTuple FRxLoadFromFile; typedef TTuple FRxSaveToFile; typedef TTuple, EChunkLoadResult> FRxLoadFromMemory; typedef TTuple FRxLoadFromArchive; typedef TTuple FRxSaveToArchive; typedef TTuple, FSHAHash> FRxInjectShaToChunkData; typedef TTuple FTxLoadFromFile; typedef TTuple FTxLoadFromMemory; typedef TTuple FTxLoadFromArchive; public: virtual IChunkDataAccess* LoadFromFile(const FString& Filename, EChunkLoadResult& OutLoadResult) const override { IChunkDataAccess* Result = nullptr; if (TxLoadFromFile.Num()) { FTxLoadFromFile LoadFromFileResult = TxLoadFromFile.Pop(); Result = LoadFromFileResult.Get<0>(); OutLoadResult = LoadFromFileResult.Get<1>(); } RxLoadFromFile.Emplace(Filename, OutLoadResult); return Result; } virtual EChunkSaveResult SaveToFile(const FString& Filename, const IChunkDataAccess* ChunkDataAccess) const override { RxSaveToFile.Emplace(Filename, ChunkDataAccess); return EChunkSaveResult::Success; } virtual IChunkDataAccess* LoadFromMemory(const TArray& Memory, EChunkLoadResult& OutLoadResult) const override { IChunkDataAccess* Result = nullptr; if (TxLoadFromMemory.Num()) { FTxLoadFromMemory LoadFromMemoryResult = TxLoadFromMemory.Pop(); Result = LoadFromMemoryResult.Get<0>(); OutLoadResult = LoadFromMemoryResult.Get<1>(); } RxLoadFromMemory.Emplace(Memory, OutLoadResult); return Result; } virtual EChunkSaveResult SaveToMemory(TArray& Memory, const IChunkDataAccess* ChunkDataAccess) const override { MOCK_FUNC_NOT_IMPLEMENTED("FMockChunkDataSerialization::SaveToMemory"); return EChunkSaveResult::SerializationError; } virtual IChunkDataAccess* LoadFromArchive(FArchive& Archive, EChunkLoadResult& OutLoadResult) const override { IChunkDataAccess* Result = nullptr; if (TxLoadFromArchive.Num()) { FTxLoadFromFile LoadFromArchiveResult = TxLoadFromArchive.Pop(); Result = LoadFromArchiveResult.Get<0>(); OutLoadResult = LoadFromArchiveResult.Get<1>(); } RxLoadFromArchive.Emplace(OutLoadResult); return Result; } virtual EChunkSaveResult SaveToArchive(FArchive& Archive, const IChunkDataAccess* ChunkDataAccess) const override { EChunkSaveResult Result = EChunkSaveResult::Success; if (SaveToArchiveFunc) { Result = SaveToArchiveFunc(Archive, ChunkDataAccess); } RxSaveToArchive.Emplace(ChunkDataAccess); return Result; } virtual void InjectShaToChunkData(TArray& Memory, const FSHAHash& ShaHashData) const override { RxInjectShaToChunkData.Emplace(Memory, ShaHashData); } virtual bool ValidateAndRead(FArchive& InArchive, FMutableMemoryView InDestinationBuffer, FChunkHeader& OutHeader, FUniqueBuffer& OutCompressedBuffer) const { return false; } virtual bool DecompressValidatedRead(const FChunkHeader& InHeader, FMutableMemoryView InDestionationBuffer, const FUniqueBuffer& InCompressedBuffer) const { return false; } public: mutable TArray RxLoadFromFile; mutable TArray RxSaveToFile; mutable TArray RxLoadFromMemory; mutable TArray RxLoadFromArchive; mutable TArray RxSaveToArchive; mutable TArray RxInjectShaToChunkData; mutable TArray TxLoadFromFile; mutable TArray TxLoadFromMemory; mutable TArray TxLoadFromArchive; TFunction SaveToArchiveFunc; }; } #endif //WITH_DEV_AUTOMATION_TESTS