Browse Source

Add unit tests

pull/4826/head
liangshiwei 6 years ago
parent
commit
ecd234de98
  1. 7
      framework/Volo.Abp.sln
  2. 12
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAwsModule.cs
  3. 10
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAzureModule.cs
  4. 14
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs
  5. 24
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs
  6. 2
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfigurationNames.cs
  7. 10
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsTemporaryCredentialsCacheItem.cs
  8. 46
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/DefaultAmazonS3ClientFactory.cs
  9. 22
      framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/DefaultAwsBlobNameCalculator.cs
  10. 19
      framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj
  11. 20
      framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAwsTestBase.cs
  12. 91
      framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAwsTestModule.cs
  13. 16
      framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AwsBlobContainer_Tests.cs
  14. 57
      framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AwsBlobNameCalculator_Tests.cs
  15. 57
      framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/DefaultAwsBlobNamingNormalizerProvider_Tests.cs

7
framework/Volo.Abp.sln

@ -321,6 +321,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aliyun
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Aws", "src\Volo.Abp.BlobStoring.Aws\Volo.Abp.BlobStoring.Aws.csproj", "{50968CDE-1029-4051-B2E5-B69D0ECF2A18}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Aws.Tests", "test\Volo.Abp.BlobStoring.Aws.Tests\Volo.Abp.BlobStoring.Aws.Tests.csproj", "{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -955,6 +957,10 @@ Global
{50968CDE-1029-4051-B2E5-B69D0ECF2A18}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50968CDE-1029-4051-B2E5-B69D0ECF2A18}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50968CDE-1029-4051-B2E5-B69D0ECF2A18}.Release|Any CPU.Build.0 = Release|Any CPU
{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1117,6 +1123,7 @@ Global
{845E6A13-D1B5-4DDC-A16C-68D807E3B4C7} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{8E49687A-E69F-49F2-8DB0-428D0883A937} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{50968CDE-1029-4051-B2E5-B69D0ECF2A18} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{2CD3B26A-CA81-4279-8D5D-6A594517BB3F} = {447C8A77-E5F0-4538-8687-7383196D04EA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}

12
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAwsModule.cs

@ -0,0 +1,12 @@
using Volo.Abp.Caching;
using Volo.Abp.Modularity;
namespace Volo.Abp.BlobStoring.Aws
{
[DependsOn(typeof(AbpBlobStoringModule),
typeof(AbpCachingModule))]
public class AbpBlobStoringAwsModule : AbpModule
{
}
}

10
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAzureModule.cs

@ -1,10 +0,0 @@
using Volo.Abp.Modularity;
namespace Volo.Abp.BlobStoring.Azure
{
[DependsOn(typeof(AbpBlobStoringModule))]
public class AbpBlobStoringAzureModule : AbpModule
{
}
}

14
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProvider.cs

@ -36,7 +36,7 @@ namespace Volo.Abp.BlobStoring.Aws
if (configuration.CreateContainerIfNotExists)
{
await amazonS3Client.PutBucketAsync(containerName);
await CreateContainerIfNotExists(amazonS3Client, containerName);
}
await amazonS3Client.PutObjectAsync(new PutObjectRequest
@ -108,7 +108,6 @@ namespace Volo.Abp.BlobStoring.Aws
protected virtual async Task<AmazonS3Client> GetAmazonS3Client(BlobProviderArgs args)
{
var configuration = args.Configuration.GetAwsConfiguration();
return await AmazonS3ClientFactory.GetAmazonS3Client(configuration);
}
@ -137,6 +136,17 @@ namespace Volo.Abp.BlobStoring.Aws
return true;
}
protected virtual async Task CreateContainerIfNotExists(AmazonS3Client amazonS3Client, string containerName)
{
if (!await AmazonS3Util.DoesS3BucketExistV2Async(amazonS3Client, containerName))
{
await amazonS3Client.PutBucketAsync(new PutBucketRequest
{
BucketName = containerName
});
}
}
private static string GetContainerName(BlobProviderArgs args)
{
var configuration = args.Configuration.GetAwsConfiguration();

24
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfiguration.cs

@ -9,43 +9,43 @@ namespace Volo.Abp.BlobStoring.Aws
{
public string AccessKeyId
{
get => _containerConfiguration.GetConfiguration<string>(AwsBlobProviderConfigurationNames.AccessKeyId);
get => _containerConfiguration.GetConfigurationOrDefault<string>(AwsBlobProviderConfigurationNames.AccessKeyId);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.AccessKeyId, value);
}
public string SecretAccessKey
{
get => _containerConfiguration.GetConfiguration<string>(AwsBlobProviderConfigurationNames.SecretAccessKey);
get => _containerConfiguration.GetConfigurationOrDefault<string>(AwsBlobProviderConfigurationNames.SecretAccessKey);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.SecretAccessKey, value);
}
public bool UseAwsCredentials
public bool UseCredentials
{
get => _containerConfiguration.GetConfiguration<bool>(AwsBlobProviderConfigurationNames.UseAwsCredentials);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.UseAwsCredentials, value);
get => _containerConfiguration.GetConfigurationOrDefault(AwsBlobProviderConfigurationNames.UseCredentials,false);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.UseCredentials, value);
}
public bool UseTemporaryCredentials
{
get => _containerConfiguration.GetConfiguration<bool>(AwsBlobProviderConfigurationNames.UseTemporaryCredentials);
get => _containerConfiguration.GetConfigurationOrDefault(AwsBlobProviderConfigurationNames.UseTemporaryCredentials,false);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.UseTemporaryCredentials, value);
}
public bool UseTemporaryFederatedCredentials
{
get => _containerConfiguration.GetConfiguration<bool>(AwsBlobProviderConfigurationNames.UseTemporaryFederatedCredentials);
get => _containerConfiguration.GetConfigurationOrDefault(AwsBlobProviderConfigurationNames.UseTemporaryFederatedCredentials,false);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.UseTemporaryFederatedCredentials, value);
}
public string ProfileName
{
get => _containerConfiguration.GetConfiguration<string>(AwsBlobProviderConfigurationNames.ProfileName);
get => _containerConfiguration.GetConfigurationOrDefault<string>(AwsBlobProviderConfigurationNames.ProfileName);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.ProfileName, value);
}
public string ProfilesLocation
{
get => _containerConfiguration.GetConfiguration<string>(AwsBlobProviderConfigurationNames.ProfilesLocation);
get => _containerConfiguration.GetConfigurationOrDefault<string>(AwsBlobProviderConfigurationNames.ProfilesLocation);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.ProfilesLocation, value);
}
@ -66,13 +66,13 @@ namespace Volo.Abp.BlobStoring.Aws
public string Policy
{
get => _containerConfiguration.GetConfiguration<string>(AwsBlobProviderConfigurationNames.Policy);
get => _containerConfiguration.GetConfigurationOrDefault<string>(AwsBlobProviderConfigurationNames.Policy);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.Policy, value);
}
public RegionEndpoint Region
public string Region
{
get => _containerConfiguration.GetConfiguration<RegionEndpoint>(AwsBlobProviderConfigurationNames.Region);
get => _containerConfiguration.GetConfiguration<string>(AwsBlobProviderConfigurationNames.Region);
set => _containerConfiguration.SetConfiguration(AwsBlobProviderConfigurationNames.Region, Check.NotNull(value, nameof(value)));
}

2
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsBlobProviderConfigurationNames.cs

@ -4,7 +4,7 @@
{
public const string AccessKeyId = "Aws.AccessKeyId";
public const string SecretAccessKey = "Aws.SecretAccessKey";
public const string UseAwsCredentials = "Aws.UseAWSCredentials";
public const string UseCredentials = "Aws.UseCredentials";
public const string UseTemporaryCredentials = "Aws.UseTemporaryCredentials";
public const string UseTemporaryFederatedCredentials = "Aws.UseTemporaryFederatedCredentials";
public const string ProfileName = "Aws.ProfileName";

10
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AssumeRoleCredentialsCacheItem.cs → framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/AwsTemporaryCredentialsCacheItem.cs

@ -1,13 +1,11 @@
using System;
using Volo.Abp.Caching;
namespace Volo.Abp.BlobStoring.Aws
{
[Serializable]
[CacheName("TemporaryCredentials")]
public class TemporaryCredentialsCacheItem
public class AwsTemporaryCredentialsCacheItem
{
public const string Key = "AwsTemporaryCredentialsCache";
public const string Key = "AwsBlobTemporaryCredentialsCache";
public string AccessKeyId { get; set; }
@ -15,12 +13,12 @@ namespace Volo.Abp.BlobStoring.Aws
public string SessionToken { get; set; }
public TemporaryCredentialsCacheItem()
public AwsTemporaryCredentialsCacheItem()
{
}
public TemporaryCredentialsCacheItem(string accessKeyId,string secretAccessKey,string sessionToken)
public AwsTemporaryCredentialsCacheItem(string accessKeyId,string secretAccessKey,string sessionToken)
{
AccessKeyId = accessKeyId;
SecretAccessKey = secretAccessKey;

46
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/DefaultAmazonS3ClientFactory.cs

@ -1,5 +1,6 @@
using System;
using System.Threading.Tasks;
using Amazon;
using Amazon.Runtime;
using Amazon.Runtime.CredentialManagement;
using Amazon.S3;
@ -13,9 +14,9 @@ namespace Volo.Abp.BlobStoring.Aws
{
public class DefaultAmazonS3ClientFactory : IAmazonS3ClientFactory, ITransientDependency
{
protected IDistributedCache<TemporaryCredentialsCacheItem> Cache { get; }
protected IDistributedCache<AwsTemporaryCredentialsCacheItem> Cache { get; }
public DefaultAmazonS3ClientFactory(IDistributedCache<TemporaryCredentialsCacheItem> cache)
public DefaultAmazonS3ClientFactory(IDistributedCache<AwsTemporaryCredentialsCacheItem> cache)
{
Cache = cache;
}
@ -23,31 +24,41 @@ namespace Volo.Abp.BlobStoring.Aws
public virtual async Task<AmazonS3Client> GetAmazonS3Client(
AwsBlobProviderConfiguration configuration)
{
if (configuration.UseAwsCredentials)
var region = RegionEndpoint.GetBySystemName(configuration.Region);
if (configuration.UseCredentials)
{
return new AmazonS3Client(GetAwsCredentials(configuration), configuration.Region);
var awsCredentials = GetAwsCredentials(configuration);
return awsCredentials == null
? new AmazonS3Client(region)
: new AmazonS3Client(GetAwsCredentials(configuration), region);
}
if (configuration.UseTemporaryCredentials)
{
return new AmazonS3Client(await GetTemporaryCredentialsAsync(configuration), configuration.Region);
return new AmazonS3Client(await GetTemporaryCredentialsAsync(configuration), region);
}
if (configuration.UseTemporaryFederatedCredentials)
{
return new AmazonS3Client(await GetTemporaryFederatedCredentialsAsync(configuration),
configuration.Region);
region);
}
Check.NotNullOrWhiteSpace(configuration.AccessKeyId, nameof(configuration.AccessKeyId));
Check.NotNullOrWhiteSpace(configuration.SecretAccessKey, nameof(configuration.SecretAccessKey));
return new AmazonS3Client(configuration.AccessKeyId, configuration.SecretAccessKey);
return new AmazonS3Client(configuration.AccessKeyId, configuration.SecretAccessKey, configuration.Region);
}
protected virtual AWSCredentials GetAwsCredentials(
AwsBlobProviderConfiguration configuration)
{
if (configuration.ProfileName.IsNullOrWhiteSpace())
{
return null;
}
var chain = new CredentialProfileStoreChain(configuration.ProfilesLocation);
if (chain.TryGetAWSCredentials(configuration.ProfileName, out var awsCredentials))
@ -61,7 +72,7 @@ namespace Volo.Abp.BlobStoring.Aws
protected virtual async Task<SessionAWSCredentials> GetTemporaryCredentialsAsync(
AwsBlobProviderConfiguration configuration)
{
var temporaryCredentialsCache = await Cache.GetAsync(TemporaryCredentialsCacheItem.Key);
var temporaryCredentialsCache = await Cache.GetAsync(AwsTemporaryCredentialsCacheItem.Key);
if (temporaryCredentialsCache == null)
{
@ -74,7 +85,10 @@ namespace Volo.Abp.BlobStoring.Aws
}
else
{
stsClient = new AmazonSecurityTokenServiceClient(GetAwsCredentials(configuration));
var awsCredentials = GetAwsCredentials(configuration);
stsClient = awsCredentials == null
? new AmazonSecurityTokenServiceClient()
: new AmazonSecurityTokenServiceClient(awsCredentials);
}
using (stsClient)
@ -105,8 +119,9 @@ namespace Volo.Abp.BlobStoring.Aws
AwsBlobProviderConfiguration configuration)
{
Check.NotNullOrWhiteSpace(configuration.Name, nameof(configuration.Name));
Check.NotNullOrWhiteSpace(configuration.Policy, nameof(configuration.Policy));
var temporaryCredentialsCache = await Cache.GetAsync(TemporaryCredentialsCacheItem.Key);
var temporaryCredentialsCache = await Cache.GetAsync(AwsTemporaryCredentialsCacheItem.Key);
if (temporaryCredentialsCache == null)
{
@ -119,7 +134,10 @@ namespace Volo.Abp.BlobStoring.Aws
}
else
{
stsClient = new AmazonSecurityTokenServiceClient(GetAwsCredentials(configuration));
var awsCredentials = GetAwsCredentials(configuration);
stsClient = awsCredentials == null
? new AmazonSecurityTokenServiceClient()
: new AmazonSecurityTokenServiceClient(awsCredentials);
}
using (stsClient)
@ -148,15 +166,15 @@ namespace Volo.Abp.BlobStoring.Aws
return sessionCredentials;
}
private async Task<TemporaryCredentialsCacheItem> SetTemporaryCredentialsCache(
private async Task<AwsTemporaryCredentialsCacheItem> SetTemporaryCredentialsCache(
Credentials credentials,
int durationSeconds)
{
var temporaryCredentialsCache = new TemporaryCredentialsCacheItem(credentials.AccessKeyId,
var temporaryCredentialsCache = new AwsTemporaryCredentialsCacheItem(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
await Cache.SetAsync(TemporaryCredentialsCacheItem.Key, temporaryCredentialsCache,
await Cache.SetAsync(AwsTemporaryCredentialsCacheItem.Key, temporaryCredentialsCache,
new DistributedCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(durationSeconds - 10)

22
framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/DefaultAwsBlobNameCalculator.cs

@ -0,0 +1,22 @@
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.BlobStoring.Aws
{
public class DefaultAwsBlobNameCalculator : IAwsBlobNameCalculator, ITransientDependency
{
protected ICurrentTenant CurrentTenant { get; }
public DefaultAwsBlobNameCalculator(ICurrentTenant currentTenant)
{
CurrentTenant = currentTenant;
}
public virtual string Calculate(BlobProviderArgs args)
{
return CurrentTenant.Id == null
? $"host/{args.BlobName}"
: $"tenants/{CurrentTenant.Id.Value.ToString("D")}/{args.BlobName}";
}
}
}

19
framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo.Abp.BlobStoring.Aws.Tests.csproj

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.test.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace />
<UserSecretsId>9f0d2c00-80c1-435b-bfab-2c39c8249091</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Volo.Abp.BlobStoring.Aws\Volo.Abp.BlobStoring.Aws.csproj" />
<ProjectReference Include="..\..\src\Volo.Abp.Autofac\Volo.Abp.Autofac.csproj" />
<ProjectReference Include="..\AbpTestBase\AbpTestBase.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<ProjectReference Include="..\Volo.Abp.BlobStoring.Tests\Volo.Abp.BlobStoring.Tests.csproj" />
</ItemGroup>
</Project>

20
framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAwsTestBase.cs

@ -0,0 +1,20 @@
using Volo.Abp.Testing;
namespace Volo.Abp.BlobStoring.Aws
{
public class AbpBlobStoringAwsTestCommonBase : AbpIntegratedTest<AbpBlobStoringAwsTestCommonModule>
{
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
}
public class AbpBlobStoringAwsTestBase : AbpIntegratedTest<AbpBlobStoringAwsTestModule>
{
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
}
}

91
framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AbpBlobStoringAwsTestModule.cs

@ -0,0 +1,91 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Amazon.S3.Model;
using Amazon.S3.Util;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace Volo.Abp.BlobStoring.Aws
{
/// <summary>
/// This module will not try to connect to aws.
/// </summary>
[DependsOn(
typeof(AbpBlobStoringAwsModule),
typeof(AbpBlobStoringTestModule)
)]
public class AbpBlobStoringAwsTestCommonModule : AbpModule
{
}
[DependsOn(
typeof(AbpBlobStoringAwsTestCommonModule)
)]
public class AbpBlobStoringAwsTestModule : AbpModule
{
private const string UserSecretsId = "9f0d2c00-80c1-435b-bfab-2c39c8249091";
private readonly string _randomContainerName = "abp-aws-test-container-" + Guid.NewGuid().ToString("N");
private AwsBlobProviderConfiguration _configuration;
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.ReplaceConfiguration(ConfigurationHelper.BuildConfiguration(builderAction: builder =>
{
builder.AddUserSecrets(UserSecretsId);
}));
var configuration = context.Services.GetConfiguration();
var accessKeyId = configuration["Aws:AccessKeyId"];
var secretAccessKey = configuration["Aws:SecretAccessKey"];
var region = configuration["Aws:Region"];
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.ConfigureAll((containerName, containerConfiguration) =>
{
containerConfiguration.UseAws(aws =>
{
aws.AccessKeyId = accessKeyId;
aws.SecretAccessKey = secretAccessKey;
aws.Region = region;
aws.CreateContainerIfNotExists = true;
_configuration = aws;
});
});
});
}
public override void OnApplicationShutdown(ApplicationShutdownContext context)
{
AsyncHelper.RunSync(() => DeleteBucketAsync(context));
}
private async Task DeleteBucketAsync(ApplicationShutdownContext context)
{
var amazonS3Client = await context.ServiceProvider.GetService<IAmazonS3ClientFactory>()
.GetAmazonS3Client(_configuration);
if (await AmazonS3Util.DoesS3BucketExistV2Async(amazonS3Client, _randomContainerName))
{
var blobs = await amazonS3Client.ListObjectsAsync(_randomContainerName);
if (blobs.S3Objects.Any())
{
await amazonS3Client.DeleteObjectsAsync(new DeleteObjectsRequest
{
BucketName = _randomContainerName,
Objects = blobs.S3Objects.Select(o => new KeyVersion {Key = o.Key}).ToList()
});
}
await amazonS3Client.DeleteBucketAsync(_randomContainerName);
}
}
}
}

16
framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AwsBlobContainer_Tests.cs

@ -0,0 +1,16 @@
using Xunit;
namespace Volo.Abp.BlobStoring.Aws
{
/*
//Please set the correct connection string in secrets.json and continue the test.
public class AwsBlobContainer_Tests : BlobContainer_Tests<AbpBlobStoringAwsTestModule>
{
public AwsBlobContainer_Tests()
{
}
}
*/
}

57
framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/AwsBlobNameCalculator_Tests.cs

@ -0,0 +1,57 @@
using System;
using Shouldly;
using Volo.Abp.MultiTenancy;
using Xunit;
namespace Volo.Abp.BlobStoring.Aws
{
public class AwsBlobNameCalculatorTests : AbpBlobStoringAwsTestCommonBase
{
private readonly IAwsBlobNameCalculator _calculator;
private readonly ICurrentTenant _currentTenant;
private const string AwsContainerName = "/";
private const string AwsSeparator = "/";
public AwsBlobNameCalculatorTests()
{
_calculator = GetRequiredService<IAwsBlobNameCalculator>();
_currentTenant = GetRequiredService<ICurrentTenant>();
}
[Fact]
public void Default_Settings()
{
_calculator.Calculate(
GetArgs("my-container", "my-blob")
).ShouldBe($"host{AwsSeparator}my-blob");
}
[Fact]
public void Default_Settings_With_TenantId()
{
var tenantId = Guid.NewGuid();
using (_currentTenant.Change(tenantId))
{
_calculator.Calculate(
GetArgs("my-container", "my-blob")
).ShouldBe($"tenants{AwsSeparator}{tenantId:D}{AwsSeparator}my-blob");
}
}
private static BlobProviderArgs GetArgs(
string containerName,
string blobName)
{
return new BlobProviderGetArgs(
containerName,
new BlobContainerConfiguration().UseAws(x =>
{
x.ContainerName = containerName;
}),
blobName
);
}
}
}

57
framework/test/Volo.Abp.BlobStoring.Aws.Tests/Volo/Abp/BlobStoring/Aws/DefaultAwsBlobNamingNormalizerProvider_Tests.cs

@ -0,0 +1,57 @@
using Shouldly;
using Xunit;
namespace Volo.Abp.BlobStoring.Aws
{
public class DefaultAwsBlobNamingNormalizerProviderTests : AbpBlobStoringAwsTestCommonBase
{
private readonly IBlobNamingNormalizer _blobNamingNormalizer;
public DefaultAwsBlobNamingNormalizerProviderTests()
{
_blobNamingNormalizer = GetRequiredService<IBlobNamingNormalizer>();
}
[Fact]
public void NormalizeContainerName_Lowercase()
{
var filename = "ThisIsMyContainerName";
filename = _blobNamingNormalizer.NormalizeContainerName(filename);
filename.ShouldBe("thisismycontainername");
}
[Fact]
public void NormalizeContainerName_Only_Letters_Numbers_Dash()
{
var filename = ",./this-i,./s-my-c,./ont,./ai+*/.=!@#$n^&*er-name.+/";
filename = _blobNamingNormalizer.NormalizeContainerName(filename);
filename.ShouldBe("this-is-my-container-name");
}
[Fact]
public void NormalizeContainerName_Dash()
{
var filename = "-this--is----my-container----name-";
filename = _blobNamingNormalizer.NormalizeContainerName(filename);
filename.ShouldBe("this-is-my-container-name");
}
[Fact]
public void NormalizeContainerName_Min_Length()
{
var filename = "a";
filename = _blobNamingNormalizer.NormalizeContainerName(filename);
filename.Length.ShouldBeGreaterThanOrEqualTo(3);
}
[Fact]
public void NormalizeContainerName_Max_Length()
{
var filename = "abpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabp";
filename = _blobNamingNormalizer.NormalizeContainerName(filename);
filename.Length.ShouldBeLessThanOrEqualTo(63);
}
}
}
Loading…
Cancel
Save