Skip to content

Commit 2488ec4

Browse files
authored
Merge pull request #3 from willysoft/test/dynamic-option-update
test: add dynamic option update handling in LocalPortFilteringMiddlew…
2 parents 00f9013 + 846e237 commit 2488ec4

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

‎test/LocalPortFiltering.AspNetCore.Tests/LocalPortFiltering.AspNetCore.Tests.csproj‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414

1515
<ItemGroup>
1616
<PackageReference Include="coverlet.collector" Version="6.0.0" />
17+
<PackageReference Include="coverlet.msbuild" Version="6.0.3">
18+
<PrivateAssets>all</PrivateAssets>
19+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
20+
</PackageReference>
1721
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="8.0.11" />
1822
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
1923
<PackageReference Include="Moq" Version="4.20.72" />

‎test/LocalPortFiltering.AspNetCore.Tests/LocalPortFilteringMiddlewareTests.cs‎

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,19 +71,24 @@ public async Task LocalPortFiltering_RejectsBlockedPort(int status, int localPor
7171
}
7272

7373
[Theory]
74-
[InlineData(true)]
75-
[InlineData(false)]
76-
public async Task LocalPortFiltering_Response(bool includeFailureMessage)
74+
[InlineData(true, true)]
75+
[InlineData(true, false)]
76+
[InlineData(false, true)]
77+
[InlineData(false, false)]
78+
public async Task LocalPortFiltering_Response(bool initialIncludeFailureMessage, bool updatedIncludeFailureMessage)
7779
{
7880
// Arrange
81+
Action<LocalPortFilteringOptions, string?>? onChangeCallback = null;
7982
var options = new LocalPortFilteringOptions()
8083
{
81-
IncludeFailureMessage = includeFailureMessage
84+
IncludeFailureMessage = initialIncludeFailureMessage
8285
};
8386
var optionsMonitor = new Mock<IOptionsMonitor<LocalPortFilteringOptions>>();
8487
optionsMonitor.Setup(o => o.CurrentValue)
8588
.Returns(options)
8689
.Verifiable();
90+
optionsMonitor.Setup(o => o.OnChange(It.IsAny<Action<LocalPortFilteringOptions, string?>>()))
91+
.Callback<Action<LocalPortFilteringOptions, string?>>(callback => onChangeCallback = callback);
8792
var middleware = new LocalPortFilteringMiddleware(Mock.Of<RequestDelegate>(), optionsMonitor.Object);
8893

8994
var httpContext = new DefaultHttpContext();
@@ -93,13 +98,17 @@ public async Task LocalPortFiltering_Response(bool includeFailureMessage)
9398
httpContext.Response.Body = responseBody;
9499

95100
// Act
101+
onChangeCallback?.Invoke(new LocalPortFilteringOptions
102+
{
103+
IncludeFailureMessage = updatedIncludeFailureMessage
104+
}, "TestChange");
96105
await middleware.Invoke(httpContext);
97106
responseBody.Seek(0, SeekOrigin.Begin);
98107
var responseContent = responseBody.ToArray();
99108

100109
// Assert
101110
Assert.Equal(403, httpContext.Response.StatusCode);
102-
if (includeFailureMessage)
111+
if (updatedIncludeFailureMessage)
103112
{
104113
Assert.Equal(LocalPortFilteringMiddleware.DefaultResponse.Length, httpContext.Response.ContentLength);
105114
Assert.Equal("application/json", httpContext.Response.ContentType);

0 commit comments

Comments
 (0)