Browse Source

Added initial tests for the file system blob container.

pull/4127/head
Halil İbrahim Kalkan 6 years ago
parent
commit
49da37d1ad
  1. 1
      framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs
  2. 4
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs
  3. 34
      framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfigurations.cs
  4. 1
      framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj
  5. 7
      framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/AbpBlobStoringFileSystemTestModule.cs
  6. 2
      framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/BlogFilePathCalculator_Tests.cs
  7. 10
      framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobContainer_Tests.cs
  8. 8
      framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/TestObjects/TestContainer.cs
  9. 45
      framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/BlobContainer_Tests.cs

1
framework/src/Volo.Abp.BlobStoring.FileSystem/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobProvider.cs

@ -6,6 +6,7 @@ using Volo.Abp.IO;
namespace Volo.Abp.BlobStoring.FileSystem
{
//TODO: What if the file is being used on create, delete or read?
//TODO: Implement all methods truly async!
public class FileSystemBlobProvider : BlobProviderBase, ITransientDependency
{

4
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainer.cs

@ -147,11 +147,11 @@ namespace Volo.Abp.BlobStoring
);
}
public virtual Task<Stream> GetAsync(
public virtual async Task<Stream> GetAsync(
string name,
CancellationToken cancellationToken = default)
{
var stream = Provider.GetOrNullAsync(
var stream = await Provider.GetOrNullAsync(
new BlobProviderGetArgs(
ContainerName,
Configuration,

34
framework/src/Volo.Abp.BlobStoring/Volo/Abp/BlobStoring/BlobContainerConfigurations.cs

@ -6,14 +6,17 @@ namespace Volo.Abp.BlobStoring
{
public class BlobContainerConfigurations
{
public BlobContainerConfiguration Default { get; }
private BlobContainerConfiguration Default => GetConfiguration<DefaultContainer>();
private readonly Dictionary<string, BlobContainerConfiguration> _containers;
public BlobContainerConfigurations()
{
Default = new BlobContainerConfiguration();
_containers = new Dictionary<string, BlobContainerConfiguration>();
_containers = new Dictionary<string, BlobContainerConfiguration>
{
//Add default container
[BlobContainerNameAttribute.GetContainerName<DefaultContainer>()] = new BlobContainerConfiguration()
};
}
public BlobContainerConfigurations Configure<TContainer>(
@ -31,9 +34,14 @@ namespace Volo.Abp.BlobStoring
{
Check.NotNullOrWhiteSpace(name, nameof(name));
Check.NotNull(configureAction, nameof(configureAction));
configureAction(_containers.GetOrAdd(name, () => new BlobContainerConfiguration(Default)));
configureAction(
_containers.GetOrAdd(
name,
() => new BlobContainerConfiguration(Default)
)
);
return this;
}
@ -42,7 +50,17 @@ namespace Volo.Abp.BlobStoring
configureAction(Default);
return this;
}
public BlobContainerConfigurations ConfigureAll(Action<string, BlobContainerConfiguration> configureAction)
{
foreach (var container in _containers)
{
configureAction(container.Key, container.Value);
}
return this;
}
[NotNull]
public BlobContainerConfiguration GetConfiguration<TContainer>()
{
@ -54,7 +72,7 @@ namespace Volo.Abp.BlobStoring
{
Check.NotNullOrWhiteSpace(name, nameof(name));
return _containers.GetOrDefault(name) ??
return _containers.GetOrDefault(name) ??
Default;
}
}

1
framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo.Abp.BlobStoring.FileSystem.Tests.csproj

@ -12,6 +12,7 @@
<ProjectReference Include="..\..\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\AbpTestBase\AbpTestBase.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<ProjectReference Include="..\Volo.Abp.BlobStoring.Tests\Volo.Abp.BlobStoring.Tests.csproj" />
</ItemGroup>
</Project>

7
framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/AbpBlobStoringFileSystemTestModule.cs

@ -5,7 +5,8 @@ using Volo.Abp.Modularity;
namespace Volo.Abp.BlobStoring.FileSystem
{
[DependsOn(
typeof(AbpBlobStoringFileSystemModule)
typeof(AbpBlobStoringFileSystemModule),
typeof(AbpBlobStoringTestModule)
)]
public class AbpBlobStoringFileSystemTestModule : AbpModule
{
@ -13,9 +14,9 @@ namespace Volo.Abp.BlobStoring.FileSystem
{
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.ConfigureDefault(container =>
options.Containers.ConfigureAll((containerName, containerConfiguration) =>
{
container.UseFileSystem(fileSystem =>
containerConfiguration.UseFileSystem(fileSystem =>
{
fileSystem.BasePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
});

2
framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/BlogFilePathCalculator_Tests.cs

@ -45,7 +45,7 @@ namespace Volo.Abp.BlobStoring.FileSystem
).ShouldBe($"C:{separator}my-files{separator}host{separator}my-blob");
}
private BlobProviderArgs GetArgs(
private static BlobProviderArgs GetArgs(
string basePath,
string containerName,
string blobName,

10
framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/FileSystemBlobContainer_Tests.cs

@ -0,0 +1,10 @@
namespace Volo.Abp.BlobStoring.FileSystem
{
public class FileSystemBlobContainer_Tests : BlobContainer_Tests<AbpBlobStoringFileSystemTestModule>
{
public FileSystemBlobContainer_Tests()
{
}
}
}

8
framework/test/Volo.Abp.BlobStoring.FileSystem.Tests/Volo/Abp/BlobStoring/FileSystem/TestObjects/TestContainer.cs

@ -1,8 +0,0 @@
namespace Volo.Abp.BlobStoring.FileSystem.TestObjects
{
[BlobContainerName("TestContainer")]
public class TestContainer
{
}
}

45
framework/test/Volo.Abp.BlobStoring.Tests/Volo/Abp/BlobStoring/BlobContainer_Tests.cs

@ -0,0 +1,45 @@
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.BlobStoring.TestObjects;
using Volo.Abp.Modularity;
using Volo.Abp.Testing;
using Xunit;
namespace Volo.Abp.BlobStoring
{
public abstract class BlobContainer_Tests<TStartupModule> : AbpIntegratedTest<TStartupModule>
where TStartupModule : IAbpModule
{
protected IBlobContainer<TestContainer1> Container { get; }
protected BlobContainer_Tests()
{
Container = GetRequiredService<IBlobContainer<TestContainer1>>();
}
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
[Fact]
public async Task SaveAsync()
{
var testContent = "test content".GetBytes();
using (var memoryStream = new MemoryStream(testContent))
{
await Container.SaveAsync("test-blob-1", memoryStream);
}
using (var stream = await Container.GetAsync("test-blob-1"))
{
var result = await stream.GetAllBytesAsync();
result.SequenceEqual(testContent).ShouldBeTrue();
}
}
}
}
Loading…
Cancel
Save