From 06ee3c34030d49f73232429803aa1987c06ab0b8 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 22 Nov 2022 19:47:23 +0100 Subject: [PATCH] Improve test stability. --- .../TestSuite.ApiTests/AssetTests.cs | 107 ++++++++++-------- .../TestSuite.Shared/TestSuite.Shared.csproj | 4 +- 2 files changed, 62 insertions(+), 49 deletions(-) diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs index 024531d43..523449680 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs @@ -52,8 +52,7 @@ public class AssetTests : IClassFixture await using (fileParameter.Data) { - await _.Assets.UploadAssetAsync(_.AppName, fileParameter, - progress.AsOptions()); + await _.Assets.UploadAssetAsync(_.AppName, fileParameter, progress.AsOptions()); } Assert.Null(progress.Exception); @@ -72,7 +71,7 @@ public class AssetTests : IClassFixture [Fact] public async Task Should_upload_asset_using_tus_in_chunks() { - for (var i = 0; i < 5; i++) + for (var i = 0; i < 100; i++) { // STEP 1: Create asset progress = new ProgressHandler(); @@ -88,15 +87,22 @@ public class AssetTests : IClassFixture { using var cts = new CancellationTokenSource(5000); - while (progress.Asset == null && progress.Exception == null) + while (progress.Asset == null) { - pausingStream.Reset(); - - await _.Assets.UploadAssetAsync(_.AppName, pausingFile, - progress.AsOptions(), cts.Token); + // When the previous request is still in progress we just give it another try. + if (progress.Exception is SquidexManagementException { StatusCode: 409 }) + { + // Wait a little bit to finish the request on the server. + await Task.Delay(100, cts.Token); + } + else if (progress.Exception != null) + { + break; + } - await Task.Delay(50, cts.Token); + pausingStream.Reset(); + await _.Assets.UploadAssetAsync(_.AppName, pausingFile, progress.AsOptions(), cts.Token); numUploads++; } } @@ -137,8 +143,7 @@ public class AssetTests : IClassFixture // STEP 1: Create asset var fileParameter = FileParameter.FromPath("Assets/logo-squared.png"); - await _.Assets.UploadAssetAsync(_.AppName, fileParameter, - progress.AsOptions(id)); + await _.Assets.UploadAssetAsync(_.AppName, fileParameter, progress.AsOptions(id)); Assert.Equal(id, progress.Asset?.Id); } @@ -211,8 +216,7 @@ public class AssetTests : IClassFixture await using (fileParameter.Data) { - await _.Assets.UploadAssetAsync(_.AppName, fileParameter, - progress.AsOptions(asset_1.Id)); + await _.Assets.UploadAssetAsync(_.AppName, fileParameter, progress.AsOptions(asset_1.Id)); } Assert.Null(progress.Exception); @@ -231,48 +235,59 @@ public class AssetTests : IClassFixture [Fact] public async Task Should_replace_asset_using_tus_in_chunks() { - // STEP 1: Create asset - var asset_1 = await _.Assets.UploadFileAsync(_.AppName, "Assets/logo-squared.png", "image/png"); - + for (var i = 0; i < 5; i++) + { + // STEP 1: Create asset + var asset_1 = await _.Assets.UploadFileAsync(_.AppName, "Assets/logo-squared.png", "image/png"); - // STEP 2: Reupload asset - progress = new ProgressHandler(); - var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4"); + // STEP 2: Reupload asset + progress = new ProgressHandler(); - var pausingStream = new PauseStream(fileParameter.Data, 0.5); - var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType); + var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4"); - var numUploads = 0; + var pausingStream = new PauseStream(fileParameter.Data, 0.5); + var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType); - await using (pausingFile.Data) - { - using var cts = new CancellationTokenSource(5000); + var numUploads = 0; - while (progress.Asset == null && progress.Exception == null) + await using (pausingFile.Data) { - pausingStream.Reset(); + using var cts = new CancellationTokenSource(5000); - await _.Assets.UploadAssetAsync(_.AppName, pausingFile, - progress.AsOptions(asset_1.Id), cts.Token); + // When the previous request is still in progress we just give it another try. + while (progress.Asset == null) + { + // When the previous request is still in progress we just give it another try. + if (progress.Exception is SquidexManagementException { StatusCode: 409 }) + { + // Wait a little bit to finish the request on the server. + await Task.Delay(100, cts.Token); + } + else if (progress.Exception != null) + { + break; + } - await Task.Delay(50, cts.Token); + pausingStream.Reset(); - numUploads++; + await _.Assets.UploadAssetAsync(_.AppName, pausingFile, progress.AsOptions(asset_1.Id), cts.Token); + numUploads++; + } } - } - Assert.Null(progress.Exception); - Assert.NotEmpty(progress.Progress); - Assert.NotNull(progress.Asset); - Assert.True(numUploads > 1); + Assert.Null(progress.Exception); + Assert.NotEmpty(progress.Progress); + Assert.NotNull(progress.Asset); + Assert.True(numUploads > 1); - await using (var stream = new FileStream("Assets/SampleVideo_1280x720_1mb.mp4", FileMode.Open)) - { - var downloaded = await _.DownloadAsync(progress.Asset); + await using (var stream = new FileStream("Assets/SampleVideo_1280x720_1mb.mp4", FileMode.Open)) + { + var downloaded = await _.DownloadAsync(progress.Asset); - // Should dowload with correct size. - Assert.Equal(stream.Length, downloaded.Length); + // Should dowload with correct size. + Assert.Equal(stream.Length, downloaded.Length); + } } } @@ -695,6 +710,9 @@ public class AssetTests : IClassFixture public Task OnCompletedAsync(AssetUploadCompletedEvent @event, CancellationToken ct) { + // This is a previous exception, so we can unset it. + Exception = null; + Asset = @event.Asset; return Task.CompletedTask; } @@ -744,12 +762,7 @@ public class AssetTests : IClassFixture public override async ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default) { - if (Position >= Length) - { - return 0; - } - - if (totalRead >= Length * pauseAfter) + if (totalRead > Length * pauseAfter) { throw new InvalidOperationException("PAUSED"); } diff --git a/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj b/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj index 13da2c9d0..99da4fce3 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj +++ b/backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj @@ -16,8 +16,8 @@ - - + +