diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml
index 26ea558..c968cdb 100644
--- a/.github/workflows/docker-build-push.yml
+++ b/.github/workflows/docker-build-push.yml
@@ -1,7 +1,7 @@
name: Adliance.AzureBlobSimulator
env:
- VERSION: 1.0.0.${{ github.run_number }}
+ VERSION: 1.1.0.${{ github.run_number }}
on:
push:
@@ -18,7 +18,7 @@ jobs:
- name: 'Setup .NET'
uses: actions/setup-dotnet@v3
with:
- dotnet-version: '9.0.x'
+ dotnet-version: '10.0.x'
- name: 'Run tests'
run: dotnet test --configuration Release
diff --git a/Adliance.AzureBlobSimulator.sln b/Adliance.AzureBlobSimulator.sln
deleted file mode 100644
index 67acffc..0000000
--- a/Adliance.AzureBlobSimulator.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-#
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Adliance.AzureBlobSimulator", "src\Adliance.AzureBlobSimulator\Adliance.AzureBlobSimulator.csproj", "{94AF4640-39F3-45B0-80D7-B4E10746E63B}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Adliance.AzureBlobSimulator.Tests", "test\Adliance.AzureBlobSimulator.Tests\Adliance.AzureBlobSimulator.Tests.csproj", "{38867EAF-A4C4-4C69-B14F-F9CBA07D812C}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F3A9EDE3-F084-4676-9063-B0A5F8DF4685}"
- ProjectSection(SolutionItems) = preProject
- README.md = README.md
- .gitignore = .gitignore
- dockerfile = dockerfile
- docker-build-push.yml = .github/workflows/docker-build-push.yml
- EndProjectSection
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {94AF4640-39F3-45B0-80D7-B4E10746E63B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {94AF4640-39F3-45B0-80D7-B4E10746E63B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {94AF4640-39F3-45B0-80D7-B4E10746E63B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {94AF4640-39F3-45B0-80D7-B4E10746E63B}.Release|Any CPU.Build.0 = Release|Any CPU
- {38867EAF-A4C4-4C69-B14F-F9CBA07D812C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {38867EAF-A4C4-4C69-B14F-F9CBA07D812C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {38867EAF-A4C4-4C69-B14F-F9CBA07D812C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {38867EAF-A4C4-4C69-B14F-F9CBA07D812C}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
-EndGlobal
diff --git a/Adliance.AzureBlobSimulator.slnx b/Adliance.AzureBlobSimulator.slnx
new file mode 100644
index 0000000..81acc71
--- /dev/null
+++ b/Adliance.AzureBlobSimulator.slnx
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/dockerfile b/dockerfile
index 0206a44..33ca0b0 100644
--- a/dockerfile
+++ b/dockerfile
@@ -1,4 +1,4 @@
-FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
ARG VERSION=0.0.0.0
RUN dotnet tool install -g dotnet-setversion
ENV PATH="${PATH}:/root/.dotnet/tools"
@@ -7,7 +7,7 @@ WORKDIR /src/Adliance.AzureBlobSimulator
RUN setversion $VERSION
RUN dotnet publish "Adliance.AzureBlobSimulator.csproj" -c Release -o /app/publish
-FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
EXPOSE 80
WORKDIR /app
ENV ASPNETCORE_HTTP_PORTS=80
diff --git a/src/Adliance.AzureBlobSimulator/Adliance.AzureBlobSimulator.csproj b/src/Adliance.AzureBlobSimulator/Adliance.AzureBlobSimulator.csproj
index c80a213..7c079b9 100644
--- a/src/Adliance.AzureBlobSimulator/Adliance.AzureBlobSimulator.csproj
+++ b/src/Adliance.AzureBlobSimulator/Adliance.AzureBlobSimulator.csproj
@@ -1,13 +1,10 @@
-
-
- net9.0
- enable
- enable
-
-
-
-
-
-
-
+
+ net10.0
+ enable
+ enable
+
+
+
+
+
\ No newline at end of file
diff --git a/test/Adliance.AzureBlobSimulator.Tests/Adliance.AzureBlobSimulator.Tests.csproj b/test/Adliance.AzureBlobSimulator.Tests/Adliance.AzureBlobSimulator.Tests.csproj
index 593a05a..6233bfc 100644
--- a/test/Adliance.AzureBlobSimulator.Tests/Adliance.AzureBlobSimulator.Tests.csproj
+++ b/test/Adliance.AzureBlobSimulator.Tests/Adliance.AzureBlobSimulator.Tests.csproj
@@ -1,35 +1,30 @@
-
- net9.0
+ net10.0
enable
enable
false
-
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
+
\ No newline at end of file
diff --git a/test/Adliance.AzureBlobSimulator.Tests/Controllers/BlobControllerTests.cs b/test/Adliance.AzureBlobSimulator.Tests/Controllers/BlobControllerTests.cs
index 53dfa84..57bebdb 100644
--- a/test/Adliance.AzureBlobSimulator.Tests/Controllers/BlobControllerTests.cs
+++ b/test/Adliance.AzureBlobSimulator.Tests/Controllers/BlobControllerTests.cs
@@ -70,7 +70,6 @@ public async Task Can_Get_Properties_of_Blob()
var containerPath = Path.Combine(TestStoragePath, containerName);
Directory.CreateDirectory(containerPath);
await File.WriteAllBytesAsync(Path.Combine(containerPath, blobName), "Hello World!"u8.ToArray());
- ;
var containerClient = BlobServiceClient.GetBlobContainerClient(containerName);
var blobClient = containerClient.GetBlobClient(blobName);
diff --git a/test/Adliance.AzureBlobSimulator.Tests/Controllers/ContainersControllerTests.cs b/test/Adliance.AzureBlobSimulator.Tests/Controllers/ContainersControllerTests.cs
index 26c82d6..be4c423 100644
--- a/test/Adliance.AzureBlobSimulator.Tests/Controllers/ContainersControllerTests.cs
+++ b/test/Adliance.AzureBlobSimulator.Tests/Controllers/ContainersControllerTests.cs
@@ -1,34 +1,72 @@
using Azure.Storage.Blobs.Models;
using Microsoft.AspNetCore.Mvc.Testing;
+using Microsoft.Extensions.Configuration;
namespace Adliance.AzureBlobSimulator.Tests.Controllers;
public class ContainersControllerTests(WebApplicationFactory factory) : ControllerTestBase(factory)
{
[Fact]
- public async Task Can_Get_List_of_Containers()
+ public async Task GetsContainerListSuccessfully()
{
- var containerNames = new[]
+ var containerNames = new Dictionary
{
- "container1",
- "container2",
- "test-container"
+ //
+ { "container1", "folder1" },
+ { "container2", "folder2" },
+ { "test-container", "test-folder" }
};
- foreach (var containerName in containerNames)
+ foreach (var containerPath in containerNames.Values.Select(folder => Path.Combine(TestStoragePath, folder)))
{
- var containerPath = Path.Combine(TestStoragePath, containerName);
Directory.CreateDirectory(containerPath);
}
+ // create new factory to test different folder name and container name
+ var customFactory = Factory.WithWebHostBuilder(builder =>
+ {
+ builder.ConfigureAppConfiguration((_, config) =>
+ {
+ //overwrite existing config for LocalPath to prevent autodetection
+ var dict = new Dictionary
+ {
+ ["Storage:LocalPath"] = Path.Combine(TestStoragePath, "empty")
+ };
+
+ var i = 0;
+ foreach (var (name, folder) in containerNames)
+ {
+ dict[$"Storage:Containers:{i}:Name"] = name;
+ dict[$"Storage:Containers:{i}:LocalPath"] = Path.GetFullPath(Path.Combine(TestStoragePath, folder));
+ i++;
+ }
+
+ config.AddInMemoryCollection(dict);
+ });
+ });
+
+ Directory.CreateDirectory(Path.Combine(TestStoragePath, "empty"));
+
+ var options = new Azure.Storage.Blobs.BlobClientOptions
+ {
+ Transport = new Azure.Core.Pipeline.HttpClientTransport(customFactory.CreateClient())
+ };
+ var client = new Azure.Storage.Blobs.BlobServiceClient(new Uri("http://localhost"), new Azure.Storage.StorageSharedKeyCredential(StorageAccountName, StorageAccountKey), options);
+
var containers = new List();
- await foreach (var container in BlobServiceClient.GetBlobContainersAsync()) containers.Add(container);
+ await foreach (var container in client.GetBlobContainersAsync())
+ {
+ containers.Add(container);
+ }
Assert.NotEmpty(containers);
- Assert.Equal(2 + containerNames.Length, containers.Count);
+ Assert.Equal(2 + containerNames.Count, containers.Count);
Assert.Contains(containers, c => c.Name == "$logs");
Assert.Contains(containers, c => c.Name == "$blobchangefeed");
- foreach (var containerName in containerNames) Assert.Contains(containers, c => c.Name == containerName);
+ foreach (var (name, _) in containerNames)
+ {
+ Assert.Contains(containers, c => c.Name == name);
+ }
}
[Fact]
diff --git a/test/Adliance.AzureBlobSimulator.Tests/SharedAccessSignature/SasAuthenticationMiddlewareTests.cs b/test/Adliance.AzureBlobSimulator.Tests/SharedAccessSignature/SasAuthenticationMiddlewareTests.cs
index 56d2b2f..e474ca6 100644
--- a/test/Adliance.AzureBlobSimulator.Tests/SharedAccessSignature/SasAuthenticationMiddlewareTests.cs
+++ b/test/Adliance.AzureBlobSimulator.Tests/SharedAccessSignature/SasAuthenticationMiddlewareTests.cs
@@ -6,6 +6,7 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
namespace Adliance.AzureBlobSimulator.Tests.SharedAccessSignature;
@@ -20,41 +21,47 @@ public class SasAuthenticationMiddlewareTests
public SasAuthenticationMiddlewareTests()
{
- var builder = new WebHostBuilder()
- .ConfigureServices(services =>
+ var host = new HostBuilder()
+ .ConfigureWebHost(webBuilder =>
{
- services.Configure(options =>
- {
- options.Accounts =
- [
- new StorageAccountOptions
+ webBuilder
+ .UseTestServer()
+ .ConfigureServices(services =>
+ {
+ services.Configure(options =>
{
- Name = "testaccount",
- Key = Convert.ToBase64String(
- Encoding.UTF8.GetBytes("1234567890123456"))
- }
- ];
- });
-
- services.AddSingleton();
- })
- .Configure(app =>
- {
- app.UseMiddleware();
+ options.Accounts =
+ [
+ new StorageAccountOptions
+ {
+ Name = "testaccount",
+ Key = Convert.ToBase64String(
+ Encoding.UTF8.GetBytes("1234567890123456"))
+ }
+ ];
+ });
+
+ services.AddSingleton();
+ })
+ .Configure(app =>
+ {
+ app.UseMiddleware();
- app.Run(context =>
- {
- context.Response.StatusCode = 200;
- return Task.CompletedTask;
- });
- });
+ app.Run(context =>
+ {
+ context.Response.StatusCode = 200;
+ return Task.CompletedTask;
+ });
+ });
+ })
+ .Start();
- var server = new TestServer(builder);
- _client = server.CreateClient();
+ _client = host.GetTestClient();
+ var options = host.Services.GetRequiredService>();
var env = new TestHostEnvironment();
- var options = server.Services.GetRequiredService>();
var validator = new SasValidatorService(options, null, env);
+
_sasHelper = new SasHelper(options, validator);
}