-
Notifications
You must be signed in to change notification settings - Fork 403
Expand file tree
/
Copy pathCorrelationIdHeaderTests.cs
More file actions
183 lines (152 loc) · 7.74 KB
/
CorrelationIdHeaderTests.cs
File metadata and controls
183 lines (152 loc) · 7.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Identity.Client;
using Microsoft.Identity.Client.Internal;
using Microsoft.Identity.Client.OAuth2;
using Microsoft.Identity.Test.Common.Core.Mocks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace Microsoft.Identity.Test.Unit.CoreTests.OAuth2Tests
{
[TestClass]
public class CorrelationIdHeaderTests : TestBase
{
[TestMethod]
public async Task CorrelationIdHeader_Present_ValidatesSuccessfully_Async()
{
// Arrange
using (var harness = CreateTestHarness())
{
var correlationId = Guid.NewGuid();
// Create a mock response with matching correlation ID in header
var responseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage();
responseMessage.Headers.Add("client-request-id", correlationId.ToString());
harness.HttpManager.AddMockHandler(new MockHttpMessageHandler
{
ExpectedMethod = HttpMethod.Post,
ResponseMessage = responseMessage
});
OAuth2Client client = new OAuth2Client(harness.ServiceBundle.ApplicationLogger, harness.HttpManager, null);
// Act - This should not throw
MsalTokenResponse response = await client.GetTokenAsync(
new Uri(TestConstants.AuthorityCommonTenant + "oauth2/v2.0/token"),
new RequestContext(harness.ServiceBundle, correlationId, null),
addCommonHeaders: true,
onBeforePostRequestHandler: null).ConfigureAwait(false);
// Assert
Assert.IsNotNull(response);
}
}
[TestMethod]
public async Task CorrelationIdHeader_Missing_DoesNotThrow_Async()
{
// Arrange
using (var harness = CreateTestHarness())
{
var correlationId = Guid.NewGuid();
// Create a mock response WITHOUT correlation ID header (simulating Container Apps scenario)
var responseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage();
// Intentionally NOT adding client-request-id header
harness.HttpManager.AddMockHandler(new MockHttpMessageHandler
{
ExpectedMethod = HttpMethod.Post,
ResponseMessage = responseMessage
});
OAuth2Client client = new OAuth2Client(harness.ServiceBundle.ApplicationLogger, harness.HttpManager, null);
// Act - This should not throw even though header is missing
MsalTokenResponse response = await client.GetTokenAsync(
new Uri(TestConstants.AuthorityCommonTenant + "oauth2/v2.0/token"),
new RequestContext(harness.ServiceBundle, correlationId, null),
addCommonHeaders: true,
onBeforePostRequestHandler: null).ConfigureAwait(false);
// Assert
Assert.IsNotNull(response);
}
}
[TestMethod]
public async Task CorrelationIdHeader_MultipleHeaders_MissingCorrelationId_DoesNotThrow_Async()
{
// Arrange
using (var harness = CreateTestHarness())
{
var correlationId = Guid.NewGuid();
// Create a mock response with multiple headers but WITHOUT correlation ID
var responseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage();
responseMessage.Headers.Add("x-custom-header", "value1");
responseMessage.Headers.Add("x-another-header", "value2");
responseMessage.Headers.Add("x-ms-request-id", Guid.NewGuid().ToString());
// Intentionally NOT adding client-request-id header
harness.HttpManager.AddMockHandler(new MockHttpMessageHandler
{
ExpectedMethod = HttpMethod.Post,
ResponseMessage = responseMessage
});
OAuth2Client client = new OAuth2Client(harness.ServiceBundle.ApplicationLogger, harness.HttpManager, null);
// Act - This should not throw even with multiple headers present
MsalTokenResponse response = await client.GetTokenAsync(
new Uri(TestConstants.AuthorityCommonTenant + "oauth2/v2.0/token"),
new RequestContext(harness.ServiceBundle, correlationId, null),
addCommonHeaders: true,
onBeforePostRequestHandler: null).ConfigureAwait(false);
// Assert
Assert.IsNotNull(response);
}
}
[TestMethod]
public async Task CorrelationIdHeader_EmptyValue_DoesNotThrow_Async()
{
// Arrange
using (var harness = CreateTestHarness())
{
var correlationId = Guid.NewGuid();
// Create a mock response with empty correlation ID header value
var responseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage();
responseMessage.Headers.Add("client-request-id", string.Empty);
harness.HttpManager.AddMockHandler(new MockHttpMessageHandler
{
ExpectedMethod = HttpMethod.Post,
ResponseMessage = responseMessage
});
OAuth2Client client = new OAuth2Client(harness.ServiceBundle.ApplicationLogger, harness.HttpManager, null);
// Act - This should not throw even with empty header value
MsalTokenResponse response = await client.GetTokenAsync(
new Uri(TestConstants.AuthorityCommonTenant + "oauth2/v2.0/token"),
new RequestContext(harness.ServiceBundle, correlationId, null),
addCommonHeaders: true,
onBeforePostRequestHandler: null).ConfigureAwait(false);
// Assert
Assert.IsNotNull(response);
}
}
[TestMethod]
public async Task CorrelationIdHeader_CaseInsensitive_ValidatesSuccessfully_Async()
{
// Arrange
using (var harness = CreateTestHarness())
{
var correlationId = Guid.NewGuid();
// Create a mock response with different case for correlation ID header
var responseMessage = MockHelpers.CreateSuccessfulClientCredentialTokenResponseMessage();
responseMessage.Headers.Add("CLIENT-REQUEST-ID", correlationId.ToString());
harness.HttpManager.AddMockHandler(new MockHttpMessageHandler
{
ExpectedMethod = HttpMethod.Post,
ResponseMessage = responseMessage
});
OAuth2Client client = new OAuth2Client(harness.ServiceBundle.ApplicationLogger, harness.HttpManager, null);
// Act - This should not throw with different case
MsalTokenResponse response = await client.GetTokenAsync(
new Uri(TestConstants.AuthorityCommonTenant + "oauth2/v2.0/token"),
new RequestContext(harness.ServiceBundle, correlationId, null),
addCommonHeaders: true,
onBeforePostRequestHandler: null).ConfigureAwait(false);
// Assert
Assert.IsNotNull(response);
}
}
}
}