diff --git a/MergerCli/Process.cs b/MergerCli/Process.cs index cffc6bd5..6da17a71 100644 --- a/MergerCli/Process.cs +++ b/MergerCli/Process.cs @@ -54,10 +54,10 @@ public void Start(IData baseData, IData newData, BatchStatusManager batchStatusM } this._logger.LogInformation($"[{MethodBase.GetCurrentMethod()?.Name}] Total amount of tiles to merge: {totalTileCount - tileProgressCount}"); - + ParallelRun(baseData, newData, batchStatusManager, tileProgressCount, totalTileCount, resumeBatchIdentifier, resumeMode, pollForBatch); - + batchStatusManager.CompleteLayer(newData.Path); newData.Reset(); // base data wrap up is in program as the same base data object is used in multiple calls @@ -79,7 +79,7 @@ public void Start(IData baseData, IData newData, BatchStatusManager batchStatusM newData.setBatchIdentifier(resumeBatchIdentifier); } } - + var incompleteBatch = batchStatusManager.GetFirstIncompleteBatch(newData.Path); if (incompleteBatch is not null) { @@ -88,21 +88,21 @@ public void Start(IData baseData, IData newData, BatchStatusManager batchStatusM } List newTiles = newData.GetNextBatch(out string? currentBatchIdentifier, out string? nextBatchIdentifier, totalTileCount); - + if (!resumeMode && newTiles.Count != 0) { batchStatusManager.AssignBatch(newData.Path, currentBatchIdentifier); batchStatusManager.SetCurrentBatch(newData.Path, nextBatchIdentifier); } - + return (newTiles, currentBatchIdentifier); } } - - private void ProcessBatch(IData baseData, List newTiles, ref long tileProgressCount, long totalTileCount,ref bool pollForBatch) + + private void ProcessBatch(IData baseData, List newTiles, ref long tileProgressCount, long totalTileCount, ref bool pollForBatch) { ConcurrentBag tiles = new ConcurrentBag(); - + if (newTiles.Count == 0) { pollForBatch = false; @@ -118,7 +118,7 @@ private void ProcessBatch(IData baseData, List newTiles, ref long tileProg var targetCoords = newTile.GetCoord(); List correspondingTileBuilders = new List() { - () => baseData.GetCorrespondingTile(targetCoords, shouldUpscale), + () => baseData.GetCorrespondingTile(targetCoords, null, shouldUpscale), () => newTile }; @@ -137,7 +137,7 @@ private void ProcessBatch(IData baseData, List newTiles, ref long tileProg } private void ParallelRun(IData baseData, IData newData, - BatchStatusManager batchStatusManager, long tileProgressCount, long totalTileCount, string? resumeBatchIdentifier, bool resumeMode,bool pollForBatch) + BatchStatusManager batchStatusManager, long tileProgressCount, long totalTileCount, string? resumeBatchIdentifier, bool resumeMode, bool pollForBatch) { var numOfThreads = this._configManager.GetConfiguration("GENERAL", "parallel", "numOfThreads"); Parallel.For(0, numOfThreads, new ParallelOptions { MaxDegreeOfParallelism = -1 }, _ => @@ -151,7 +151,7 @@ private void ParallelRun(IData baseData, IData newData, } }); } - + public void Validate(IData baseData, IData newData, string? incompleteBatchIdentifier) { List newTiles; @@ -170,7 +170,7 @@ public void Validate(IData baseData, IData newData, string? incompleteBatchIdent for (int i = 0; i < newTiles.Count; i++) { Tile newTile = newTiles[i]; - bool baseTileExists = baseData.TileExists(newTile.GetCoord()); + bool baseTileExists = baseData.TileExists(newTile.GetCoord(), null); if (baseTileExists) { diff --git a/MergerLogic/Clients/FileClient.cs b/MergerLogic/Clients/FileClient.cs index 25544910..0b7d59ef 100644 --- a/MergerLogic/Clients/FileClient.cs +++ b/MergerLogic/Clients/FileClient.cs @@ -1,6 +1,7 @@ using MergerLogic.Batching; using System.IO.Abstractions; using MergerLogic.Utils; +using MergerLogic.ImageProcessing; namespace MergerLogic.Clients; @@ -8,15 +9,20 @@ public class FileClient : DataUtils, IFileClient { private readonly IFileSystem _fileSystem; - public FileClient(string path, IGeoUtils geoUtils, IFileSystem fileSystem) + public FileClient(string path, IGeoUtils geoUtils, IFileSystem fileSystem) : base(path, geoUtils) { this._fileSystem = fileSystem; } - public override Tile? GetTile(int z, int x, int y) + public override Tile? GetTile(int z, int x, int y, TileFormat? format) { - var tilePath = this.GetTilePath(z, x, y); + if (format is null) + { + throw new ArgumentNullException(nameof(format)); + } + + var tilePath = this.GetTilePath(z, x, y, format.Value); if (tilePath != null) { @@ -29,23 +35,23 @@ public FileClient(string path, IGeoUtils geoUtils, IFileSystem fileSystem) } } - public override bool TileExists(int z, int x, int y) + public override bool TileExists(int z, int x, int y, TileFormat? format) { - return this.GetTilePath(z,x,y) != null; + if (format is null) + { + throw new ArgumentNullException(nameof(format)); + } + return this.GetTilePath(z, x, y, format.Value) != null; } - private string? GetTilePath(int z, int x, int y) + private string? GetTilePath(int z, int x, int y, TileFormat format) { var tilePath = this._fileSystem.Path.Join(z.ToString(), x.ToString(), y.ToString()); - try - { - //this may or may not be faster then checking specific files of every supported type depending on the used file system - return this._fileSystem.Directory - .EnumerateFiles(this.path, $"{tilePath}.*", SearchOption.TopDirectoryOnly).FirstOrDefault(); - } - catch (DirectoryNotFoundException) + string fullPath = this._fileSystem.Path.Join(this.path, tilePath, ".", format.ToString().ToLower()); + if (this._fileSystem.File.Exists(fullPath)) { - return null; + return fullPath; } + return null; } } diff --git a/MergerLogic/Clients/GpkgClient.cs b/MergerLogic/Clients/GpkgClient.cs index 6eb801bc..5fdd5653 100644 --- a/MergerLogic/Clients/GpkgClient.cs +++ b/MergerLogic/Clients/GpkgClient.cs @@ -1,5 +1,6 @@ using MergerLogic.Batching; using MergerLogic.Extensions; +using MergerLogic.ImageProcessing; using MergerLogic.Utils; using Microsoft.Extensions.Logging; using System.Data.SQLite; @@ -124,7 +125,7 @@ public void UpdateExtent(Extent extent) } } - public override Tile? GetTile(int z, int x, int y) + public override Tile? GetTile(int z, int x, int y, TileFormat? format = null) { byte[]? blob = null; @@ -146,7 +147,7 @@ public void UpdateExtent(Extent extent) return this.CreateTile(z, x, y, blob); } - public override bool TileExists(int z, int x, int y) + public override bool TileExists(int z, int x, int y, TileFormat? format = null) { using (var connection = new SQLiteConnection($"Data Source={this.path}")) { diff --git a/MergerLogic/Clients/HttpSourceClient.cs b/MergerLogic/Clients/HttpSourceClient.cs index 240b46d9..f2205fcb 100644 --- a/MergerLogic/Clients/HttpSourceClient.cs +++ b/MergerLogic/Clients/HttpSourceClient.cs @@ -1,4 +1,5 @@ using MergerLogic.Batching; +using MergerLogic.ImageProcessing; using MergerLogic.Utils; namespace MergerLogic.Clients @@ -15,14 +16,14 @@ public HttpSourceClient(string path, IHttpRequestUtils httpClient, IPathPatternU this._pathPatternUtils = pathPatternUtils; } - public override Tile? GetTile(int z, int x, int y) + public override Tile? GetTile(int z, int x, int y, TileFormat? format = null) { string url = this._pathPatternUtils.RenderUrlTemplate(x, y, z); byte[]? data = this._httpClient.GetData(url, true); return this.CreateTile(z, x, y, data); } - public override bool TileExists(int z, int x, int y) + public override bool TileExists(int z, int x, int y, TileFormat? format = null) { return this.GetTile(z, x, y) is not null; } diff --git a/MergerLogic/Clients/S3Client.cs b/MergerLogic/Clients/S3Client.cs index f06c0e23..3ab99b04 100644 --- a/MergerLogic/Clients/S3Client.cs +++ b/MergerLogic/Clients/S3Client.cs @@ -39,7 +39,7 @@ private bool IsKeyError(Exception e) { return en.ErrorCode == "NoSuchKey"; } - + return false; } @@ -79,21 +79,20 @@ private bool IsKeyError(Exception e) } } - public override Tile? GetTile(int z, int x, int y) + public override Tile? GetTile(int z, int x, int y, TileFormat? format) { string methodName = MethodBase.GetCurrentMethod().Name; this._logger.LogDebug($"[{methodName}] start z: {z}, x: {x}, y: {y}"); - string keyPrefix = this._pathUtils.GetTilePath(this.path, z, x, y, TileFormat.Jpeg, true); + if (format is null) + { + throw new ArgumentNullException(nameof(format)); + } + string keyPrefix = this._pathUtils.GetTilePath(this.path, z, x, y, format.Value, true); byte[]? imageBytes = this.GetImageBytes(keyPrefix); if (imageBytes == null) { - keyPrefix = this._pathUtils.GetTilePath(this.path, z, x, y, TileFormat.Png, true); - imageBytes = this.GetImageBytes(keyPrefix); - if (imageBytes == null) - { - return null; - } + return null; } this._logger.LogDebug($"[{methodName}] end z: {z}, x: {x}, y: {y}"); @@ -109,13 +108,13 @@ private bool IsKeyError(Exception e) { return null; } - + this._logger.LogDebug($"[{methodName}] end key: {key}"); Coord coords = this._pathUtils.FromPath(key, true); return this.CreateTile(coords, imageBytes); } - public override bool TileExists(int z, int x, int y) + public override bool TileExists(int z, int x, int y, TileFormat? format = null) { string methodName = MethodBase.GetCurrentMethod().Name; this._logger.LogDebug($"[{methodName}] start z: {z}, x: {x}, y: {y}"); diff --git a/MergerLogic/DataTypes/Data.cs b/MergerLogic/DataTypes/Data.cs index ea6bf8d4..19cda562 100644 --- a/MergerLogic/DataTypes/Data.cs +++ b/MergerLogic/DataTypes/Data.cs @@ -1,4 +1,6 @@ +using Amazon.S3.Model; using MergerLogic.Batching; +using MergerLogic.ImageProcessing; using MergerLogic.Monitoring.Metrics; using MergerLogic.Utils; using Microsoft.Extensions.DependencyInjection; @@ -41,9 +43,9 @@ public abstract class Data : IData where TUtilsType : IDataUtils public const int MaxZoomRead = 25; protected delegate int ValFromCoordFunction(Coord coord); - protected delegate Tile? GetTileFromXYZFunction(int z, int x, int y); + protected delegate Tile? GetTileFromXYZFunction(int z, int x, int y, TileFormat? format); protected delegate Coord? GetCoordFromCoordFunction(Coord coord); - protected delegate Tile? GetTileFromCoordFunction(Coord coord); + protected delegate Tile? GetTileFromCoordFunction(Coord coord, TileFormat? format); protected delegate Tile TileConvertorFunction(Tile tile); protected delegate Tile? NullableTileConvertorFunction(Tile tile); protected IServiceProvider _container; @@ -125,10 +127,10 @@ protected Data(IServiceProvider container, DataType type, string path, int batch { return this.GeoUtils.FlipY(coord); }; - this.GetTile = (z, x, y) => + this.GetTile = (z, x, y, format) => { int newY = this.GeoUtils.FlipY(z, y); - Tile? tile = fixedGridGetTileFunction(z, x, newY); + Tile? tile = fixedGridGetTileFunction(z, x, newY, format); //set cords to current origin tile?.SetCoords(z, x, y); return tile; @@ -197,7 +199,7 @@ protected virtual Extent GetExtent() public abstract void Reset(); - protected virtual Tile? InternalGetLastExistingTile(Coord coords) + protected virtual Tile? InternalGetLastExistingTile(Coord coords, TileFormat? format) { this._logger.LogDebug($"[{MethodBase.GetCurrentMethod()?.Name}] started for coord: z:{coords.Z}, x:{coords.X}, y:{coords.Y}"); // get tiles coordinates @@ -224,7 +226,7 @@ await Parallel.ForEachAsync(coordsArray, async (coord, cancellationToken) => { await Task.Run(() => { - Tile? tile = this.Utils.GetTile(coord.Z, coord.X, coord.Y); + Tile? tile = this.Utils.GetTile(coord.Z, coord.X, coord.Y, format); if (tile != null) { zOrderToTileDictionary.TryAdd(coord.Z, tile); @@ -247,12 +249,12 @@ await Task.Run(() => return lastTile; } - public bool TileExists(Tile tile) + public bool TileExists(Tile tile, TileFormat? format) { - return this.TileExists(tile.GetCoord()); + return this.TileExists(tile.GetCoord(), format); } - public bool TileExists(Coord coord) + public bool TileExists(Coord coord, TileFormat? format) { coord.Y = this.ConvertOriginCoord(coord); Coord? newCoord = this.FromCurrentGridCoord(coord); @@ -262,43 +264,43 @@ public bool TileExists(Coord coord) return false; } - return this.Utils.TileExists(newCoord.Z, newCoord.X, newCoord.Y); + return this.Utils.TileExists(newCoord.Z, newCoord.X, newCoord.Y, format); } //TODO: move to util after IOC - protected Tile? GetLastOneXOneExistingTile(Coord coords) + protected Tile? GetLastOneXOneExistingTile(Coord coords, TileFormat? format) { Coord? newCoords = this.FromCurrentGridCoord(coords); if (newCoords is null) { return null; } - Tile? tile = this.InternalGetLastExistingTile(newCoords); + Tile? tile = this.InternalGetLastExistingTile(newCoords, format); return tile != null ? this.OneXOneConvertor?.ToTwoXOne(tile) : null; } - protected virtual Tile? GetOneXOneTile(int z, int x, int y) + protected virtual Tile? GetOneXOneTile(int z, int x, int y, TileFormat? format) { Coord? oneXoneBaseCoords = this.OneXOneConvertor?.TryFromTwoXOne(z, x, y); if (oneXoneBaseCoords == null) { return null; } - Tile? tile = this.Utils.GetTile(oneXoneBaseCoords); + Tile? tile = this.Utils.GetTile(oneXoneBaseCoords, format); return tile != null ? this.OneXOneConvertor?.ToTwoXOne(tile) : null; } public abstract List GetNextBatch(out string batchIdentifier, out string? nextBatchIdentifier, long? totalTilesCount); - public Tile? GetCorrespondingTile(Coord coords, bool upscale) + public Tile? GetCorrespondingTile(Coord coords, TileFormat? format, bool upscale) { this._logger.LogDebug($"[{MethodBase.GetCurrentMethod()?.Name}] start for coord: z:{coords.Z}, x:{coords.X}, y:{coords.Y}, upscale: {upscale}"); Stopwatch stopwatch = Stopwatch.StartNew(); - Tile? correspondingTile = this.GetTile(coords.Z, coords.X, coords.Y); + Tile? correspondingTile = this.GetTile(coords.Z, coords.X, coords.Y, format); if (upscale && correspondingTile == null) { - correspondingTile = this.GetLastExistingTile(coords); + correspondingTile = this.GetLastExistingTile(coords, format); } stopwatch.Stop(); this._metricsProvider.TotalFetchTimePerTileHistogram(stopwatch.Elapsed.TotalMilliseconds); diff --git a/MergerLogic/DataTypes/Fs.cs b/MergerLogic/DataTypes/Fs.cs index 3fd4ca50..31da90c3 100644 --- a/MergerLogic/DataTypes/Fs.cs +++ b/MergerLogic/DataTypes/Fs.cs @@ -94,7 +94,7 @@ private IEnumerator GetTiles() .Where(file => this._supportedFileExtensions.Any(x => file.EndsWith(x, System.StringComparison.OrdinalIgnoreCase)))) { Coord coord = this._pathUtils.FromPath(filePath); - Tile? tile = this.Utils.GetTile(coord); + Tile? tile = this.Utils.GetTile(coord, null); if (tile is null) { continue; diff --git a/MergerLogic/DataTypes/Gpkg.cs b/MergerLogic/DataTypes/Gpkg.cs index 9b1af8cf..ecbf52b1 100644 --- a/MergerLogic/DataTypes/Gpkg.cs +++ b/MergerLogic/DataTypes/Gpkg.cs @@ -1,5 +1,6 @@ using MergerLogic.Batching; using MergerLogic.Clients; +using MergerLogic.ImageProcessing; using MergerLogic.Utils; using Microsoft.Extensions.Logging; using System.Reflection; @@ -126,7 +127,7 @@ public override void setBatchIdentifier(string batchIdentifier) } } - protected override Tile? InternalGetLastExistingTile(Coord baseCoords) + protected override Tile? InternalGetLastExistingTile(Coord baseCoords, TileFormat? format = null) { this._logger.LogDebug($"[{MethodBase.GetCurrentMethod()?.Name}] started for coord: z:{baseCoords.Z}, x:{baseCoords.X}, y:{baseCoords.Y}"); int cordsLength = baseCoords.Z << 1; diff --git a/MergerLogic/DataTypes/HttpDataSource.cs b/MergerLogic/DataTypes/HttpDataSource.cs index 426c00eb..323ed0e6 100644 --- a/MergerLogic/DataTypes/HttpDataSource.cs +++ b/MergerLogic/DataTypes/HttpDataSource.cs @@ -73,7 +73,7 @@ protected IEnumerable GetTiles() { for (int y = range.MinY; y < range.MaxY; y++) { - var tile = this.GetTile(range.Zoom, x, y); + var tile = this.GetTile(range.Zoom, x, y, null); if (tile != null) { yield return tile; diff --git a/MergerLogic/DataTypes/IData.cs b/MergerLogic/DataTypes/IData.cs index c8208823..4fe54d9b 100644 --- a/MergerLogic/DataTypes/IData.cs +++ b/MergerLogic/DataTypes/IData.cs @@ -1,4 +1,5 @@ using MergerLogic.Batching; +using MergerLogic.ImageProcessing; namespace MergerLogic.DataTypes { @@ -9,13 +10,13 @@ public interface IData public bool IsNew { get; set; } bool Exists(); - Tile? GetCorrespondingTile(Coord coords, bool upscale); + Tile? GetCorrespondingTile(Coord coords, TileFormat? format, bool upscale); List GetNextBatch(out string batchIdentifier, out string? nextBatchIdentifier, long? totalTilesCount); void Reset(); void setBatchIdentifier(string batchIdentifier); long TileCount(); - bool TileExists(Coord coord); - bool TileExists(Tile tile); + bool TileExists(Coord coord, TileFormat? format); + bool TileExists(Tile tile, TileFormat? format); void UpdateTiles(IEnumerable tiles); void Wrapup(); } diff --git a/MergerLogic/MergerLogic.csproj b/MergerLogic/MergerLogic.csproj index 19ff4212..c1f0cc8e 100644 --- a/MergerLogic/MergerLogic.csproj +++ b/MergerLogic/MergerLogic.csproj @@ -4,6 +4,15 @@ net6.0 enable enable + false + false + false + false + false + false + false + false + false diff --git a/MergerLogic/Utils/DataUtils.cs b/MergerLogic/Utils/DataUtils.cs index 7b979478..1282a2a7 100644 --- a/MergerLogic/Utils/DataUtils.cs +++ b/MergerLogic/Utils/DataUtils.cs @@ -15,18 +15,19 @@ public DataUtils(string path, IGeoUtils geoUtils) this.GeoUtils = geoUtils; } - public virtual bool IsValidGrid(bool isOneXOne = false) { + public virtual bool IsValidGrid(bool isOneXOne = false) + { return true; } - public abstract Tile? GetTile(int z, int x, int y); + public abstract Tile? GetTile(int z, int x, int y, TileFormat? format); - public virtual Tile? GetTile(Coord coord) + public virtual Tile? GetTile(Coord coord, TileFormat? format) { - return this.GetTile(coord.Z, coord.X, coord.Y); + return this.GetTile(coord.Z, coord.X, coord.Y, format); } - public abstract bool TileExists(int z, int x, int y); + public abstract bool TileExists(int z, int x, int y, TileFormat? format); protected Tile? CreateTile(int z, int x, int y, byte[]? data) { diff --git a/MergerLogic/Utils/IDataUtils.cs b/MergerLogic/Utils/IDataUtils.cs index 5bb72224..bdcbb1e0 100644 --- a/MergerLogic/Utils/IDataUtils.cs +++ b/MergerLogic/Utils/IDataUtils.cs @@ -1,13 +1,14 @@ using MergerLogic.Batching; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; namespace MergerLogic.Utils { public interface IDataUtils { bool IsValidGrid(bool isOneXOne = false); - Tile? GetTile(Coord coord); - Tile? GetTile(int z, int x, int y); - bool TileExists(int z, int x, int y); + Tile? GetTile(Coord coord, TileFormat? format); + Tile? GetTile(int z, int x, int y, TileFormat? format); + bool TileExists(int z, int x, int y, TileFormat? format); } } diff --git a/MergerLogic/Utils/IOneXOneConvertor.cs b/MergerLogic/Utils/IOneXOneConvertor.cs index 979def1c..bdfa1196 100644 --- a/MergerLogic/Utils/IOneXOneConvertor.cs +++ b/MergerLogic/Utils/IOneXOneConvertor.cs @@ -1,5 +1,6 @@ using MergerLogic.Batching; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; namespace MergerLogic.Utils { diff --git a/MergerLogicUnitTests/Clients/FileClientTest.cs b/MergerLogicUnitTests/Clients/FileClientTest.cs index 1b9cd607..76c2edd5 100644 --- a/MergerLogicUnitTests/Clients/FileClientTest.cs +++ b/MergerLogicUnitTests/Clients/FileClientTest.cs @@ -5,7 +5,6 @@ using MergerLogicUnitTests.testUtils; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; -using System; using System.Collections.Generic; using System.IO; using System.IO.Abstractions; @@ -73,10 +72,14 @@ public void GetTile(bool useCoords, bool returnsNull, TileFormat targetFormat) .InSequence(seq) .Setup(util => util.Join(cords.Z.ToString(), cords.X.ToString(), cords.Y.ToString())) .Returns("testTilePath"); - this._directoryMock + this._pathMock + .InSequence(seq) + .Setup(util => util.Join("testFilePath", "testTilePath", ".", targetFormat.ToString().ToLower())) + .Returns("testTilePath"); + this._fileMock .InSequence(seq) - .Setup(dir => dir.EnumerateFiles("testFilePath", "testTilePath.*", SearchOption.TopDirectoryOnly)) - .Returns(returnsNull ? Array.Empty() : new string[] { "testTilePath" }); + .Setup(dir => dir.Exists("testTilePath")) + .Returns(!returnsNull); if (!returnsNull) { this._fileMock @@ -91,7 +94,7 @@ public void GetTile(bool useCoords, bool returnsNull, TileFormat targetFormat) var fileClient = new FileClient("testFilePath", this._geoUtilsMock.Object, this._fsMock.Object); - var res = useCoords ? fileClient.GetTile(cords) : fileClient.GetTile(cords.Z, cords.X, cords.Y); + var res = useCoords ? fileClient.GetTile(cords, targetFormat) : fileClient.GetTile(cords.Z, cords.X, cords.Y, targetFormat); if (returnsNull) { Assert.IsNull(res); @@ -124,14 +127,18 @@ public void TileExists(bool exist) .InSequence(seq) .Setup(util => util.Join(cords.Z.ToString(), cords.X.ToString(), cords.Y.ToString())) .Returns("testTilePath"); - this._directoryMock + this._pathMock + .InSequence(seq) + .Setup(util => util.Join("testFilePath", "testTilePath", ".", "png")) + .Returns("testFilePath/testTilePath.png"); + this._fileMock .InSequence(seq) - .Setup(dir => dir.EnumerateFiles("testFilePath", "testTilePath.*", SearchOption.TopDirectoryOnly)) - .Returns(exist ? new string[] { "testFile" } : Array.Empty()); + .Setup(dir => dir.Exists("testFilePath/testTilePath.png")) + .Returns(exist); var fileClient = new FileClient("testFilePath", this._geoUtilsMock.Object, this._fsMock.Object); - var res = fileClient.TileExists(cords.Z, cords.X, cords.Y); + var res = fileClient.TileExists(cords.Z, cords.X, cords.Y, TileFormat.Png); Assert.AreEqual(exist, res); this._repository.VerifyAll(); @@ -147,14 +154,18 @@ public void TileExistsReturnFalseWhenDirectoryDontExist() .InSequence(seq) .Setup(util => util.Join(cords.Z.ToString(), cords.X.ToString(), cords.Y.ToString())) .Returns("testTilePath"); - this._directoryMock + this._pathMock + .InSequence(seq) + .Setup(util => util.Join("testFilePath", "testTilePath", ".", "png")) + .Returns("testFilePath/testTilePath.png"); + this._fileMock .InSequence(seq) - .Setup(dir => dir.EnumerateFiles("testFilePath", "testTilePath.*", SearchOption.TopDirectoryOnly)) - .Throws(); + .Setup(dir => dir.Exists("testFilePath/testTilePath.png")) + .Returns(false); var fileClient = new FileClient("testFilePath", this._geoUtilsMock.Object, this._fsMock.Object); - var res = fileClient.TileExists(cords.Z, cords.X, cords.Y); + var res = fileClient.TileExists(cords.Z, cords.X, cords.Y, TileFormat.Png); Assert.AreEqual(false, res); this._repository.VerifyAll(); diff --git a/MergerLogicUnitTests/DataTypes/FSTest.cs b/MergerLogicUnitTests/DataTypes/FSTest.cs index dfb5bd54..ffb67ec1 100644 --- a/MergerLogicUnitTests/DataTypes/FSTest.cs +++ b/MergerLogicUnitTests/DataTypes/FSTest.cs @@ -1,5 +1,6 @@ using MergerLogic.Batching; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; using MergerLogic.Monitoring.Metrics; using MergerLogic.Utils; using MergerLogicUnitTests.testUtils; @@ -92,6 +93,7 @@ public static IEnumerable GenTileExistsParams() new Coord(0,2,3) //invalid conversion tile }, //cords + new object[] { TileFormat.Png, TileFormat.Jpeg }, //tile format new object[] { true, false }, //is one on one new object[] { GridOrigin.LOWER_LEFT, GridOrigin.UPPER_LEFT }, //origin new object[] { true, false } // use cords @@ -101,7 +103,7 @@ public static IEnumerable GenTileExistsParams() [TestMethod] [TestCategory("TileExists")] [DynamicData(nameof(GenTileExistsParams), DynamicDataSourceType.Method)] - public void TileExists(bool isBase, Coord cords, bool isOneXOne, GridOrigin origin, bool useCoords) + public void TileExists(bool isBase, Coord cords, TileFormat format, bool isOneXOne, GridOrigin origin, bool useCoords) { this.SetupConstructorRequiredMocks(isBase); var seq = new MockSequence(); @@ -123,8 +125,8 @@ public void TileExists(bool isBase, Coord cords, bool isOneXOne, GridOrigin orig { this._fsUtilsMock .InSequence(seq) - .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2); + .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns((z, x, y, format) => z == 2); } Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; @@ -133,14 +135,14 @@ public void TileExists(bool isBase, Coord cords, bool isOneXOne, GridOrigin orig var expected = cords.Z == 2; if (useCoords) { - Assert.AreEqual(expected, fsSource.TileExists(cords)); + Assert.AreEqual(expected, fsSource.TileExists(cords, format)); } else { var tile = new Tile(cords, this._jpegImageData); - Assert.AreEqual(expected, fsSource.TileExists(tile)); + Assert.AreEqual(expected, fsSource.TileExists(tile, format)); } - this._fsUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y), + this._fsUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y, format), cords.Z != 0 || !isOneXOne ? Times.Once : Times.Never); @@ -173,14 +175,14 @@ public void GetCorrespondingTileWithoutUpscaleWithoutConversion(int batchSize, b this.SetupConstructorRequiredMocks(isBase); Tile nullTile = null; var existingTile = new Tile(2, 2, 3, this._jpegImageData); - this._fsUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + this._fsUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); var fsSource = new FS(this._pathUtilsMock.Object, this._serviceProviderMock.Object, "test", batchSize, Grid.TwoXOne, GridOrigin.LOWER_LEFT, isBase); var cords = new Coord(z, x, y); - Assert.AreEqual(expectedNull ? null : existingTile, fsSource.GetCorrespondingTile(cords, false)); - this._fsUtilsMock.Verify(util => util.GetTile(z, x, y), Times.Once); + Assert.AreEqual(expectedNull ? null : existingTile, fsSource.GetCorrespondingTile(cords, null, false)); + this._fsUtilsMock.Verify(util => util.GetTile(z, x, y, null), Times.Once); this.VerifyAll(); } @@ -243,8 +245,8 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en { this._fsUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z == 2 ? existingTile : nullTile); } if (cords.Z == 2) { @@ -258,14 +260,14 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en { this._fsUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); } Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; var fsSource = new FS(this._pathUtilsMock.Object, this._serviceProviderMock.Object, "test", 10, grid, origin, isBase); - var res = fsSource.GetCorrespondingTile(cords, enableUpscale); + var res = fsSource.GetCorrespondingTile(cords, null, enableUpscale); if (expectedNull) { Assert.IsNull(res); @@ -285,7 +287,7 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(cords.Z, cords.X, cords.Y)); if (cords.Z != 0) { - this._fsUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y)), Times.Once); + this._fsUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y), null), Times.Once); } if (cords.Z == 2) { @@ -294,7 +296,7 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en } else { - this._fsUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y)); + this._fsUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y, null)); } this.VerifyAll(); } @@ -347,7 +349,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._fsUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3))) + .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3), null)) .Returns(nullTile); } @@ -360,7 +362,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._fsUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(5, 2, 3)) + .Setup(utils => utils.GetTile(5, 2, 3, null)) .Returns(nullTile); } if (origin != GridOrigin.LOWER_LEFT) @@ -375,7 +377,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._fsUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(i == 4 ? tile : nullTile); } if (isOneXOne) @@ -392,7 +394,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri var expectedTile = isValidConversion ? tile : null; var expectedCallsAfterConversion = isValidConversion ? Times.Once() : Times.Never(); - Assert.AreEqual(expectedTile, fsSource.GetCorrespondingTile(upscaleCords, true)); + Assert.AreEqual(expectedTile, fsSource.GetCorrespondingTile(upscaleCords, null, true)); if (origin != GridOrigin.LOWER_LEFT) { this._geoUtilsMock.Verify(utils => utils.FlipY(5, 3), Times.Once); @@ -401,12 +403,12 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(5, 2, 3), Times.Once); - this._fsUtilsMock.Verify(utils => utils.GetTile(It.IsAny()), expectedCallsAfterConversion); + this._fsUtilsMock.Verify(utils => utils.GetTile(It.IsAny(), null), expectedCallsAfterConversion); this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(It.IsAny()), Times.Once); } else { - this._fsUtilsMock.Verify(utils => utils.GetTile(5, 2, 3), Times.Once); + this._fsUtilsMock.Verify(utils => utils.GetTile(5, 2, 3, null), Times.Once); } if (isOneXOne) { @@ -414,11 +416,11 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri } - this._fsUtilsMock.Verify(utils => utils.GetTile(4, 1, 1), expectedCallsAfterConversion); - this._fsUtilsMock.Verify(utils => utils.GetTile(3, 0, 0), expectedCallsAfterConversion); - this._fsUtilsMock.Verify(utils => utils.GetTile(2, 0, 0), expectedCallsAfterConversion); - this._fsUtilsMock.Verify(utils => utils.GetTile(1, 0, 0), expectedCallsAfterConversion); - this._fsUtilsMock.Verify(utils => utils.GetTile(0, 0, 0), expectedCallsAfterConversion); + this._fsUtilsMock.Verify(utils => utils.GetTile(4, 1, 1, null), expectedCallsAfterConversion); + this._fsUtilsMock.Verify(utils => utils.GetTile(3, 0, 0, null), expectedCallsAfterConversion); + this._fsUtilsMock.Verify(utils => utils.GetTile(2, 0, 0, null), expectedCallsAfterConversion); + this._fsUtilsMock.Verify(utils => utils.GetTile(1, 0, 0, null), expectedCallsAfterConversion); + this._fsUtilsMock.Verify(utils => utils.GetTile(0, 0, 0, null), expectedCallsAfterConversion); this.VerifyAll(); } @@ -788,8 +790,8 @@ public void GetNextBatch(bool isOneXOne, bool isBase, GridOrigin origin, int bat }); this._fsUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(c => tiles[c.Z]); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((c, format) => tiles[c.Z]); if (tile != null) { if (isOneXOne) @@ -825,7 +827,7 @@ public void GetNextBatch(bool isOneXOne, bool isBase, GridOrigin origin, int bat foreach (var tile in tileBatches[i]) { this._pathUtilsMock.Verify(utils => utils.FromPath(It.IsRegex($"^{tile.Z}\\.(png|jpg)$"), false), Times.Once); - this._fsUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == tile.Z && c.X == tile.X && c.Y == tile.Y))); + this._fsUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == tile.Z && c.X == tile.X && c.Y == tile.Y), null)); if (origin == GridOrigin.UPPER_LEFT) { this._geoUtilsMock.Verify(converter => converter.FlipY(tile), Times.Once); @@ -945,7 +947,7 @@ private void SetupGetTiles(bool isBase, bool isOneXOne, GridOrigin origin) .Setup(utils => utils.FromPath(It.IsAny(), false)) .Returns(new Coord(0, 0, 0)); this._fsUtilsMock - .Setup(utils => utils.GetTile(It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); if (origin != GridOrigin.LOWER_LEFT) { diff --git a/MergerLogicUnitTests/DataTypes/GpkgTest.cs b/MergerLogicUnitTests/DataTypes/GpkgTest.cs index 814fa62c..093ef940 100644 --- a/MergerLogicUnitTests/DataTypes/GpkgTest.cs +++ b/MergerLogicUnitTests/DataTypes/GpkgTest.cs @@ -1,6 +1,7 @@ using MergerLogic.Batching; using MergerLogic.Clients; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; using MergerLogic.Monitoring.Metrics; using MergerLogic.Utils; using MergerLogicUnitTests.testUtils; @@ -113,8 +114,8 @@ public void TileExists(bool isBase, Coord cords, bool isOneXOne, GridOrigin orig { this._gpkgUtilsMock .InSequence(seq) - .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2); + .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2); } var gpkg = new Gpkg(this._configurationManagerMock.Object, @@ -124,14 +125,14 @@ public void TileExists(bool isBase, Coord cords, bool isOneXOne, GridOrigin orig var expected = cords.Z == 2; if (useCoords) { - Assert.AreEqual(expected, gpkg.TileExists(cords)); + Assert.AreEqual(expected, gpkg.TileExists(cords, null)); } else { var tile = new Tile(cords, this._jpegImageData); - Assert.AreEqual(expected, gpkg.TileExists(tile)); + Assert.AreEqual(expected, gpkg.TileExists(tile, null)); } - this._gpkgUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y), + this._gpkgUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y, null), cords.Z != 0 || !isOneXOne ? Times.Once : Times.Never); @@ -165,16 +166,16 @@ public void GetCorrespondingTileWithoutUpscaleWithoutConversion(int batchSize, b this.SetupRequiredBaseMocks(isBase, false, extent); Tile nullTile = null; var existingTile = new Tile(2, 2, 3, this._jpegImageData); - this._gpkgUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + this._gpkgUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); var gpkg = new Gpkg(this._configurationManagerMock.Object, this._serviceProviderMock.Object, "test.gpkg", batchSize, Grid.TwoXOne, GridOrigin.LOWER_LEFT, isBase, extent); var cords = new Coord(z, x, y); - Assert.AreEqual(expectedNull ? null : existingTile, gpkg.GetCorrespondingTile(cords, false)); - this._gpkgUtilsMock.Verify(util => util.GetTile(z, x, y), Times.Once); + Assert.AreEqual(expectedNull ? null : existingTile, gpkg.GetCorrespondingTile(cords, null, false)); + this._gpkgUtilsMock.Verify(util => util.GetTile(z, x, y, null), Times.Once); this.VerifyAll(); } @@ -240,8 +241,8 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en { this._gpkgUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z == 2 ? existingTile : nullTile); } if (cords.Z == 2) { @@ -255,15 +256,15 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en { this._gpkgUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); } var gpkg = new Gpkg(this._configurationManagerMock.Object, this._serviceProviderMock.Object, "test.gpkg", 10, grid, origin, isBase, extent); - var res = gpkg.GetCorrespondingTile(cords, enableUpscale); + var res = gpkg.GetCorrespondingTile(cords, null, enableUpscale); if (expectedNull) { Assert.IsNull(res); @@ -283,7 +284,7 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(cords.Z, cords.X, cords.Y)); if (cords.Z != 0) { - this._gpkgUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y)), Times.Once); + this._gpkgUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y), null), Times.Once); } if (cords.Z == 2) { @@ -292,7 +293,7 @@ public void GetCorrespondingTileWithoutUpscale(bool isBase, Coord cords, bool en } else { - this._gpkgUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y)); + this._gpkgUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y, null)); } this.VerifyAll(); } @@ -348,7 +349,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._gpkgUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3))) + .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3), null)) .Returns(nullTile); } @@ -360,7 +361,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._gpkgUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(5, 2, 3)) + .Setup(utils => utils.GetTile(5, 2, 3, null)) .Returns(nullTile); } if (origin != GridOrigin.LOWER_LEFT) @@ -389,7 +390,7 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri var upscaleCords = new Coord(5, 2, 3); var expectedTile = isValidConversion ? tile : null; - Assert.AreEqual(expectedTile, gpkg.GetCorrespondingTile(upscaleCords, true)); + Assert.AreEqual(expectedTile, gpkg.GetCorrespondingTile(upscaleCords, null, true)); if (origin != GridOrigin.LOWER_LEFT) { this._geoUtilsMock.Verify(utils => utils.FlipY(5, 3), Times.Once); @@ -398,12 +399,12 @@ public void GetCorrespondingTileWithUpscale(bool isBase, bool isOneXOne, GridOri { this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(5, 2, 3), Times.Once); - this._gpkgUtilsMock.Verify(utils => utils.GetTile(It.IsAny()), isValidConversion ? Times.Once : Times.Never); + this._gpkgUtilsMock.Verify(utils => utils.GetTile(It.IsAny(), null), isValidConversion ? Times.Once : Times.Never); this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(It.IsAny()), Times.Once); } else { - this._gpkgUtilsMock.Verify(utils => utils.GetTile(5, 2, 3), Times.Once); + this._gpkgUtilsMock.Verify(utils => utils.GetTile(5, 2, 3, null), Times.Once); } this._gpkgUtilsMock.Verify(utils => utils.GetLastTile(new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }, upscaleCords.Z), isValidConversion ? Times.Once : Times.Never); diff --git a/MergerLogicUnitTests/DataTypes/S3Test.cs b/MergerLogicUnitTests/DataTypes/S3Test.cs index 50b286bf..2c0ec486 100644 --- a/MergerLogicUnitTests/DataTypes/S3Test.cs +++ b/MergerLogicUnitTests/DataTypes/S3Test.cs @@ -3,6 +3,7 @@ using MergerLogic.Batching; using MergerLogic.Clients; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; using MergerLogic.Monitoring.Metrics; using MergerLogic.Utils; using MergerLogicUnitTests.testUtils; @@ -97,6 +98,7 @@ public static IEnumerable GenTileExistsParams() new Coord(0,2,3) //invalid conversion tile }, //cords + new object[] { TileFormat.Jpeg, TileFormat.Png }, //target format new object[] { true, false }, //is one on one new object[] { GridOrigin.LOWER_LEFT, GridOrigin.UPPER_LEFT }, //origin new object[] { true, false } // use cords @@ -106,7 +108,7 @@ public static IEnumerable GenTileExistsParams() [TestMethod] [TestCategory("TileExists")] [DynamicData(nameof(GenTileExistsParams), DynamicDataSourceType.Method)] - public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useCoords) + public void TileExists(Coord cords, TileFormat format, bool isOneXOne, GridOrigin origin, bool useCoords) { var seq = new MockSequence(); this.SetupConstructorRequiredMocks(true, seq); @@ -129,8 +131,8 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC { this._s3UtilsMock .InSequence(seq) - .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2); + .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns((z, x, y, format) => z == 2); } Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; @@ -140,15 +142,15 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC var expected = cords.Z == 2; if (useCoords) { - Assert.AreEqual(expected, s3Source.TileExists(cords)); + Assert.AreEqual(expected, s3Source.TileExists(cords, format)); } else { var tile = new Tile(cords, this._jpegImageData); - Assert.AreEqual(expected, s3Source.TileExists(tile)); + Assert.AreEqual(expected, s3Source.TileExists(tile, format)); } - this._s3UtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y), + this._s3UtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y, format), cords.Z != 0 || !isOneXOne ? Times.Once : Times.Never); @@ -182,14 +184,14 @@ public void GetCorrespondingTileWithoutUpscaleWithoutConversion(int batchSize, i var existingTile = new Tile(2, 2, 3, this._jpegImageData); this.SetupConstructorRequiredMocks(); - this._s3UtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + this._s3UtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); var s3Source = new S3(this._pathUtilsMock.Object, this._serviceProviderMock.Object, "test", batchSize, Grid.TwoXOne, GridOrigin.LOWER_LEFT, false); var cords = new Coord(z, x, y); - Assert.AreEqual(expectedNull ? null : existingTile, s3Source.GetCorrespondingTile(cords, false)); - this._s3UtilsMock.Verify(util => util.GetTile(z, x, y), Times.Once); + Assert.AreEqual(expectedNull ? null : existingTile, s3Source.GetCorrespondingTile(cords, null, false)); + this._s3UtilsMock.Verify(util => util.GetTile(z, x, y, null), Times.Once); this.VerifyAll(); } @@ -250,8 +252,8 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._s3UtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z == 2 ? existingTile : nullTile); } if (cords.Z == 2) { @@ -265,15 +267,15 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._s3UtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); } Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; var s3Source = new S3(this._pathUtilsMock.Object, this._serviceProviderMock.Object, "test", 10, grid, origin, false); - var res = s3Source.GetCorrespondingTile(cords, enableUpscale); + var res = s3Source.GetCorrespondingTile(cords, null, enableUpscale); if (expectedNull) { Assert.IsNull(res); @@ -293,7 +295,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(cords.Z, cords.X, cords.Y)); if (cords.Z != 0) { - this._s3UtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y)), Times.Once); + this._s3UtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y), null), Times.Once); } if (cords.Z == 2) { @@ -302,7 +304,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, } else { - this._s3UtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y)); + this._s3UtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y, null)); } this.VerifyAll(); } @@ -353,7 +355,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._s3UtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3))) + .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3), null)) .Returns(nullTile); } @@ -365,7 +367,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._s3UtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(5, 2, 3)) + .Setup(utils => utils.GetTile(5, 2, 3, null)) .Returns(nullTile); } if (origin != GridOrigin.LOWER_LEFT) @@ -380,7 +382,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._s3UtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(i == 4 ? tile : nullTile); } if (isOneXOne) @@ -398,7 +400,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b var expectedTile = isValidConversion ? tile : null; var expectedCallsAfterConversion = isValidConversion ? Times.Once() : Times.Never(); - Assert.AreEqual(expectedTile, fsSource.GetCorrespondingTile(upscaleCords, true)); + Assert.AreEqual(expectedTile, fsSource.GetCorrespondingTile(upscaleCords, null, true)); if (origin != GridOrigin.LOWER_LEFT) { this._geoUtilsMock.Verify(utils => utils.FlipY(5, 3), Times.Once); @@ -407,23 +409,23 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(5, 2, 3), Times.Once); - this._s3UtilsMock.Verify(utils => utils.GetTile(It.IsAny()), expectedCallsAfterConversion); + this._s3UtilsMock.Verify(utils => utils.GetTile(It.IsAny(), null), expectedCallsAfterConversion); this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(It.IsAny()), Times.Once); } else { - this._s3UtilsMock.Verify(utils => utils.GetTile(5, 2, 3), Times.Once); + this._s3UtilsMock.Verify(utils => utils.GetTile(5, 2, 3, null), Times.Once); } if (isOneXOne) { this._oneXOneConvertorMock.Verify(converter => converter.ToTwoXOne(tile), expectedCallsAfterConversion); } - this._s3UtilsMock.Verify(utils => utils.GetTile(4, 1, 1), expectedCallsAfterConversion); - this._s3UtilsMock.Verify(utils => utils.GetTile(3, 0, 0), expectedCallsAfterConversion); - this._s3UtilsMock.Verify(utils => utils.GetTile(2, 0, 0), expectedCallsAfterConversion); - this._s3UtilsMock.Verify(utils => utils.GetTile(1, 0, 0), expectedCallsAfterConversion); - this._s3UtilsMock.Verify(utils => utils.GetTile(0, 0, 0), expectedCallsAfterConversion); + this._s3UtilsMock.Verify(utils => utils.GetTile(4, 1, 1, null), expectedCallsAfterConversion); + this._s3UtilsMock.Verify(utils => utils.GetTile(3, 0, 0, null), expectedCallsAfterConversion); + this._s3UtilsMock.Verify(utils => utils.GetTile(2, 0, 0, null), expectedCallsAfterConversion); + this._s3UtilsMock.Verify(utils => utils.GetTile(1, 0, 0, null), expectedCallsAfterConversion); + this._s3UtilsMock.Verify(utils => utils.GetTile(0, 0, 0, null), expectedCallsAfterConversion); this.VerifyAll(); } diff --git a/MergerLogicUnitTests/DataTypes/TMSTest.cs b/MergerLogicUnitTests/DataTypes/TMSTest.cs index 17b3ce3f..40dff28d 100644 --- a/MergerLogicUnitTests/DataTypes/TMSTest.cs +++ b/MergerLogicUnitTests/DataTypes/TMSTest.cs @@ -12,6 +12,7 @@ using System.IO; using System.IO.Abstractions; using System.Linq; +using MergerLogic.ImageProcessing; namespace MergerLogicUnitTests.DataTypes { @@ -110,8 +111,8 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2); + .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Returns((z, x, y, format) => z == 2); } var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; @@ -121,14 +122,14 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC var expected = cords.Z == 2; if (useCoords) { - Assert.AreEqual(expected, tmsSource.TileExists(cords)); + Assert.AreEqual(expected, tmsSource.TileExists(cords, null)); } else { var tile = new Tile(cords, this._jpegImageData); - Assert.AreEqual(expected, tmsSource.TileExists(tile)); + Assert.AreEqual(expected, tmsSource.TileExists(tile, null)); } - this._httpUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y), + this._httpUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y, null), cords.Z != 0 || !isOneXOne ? Times.Once : Times.Never); @@ -160,15 +161,15 @@ public void GetCorrespondingTileWithoutUpscaleWithoutConversion(int batchSize, i this.SetupConstructorRequiredMocks(); Tile nullTile = null; var existingTile = new Tile(2, 2, 3, this._jpegImageData); - this._httpUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + this._httpUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; var tmsSource = new TMS(this._serviceProviderMock.Object, "test", batchSize, extent, Grid.TwoXOne, GridOrigin.LOWER_LEFT, 21, 0); var cords = new Coord(z, x, y); - Assert.AreEqual(expectedNull ? null : existingTile, tmsSource.GetCorrespondingTile(cords, false)); - this._httpUtilsMock.Verify(util => util.GetTile(z, x, y), Times.Once); + Assert.AreEqual(expectedNull ? null : existingTile, tmsSource.GetCorrespondingTile(cords, null, false)); + this._httpUtilsMock.Verify(util => util.GetTile(z, x, y, null), Times.Once); this.VerifyAll(); } @@ -228,8 +229,8 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z == 2 ? existingTile : nullTile); } if (cords.Z == 2) { @@ -243,15 +244,15 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); } var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; var tmsSource = new TMS(this._serviceProviderMock.Object, "test", 10, extent, grid, origin, 21, 0); - var res = tmsSource.GetCorrespondingTile(cords, enableUpscale); + var res = tmsSource.GetCorrespondingTile(cords, null, enableUpscale); if (expectedNull) { Assert.IsNull(res); @@ -271,7 +272,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(cords.Z, cords.X, cords.Y)); if (cords.Z != 0) { - this._httpUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y)), Times.Once); + this._httpUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y), null), Times.Once); } if (cords.Z == 2) { @@ -280,7 +281,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y)); + this._httpUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y, null)); } this.VerifyAll(); } @@ -332,7 +333,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3))) + .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3), null)) .Returns(nullTile); } @@ -344,7 +345,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(5, 2, 3)) + .Setup(utils => utils.GetTile(5, 2, 3, null)) .Returns(nullTile); } if (origin != GridOrigin.LOWER_LEFT) @@ -359,7 +360,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(i == 4 ? tile : nullTile); } if (isOneXOne) @@ -377,7 +378,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b var expectedTile = isValidConversion ? tile : null; var expectedCallsAfterConversion = isValidConversion ? Times.Once() : Times.Never(); - Assert.AreEqual(expectedTile, tmsSource.GetCorrespondingTile(upscaleCords, true)); + Assert.AreEqual(expectedTile, tmsSource.GetCorrespondingTile(upscaleCords, null, true)); if (origin != GridOrigin.LOWER_LEFT) { this._geoUtilsMock.Verify(utils => utils.FlipY(5, 3), Times.Once); @@ -386,12 +387,12 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(5, 2, 3), Times.Once); - this._httpUtilsMock.Verify(utils => utils.GetTile(It.IsAny()), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(It.IsAny(), null), expectedCallsAfterConversion); this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(It.IsAny()), Times.Once); } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(5, 2, 3), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(5, 2, 3, null), Times.Once); } if (isOneXOne) { @@ -399,11 +400,11 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b } - this._httpUtilsMock.Verify(utils => utils.GetTile(4, 1, 1), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(3, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(2, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(1, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(0, 0, 0), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(4, 1, 1, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(3, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(2, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(1, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(0, 0, 0, null), expectedCallsAfterConversion); this.VerifyAll(); } @@ -581,7 +582,7 @@ public void Reset(bool isOneXOne, GridOrigin origin, int batchSize) .Setup(converter => converter.ToTwoXOne(It.IsAny())) .Returns(t => t); this._httpUtilsMock - .Setup(utils => utils.GetTile(It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); this._oneXOneConvertorMock .Setup(converter => converter.TryFromTwoXOne(It.IsAny(), It.IsAny(), It.IsAny())) @@ -590,7 +591,7 @@ public void Reset(bool isOneXOne, GridOrigin origin, int batchSize) else { this._httpUtilsMock - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); } @@ -666,8 +667,8 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z < tiles.Length ? tiles[cords.Z] : null); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z < tiles.Length ? tiles[cords.Z] : null); if (i != 2) { this._oneXOneConvertorMock @@ -681,8 +682,8 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z < tiles.Length ? tiles[z] : null); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z < tiles.Length ? tiles[z] : null); } } @@ -712,7 +713,7 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(1, 0, 0), Times.Once); if (i != 0) { - this._httpUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == i && c.X == 0 && c.Y == 0)), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == i && c.X == 0 && c.Y == 0), null), Times.Once); if (i != 2) { this._oneXOneConvertorMock.Verify(converter => @@ -722,7 +723,7 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(i, 0, 0), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(i, 0, 0, null), Times.Once); } } diff --git a/MergerLogicUnitTests/DataTypes/WMTSTest.cs b/MergerLogicUnitTests/DataTypes/WMTSTest.cs index 1b4ef6c0..f28c6f74 100644 --- a/MergerLogicUnitTests/DataTypes/WMTSTest.cs +++ b/MergerLogicUnitTests/DataTypes/WMTSTest.cs @@ -1,6 +1,7 @@ using MergerLogic.Batching; using MergerLogic.Clients; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; using MergerLogic.Monitoring.Metrics; using MergerLogic.Utils; using MergerLogicUnitTests.testUtils; @@ -111,8 +112,8 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2); + .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2); } var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; @@ -122,14 +123,14 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC var expected = cords.Z == 2; if (useCoords) { - Assert.AreEqual(expected, wmtsSource.TileExists(cords)); + Assert.AreEqual(expected, wmtsSource.TileExists(cords, null)); } else { var tile = new Tile(cords, this._jpegImageData); - Assert.AreEqual(expected, wmtsSource.TileExists(tile)); + Assert.AreEqual(expected, wmtsSource.TileExists(tile, null)); } - this._httpUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y), + this._httpUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y, null), cords.Z != 0 || !isOneXOne ? Times.Once : Times.Never); @@ -161,15 +162,15 @@ public void GetCorrespondingTileWithoutUpscaleWithoutConversion(int batchSize, i this.SetupConstructorRequiredMocks(); Tile nullTile = null; var existingTile = new Tile(2, 2, 3, this._jpegImageData); - this._httpUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + this._httpUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; var wmtsSource = new WMTS(this._serviceProviderMock.Object, "test", batchSize, extent, Grid.TwoXOne, GridOrigin.LOWER_LEFT, 21, 0); var cords = new Coord(z, x, y); - Assert.AreEqual(expectedNull ? null : existingTile, wmtsSource.GetCorrespondingTile(cords, false)); - this._httpUtilsMock.Verify(util => util.GetTile(z, x, y), Times.Once); + Assert.AreEqual(expectedNull ? null : existingTile, wmtsSource.GetCorrespondingTile(cords, null, false)); + this._httpUtilsMock.Verify(util => util.GetTile(z, x, y, null), Times.Once); this.VerifyAll(); } @@ -230,8 +231,8 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z == 2 ? existingTile : nullTile); } if (cords.Z == 2) { @@ -245,15 +246,15 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); } var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; var wmtsSource = new WMTS(this._serviceProviderMock.Object, "test", 10, extent, grid, origin, 21, 0); - var res = wmtsSource.GetCorrespondingTile(cords, enableUpscale); + var res = wmtsSource.GetCorrespondingTile(cords, null, enableUpscale); if (expectedNull) { Assert.IsNull(res); @@ -273,7 +274,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(cords.Z, cords.X, cords.Y)); if (cords.Z != 0) { - this._httpUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y)), Times.Once); + this._httpUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y), null), Times.Once); } if (cords.Z == 2) { @@ -282,7 +283,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y)); + this._httpUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y, null)); } this.VerifyAll(); } @@ -334,7 +335,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3))) + .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3), null)) .Returns(nullTile); } @@ -346,7 +347,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(5, 2, 3)) + .Setup(utils => utils.GetTile(5, 2, 3, null)) .Returns(nullTile); } if (origin != GridOrigin.LOWER_LEFT) @@ -361,7 +362,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(i == 4 ? tile : nullTile); } if (isOneXOne) @@ -379,7 +380,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b var expectedTile = isValidConversion ? tile : null; var expectedCallsAfterConversion = isValidConversion ? Times.Once() : Times.Never(); - Assert.AreEqual(expectedTile, wmtsSource.GetCorrespondingTile(upscaleCords, true)); + Assert.AreEqual(expectedTile, wmtsSource.GetCorrespondingTile(upscaleCords, null, true)); if (origin != GridOrigin.LOWER_LEFT) { this._geoUtilsMock.Verify(utils => utils.FlipY(5, 3), Times.Once); @@ -388,12 +389,12 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(5, 2, 3), Times.Once); - this._httpUtilsMock.Verify(utils => utils.GetTile(It.IsAny()), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(It.IsAny(), null), expectedCallsAfterConversion); this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(It.IsAny()), Times.Once); } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(5, 2, 3), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(5, 2, 3, null), Times.Once); } if (isOneXOne) { @@ -401,11 +402,11 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b } - this._httpUtilsMock.Verify(utils => utils.GetTile(4, 1, 1), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(3, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(2, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(1, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(0, 0, 0), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(4, 1, 1, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(3, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(2, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(1, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(0, 0, 0, null), expectedCallsAfterConversion); this.VerifyAll(); } @@ -583,7 +584,7 @@ public void Reset(bool isOneXOne, GridOrigin origin, int batchSize) .Setup(converter => converter.ToTwoXOne(It.IsAny())) .Returns(t => t); this._httpUtilsMock - .Setup(utils => utils.GetTile(It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); this._oneXOneConvertorMock .Setup(converter => converter.TryFromTwoXOne(It.IsAny(), It.IsAny(), It.IsAny())) @@ -592,7 +593,7 @@ public void Reset(bool isOneXOne, GridOrigin origin, int batchSize) else { this._httpUtilsMock - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); } @@ -668,8 +669,8 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z < tiles.Length ? tiles[cords.Z] : null); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z < tiles.Length ? tiles[cords.Z] : null); if (i != 2) { this._oneXOneConvertorMock @@ -683,8 +684,8 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z < tiles.Length ? tiles[z] : null); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z < tiles.Length ? tiles[z] : null); } } @@ -714,7 +715,7 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(1, 0, 0), Times.Once); if (i != 0) { - this._httpUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == i && c.X == 0 && c.Y == 0)), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == i && c.X == 0 && c.Y == 0), null), Times.Once); if (i != 2) { this._oneXOneConvertorMock.Verify(converter => @@ -724,7 +725,7 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(i, 0, 0), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(i, 0, 0, null), Times.Once); } } diff --git a/MergerLogicUnitTests/DataTypes/XYZTest.cs b/MergerLogicUnitTests/DataTypes/XYZTest.cs index 90b17957..c9633726 100644 --- a/MergerLogicUnitTests/DataTypes/XYZTest.cs +++ b/MergerLogicUnitTests/DataTypes/XYZTest.cs @@ -1,6 +1,7 @@ using MergerLogic.Batching; using MergerLogic.Clients; using MergerLogic.DataTypes; +using MergerLogic.ImageProcessing; using MergerLogic.Monitoring.Metrics; using MergerLogic.Utils; using MergerLogicUnitTests.testUtils; @@ -77,7 +78,6 @@ public static IEnumerable GenTileExistsParams() new Coord(2,2,3), //existing tile new Coord(1,2,3), //missing tile new Coord(0,2,3) //invalid conversion tile - }, //cords new object[] { true, false }, //is one on one new object[] { GridOrigin.LOWER_LEFT, GridOrigin.UPPER_LEFT }, //origin @@ -110,8 +110,8 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2); + .Setup(utils => utils.TileExists(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2); } var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; @@ -121,14 +121,14 @@ public void TileExists(Coord cords, bool isOneXOne, GridOrigin origin, bool useC var expected = cords.Z == 2; if (useCoords) { - Assert.AreEqual(expected, xyzSource.TileExists(cords)); + Assert.AreEqual(expected, xyzSource.TileExists(cords, null)); } else { var tile = new Tile(cords, this._jpegImageData); - Assert.AreEqual(expected, xyzSource.TileExists(tile)); + Assert.AreEqual(expected, xyzSource.TileExists(tile, null)); } - this._httpUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y), + this._httpUtilsMock.Verify(util => util.TileExists(cords.Z, cords.X, cords.Y, null), cords.Z != 0 || !isOneXOne ? Times.Once : Times.Never); @@ -160,15 +160,15 @@ public void GetCorrespondingTileWithoutUpscaleWithoutConversion(int batchSize, i this.SetupConstructorRequiredMocks(); Tile nullTile = null; var existingTile = new Tile(2, 2, 3, this._jpegImageData); - this._httpUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + this._httpUtilsMock.Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; var xyzSource = new XYZ(this._serviceProviderMock.Object, "test", batchSize, extent, Grid.TwoXOne, GridOrigin.LOWER_LEFT, 21, 0); var cords = new Coord(z, x, y); - Assert.AreEqual(expectedNull ? null : existingTile, xyzSource.GetCorrespondingTile(cords, false)); - this._httpUtilsMock.Verify(util => util.GetTile(z, x, y), Times.Once); + Assert.AreEqual(expectedNull ? null : existingTile, xyzSource.GetCorrespondingTile(cords, null, false)); + this._httpUtilsMock.Verify(util => util.GetTile(z, x, y, null), Times.Once); this.VerifyAll(); } @@ -229,8 +229,8 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z == 2 ? existingTile : nullTile); } if (cords.Z == 2) { @@ -244,15 +244,15 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z == 2 ? existingTile : nullTile); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z == 2 ? existingTile : nullTile); } var extent = new Extent() { MinX = -180, MinY = -90, MaxX = 180, MaxY = 90 }; Grid grid = isOneXOne ? Grid.OneXOne : Grid.TwoXOne; var xyzSource = new XYZ(this._serviceProviderMock.Object, "test", 10, extent, grid, origin, 21, 0); - var res = xyzSource.GetCorrespondingTile(cords, enableUpscale); + var res = xyzSource.GetCorrespondingTile(cords, null, enableUpscale); if (expectedNull) { Assert.IsNull(res); @@ -272,7 +272,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(cords.Z, cords.X, cords.Y)); if (cords.Z != 0) { - this._httpUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y)), Times.Once); + this._httpUtilsMock.Verify(util => util.GetTile(It.Is(C => C.Z == cords.Z && C.X == cords.X && C.Y == cords.Y), null), Times.Once); } if (cords.Z == 2) { @@ -281,7 +281,7 @@ public void GetCorrespondingTileWithoutUpscale(Coord cords, bool enableUpscale, } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y)); + this._httpUtilsMock.Verify(utils => utils.GetTile(cords.Z, cords.X, cords.Y, null)); } this.VerifyAll(); } @@ -333,7 +333,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3))) + .Setup(utils => utils.GetTile(It.Is(c => c.Z == 5 && c.X == 2 && c.Y == 3), null)) .Returns(nullTile); } @@ -345,7 +345,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(5, 2, 3)) + .Setup(utils => utils.GetTile(5, 2, 3, null)) .Returns(nullTile); } if (origin != GridOrigin.LOWER_LEFT) @@ -360,7 +360,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._httpUtilsMock .InSequence(sequence) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(i == 4 ? tile : nullTile); } if (isOneXOne) @@ -378,7 +378,7 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b var expectedTile = isValidConversion ? tile : null; var expectedCallsAfterConversion = isValidConversion ? Times.Once() : Times.Never(); - Assert.AreEqual(expectedTile, xyzSource.GetCorrespondingTile(upscaleCords, true)); + Assert.AreEqual(expectedTile, xyzSource.GetCorrespondingTile(upscaleCords, null, true)); if (origin != GridOrigin.LOWER_LEFT) { this._geoUtilsMock.Verify(utils => utils.FlipY(5, 3), Times.Once); @@ -387,12 +387,12 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b { this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(5, 2, 3), Times.Once); - this._httpUtilsMock.Verify(utils => utils.GetTile(It.IsAny()), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(It.IsAny(), null), expectedCallsAfterConversion); this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(It.IsAny()), Times.Once); } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(5, 2, 3), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(5, 2, 3, null), Times.Once); } if (isOneXOne) { @@ -400,11 +400,11 @@ public void GetCorrespondingTileWithUpscale(bool isOneXOne, GridOrigin origin, b } - this._httpUtilsMock.Verify(utils => utils.GetTile(4, 1, 1), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(3, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(2, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(1, 0, 0), expectedCallsAfterConversion); - this._httpUtilsMock.Verify(utils => utils.GetTile(0, 0, 0), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(4, 1, 1, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(3, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(2, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(1, 0, 0, null), expectedCallsAfterConversion); + this._httpUtilsMock.Verify(utils => utils.GetTile(0, 0, 0, null), expectedCallsAfterConversion); this.VerifyAll(); } @@ -582,7 +582,7 @@ public void Reset(bool isOneXOne, GridOrigin origin, int batchSize) .Setup(converter => converter.ToTwoXOne(It.IsAny())) .Returns(t => t); this._httpUtilsMock - .Setup(utils => utils.GetTile(It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); this._oneXOneConvertorMock .Setup(converter => converter.TryFromTwoXOne(It.IsAny(), It.IsAny(), It.IsAny())) @@ -591,7 +591,7 @@ public void Reset(bool isOneXOne, GridOrigin origin, int batchSize) else { this._httpUtilsMock - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) .Returns(new Tile(0, 0, 0, this._jpegImageData)); } @@ -667,8 +667,8 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny())) - .Returns(cords => cords.Z < tiles.Length ? tiles[cords.Z] : null); + .Setup(utils => utils.GetTile(It.IsAny(), null)) + .Returns((cords, format) => cords.Z < tiles.Length ? tiles[cords.Z] : null); if (i != 2) { this._oneXOneConvertorMock @@ -682,8 +682,8 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) { this._httpUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns((z, x, y) => z < tiles.Length ? tiles[z] : null); + .Setup(utils => utils.GetTile(It.IsAny(), It.IsAny(), It.IsAny(), null)) + .Returns((z, x, y, format) => z < tiles.Length ? tiles[z] : null); } } @@ -713,7 +713,7 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) this._oneXOneConvertorMock.Verify(converter => converter.TryFromTwoXOne(1, 0, 0), Times.Once); if (i != 0) { - this._httpUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == i && c.X == 0 && c.Y == 0)), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(It.Is(c => c.Z == i && c.X == 0 && c.Y == 0), null), Times.Once); if (i != 2) { this._oneXOneConvertorMock.Verify(converter => @@ -723,7 +723,7 @@ public void GetNextBatch(bool isOneXOne, GridOrigin origin, int batchSize) } else { - this._httpUtilsMock.Verify(utils => utils.GetTile(i, 0, 0), Times.Once); + this._httpUtilsMock.Verify(utils => utils.GetTile(i, 0, 0, null), Times.Once); } } diff --git a/MergerLogicUnitTests/Utils/GpkgUtilsTest.cs b/MergerLogicUnitTests/Utils/GpkgUtilsTest.cs index dc5ff40b..5dcb0d67 100644 --- a/MergerLogicUnitTests/Utils/GpkgUtilsTest.cs +++ b/MergerLogicUnitTests/Utils/GpkgUtilsTest.cs @@ -82,7 +82,7 @@ public void GetTile(bool exist, bool useCoords) var gpkgUtils = new GpkgClient(path, this._timeUtilsMock.Object, this._loggerMock.Object, this._fileSystemMock.Object, this._geoUtilsMock.Object); - var res = useCoords ? gpkgUtils.GetTile(cords) : gpkgUtils.GetTile(cords.Z, cords.X, cords.Y); + var res = useCoords ? gpkgUtils.GetTile(cords, null) : gpkgUtils.GetTile(cords.Z, cords.X, cords.Y); if (!exist) { @@ -314,7 +314,7 @@ public void GetTileCount(int tileCount) for (int i = 0; i < tileCount; i++) { testTiles.Add(new Tile(0, i, 0, this._jpegImageData)); - }; + } using (var connection = new SQLiteConnection($"Data Source={path}")) { diff --git a/MergerLogicUnitTests/Utils/HttpSourceUtilsTest.cs b/MergerLogicUnitTests/Utils/HttpSourceUtilsTest.cs index bfc9faf4..dc305187 100644 --- a/MergerLogicUnitTests/Utils/HttpSourceUtilsTest.cs +++ b/MergerLogicUnitTests/Utils/HttpSourceUtilsTest.cs @@ -53,7 +53,7 @@ public void GetTile(bool useCoords, bool returnsNull) var httpSourceUtils = new HttpSourceClient("http://testPath", this._httpRequestUtilsMock.Object, this._pathPatternUtilsMock.Object, this._geoUtilsMock.Object); - var res = useCoords ? httpSourceUtils.GetTile(cords) : httpSourceUtils.GetTile(cords.Z, cords.X, cords.Y); + var res = useCoords ? httpSourceUtils.GetTile(cords, null) : httpSourceUtils.GetTile(cords.Z, cords.X, cords.Y); if (returnsNull) { Assert.IsNull(res); diff --git a/MergerLogicUnitTests/Utils/S3UtilsTest.cs b/MergerLogicUnitTests/Utils/S3UtilsTest.cs index b3e65ae1..f6957203 100644 --- a/MergerLogicUnitTests/Utils/S3UtilsTest.cs +++ b/MergerLogicUnitTests/Utils/S3UtilsTest.cs @@ -181,7 +181,7 @@ public void GetTile(bool exist, GetTileParamType paramType, TileFormat tileForma { this._pathUtilsMock .InSequence(seq) - .Setup(utils => utils.GetTilePath("test", 0, 0, 0, TileFormat.Jpeg, true)) + .Setup(utils => utils.GetTilePath("test", 0, 0, 0, tileFormat, true)) .Returns("key"); } @@ -201,7 +201,7 @@ public void GetTile(bool exist, GetTileParamType paramType, TileFormat tileForma else { this._s3ClientMock.Setup(s3 => s3.GetTile(It.IsAny(), It.IsAny(), - It.IsAny())).Returns(new Tile(cords, data)); + It.IsAny(), It.IsAny())).Returns(new Tile(cords, data)); } } else @@ -242,7 +242,7 @@ public void GetTile(bool exist, GetTileParamType paramType, TileFormat tileForma if (paramType != GetTileParamType.String) { this._s3ClientMock.Setup(s3 => s3.GetTile(It.IsAny(), It.IsAny(), - It.IsAny())).Returns(new Tile(cords, data)); + It.IsAny(), It.IsAny())).Returns(new Tile(cords, data)); } } else @@ -261,10 +261,10 @@ public void GetTile(bool exist, GetTileParamType paramType, TileFormat tileForma switch (paramType) { case GetTileParamType.Coord: - tile = s3Utils.GetTile(cords); + tile = s3Utils.GetTile(cords, tileFormat); break; case GetTileParamType.Ints: - tile = s3Utils.GetTile(cords.Z, cords.X, cords.Y); + tile = s3Utils.GetTile(cords.Z, cords.X, cords.Y, tileFormat); break; case GetTileParamType.String: tile = exist ? s3Utils.GetTile("key") : null; @@ -302,7 +302,7 @@ public void GetTile(bool exist, GetTileParamType paramType, TileFormat tileForma if (!exist) { this._pathUtilsMock.Verify(utils => utils.GetTilePath(It.IsAny(), It.IsAny(), It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny()), Times.Exactly(2)); + It.IsAny(), It.IsAny(), It.IsAny()), Times.Once()); } else { diff --git a/MergerService/Runners/TaskExecutor.cs b/MergerService/Runners/TaskExecutor.cs index 135b7e64..b4cd8580 100644 --- a/MergerService/Runners/TaskExecutor.cs +++ b/MergerService/Runners/TaskExecutor.cs @@ -100,7 +100,7 @@ public void ExecuteTask(MergeTask task, ITaskUtils taskUtils, string? managerCal this._logger.LogDebug($"[{methodName}] BuildDataList"); List sources = this.BuildDataList(metadata.Sources, this._batchMaxSize); - + IData target = sources[0]; target.IsNew = metadata.IsNewTarget; @@ -153,14 +153,14 @@ public void ExecuteTask(MergeTask task, ITaskUtils taskUtils, string? managerCal // Create tile builder list for current coord for all sources List correspondingTileBuilders = new List(); // Add target tile - correspondingTileBuilders.Add(() => sources[0].GetCorrespondingTile(coord, shouldUpscale)); - + correspondingTileBuilders.Add(() => sources[0].GetCorrespondingTile(coord, task.Parameters.TargetFormat, shouldUpscale)); + // Add all sources tiles this._logger.LogDebug($"[{methodName}] Get tile sources"); foreach (IData source in sources.Skip(1)) { // TODO: upscale = false - this is a temporary fix till we decide how sources should be upscaled - correspondingTileBuilders.Add(() => source.GetCorrespondingTile(coord, false)); + correspondingTileBuilders.Add(() => source.GetCorrespondingTile(coord, task.Parameters.TargetFormat, false)); } var tileMergeStopwatch = Stopwatch.StartNew(); Tile? tile = this._tileMerger.MergeTiles(correspondingTileBuilders, coord, strategy, metadata.IsNewTarget); @@ -223,7 +223,7 @@ public void ExecuteTask(MergeTask task, ITaskUtils taskUtils, string? managerCal this._logger.LogInformation($"[{methodName}] Validating merged data sources"); using (this._activitySource.StartActivity("validating tiles")) { - bool valid = this.Validate(target, bounds); + bool valid = this.Validate(target, bounds, task.Parameters.TargetFormat); if (!valid) { @@ -324,7 +324,7 @@ private void UpdateTargetTiles(IData target, List tiles, MergeTask task, l } } - private bool Validate(IData target, TileBounds bounds) + private bool Validate(IData target, TileBounds bounds, TileFormat? format) { string methodName = MethodBase.GetCurrentMethod().Name; int totalTileCount = (int)bounds.Size(); @@ -338,7 +338,7 @@ private bool Validate(IData target, TileBounds bounds) for (int y = bounds.MinY; y < bounds.MaxY; y++) { Coord coord = new Coord(bounds.Zoom, x, y); - if (target.TileExists(coord)) + if (target.TileExists(coord, format)) { ++tilesChecked; } diff --git a/MergerServiceUnitTests/Runners/TaskExecutorTest.cs b/MergerServiceUnitTests/Runners/TaskExecutorTest.cs index 5522ac56..db409990 100644 --- a/MergerServiceUnitTests/Runners/TaskExecutorTest.cs +++ b/MergerServiceUnitTests/Runners/TaskExecutorTest.cs @@ -19,221 +19,221 @@ namespace MergerLogicUnitTests.Utils { - [TestClass] - [TestCategory("unit")] - [TestCategory("runners")] - [DeploymentItem(@"../../../Runners/TestData")] - public class TaskExecutorTest + [TestClass] + [TestCategory("unit")] + [TestCategory("runners")] + [DeploymentItem(@"../../../Runners/TestData")] + public class TaskExecutorTest + { + #region mocks + + private MockRepository _mockRepository; + + private Mock _dataFactoryMock; + private Mock _timeUtilsMock; + private Mock _configurationManagerMock; + private Mock> _taskExecutorLoggerMock; + private Mock _metricsProviderMock; + private Mock _taskUtilsMock; + private Mock _tileScalerMock; + private Mock> _tileMergerLoggerMock; + + private ActivitySource _testActivitySource; + private ITileMerger _testTileMerger; + private IFileSystem _testFileSystem; + + #endregion + + public static IEnumerable GetSingleTileTestParameters() { - #region mocks - - private MockRepository _mockRepository; - - private Mock _dataFactoryMock; - private Mock _timeUtilsMock; - private Mock _configurationManagerMock; - private Mock> _taskExecutorLoggerMock; - private Mock _metricsProviderMock; - private Mock _taskUtilsMock; - private Mock _tileScalerMock; - private Mock> _tileMergerLoggerMock; - - private ActivitySource _testActivitySource; - private ITileMerger _testTileMerger; - private IFileSystem _testFileSystem; - - #endregion - - public static IEnumerable GetSingleTileTestParameters() - { - yield return new object[] { 1, true }; - yield return new object[] { 3, true }; - yield return new object[] { 54, true }; - yield return new object[] { 1, false }; - yield return new object[] { 5, false }; - yield return new object[] { 14, false }; - } - - [TestInitialize] - public void BeforeEach() - { - this._mockRepository = new MockRepository(MockBehavior.Loose); - - this._dataFactoryMock = this._mockRepository.Create(); - this._timeUtilsMock = this._mockRepository.Create(); - this._configurationManagerMock = this._mockRepository.Create(); - this._taskExecutorLoggerMock = this._mockRepository.Create>(); - this._metricsProviderMock = this._mockRepository.Create(); - this._taskUtilsMock = this._mockRepository.Create(); - this._tileScalerMock = this._mockRepository.Create(); - this._tileMergerLoggerMock = this._mockRepository.Create>(); - - this._testActivitySource = new ActivitySource("test"); - this._testTileMerger = new TileMerger(_tileScalerMock.Object, _tileMergerLoggerMock.Object); - this._testFileSystem = new FileSystem(); - } - - [TestMethod] - [DynamicData(nameof(GetSingleTileTestParameters), DynamicDataSourceType.Method)] - public void WhenGivenSourcesWithOneTile_ShouldWriteAllTilesToTarget(int numberOfSources, bool isTargetNew) - { - this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "batchMaxSize")).Returns(1); - this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "limitBatchSize")).Returns(true); - this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchMaxBytes")).Returns(1); - - var taskTargetTuple = this.SetupTestTask(numberOfSources, isTargetNew); - var testTask = taskTargetTuple.Item1; - var targetDataMock = taskTargetTuple.Item2; - var testSourceTiles = taskTargetTuple.Item3; - var resultWrittenTiles = new List(); - - var testTaskExecutor = new TaskExecutor(_dataFactoryMock.Object, _testTileMerger, _timeUtilsMock.Object, - _configurationManagerMock.Object, _taskExecutorLoggerMock.Object, _testActivitySource, _testFileSystem, - _metricsProviderMock.Object); - - targetDataMock.Setup(targetData => targetData.UpdateTiles(It.IsAny>())).Callback>( - resultWrittenTiles.AddRange - ); - - testTaskExecutor.ExecuteTask(testTask, _taskUtilsMock.Object, null); - - targetDataMock.Verify(targetData => targetData.UpdateTiles(It.Is>( - tiles => tiles.All( - tile => testSourceTiles.Any(sourceTile => sourceTile.Z == tile.Z && sourceTile.X == tile.X && sourceTile.Y == tile.Y) - ) - )), Times.Exactly(numberOfSources)); - targetDataMock.Verify(targetData => targetData.Wrapup(), Times.Once); - - Assert.AreEqual(testSourceTiles.Length, resultWrittenTiles.Count); - Assert.IsTrue(testSourceTiles.All( - tile => resultWrittenTiles.Any(sourceTile => sourceTile.Z == tile.Z && sourceTile.X == tile.X && sourceTile.Y == tile.Y) - )); - } - - public static IEnumerable GetBatchLimitTestParameters() - { - // Tests that given a batch limit size, it flushes every time it reaches the limit - // When the limit is 2, and there are total 5 tiles, we expect 3 flushes - // We set the bytes limit to a high value to avoid it being reached by the test - yield return new object[] { + yield return new object[] { 1, true }; + yield return new object[] { 3, true }; + yield return new object[] { 54, true }; + yield return new object[] { 1, false }; + yield return new object[] { 5, false }; + yield return new object[] { 14, false }; + } + + [TestInitialize] + public void BeforeEach() + { + this._mockRepository = new MockRepository(MockBehavior.Loose); + + this._dataFactoryMock = this._mockRepository.Create(); + this._timeUtilsMock = this._mockRepository.Create(); + this._configurationManagerMock = this._mockRepository.Create(); + this._taskExecutorLoggerMock = this._mockRepository.Create>(); + this._metricsProviderMock = this._mockRepository.Create(); + this._taskUtilsMock = this._mockRepository.Create(); + this._tileScalerMock = this._mockRepository.Create(); + this._tileMergerLoggerMock = this._mockRepository.Create>(); + + this._testActivitySource = new ActivitySource("test"); + this._testTileMerger = new TileMerger(_tileScalerMock.Object, _tileMergerLoggerMock.Object); + this._testFileSystem = new FileSystem(); + } + + [TestMethod] + [DynamicData(nameof(GetSingleTileTestParameters), DynamicDataSourceType.Method)] + public void WhenGivenSourcesWithOneTile_ShouldWriteAllTilesToTarget(int numberOfSources, bool isTargetNew) + { + this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "batchMaxSize")).Returns(1); + this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "limitBatchSize")).Returns(true); + this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchMaxBytes")).Returns(1); + + var taskTargetTuple = this.SetupTestTask(numberOfSources, isTargetNew); + var testTask = taskTargetTuple.Item1; + var targetDataMock = taskTargetTuple.Item2; + var testSourceTiles = taskTargetTuple.Item3; + var resultWrittenTiles = new List(); + + var testTaskExecutor = new TaskExecutor(_dataFactoryMock.Object, _testTileMerger, _timeUtilsMock.Object, + _configurationManagerMock.Object, _taskExecutorLoggerMock.Object, _testActivitySource, _testFileSystem, + _metricsProviderMock.Object); + + targetDataMock.Setup(targetData => targetData.UpdateTiles(It.IsAny>())).Callback>( + resultWrittenTiles.AddRange + ); + + testTaskExecutor.ExecuteTask(testTask, _taskUtilsMock.Object, null); + + targetDataMock.Verify(targetData => targetData.UpdateTiles(It.Is>( + tiles => tiles.All( + tile => testSourceTiles.Any(sourceTile => sourceTile.Z == tile.Z && sourceTile.X == tile.X && sourceTile.Y == tile.Y) + ) + )), Times.Exactly(numberOfSources)); + targetDataMock.Verify(targetData => targetData.Wrapup(), Times.Once); + + Assert.AreEqual(testSourceTiles.Length, resultWrittenTiles.Count); + Assert.IsTrue(testSourceTiles.All( + tile => resultWrittenTiles.Any(sourceTile => sourceTile.Z == tile.Z && sourceTile.X == tile.X && sourceTile.Y == tile.Y) + )); + } + + public static IEnumerable GetBatchLimitTestParameters() + { + // Tests that given a batch limit size, it flushes every time it reaches the limit + // When the limit is 2, and there are total 5 tiles, we expect 3 flushes + // We set the bytes limit to a high value to avoid it being reached by the test + yield return new object[] { true, 2, 1024 * 1024 * 80, 3, 5 }; - // Tests that given a batch bytes limit, it flushes every time it reaches the limit - // When the limit is one byte more then twice the size of the tile, and there are total 7 tiles, we expect 3 flushes - // (Flush every 3rd tile, and additional flush at the end) - // We disable the size limit to avoid it being used in the test - yield return new object[] { + // Tests that given a batch bytes limit, it flushes every time it reaches the limit + // When the limit is one byte more then twice the size of the tile, and there are total 7 tiles, we expect 3 flushes + // (Flush every 3rd tile, and additional flush at the end) + // We disable the size limit to avoid it being used in the test + yield return new object[] { false, 1, (File.ReadAllBytes("tile.jpeg").Length * 2) + 1, 3, 7 }; - } - - [TestMethod] - [DynamicData(nameof(GetBatchLimitTestParameters), DynamicDataSourceType.Method)] - public void WhenConfiguringBatchLimits_ShouldWriteTilesEachTimeAfterReachingBatchLimit(bool limitBatchSize, int batchMaxSize, long batchMaxBytes, int amountOfFlushes, int totalAmountOfTiles) - { - this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "batchMaxSize")).Returns(batchMaxSize); - this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "limitBatchSize")).Returns(limitBatchSize); - this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchMaxBytes")).Returns(batchMaxBytes); - - byte[] tileBytes = File.ReadAllBytes("tile.jpeg"); - Source testTarget = new Source("target", "target_type", new Extent(), GridOrigin.UPPER_LEFT, Grid.TwoXOne); - Mock targetDataMock = this._mockRepository.Create(); - - Source testSource = new Source($"source", $"source_type"); - Coord[] testSourceCoords = new int[totalAmountOfTiles].Select((_, index) => new Coord(1, index, 0)).ToArray(); - Tile[] testSourceTiles = testSourceCoords.Select(coord => new Tile(coord, tileBytes)).ToArray(); - TileBounds tileBounds = new TileBounds(1, 0, testSourceCoords.Length, 0, 1); - Mock sourceDataMock = this._mockRepository.Create(); - - for (var testSourceCoordIdx = 0; testSourceCoordIdx < testSourceCoords.Length; testSourceCoordIdx++) - { - sourceDataMock.Setup(sourceData => sourceData.GetCorrespondingTile(testSourceCoords[testSourceCoordIdx], It.IsAny())).Returns(testSourceTiles[testSourceCoordIdx]); - } - - this._dataFactoryMock.Setup( + } + + [TestMethod] + [DynamicData(nameof(GetBatchLimitTestParameters), DynamicDataSourceType.Method)] + public void WhenConfiguringBatchLimits_ShouldWriteTilesEachTimeAfterReachingBatchLimit(bool limitBatchSize, int batchMaxSize, long batchMaxBytes, int amountOfFlushes, int totalAmountOfTiles) + { + this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "batchMaxSize")).Returns(batchMaxSize); + this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchSize", "limitBatchSize")).Returns(limitBatchSize); + this._configurationManagerMock.Setup(configManager => configManager.GetConfiguration("GENERAL", "batchMaxBytes")).Returns(batchMaxBytes); + + byte[] tileBytes = File.ReadAllBytes("tile.jpeg"); + Source testTarget = new Source("target", "target_type", new Extent(), GridOrigin.UPPER_LEFT, Grid.TwoXOne); + Mock targetDataMock = this._mockRepository.Create(); + + Source testSource = new Source($"source", $"source_type"); + Coord[] testSourceCoords = new int[totalAmountOfTiles].Select((_, index) => new Coord(1, index, 0)).ToArray(); + Tile[] testSourceTiles = testSourceCoords.Select(coord => new Tile(coord, tileBytes)).ToArray(); + TileBounds tileBounds = new TileBounds(1, 0, testSourceCoords.Length, 0, 1); + Mock sourceDataMock = this._mockRepository.Create(); + + for (var testSourceCoordIdx = 0; testSourceCoordIdx < testSourceCoords.Length; testSourceCoordIdx++) + { + sourceDataMock.Setup(sourceData => sourceData.GetCorrespondingTile(testSourceCoords[testSourceCoordIdx], It.IsAny(), It.IsAny())).Returns(testSourceTiles[testSourceCoordIdx]); + } + + this._dataFactoryMock.Setup( + dataFactory => dataFactory.CreateDataSource( + testSource.Type, testSource.Path, It.IsAny(), + testSource.Grid, testSource.Origin, testSource.Extent, It.IsAny()) + ).Returns(sourceDataMock.Object); + + this._dataFactoryMock.Setup( + dataFactory => dataFactory.CreateDataSource( + testTarget.Type, testTarget.Path, It.IsAny(), + testTarget.Grid, testTarget.Origin, testTarget.Extent, It.IsAny()) + ).Returns(targetDataMock.Object); + + var testTask = new MergeTask("id", "type", "description", + new MergeMetadata( + TileFormat.Jpeg, true, new TileBounds[] { tileBounds }, + new Source[] { testTarget, testSource } + ), + Status.PENDING, null, "reason", 0, "jobId", true, new DateTime(), new DateTime() + ); + + var resultWrittenTiles = new List(); + var testTaskExecutor = new TaskExecutor(_dataFactoryMock.Object, _testTileMerger, _timeUtilsMock.Object, + _configurationManagerMock.Object, _taskExecutorLoggerMock.Object, _testActivitySource, _testFileSystem, + _metricsProviderMock.Object); + + targetDataMock.Setup(targetData => targetData.UpdateTiles(It.IsAny>())).Callback>( + resultWrittenTiles.AddRange + ); + + testTaskExecutor.ExecuteTask(testTask, _taskUtilsMock.Object, null); + + targetDataMock.Verify(targetData => targetData.UpdateTiles(It.IsAny>()), Times.Exactly(amountOfFlushes)); + targetDataMock.Verify(targetData => targetData.Wrapup(), Times.Once); + Assert.AreEqual(testSourceTiles.Length, resultWrittenTiles.Count); + Assert.IsTrue(testSourceTiles.All( + tile => resultWrittenTiles.Any(sourceTile => sourceTile.Z == tile.Z && sourceTile.X == tile.X && sourceTile.Y == tile.Y) + )); + } + + private Tuple, Tile[]> SetupTestTask(int amountOfSources, bool isTargetNew) + { + byte[] tileBytes = File.ReadAllBytes("tile.jpeg"); + Coord testTargetCoord = new Coord(1, 1, 1); + Coord[] testSourceCoords = new int[amountOfSources].Select((_, index) => new Coord(index + 2, index + 2, index + 2)).ToArray(); + Source testTarget = new Source("target", "target_type", new Extent(), GridOrigin.UPPER_LEFT, Grid.TwoXOne); + Source[] testSources = testSourceCoords.Select((_, index) => new Source($"source_{index}", $"source_type_{index}")).ToArray(); + Tile testTargetTile = new Tile(testTargetCoord, tileBytes); + Tile[] testSourcesTiles = testSourceCoords.Select(coord => new Tile(coord, tileBytes)).ToArray(); + TileBounds[] tileBounds = testSourceCoords.Select(coord => new TileBounds(coord.Z, coord.X, coord.X + 1, coord.Y, coord.Y + 1)).ToArray(); + Mock targetDataMock = this._mockRepository.Create(); + Mock[] sourcesDataMocks = testSourcesTiles.Select((tile, index) => + { + var sourceDataMock = this._mockRepository.Create(); + sourceDataMock.Setup(sourceData => sourceData.GetCorrespondingTile(testSourceCoords[index], It.IsAny(), It.IsAny())).Returns(tile); + this._dataFactoryMock.Setup( dataFactory => dataFactory.CreateDataSource( - testSource.Type, testSource.Path, It.IsAny(), - testSource.Grid, testSource.Origin, testSource.Extent, It.IsAny()) - ).Returns(sourceDataMock.Object); - - this._dataFactoryMock.Setup( - dataFactory => dataFactory.CreateDataSource( - testTarget.Type, testTarget.Path, It.IsAny(), - testTarget.Grid, testTarget.Origin, testTarget.Extent, It.IsAny()) - ).Returns(targetDataMock.Object); - - var testTask = new MergeTask("id", "type", "description", - new MergeMetadata( - TileFormat.Jpeg, true, new TileBounds[] { tileBounds }, - new Source[] { testTarget, testSource } - ), - Status.PENDING, null, "reason", 0, "jobId", true, new DateTime(), new DateTime() - ); - - var resultWrittenTiles = new List(); - var testTaskExecutor = new TaskExecutor(_dataFactoryMock.Object, _testTileMerger, _timeUtilsMock.Object, - _configurationManagerMock.Object, _taskExecutorLoggerMock.Object, _testActivitySource, _testFileSystem, - _metricsProviderMock.Object); - - targetDataMock.Setup(targetData => targetData.UpdateTiles(It.IsAny>())).Callback>( - resultWrittenTiles.AddRange - ); - - testTaskExecutor.ExecuteTask(testTask, _taskUtilsMock.Object, null); - - targetDataMock.Verify(targetData => targetData.UpdateTiles(It.IsAny>()), Times.Exactly(amountOfFlushes)); - targetDataMock.Verify(targetData => targetData.Wrapup(), Times.Once); - Assert.AreEqual(testSourceTiles.Length, resultWrittenTiles.Count); - Assert.IsTrue(testSourceTiles.All( - tile => resultWrittenTiles.Any(sourceTile => sourceTile.Z == tile.Z && sourceTile.X == tile.X && sourceTile.Y == tile.Y) - )); - } - - private Tuple, Tile[]> SetupTestTask(int amountOfSources, bool isTargetNew) - { - byte[] tileBytes = File.ReadAllBytes("tile.jpeg"); - Coord testTargetCoord = new Coord(1, 1, 1); - Coord[] testSourceCoords = new int[amountOfSources].Select((_, index) => new Coord(index + 2, index + 2, index + 2)).ToArray(); - Source testTarget = new Source("target", "target_type", new Extent(), GridOrigin.UPPER_LEFT, Grid.TwoXOne); - Source[] testSources = testSourceCoords.Select((_, index) => new Source($"source_{index}", $"source_type_{index}")).ToArray(); - Tile testTargetTile = new Tile(testTargetCoord, tileBytes); - Tile[] testSourcesTiles = testSourceCoords.Select(coord => new Tile(coord, tileBytes)).ToArray(); - TileBounds[] tileBounds = testSourceCoords.Select(coord => new TileBounds(coord.Z, coord.X, coord.X + 1, coord.Y, coord.Y + 1)).ToArray(); - Mock targetDataMock = this._mockRepository.Create(); - Mock[] sourcesDataMocks = testSourcesTiles.Select((tile, index) => - { - var sourceDataMock = this._mockRepository.Create(); - sourceDataMock.Setup(sourceData => sourceData.GetCorrespondingTile(testSourceCoords[index], It.IsAny())).Returns(tile); - this._dataFactoryMock.Setup( - dataFactory => dataFactory.CreateDataSource( - testSources[index].Type, testSources[index].Path, It.IsAny(), - testSources[index].Grid, testSources[index].Origin, testSources[index].Extent, It.IsAny()) - ).Returns(sourceDataMock.Object); - return sourceDataMock; - }).ToArray(); - - this._dataFactoryMock.Setup( - dataFactory => dataFactory.CreateDataSource( - testTarget.Type, testTarget.Path, It.IsAny(), - testTarget.Grid, testTarget.Origin, testTarget.Extent, It.IsAny()) - ).Returns(targetDataMock.Object); - - if (!isTargetNew) - { - targetDataMock.Setup(targetData => targetData.GetCorrespondingTile(testTargetCoord, It.IsAny())).Returns(testTargetTile); - tileBounds = tileBounds.Prepend(new TileBounds(testTargetCoord.Z, testTargetCoord.X, testTargetCoord.X + 1, testTargetCoord.Y, testTargetCoord.Y + 1)).ToArray(); - } - - var testTask = new MergeTask("id", "type", "description", - new MergeMetadata( - TileFormat.Jpeg, isTargetNew, tileBounds, - testSources.Prepend(testTarget).ToArray() - ), - Status.PENDING, null, "reason", 0, "jobId", true, new DateTime(), new DateTime() - ); - - return new Tuple, Tile[]>(testTask, targetDataMock, testSourcesTiles); - } + testSources[index].Type, testSources[index].Path, It.IsAny(), + testSources[index].Grid, testSources[index].Origin, testSources[index].Extent, It.IsAny()) + ).Returns(sourceDataMock.Object); + return sourceDataMock; + }).ToArray(); + + this._dataFactoryMock.Setup( + dataFactory => dataFactory.CreateDataSource( + testTarget.Type, testTarget.Path, It.IsAny(), + testTarget.Grid, testTarget.Origin, testTarget.Extent, It.IsAny()) + ).Returns(targetDataMock.Object); + + if (!isTargetNew) + { + targetDataMock.Setup(targetData => targetData.GetCorrespondingTile(testTargetCoord, It.IsAny(), It.IsAny())).Returns(testTargetTile); + tileBounds = tileBounds.Prepend(new TileBounds(testTargetCoord.Z, testTargetCoord.X, testTargetCoord.X + 1, testTargetCoord.Y, testTargetCoord.Y + 1)).ToArray(); + } + + var testTask = new MergeTask("id", "type", "description", + new MergeMetadata( + TileFormat.Jpeg, isTargetNew, tileBounds, + testSources.Prepend(testTarget).ToArray() + ), + Status.PENDING, null, "reason", 0, "jobId", true, new DateTime(), new DateTime() + ); + + return new Tuple, Tile[]>(testTask, targetDataMock, testSourcesTiles); } + } }