|
|
@ -14,7 +14,8 @@ namespace Squidex.Infrastructure.Assets |
|
|
{ |
|
|
{ |
|
|
public abstract class AssetStoreTests<T> where T : IAssetStore |
|
|
public abstract class AssetStoreTests<T> where T : IAssetStore |
|
|
{ |
|
|
{ |
|
|
private readonly MemoryStream assetData = new MemoryStream(new byte[] { 0x1, 0x2, 0x3, 0x4 }); |
|
|
private readonly MemoryStream assetLarge = CreateFile(4 * 1024 * 1024); |
|
|
|
|
|
private readonly MemoryStream assetSmall = CreateFile(4); |
|
|
private readonly string fileName = Guid.NewGuid().ToString(); |
|
|
private readonly string fileName = Guid.NewGuid().ToString(); |
|
|
private readonly string sourceFile = Guid.NewGuid().ToString(); |
|
|
private readonly string sourceFile = Guid.NewGuid().ToString(); |
|
|
private readonly Lazy<T> sut; |
|
|
private readonly Lazy<T> sut; |
|
|
@ -99,47 +100,59 @@ namespace Squidex.Infrastructure.Assets |
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_write_and_read_file() |
|
|
public async Task Should_write_and_read_file() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(fileName, assetData); |
|
|
await Sut.UploadAsync(fileName, assetSmall); |
|
|
|
|
|
|
|
|
var readData = new MemoryStream(); |
|
|
var readData = new MemoryStream(); |
|
|
|
|
|
|
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
|
|
|
|
|
|
Assert.Equal(assetData.ToArray(), readData.ToArray()); |
|
|
Assert.Equal(assetSmall.ToArray(), readData.ToArray()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Fact] |
|
|
|
|
|
public async Task Should_write_and_read_large_file() |
|
|
|
|
|
{ |
|
|
|
|
|
await Sut.UploadAsync(fileName, assetLarge); |
|
|
|
|
|
|
|
|
|
|
|
var readData = new MemoryStream(); |
|
|
|
|
|
|
|
|
|
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(assetLarge.ToArray(), readData.ToArray()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_write_and_read_file_with_range() |
|
|
public async Task Should_write_and_read_file_with_range() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(fileName, assetData, true); |
|
|
await Sut.UploadAsync(fileName, assetSmall, true); |
|
|
|
|
|
|
|
|
var readData = new MemoryStream(); |
|
|
var readData = new MemoryStream(); |
|
|
|
|
|
|
|
|
await Sut.DownloadAsync(fileName, readData, new BytesRange(1, 2)); |
|
|
await Sut.DownloadAsync(fileName, readData, new BytesRange(1, 2)); |
|
|
|
|
|
|
|
|
Assert.Equal(new Span<byte>(assetData.ToArray()).Slice(1, 2).ToArray(), readData.ToArray()); |
|
|
Assert.Equal(new Span<byte>(assetSmall.ToArray()).Slice(1, 2).ToArray(), readData.ToArray()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_write_and_and_get_size() |
|
|
public async Task Should_write_and_and_get_size() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(fileName, assetData, true); |
|
|
await Sut.UploadAsync(fileName, assetSmall, true); |
|
|
|
|
|
|
|
|
var size = await Sut.GetSizeAsync(fileName); |
|
|
var size = await Sut.GetSizeAsync(fileName); |
|
|
|
|
|
|
|
|
Assert.Equal(assetData.Length, size); |
|
|
Assert.Equal(assetSmall.Length, size); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_write_and_read_file_and_overwrite_non_existing() |
|
|
public async Task Should_write_and_read_file_and_overwrite_non_existing() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(fileName, assetData, true); |
|
|
await Sut.UploadAsync(fileName, assetSmall, true); |
|
|
|
|
|
|
|
|
var readData = new MemoryStream(); |
|
|
var readData = new MemoryStream(); |
|
|
|
|
|
|
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
|
|
|
|
|
|
Assert.Equal(assetData.ToArray(), readData.ToArray()); |
|
|
Assert.Equal(assetSmall.ToArray(), readData.ToArray()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
@ -148,27 +161,27 @@ namespace Squidex.Infrastructure.Assets |
|
|
var oldData = new MemoryStream(new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5 }); |
|
|
var oldData = new MemoryStream(new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5 }); |
|
|
|
|
|
|
|
|
await Sut.UploadAsync(fileName, oldData); |
|
|
await Sut.UploadAsync(fileName, oldData); |
|
|
await Sut.UploadAsync(fileName, assetData, true); |
|
|
await Sut.UploadAsync(fileName, assetSmall, true); |
|
|
|
|
|
|
|
|
var readData = new MemoryStream(); |
|
|
var readData = new MemoryStream(); |
|
|
|
|
|
|
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
await Sut.DownloadAsync(fileName, readData); |
|
|
|
|
|
|
|
|
Assert.Equal(assetData.ToArray(), readData.ToArray()); |
|
|
Assert.Equal(assetSmall.ToArray(), readData.ToArray()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_throw_exception_when_file_to_write_already_exists() |
|
|
public async Task Should_throw_exception_when_file_to_write_already_exists() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(fileName, assetData); |
|
|
await Sut.UploadAsync(fileName, assetSmall); |
|
|
|
|
|
|
|
|
await Assert.ThrowsAsync<AssetAlreadyExistsException>(() => Sut.UploadAsync(fileName, assetData)); |
|
|
await Assert.ThrowsAsync<AssetAlreadyExistsException>(() => Sut.UploadAsync(fileName, assetSmall)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_throw_exception_when_target_file_to_copy_to_already_exists() |
|
|
public async Task Should_throw_exception_when_target_file_to_copy_to_already_exists() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(sourceFile, assetData); |
|
|
await Sut.UploadAsync(sourceFile, assetSmall); |
|
|
await Sut.CopyAsync(sourceFile, fileName); |
|
|
await Sut.CopyAsync(sourceFile, fileName); |
|
|
|
|
|
|
|
|
await Assert.ThrowsAsync<AssetAlreadyExistsException>(() => Sut.CopyAsync(sourceFile, fileName)); |
|
|
await Assert.ThrowsAsync<AssetAlreadyExistsException>(() => Sut.CopyAsync(sourceFile, fileName)); |
|
|
@ -177,7 +190,7 @@ namespace Squidex.Infrastructure.Assets |
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_ignore_when_deleting_not_existing_file() |
|
|
public async Task Should_ignore_when_deleting_not_existing_file() |
|
|
{ |
|
|
{ |
|
|
await Sut.UploadAsync(sourceFile, assetData); |
|
|
await Sut.UploadAsync(sourceFile, assetSmall); |
|
|
await Sut.DeleteAsync(sourceFile); |
|
|
await Sut.DeleteAsync(sourceFile); |
|
|
await Sut.DeleteAsync(sourceFile); |
|
|
await Sut.DeleteAsync(sourceFile); |
|
|
} |
|
|
} |
|
|
@ -188,5 +201,19 @@ namespace Squidex.Infrastructure.Assets |
|
|
await Assert.ThrowsAsync<ArgumentException>(() => action(string.Empty)); |
|
|
await Assert.ThrowsAsync<ArgumentException>(() => action(string.Empty)); |
|
|
await Assert.ThrowsAsync<ArgumentException>(() => action(" ")); |
|
|
await Assert.ThrowsAsync<ArgumentException>(() => action(" ")); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static MemoryStream CreateFile(int length) |
|
|
|
|
|
{ |
|
|
|
|
|
var memoryStream = new MemoryStream(); |
|
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < length; i++) |
|
|
|
|
|
{ |
|
|
|
|
|
memoryStream.WriteByte((byte)i); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
memoryStream.Position = 0; |
|
|
|
|
|
|
|
|
|
|
|
return memoryStream; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|