Skip to content

Commit e0fe4a5

Browse files
[release/8.0-preview5] Fix the dapr scheme to be http so that the sidecar works (#3297)
* Fix the dapr scheme to be http so that the sidecar works * Added tests * Set dapr path in test --------- Co-authored-by: David Fowler <davidfowl@gmail.com>
1 parent 3736c12 commit e0fe4a5

File tree

8 files changed

+106
-6
lines changed

8 files changed

+106
-6
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
<PackageVersion Include="Testcontainers.Redis" Version="$(TestcontainersPackageVersion)" />
137137
<PackageVersion Include="Testcontainers.Nats" Version="$(TestcontainersPackageVersion)" />
138138
<!-- playground apps dependencies -->
139-
<PackageVersion Include="Dapr.AspNetCore" Version="1.12.0" />
139+
<PackageVersion Include="Dapr.AspNetCore" Version="1.13.0" />
140140
<PackageVersion Include="Microsoft.Orleans.Clustering.AzureStorage" Version="8.1.0-nightly.20240126.1" />
141141
<PackageVersion Include="Microsoft.Orleans.Persistence.AzureStorage" Version="8.1.0-nightly.20240126.1" />
142142
<PackageVersion Include="Microsoft.Orleans.Server" Version="8.1.0-nightly.20240126.1" />

src/Aspire.Hosting.Dapr/Aspire.Hosting.Dapr.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,8 @@
1515
<ProjectReference Include="..\Aspire.Hosting\Aspire.Hosting.csproj" />
1616
</ItemGroup>
1717

18+
<ItemGroup>
19+
<InternalsVisibleTo Include="Aspire.Hosting.Tests" />
20+
</ItemGroup>
21+
1822
</Project>

src/Aspire.Hosting.Dapr/DaprDistributedApplicationLifecycleHook.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ public async Task BeforeStartAsync(DistributedApplicationModel appModel, Cancell
151151
context.EnvironmentVariables.TryAdd("DAPR_HTTP_ENDPOINT", http);
152152
}));
153153

154-
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: "grpc", port: sidecarOptions?.DaprGrpcPort));
155-
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: "http", port: sidecarOptions?.DaprHttpPort));
156-
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: "metrics", port: sidecarOptions?.MetricsPort));
154+
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, uriScheme: "http", name: "grpc", port: sidecarOptions?.DaprGrpcPort));
155+
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, uriScheme: "http", name: "http", port: sidecarOptions?.DaprHttpPort));
156+
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, uriScheme: "http", name: "metrics", port: sidecarOptions?.MetricsPort));
157157
if (sidecarOptions?.EnableProfiling == true)
158158
{
159159
daprCli.Annotations.Add(new EndpointAnnotation(ProtocolType.Tcp, name: "profile", port: sidecarOptions?.ProfilePort));

src/Aspire.Hosting.Dapr/IDistributedApplicationBuilderExtensions.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ public static IResourceBuilder<IDaprComponentResource> AddDaprComponent(this IDi
4646

4747
return builder
4848
.AddResource(resource)
49+
.WithInitialState(new()
50+
{
51+
Properties = [],
52+
ResourceType = "DaprComponent",
53+
State = "Hidden"
54+
})
4955
.WithAnnotation(new ManifestPublishingCallbackAnnotation(context => WriteDaprComponentResourceToManifest(context, resource)));
5056
}
5157

src/Aspire.Hosting.Dapr/IDistributedApplicationComponentBuilderExtensions.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,13 @@ public static IResourceBuilder<T> WithDaprSidecar<T>(this IResourceBuilder<T> bu
5454
// Add Dapr is idempoent, so we can call it multiple times.
5555
builder.ApplicationBuilder.AddDapr();
5656

57-
var sidecarBuilder = builder.ApplicationBuilder.AddResource(new DaprSidecarResource($"{builder.Resource.Name}-dapr"));
57+
var sidecarBuilder = builder.ApplicationBuilder.AddResource(new DaprSidecarResource($"{builder.Resource.Name}-dapr"))
58+
.WithInitialState(new()
59+
{
60+
Properties = [],
61+
ResourceType = "DaprSidecar",
62+
State = "Hidden"
63+
});
5864

5965
configureSidecar(sidecarBuilder);
6066

src/Aspire.Hosting/DistributedApplication.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ public void Run()
110110
RunAsync().Wait();
111111
}
112112

113-
private async Task ExecuteBeforeStartHooksAsync(CancellationToken cancellationToken)
113+
// Internal for testing
114+
internal async Task ExecuteBeforeStartHooksAsync(CancellationToken cancellationToken)
114115
{
115116
AspireEventSource.Instance.AppBeforeStartHooksStart();
116117

tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<ProjectReference Include="..\..\src\Aspire.Hosting.Azure.OperationalInsights\Aspire.Hosting.Azure.OperationalInsights.csproj" IsAspireProjectResource="false" />
2828
<ProjectReference Include="..\..\src\Aspire.Hosting.Azure.ApplicationInsights\Aspire.Hosting.Azure.ApplicationInsights.csproj" IsAspireProjectResource="false" />
2929
<ProjectReference Include="..\..\src\Aspire.Hosting.Azure.AppConfiguration\Aspire.Hosting.Azure.AppConfiguration.csproj" IsAspireProjectResource="false" />
30+
<ProjectReference Include="..\..\src\Aspire.Hosting.Dapr\Aspire.Hosting.Dapr.csproj" />
3031
<ProjectReference Include="..\..\src\Aspire.Hosting.MongoDB\Aspire.Hosting.MongoDB.csproj" IsAspireProjectResource="false" />
3132
<ProjectReference Include="..\..\src\Aspire.Hosting.MySql\Aspire.Hosting.MySql.csproj" IsAspireProjectResource="false" />
3233
<ProjectReference Include="..\..\src\Aspire.Hosting.Nats\Aspire.Hosting.Nats.csproj" IsAspireProjectResource="false" />
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using Aspire.Hosting.Dapr;
5+
using Aspire.Hosting.Tests.Utils;
6+
using Aspire.Hosting.Utils;
7+
using Microsoft.Extensions.DependencyInjection;
8+
using Xunit;
9+
10+
namespace Aspire.Hosting.Tests.Dapr;
11+
12+
public class DaprTests
13+
{
14+
[Fact]
15+
public async Task WithDaprSideCarAddsAnnotationAndSidecarResource()
16+
{
17+
using var builder = TestDistributedApplicationBuilder.Create();
18+
builder.AddDapr(o =>
19+
{
20+
// Fake path to avoid throwing
21+
o.DaprPath = "dapr";
22+
});
23+
24+
builder.AddContainer("name", "image")
25+
.WithEndpoint("http", e =>
26+
{
27+
e.Port = 8000;
28+
e.AllocatedEndpoint = new(e, "localhost", 80);
29+
})
30+
.WithDaprSidecar();
31+
32+
using var app = builder.Build();
33+
await app.ExecuteBeforeStartHooksAsync(default);
34+
35+
var model = app.Services.GetRequiredService<DistributedApplicationModel>();
36+
37+
Assert.Equal(3, model.Resources.Count);
38+
var container = Assert.Single(model.Resources.OfType<ContainerResource>());
39+
var sidecarResource = Assert.Single(model.Resources.OfType<IDaprSidecarResource>());
40+
var sideCarCli = Assert.Single(model.Resources.OfType<ExecutableResource>());
41+
42+
Assert.True(sideCarCli.TryGetEndpoints(out var endpoints));
43+
44+
var ports = new Dictionary<string, int>
45+
{
46+
["http"] = 3500,
47+
["grpc"] = 50001,
48+
["metrics"] = 9090
49+
};
50+
51+
foreach (var e in endpoints)
52+
{
53+
e.AllocatedEndpoint = new(e, "localhost", ports[e.Name]);
54+
}
55+
56+
var config = await EnvironmentVariableEvaluator.GetEnvironmentVariablesAsync(container);
57+
var sidecarArgs = await ArgumentEvaluator.GetArgumentListAsync(sideCarCli);
58+
59+
Assert.Equal("http://localhost:3500", config["DAPR_HTTP_ENDPOINT"]);
60+
Assert.Equal("http://localhost:50001", config["DAPR_GRPC_ENDPOINT"]);
61+
62+
var expectedArgs = new[]
63+
{
64+
"run",
65+
"--app-id",
66+
"name",
67+
"--app-port",
68+
"80",
69+
"--dapr-grpc-port",
70+
"{{- portForServing \"name-dapr-cli_grpc\" -}}",
71+
"--dapr-http-port",
72+
"{{- portForServing \"name-dapr-cli_http\" -}}",
73+
"--metrics-port",
74+
"{{- portForServing \"name-dapr-cli_metrics\" -}}",
75+
"--app-channel-address",
76+
"localhost"
77+
};
78+
79+
Assert.Equal(expectedArgs, sidecarArgs);
80+
Assert.NotNull(container.Annotations.OfType<DaprSidecarAnnotation>());
81+
}
82+
}

0 commit comments

Comments
 (0)