Browse Source

Improve test stability.

pull/945/head
Sebastian 4 years ago
parent
commit
06ee3c3403
  1. 107
      backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs
  2. 4
      backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

107
backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs

@ -52,8 +52,7 @@ public class AssetTests : IClassFixture<CreatedAppFixture>
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<CreatedAppFixture>
[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<CreatedAppFixture>
{
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<CreatedAppFixture>
// 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<CreatedAppFixture>
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<CreatedAppFixture>
[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<CreatedAppFixture>
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<CreatedAppFixture>
public override async ValueTask<int> ReadAsync(Memory<byte> buffer,
CancellationToken cancellationToken = default)
{
if (Position >= Length)
{
return 0;
}
if (totalRead >= Length * pauseAfter)
if (totalRead > Length * pauseAfter)
{
throw new InvalidOperationException("PAUSED");
}

4
backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

@ -16,8 +16,8 @@
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.ClientLibrary" Version="12.1.0" />
<PackageReference Include="Squidex.ClientLibrary.ServiceExtensions" Version="12.1.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="12.3.0" />
<PackageReference Include="Squidex.ClientLibrary.ServiceExtensions" Version="12.3.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="Verify" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.1" />

Loading…
Cancel
Save