Browse Source

Test fix. (#840)

pull/841/head
Sebastian Stehle 4 years ago
committed by GitHub
parent
commit
1bd81b9002
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
  2. 18
      backend/src/Squidex/Squidex.csproj
  3. 2
      backend/tests/docker-compose.yml
  4. 232
      backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs
  5. 2
      backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj
  6. 2
      backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

2
backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj

@ -31,7 +31,7 @@
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="OpenTelemetry.Api" Version="1.1.0" /> <PackageReference Include="OpenTelemetry.Api" Version="1.1.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets" Version="2.15.0" /> <PackageReference Include="Squidex.Assets" Version="2.17.0" />
<PackageReference Include="Squidex.Caching" Version="1.9.0" /> <PackageReference Include="Squidex.Caching" Version="1.9.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="2.13.0" /> <PackageReference Include="Squidex.Hosting.Abstractions" Version="2.13.0" />
<PackageReference Include="Squidex.Log" Version="1.6.0" /> <PackageReference Include="Squidex.Log" Version="1.6.0" />

18
backend/src/Squidex/Squidex.csproj

@ -74,16 +74,16 @@
<PackageReference Include="OrleansDashboard.EmbeddedAssets" Version="3.6.1" /> <PackageReference Include="OrleansDashboard.EmbeddedAssets" Version="3.6.1" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="ReportGenerator" Version="5.0.3" PrivateAssets="all" /> <PackageReference Include="ReportGenerator" Version="5.0.3" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets.Azure" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.Azure" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.GoogleCloud" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.GoogleCloud" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.FTP" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.FTP" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.ImageMagick" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.ImageMagick" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.ImageSharp" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.ImageSharp" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.Mongo" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.Mongo" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.S3" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.S3" Version="2.17.0" />
<PackageReference Include="Squidex.Assets.TusAdapter" Version="2.15.0" /> <PackageReference Include="Squidex.Assets.TusAdapter" Version="2.17.0" />
<PackageReference Include="Squidex.Caching.Orleans" Version="1.9.0" /> <PackageReference Include="Squidex.Caching.Orleans" Version="1.9.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="8.5.0" /> <PackageReference Include="Squidex.ClientLibrary" Version="8.6.0" />
<PackageReference Include="Squidex.Hosting" Version="2.13.0" /> <PackageReference Include="Squidex.Hosting" Version="2.13.0" />
<PackageReference Include="Squidex.OpenIddict.MongoDb" Version="4.0.1-dev" /> <PackageReference Include="Squidex.OpenIddict.MongoDb" Version="4.0.1-dev" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />

2
backend/tests/docker-compose.yml

@ -3,7 +3,7 @@ services:
mongo: mongo:
image: mongo:latest image: mongo:latest
ports: ports:
- "27017:27017" - "27018:27017"
networks: networks:
- internal - internal

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

@ -91,82 +91,80 @@ namespace TestSuite.ApiTests
[Fact] [Fact]
public async Task Should_upload_asset_using_tus_in_chunks() public async Task Should_upload_asset_using_tus_in_chunks()
{ {
// STEP 1: Create asset for (var i = 0; i < 5; i++)
var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4"); {
// STEP 1: Create asset
var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4");
var pausingStream = new PauseStream(fileParameter.Data, 0.25); var pausingStream = new PauseStream(fileParameter.Data, 0.5);
var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType); var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType);
var numUploads = 0; var numUploads = 0;
var reportedException = (Exception)null; var reportedException = (Exception)null;
var reportedProgress = new List<int>(); var reportedProgress = new List<int>();
var reportedAsset = (AssetDto)null; var reportedAsset = (AssetDto)null;
var fileId = (string)null; var fileId = (string)null;
await using (pausingFile.Data)
{
using var cts = new CancellationTokenSource(5000);
while (reportedAsset == null) await using (pausingFile.Data)
{ {
pausingStream.Reset(); using var cts = new CancellationTokenSource(5000);
if (pausingStream.Position == pausingStream.Length) while (reportedAsset == null)
{ {
throw new InvalidOperationException("Stream end reached."); pausingStream.Reset();
}
await _.Assets.UploadNewAssetAsync(_.AppName, pausingFile, new AssetUploadOptions await _.Assets.UploadNewAssetAsync(_.AppName, pausingFile, new AssetUploadOptions
{
ProgressHandler = new AssetDelegatingProgressHandler
{ {
OnCreatedAsync = (@event, _) => ProgressHandler = new AssetDelegatingProgressHandler
{
fileId = @event.FileId;
return Task.CompletedTask;
},
OnProgressAsync = (@event, _) =>
{
reportedProgress.Add(@event.Progress);
return Task.CompletedTask;
},
OnCompletedAsync = (@event, _) =>
{ {
reportedAsset = @event.Asset; OnCreatedAsync = (@event, _) =>
return Task.CompletedTask;
},
OnFailedAsync = (@event, _) =>
{
if (!@event.Exception.ToString().Contains("PAUSED", StringComparison.OrdinalIgnoreCase))
{ {
reportedException = @event.Exception; fileId = @event.FileId;
} return Task.CompletedTask;
},
OnProgressAsync = (@event, _) =>
{
reportedProgress.Add(@event.Progress);
return Task.CompletedTask;
},
OnCompletedAsync = (@event, _) =>
{
reportedAsset = @event.Asset;
return Task.CompletedTask;
},
OnFailedAsync = (@event, _) =>
{
if (!@event.Exception.ToString().Contains("PAUSED", StringComparison.OrdinalIgnoreCase))
{
reportedException = @event.Exception;
}
return Task.CompletedTask; return Task.CompletedTask;
} }
}, },
FileId = fileId FileId = fileId
}, cts.Token); }, cts.Token);
Assert.Null(reportedException); Assert.Null(reportedException);
await Task.Delay(50, cts.Token); await Task.Delay(50, cts.Token);
numUploads++; numUploads++;
}
} }
}
Assert.NotEmpty(reportedProgress); Assert.NotEmpty(reportedProgress);
Assert.NotNull(reportedAsset); Assert.NotNull(reportedAsset);
Assert.Null(reportedException); Assert.Null(reportedException);
Assert.True(numUploads > 1); Assert.True(numUploads > 1);
await using (var stream = new FileStream("Assets/SampleVideo_1280x720_1mb.mp4", FileMode.Open)) await using (var stream = new FileStream("Assets/SampleVideo_1280x720_1mb.mp4", FileMode.Open))
{ {
var downloaded = await _.DownloadAsync(reportedAsset); var downloaded = await _.DownloadAsync(reportedAsset);
// Should dowload with correct size. // Should dowload with correct size.
Assert.Equal(stream.Length, downloaded.Length); Assert.Equal(stream.Length, downloaded.Length);
}
} }
} }
@ -283,86 +281,84 @@ namespace TestSuite.ApiTests
[Fact] [Fact]
public async Task Should_replace_asset_using_tus_in_chunks() public async Task Should_replace_asset_using_tus_in_chunks()
{ {
// STEP 1: Create asset for (var i = 0; i < 5; i++)
var asset_1 = await _.UploadFileAsync("Assets/logo-squared.png", "image/png"); {
// STEP 1: Create asset
var asset_1 = await _.UploadFileAsync("Assets/logo-squared.png", "image/png");
// STEP 2: Reupload asset // STEP 2: Reupload asset
var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4"); var fileParameter = FileParameter.FromPath("Assets/SampleVideo_1280x720_1mb.mp4");
var pausingStream = new PauseStream(fileParameter.Data, 0.25); var pausingStream = new PauseStream(fileParameter.Data, 0.5);
var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType); var pausingFile = new FileParameter(pausingStream, fileParameter.FileName, fileParameter.ContentType);
var numUploads = 0; var numUploads = 0;
var reportedException = (Exception)null; var reportedException = (Exception)null;
var reportedProgress = new List<int>(); var reportedProgress = new List<int>();
var reportedAsset = (AssetDto)null; var reportedAsset = (AssetDto)null;
var fileId = (string)null; var fileId = (string)null;
await using (pausingFile.Data)
{
using var cts = new CancellationTokenSource(5000);
while (reportedAsset == null) await using (pausingFile.Data)
{ {
pausingStream.Reset(); using var cts = new CancellationTokenSource(5000);
if (pausingStream.Position == pausingStream.Length) while (reportedAsset == null)
{ {
throw new InvalidOperationException("Stream end reached."); pausingStream.Reset();
}
await _.Assets.UploadExistingAssetAsync(_.AppName, asset_1.Id, pausingFile, new AssetUploadOptions await _.Assets.UploadExistingAssetAsync(_.AppName, asset_1.Id, pausingFile, new AssetUploadOptions
{
ProgressHandler = new AssetDelegatingProgressHandler
{ {
OnCreatedAsync = (@event, _) => ProgressHandler = new AssetDelegatingProgressHandler
{ {
fileId = @event.FileId; OnCreatedAsync = (@event, _) =>
return Task.CompletedTask;
},
OnProgressAsync = (@event, _) =>
{
reportedProgress.Add(@event.Progress);
return Task.CompletedTask;
},
OnCompletedAsync = (@event, _) =>
{
reportedAsset = @event.Asset;
return Task.CompletedTask;
},
OnFailedAsync = (@event, _) =>
{
if (!@event.Exception.ToString().Contains("PAUSED", StringComparison.OrdinalIgnoreCase))
{ {
reportedException = @event.Exception; fileId = @event.FileId;
} return Task.CompletedTask;
},
OnProgressAsync = (@event, _) =>
{
reportedProgress.Add(@event.Progress);
return Task.CompletedTask;
},
OnCompletedAsync = (@event, _) =>
{
reportedAsset = @event.Asset;
return Task.CompletedTask;
},
OnFailedAsync = (@event, _) =>
{
if (!@event.Exception.ToString().Contains("PAUSED", StringComparison.OrdinalIgnoreCase))
{
reportedException = @event.Exception;
}
return Task.CompletedTask; return Task.CompletedTask;
} }
}, },
FileId = fileId FileId = fileId
}, cts.Token); }, cts.Token);
Assert.Null(reportedException); Assert.Null(reportedException);
await Task.Delay(50, cts.Token); await Task.Delay(50, cts.Token);
numUploads++; numUploads++;
}
} }
}
Assert.NotEmpty(reportedProgress); Assert.NotEmpty(reportedProgress);
Assert.NotNull(reportedAsset); Assert.NotNull(reportedAsset);
Assert.Null(reportedException); Assert.Null(reportedException);
Assert.True(numUploads > 1); Assert.True(numUploads > 1);
await using (var stream = new FileStream("Assets/SampleVideo_1280x720_1mb.mp4", FileMode.Open)) await using (var stream = new FileStream("Assets/SampleVideo_1280x720_1mb.mp4", FileMode.Open))
{ {
var downloaded = await _.DownloadAsync(reportedAsset); var downloaded = await _.DownloadAsync(reportedAsset);
// Should dowload with correct size. // Should dowload with correct size.
Assert.Equal(stream.Length, downloaded.Length); Assert.Equal(stream.Length, downloaded.Length);
}
} }
} }

2
backend/tools/TestSuite/TestSuite.ApiTests/TestSuite.ApiTests.csproj

@ -20,7 +20,7 @@
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="NSwag.Core" Version="13.15.7" /> <PackageReference Include="NSwag.Core" Version="13.15.7" />
<PackageReference Include="Squidex.Assets" Version="2.15.0" /> <PackageReference Include="Squidex.Assets" Version="2.17.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">

2
backend/tools/TestSuite/TestSuite.Shared/TestSuite.Shared.csproj

@ -21,7 +21,7 @@
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" /> <PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.ClientLibrary" Version="8.5.0" /> <PackageReference Include="Squidex.ClientLibrary" Version="8.6.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
</ItemGroup> </ItemGroup>

Loading…
Cancel
Save