Skip to content

Commit 66a8999

Browse files
glen-84michaelstaib
authored andcommitted
Refactored OPA authorization tests to work with a dynamic port (#8133)
1 parent d0c528c commit 66a8999

File tree

4 files changed

+30
-18
lines changed

4 files changed

+30
-18
lines changed

src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationAttributeTestData.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ public class Query
3030
public string GetAfterResolver() => "foo";
3131
}
3232

33-
private Action<IRequestExecutorBuilder> CreateSchema() =>
34-
builder => builder
33+
private Action<IRequestExecutorBuilder, int> CreateSchema() =>
34+
(builder, port) => builder
3535
.AddQueryType<Query>()
3636
.AddOpaAuthorization(
3737
(_, o) =>
3838
{
39+
o.BaseAddress = new Uri($"http://127.0.0.1:{port}/v1/data/");
3940
o.Timeout = TimeSpan.FromMilliseconds(60000);
4041
})
4142
.AddOpaResultHandler(

src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTestData.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,13 @@ type Query {{
2727
return next.Invoke(context);
2828
};
2929

30-
private Action<IRequestExecutorBuilder> CreateSchema() =>
31-
sb => sb
30+
private Action<IRequestExecutorBuilder, int> CreateSchema() =>
31+
(builder, port) => builder
3232
.AddDocumentFromString(_sdl)
3333
.AddOpaAuthorization(
3434
(_, o) =>
3535
{
36+
o.BaseAddress = new Uri($"http://127.0.0.1:{port}/v1/data/");
3637
o.Timeout = TimeSpan.FromMilliseconds(60000);
3738
})
3839
.AddOpaResultHandler(
@@ -46,12 +47,13 @@ private Action<IRequestExecutorBuilder> CreateSchema() =>
4647
})
4748
.UseField(_schemaMiddleware);
4849

49-
private Action<IRequestExecutorBuilder> CreateSchemaWithBuilder() =>
50-
sb => sb
50+
private Action<IRequestExecutorBuilder, int> CreateSchemaWithBuilder() =>
51+
(builder, port) => builder
5152
.AddDocumentFromString(_sdl)
5253
.AddOpaAuthorization(
5354
(_, o) =>
5455
{
56+
o.BaseAddress = new Uri($"http://127.0.0.1:{port}/v1/data/");
5557
o.Timeout = TimeSpan.FromMilliseconds(60000);
5658
})
5759
.AddOpaResultHandler(

src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/AuthorizationTests.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@ private static void SetUpHttpContext(HttpContext context)
3333
[Theory]
3434
[ClassData(typeof(AuthorizationTestData))]
3535
[ClassData(typeof(AuthorizationAttributeTestData))]
36-
public async Task Policy_NotFound(Action<IRequestExecutorBuilder> configure)
36+
public async Task Policy_NotFound(Action<IRequestExecutorBuilder, int> configure)
3737
{
3838
// arrange
39+
var port = _opaHandle!.GetPort();
3940
var server = CreateTestServer(
4041
builder =>
4142
{
42-
configure(builder);
43+
configure(builder, port);
4344
builder.Services.AddAuthorization();
4445
},
4546
SetUpHttpContext);
@@ -55,13 +56,14 @@ public async Task Policy_NotFound(Action<IRequestExecutorBuilder> configure)
5556
[Theory]
5657
[ClassData(typeof(AuthorizationTestData))]
5758
[ClassData(typeof(AuthorizationAttributeTestData))]
58-
public async Task Policy_NotAuthorized(Action<IRequestExecutorBuilder> configure)
59+
public async Task Policy_NotAuthorized(Action<IRequestExecutorBuilder, int> configure)
5960
{
6061
// arrange
62+
var port = _opaHandle!.GetPort();
6163
var server = CreateTestServer(
6264
builder =>
6365
{
64-
configure(builder);
66+
configure(builder, port);
6567
builder.Services.AddAuthorization();
6668
},
6769
SetUpHttpContext + (Action<HttpContext>)(c =>
@@ -72,7 +74,7 @@ public async Task Policy_NotAuthorized(Action<IRequestExecutorBuilder> configure
7274
}));
7375

7476
var hasAgeDefinedPolicy = await File.ReadAllTextAsync("Policies/has_age_defined.rego");
75-
using var client = new HttpClient { BaseAddress = new Uri("http://127.0.0.1:8181"), };
77+
using var client = new HttpClient { BaseAddress = new Uri($"http://127.0.0.1:{port}"), };
7678

7779
var putPolicyResponse = await client.PutAsync(
7880
"/v1/policies/has_age_defined",
@@ -90,13 +92,14 @@ public async Task Policy_NotAuthorized(Action<IRequestExecutorBuilder> configure
9092
[Theory]
9193
[ClassData(typeof(AuthorizationTestData))]
9294
[ClassData(typeof(AuthorizationAttributeTestData))]
93-
public async Task Policy_Authorized(Action<IRequestExecutorBuilder> configure)
95+
public async Task Policy_Authorized(Action<IRequestExecutorBuilder, int> configure)
9496
{
9597
// arrange
98+
var port = _opaHandle!.GetPort();
9699
var server = CreateTestServer(
97100
builder =>
98101
{
99-
configure(builder);
102+
configure(builder, port);
100103
builder.Services.AddAuthorization();
101104
},
102105
SetUpHttpContext + (Action<HttpContext>)(c =>
@@ -108,7 +111,7 @@ public async Task Policy_Authorized(Action<IRequestExecutorBuilder> configure)
108111
}));
109112

110113
var hasAgeDefinedPolicy = await File.ReadAllTextAsync("Policies/has_age_defined.rego");
111-
using var client = new HttpClient { BaseAddress = new Uri("http://127.0.0.1:8181"), };
114+
using var client = new HttpClient { BaseAddress = new Uri($"http://127.0.0.1:{port}"), };
112115

113116
var putPolicyResponse = await client.PutAsync(
114117
"/v1/policies/has_age_defined",
@@ -126,13 +129,14 @@ public async Task Policy_Authorized(Action<IRequestExecutorBuilder> configure)
126129
[Theory]
127130
[ClassData(typeof(AuthorizationTestData))]
128131
[ClassData(typeof(AuthorizationAttributeTestData))]
129-
public async Task Policy_Authorized_WithExtensions(Action<IRequestExecutorBuilder> configure)
132+
public async Task Policy_Authorized_WithExtensions(Action<IRequestExecutorBuilder, int> configure)
130133
{
131134
// arrange
135+
var port = _opaHandle!.GetPort();
132136
var server = CreateTestServer(
133137
builder =>
134138
{
135-
configure(builder);
139+
configure(builder, port);
136140
builder.Services.AddAuthorization();
137141
builder.AddOpaQueryRequestExtensionsHandler(Policies.HasDefinedAge,
138142
context => context.Resource is IMiddlewareContext or AuthorizationContext
@@ -151,7 +155,7 @@ public async Task Policy_Authorized_WithExtensions(Action<IRequestExecutorBuilde
151155
}));
152156

153157
var hasAgeDefinedPolicy = await File.ReadAllTextAsync("Policies/has_age_defined.rego");
154-
using var client = new HttpClient { BaseAddress = new Uri("http://127.0.0.1:8181"), };
158+
using var client = new HttpClient { BaseAddress = new Uri($"http://127.0.0.1:{port}"), };
155159

156160
var putPolicyResponse = await client.PutAsync(
157161
"/v1/policies/has_age_defined",

src/HotChocolate/AspNetCore/test/AspNetCore.Authorization.Opa.Tests/OpaProcess/OpaProcess.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static async Task<OpaProcess> StartServerAsync()
1515
{
1616
var opaProcess = new OpaProcess(new ContainerBuilder()
1717
.WithImage("openpolicyagent/opa")
18-
.WithPortBinding(8181, 8181)
18+
.WithPortBinding(8181, assignRandomHostPort: true)
1919
.WithCommand(
2020
"run", "--server",
2121
"--addr", ":8181",
@@ -29,6 +29,11 @@ public static async Task<OpaProcess> StartServerAsync()
2929
return opaProcess;
3030
}
3131

32+
public int GetPort()
33+
{
34+
return _container.GetMappedPublicPort(8181);
35+
}
36+
3237
public async Task DisposeAsync()
3338
{
3439
await _container.DisposeAsync();

0 commit comments

Comments
 (0)