Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("storage").RunAsEmulator(container =>
{
container.WithDataBindMount();
});
var storage = builder.AddAzureStorage("storage");
//.RunAsEmulator(container =>
//{
// container.WithDataBindMount();
//});
Comment thread
davidfowl marked this conversation as resolved.
Outdated

var blobs = storage.AddBlobs("blobs");
blobs.AddBlobContainer("mycontainer1", blobContainerName: "test-container-1");
blobs.AddBlobContainer("mycontainer2", blobContainerName: "test-container-2");

var queues = storage.AddQueues("queues");

var storage2 = builder.AddAzureStorage("storage2").RunAsEmulator(container =>
{
container.WithDataBindMount();
});
var storage2 = builder.AddAzureStorage("storage2");
// .RunAsEmulator(container =>
//{
// container.WithDataBindMount();
//});
var blobs2 = storage2.AddBlobs("blobs2");
var blobContainer2 = blobs2.AddBlobContainer("foocontainer", blobContainerName: "foo-container");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ void IConnectionStringSettings.ParseConnectionString(string? connectionString)
const string ContainerName = nameof(ContainerName);

DbConnectionStringBuilder builder = new() { ConnectionString = connectionString };
if (builder.TryGetValue(Endpoint, out var endpoint) && builder.TryGetValue(ContainerName, out var containerName))
if (builder.TryGetValue(Endpoint, out var endpoint) && endpoint is string endpointValue && builder.TryGetValue(ContainerName, out var containerName))
{
ConnectionString = endpoint.ToString();
// endpoint can be a URI (azure deployment) or key/value pairs (emulator)
base.ParseConnectionStringInternal(endpointValue);
Comment thread
sebastienros marked this conversation as resolved.
Outdated
BlobContainerName = containerName.ToString();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ public class AzureStorageBlobsSettings : IConnectionStringSettings
public bool DisableTracing { get; set; }

void IConnectionStringSettings.ParseConnectionString(string? connectionString)
{
ParseConnectionStringInternal(connectionString);
}

internal virtual void ParseConnectionStringInternal(string? connectionString)
{
if (!string.IsNullOrEmpty(connectionString))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ namespace Aspire.Hosting.Azure.Tests;

public class AzureBlobStorageContainerSettingsTests
{
private const string EmulatorConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1";

[Theory]
[InlineData(null)]
[InlineData("")]
Expand All @@ -18,11 +20,14 @@ public class AzureBlobStorageContainerSettingsTests
[InlineData("Endpoint=https://example.blob.core.windows.net;ExtraParam=value;")]
public void ParseConnectionString_invalid_input(string? connectionString)
{
// Both Endpoint and ContainerName are required in a blob resource connection string.

var settings = new AzureBlobStorageContainerSettings();

((IConnectionStringSettings)settings).ParseConnectionString(connectionString);

Assert.Null(settings.ConnectionString);
Assert.Null(settings.ServiceUri);
Assert.Null(settings.BlobContainerName);
}

Expand All @@ -40,13 +45,42 @@ public void ParseConnectionString_invalid_input_results_in_AE()
[InlineData("Endpoint=https://example.blob.core.windows.net;ContainerName=my-container;ExtraParam=value")]
[InlineData("endpoint=https://example.blob.core.windows.net;containername=my-container")]
[InlineData("ENDPOINT=https://example.blob.core.windows.net;CONTAINERNAME=my-container")]
public void ParseConnectionString_valid_input(string connectionString)
[InlineData("Endpoint=\"https://example.blob.core.windows.net\";ContainerName=\"my-container\"")]
public void ParseConnectionString_With_ServiceUri(string connectionString)
{
var settings = new AzureBlobStorageContainerSettings();

((IConnectionStringSettings)settings).ParseConnectionString(connectionString);

Assert.Equal("https://example.blob.core.windows.net/", settings.ServiceUri?.ToString());
Assert.Equal("my-container", settings.BlobContainerName);
}

[Theory]
[InlineData($"Endpoint=\"{EmulatorConnectionString}\";ContainerName=my-container")]
[InlineData($"Endpoint=\"{EmulatorConnectionString}\";ContainerName=\"my-container\"")]
public void ParseConnectionString_With_ConnectionString(string connectionString)
{
var settings = new AzureBlobStorageContainerSettings();

((IConnectionStringSettings)settings).ParseConnectionString(connectionString);

Assert.Equal(EmulatorConnectionString, settings.ConnectionString);
Assert.Equal("my-container", settings.BlobContainerName);
Assert.Null(settings.ServiceUri);
}

[Theory]
[InlineData($"Endpoint=not-a-uri;ContainerName=my-container")]
[InlineData($"Endpoint=\"not-a-uri\";ContainerName=my-container")]
public void ParseConnectionString_With_NotAUri(string connectionString)
{
var settings = new AzureBlobStorageContainerSettings();

((IConnectionStringSettings)settings).ParseConnectionString(connectionString);

Assert.Equal("https://example.blob.core.windows.net", settings.ConnectionString);
Assert.Equal("not-a-uri", settings.ConnectionString);
Assert.Equal("my-container", settings.BlobContainerName);
Assert.Null(settings.ServiceUri);
}
}
Loading