Skip to content

Commit 0ae9770

Browse files
authored
[test-proxy] All semaphor all the time (#8755)
* refactor to use semaphor slim instead of lock wherever it is used * refactor tests to deal with new async-ness of the proxy
1 parent 079cb9f commit 0ae9770

17 files changed

Lines changed: 397 additions & 314 deletions

tools/test-proxy/Azure.Sdk.Tools.TestProxy.Tests/AdminTests.cs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public async void TestAddSanitizersThrowsOnEmptyArray()
4141

4242
httpContext.Request.Body = TestHelpers.GenerateStreamRequestBody(requestBody);
4343
httpContext.Request.ContentLength = httpContext.Request.Body.Length;
44-
testRecordingHandler.SanitizerRegistry.ResetSessionSanitizers();
44+
await testRecordingHandler.SanitizerRegistry.ResetSessionSanitizers();
4545

4646
var controller = new Admin(testRecordingHandler, _nullLogger)
4747
{
@@ -64,7 +64,7 @@ public async void TestAddSanitizersHandlesPopulatedArray()
6464
RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory());
6565
var httpContext = new DefaultHttpContext();
6666

67-
var defaultSessionSanitizers = testRecordingHandler.SanitizerRegistry.GetSanitizers();
67+
var defaultSessionSanitizers = await testRecordingHandler.SanitizerRegistry.GetSanitizers();
6868

6969
string requestBody = @"[
7070
{
@@ -88,7 +88,7 @@ public async void TestAddSanitizersHandlesPopulatedArray()
8888

8989
httpContext.Request.Body = TestHelpers.GenerateStreamRequestBody(requestBody);
9090
httpContext.Request.ContentLength = httpContext.Request.Body.Length;
91-
testRecordingHandler.SanitizerRegistry.ResetSessionSanitizers();
91+
await testRecordingHandler.SanitizerRegistry.ResetSessionSanitizers();
9292
httpContext.Response.Body = new MemoryStream();
9393

9494
var controller = new Admin(testRecordingHandler, _nullLogger)
@@ -100,7 +100,7 @@ public async void TestAddSanitizersHandlesPopulatedArray()
100100
};
101101
await controller.AddSanitizers();
102102

103-
var amendedSessionSanitizers = testRecordingHandler.SanitizerRegistry.GetSanitizers();
103+
var amendedSessionSanitizers = await testRecordingHandler.SanitizerRegistry.GetSanitizers();
104104

105105
Assert.Equal(defaultSessionSanitizers.Count + 2, amendedSessionSanitizers.Count);
106106
Assert.True(amendedSessionSanitizers[defaultSessionSanitizers.Count] is GeneralRegexSanitizer);
@@ -144,7 +144,7 @@ public async void TestAddSanitizersThrowsOnSingleBadInput()
144144

145145
httpContext.Request.Body = TestHelpers.GenerateStreamRequestBody(requestBody);
146146
httpContext.Request.ContentLength = httpContext.Request.Body.Length;
147-
testRecordingHandler.SanitizerRegistry.Clear();
147+
await testRecordingHandler.SanitizerRegistry.Clear();
148148

149149
var controller = new Admin(testRecordingHandler, _nullLogger)
150150
{
@@ -174,7 +174,7 @@ public async void TestAddSanitizerThrowsOnInvalidAbstractionId()
174174
HttpContext = httpContext
175175
}
176176
};
177-
testRecordingHandler.SanitizerRegistry.Clear();
177+
await testRecordingHandler.SanitizerRegistry.Clear();
178178

179179
var assertion = await Assert.ThrowsAsync<HttpException>(
180180
async () => await controller.AddSanitizer()
@@ -195,7 +195,7 @@ public async void TestAddSanitizerThrowsOnEmptyAbstractionId()
195195
HttpContext = httpContext
196196
}
197197
};
198-
testRecordingHandler.SanitizerRegistry.Clear();
198+
await testRecordingHandler.SanitizerRegistry.Clear();
199199

200200
var assertion = await Assert.ThrowsAsync<HttpException>(
201201
async () => await controller.AddSanitizer()
@@ -302,7 +302,7 @@ public async Task TestSetMatcher()
302302
HttpContext = httpContext
303303
}
304304
};
305-
testRecordingHandler.SanitizerRegistry.Clear();
305+
await testRecordingHandler.SanitizerRegistry.Clear();
306306
await controller.SetMatcher();
307307

308308
var result = testRecordingHandler.Matcher;
@@ -433,7 +433,7 @@ public async void TestAddSanitizer()
433433
HttpContext = httpContext
434434
}
435435
};
436-
testRecordingHandler.SanitizerRegistry.Clear();
436+
await testRecordingHandler.SanitizerRegistry.Clear();
437437
await controller.AddSanitizer();
438438

439439
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
@@ -442,7 +442,7 @@ public async void TestAddSanitizer()
442442
Assert.Equal((int)HttpStatusCode.OK, httpContext.Response.StatusCode);
443443
Assert.True(!string.IsNullOrWhiteSpace(response.RootElement.GetProperty("Sanitizer").GetString()));
444444

445-
var result = testRecordingHandler.SanitizerRegistry.GetSanitizers().First();
445+
var result = (await testRecordingHandler.SanitizerRegistry.GetSanitizers()).First();
446446
Assert.True(result is HeaderRegexSanitizer);
447447
}
448448

@@ -464,10 +464,10 @@ public async void TestAddSanitizerWithOddDefaults()
464464
HttpContext = httpContext
465465
}
466466
};
467-
testRecordingHandler.SanitizerRegistry.Clear();
467+
await testRecordingHandler.SanitizerRegistry.Clear();
468468
await controller.AddSanitizer();
469469

470-
var result = testRecordingHandler.SanitizerRegistry.GetSanitizers().First();
470+
var result = (await testRecordingHandler.SanitizerRegistry.GetSanitizers()).First();
471471
Assert.True(result is BodyKeySanitizer);
472472
}
473473

@@ -487,7 +487,7 @@ public async void TestAddSanitizerWrongEmptyValue()
487487
HttpContext = httpContext
488488
}
489489
};
490-
testRecordingHandler.SanitizerRegistry.Clear();
490+
await testRecordingHandler.SanitizerRegistry.Clear();
491491

492492
var assertion = await Assert.ThrowsAsync<HttpException>(
493493
async () => await controller.AddSanitizer()
@@ -511,10 +511,10 @@ public async void TestAddSanitizerAcceptableEmptyValue()
511511
HttpContext = httpContext
512512
}
513513
};
514-
testRecordingHandler.SanitizerRegistry.Clear();
514+
await testRecordingHandler.SanitizerRegistry.Clear();
515515
await controller.AddSanitizer();
516516

517-
var result = testRecordingHandler.SanitizerRegistry.GetSanitizers().First();
517+
var result = (await testRecordingHandler.SanitizerRegistry.GetSanitizers()).First();
518518
Assert.True(result is HeaderRegexSanitizer);
519519
}
520520

@@ -541,7 +541,7 @@ public async void TestAddSanitizerIndividualRecording()
541541
};
542542
await controller.AddSanitizer();
543543

544-
var result = testRecordingHandler.SanitizerRegistry.GetSanitizers(testRecordingHandler.PlaybackSessions[recordingId]).Last();
544+
var result = (await testRecordingHandler.SanitizerRegistry.GetSanitizers(testRecordingHandler.PlaybackSessions[recordingId])).Last();
545545

546546
Assert.True(result is HeaderRegexSanitizer);
547547
}
@@ -588,7 +588,7 @@ public async Task GenerateInstanceThrowsOnBadBodyFormat()
588588
}
589589
};
590590

591-
testRecordingHandler.SanitizerRegistry.Clear();
591+
await testRecordingHandler.SanitizerRegistry.Clear();
592592

593593
var assertion = await Assert.ThrowsAsync<HttpException>(
594594
async () => await controller.AddSanitizer()
@@ -615,7 +615,7 @@ public async Task AddSanitizerThrowsOnAdditionOfBadRegex()
615615
}
616616
};
617617

618-
testRecordingHandler.SanitizerRegistry.Clear();
618+
await testRecordingHandler.SanitizerRegistry.Clear();
619619

620620
var assertion = await Assert.ThrowsAsync<HttpException>(
621621
async () => await controller.AddSanitizer()
@@ -778,12 +778,12 @@ public async Task TestAddSanitizerWithInvalidConditionJson(string requestBody, s
778778
}
779779
};
780780

781-
testRecordingHandler.SanitizerRegistry.Clear();
781+
await testRecordingHandler.SanitizerRegistry.Clear();
782782
var assertion = await Assert.ThrowsAsync<HttpException>(
783783
async () => await controller.AddSanitizer()
784784
);
785785
Assert.Equal(HttpStatusCode.BadRequest, assertion.StatusCode);
786-
Assert.Empty(testRecordingHandler.SanitizerRegistry.GetSanitizers());
786+
Assert.Empty(await testRecordingHandler.SanitizerRegistry.GetSanitizers());
787787
Assert.Contains(errorText, assertion.Message);
788788
}
789789

@@ -807,10 +807,10 @@ public async Task TestAddSanitizerWithValidUriRegexCondition(string requestBody,
807807
}
808808
};
809809

810-
testRecordingHandler.SanitizerRegistry.Clear();
810+
await testRecordingHandler.SanitizerRegistry.Clear();
811811
await controller.AddSanitizer();
812812

813-
var appliedSanitizers = testRecordingHandler.SanitizerRegistry.GetSanitizers();
813+
var appliedSanitizers = await testRecordingHandler.SanitizerRegistry.GetSanitizers();
814814

815815
Assert.Single(appliedSanitizers);
816816
Assert.True(appliedSanitizers.First() is GeneralRegexSanitizer);
@@ -896,7 +896,7 @@ public async Task TestAddSanitizerThrowsOnMissingRequiredArgument()
896896
}
897897
};
898898

899-
testRecordingHandler.SanitizerRegistry.Clear();
899+
await testRecordingHandler.SanitizerRegistry.Clear();
900900

901901
var assertion = await Assert.ThrowsAsync<HttpException>(
902902
async () => await controller.AddSanitizer()
@@ -926,10 +926,10 @@ public async Task TestAddSanitizerContinuesWithTwoRequiredParams()
926926
}
927927
};
928928

929-
testRecordingHandler.SanitizerRegistry.Clear();
929+
await testRecordingHandler.SanitizerRegistry.Clear();
930930
await controller.AddSanitizer();
931931

932-
var addedSanitizer = testRecordingHandler.SanitizerRegistry.GetSanitizers().First();
932+
var addedSanitizer = (await testRecordingHandler.SanitizerRegistry.GetSanitizers()).First();
933933
Assert.True(addedSanitizer is HeaderStringSanitizer);
934934

935935
var actualTargetString = (string)typeof(HeaderStringSanitizer).GetField("_targetValue", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(addedSanitizer);
@@ -1025,7 +1025,7 @@ public async Task RemoveSanitizerSucceedsForExistingSessionSanitizer()
10251025
}
10261026
};
10271027

1028-
var expectedSanitizerCount = testRecordingHandler.SanitizerRegistry.GetSanitizers().Count;
1028+
var expectedSanitizerCount = (await testRecordingHandler.SanitizerRegistry.GetSanitizers()).Count;
10291029
await controller.RemoveSanitizers(new RemoveSanitizerList() { Sanitizers = new List<string>() { "AZSDK0000" } });
10301030

10311031
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
@@ -1038,14 +1038,14 @@ public async Task RemoveSanitizerSucceedsForExistingSessionSanitizer()
10381038
Assert.Single(returnedSanitizerIds);
10391039
Assert.Equal("AZSDK0000", returnedSanitizerIds.First());
10401040

1041-
Assert.Equal(expectedSanitizerCount - 1, testRecordingHandler.SanitizerRegistry.GetSanitizers().Count);
1041+
Assert.Equal(expectedSanitizerCount - 1, (await testRecordingHandler.SanitizerRegistry.GetSanitizers()).Count);
10421042
}
10431043

10441044
[Fact]
10451045
public async Task RemoveSanitizerSucceedsForAddedRecordingSanitizer()
10461046
{
10471047
RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory());
1048-
testRecordingHandler.SanitizerRegistry.Clear();
1048+
await testRecordingHandler.SanitizerRegistry.Clear();
10491049
var httpContext = new DefaultHttpContext();
10501050
await testRecordingHandler.StartPlaybackAsync("Test.RecordEntries/oauth_request_with_variables.json", httpContext.Response);
10511051
var recordingId = httpContext.Response.Headers["x-recording-id"];
@@ -1062,11 +1062,11 @@ public async Task RemoveSanitizerSucceedsForAddedRecordingSanitizer()
10621062
};
10631063
var session = testRecordingHandler.GetActiveSession(recordingId);
10641064

1065-
var forRemoval = testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Content-Type"), recordingId);
1066-
testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Connection"), recordingId);
1065+
var forRemoval = await testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Content-Type"), recordingId);
1066+
await testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Connection"), recordingId);
10671067
await controller.RemoveSanitizers(new RemoveSanitizerList() { Sanitizers = new List<string>() { forRemoval } });
10681068

1069-
var activeRecordingSanitizers = testRecordingHandler.SanitizerRegistry.GetSanitizers(session);
1069+
var activeRecordingSanitizers = await testRecordingHandler.SanitizerRegistry.GetSanitizers(session);
10701070

10711071
Assert.Single(activeRecordingSanitizers);
10721072
var privateSetting = (string)typeof(HeaderRegexSanitizer).GetField("_targetKey", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(activeRecordingSanitizers.First());
@@ -1077,7 +1077,7 @@ public async Task RemoveSanitizerSucceedsForAddedRecordingSanitizer()
10771077
public async void GetSanitizersReturnsSessionSanitizers()
10781078
{
10791079
RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory());
1080-
testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Connection"));
1080+
await testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Connection"));
10811081

10821082
var httpContext = new DefaultHttpContext();
10831083
httpContext.Response.Body = new MemoryStream();
@@ -1112,7 +1112,7 @@ public async Task GetSanitizersReturnsRecordingSanitizers()
11121112
{
11131113
RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory());
11141114
var httpContext = new DefaultHttpContext();
1115-
testRecordingHandler.SanitizerRegistry.Clear();
1115+
await testRecordingHandler.SanitizerRegistry.Clear();
11161116
await testRecordingHandler.StartPlaybackAsync("Test.RecordEntries/oauth_request_with_variables.json", httpContext.Response);
11171117
var recordingId = httpContext.Response.Headers["x-recording-id"];
11181118
httpContext.Request.Headers["x-recording-id"] = recordingId;
@@ -1125,7 +1125,7 @@ public async Task GetSanitizersReturnsRecordingSanitizers()
11251125
}
11261126
};
11271127

1128-
testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Connection"), recordingId);
1128+
await testRecordingHandler.RegisterSanitizer(new HeaderRegexSanitizer("Connection"), recordingId);
11291129
await controller.GetSanitizers();
11301130

11311131
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);

tools/test-proxy/Azure.Sdk.Tools.TestProxy.Tests/InfoTests.cs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ namespace Azure.Sdk.Tools.TestProxy.Tests
1818
{
1919
public class InfoTests
2020
{
21-
private int DefaultExtensionCount { get { return new RecordingHandler(null).SanitizerRegistry.GetSanitizers().Count; } }
22-
21+
private async Task<int> GetDefaultExtensionCount(){
22+
var handler = new RecordingHandler(null);
23+
return (await handler.SanitizerRegistry.GetSanitizers()).Count;
24+
}
25+
2326
[Fact]
2427
public void TestReflectionModelBuild()
2528
{
@@ -45,12 +48,12 @@ public void TestReflectionModelBuild()
4548
}
4649

4750
[Fact]
48-
public void TestReflectionModelWithAdvancedType()
51+
public async void TestReflectionModelWithAdvancedType()
4952
{
5053
RecordingHandler testRecordingHandler = new RecordingHandler(Directory.GetCurrentDirectory());
5154
var httpContext = new DefaultHttpContext();
52-
testRecordingHandler.SanitizerRegistry.Clear();
53-
testRecordingHandler.SanitizerRegistry.Register(new GeneralRegexSanitizer(value: "A new value", condition: new ApplyCondition() { UriRegex= ".+/Tables" }));
55+
await testRecordingHandler.SanitizerRegistry.Clear();
56+
await testRecordingHandler.SanitizerRegistry.Register(new GeneralRegexSanitizer(value: "A new value", condition: new ApplyCondition() { UriRegex= ".+/Tables" }));
5457

5558
var controller = new Info(testRecordingHandler)
5659
{
@@ -74,24 +77,26 @@ public async Task TestReflectionModelWithTargetRecordSession()
7477

7578
var recordingId = httpContext.Response.Headers["x-recording-id"].ToString();
7679

77-
testRecordingHandler.RegisterSanitizer(new UriRegexSanitizer(regex: "ABC123"), recordingId);
78-
testRecordingHandler.RegisterSanitizer(new BodyRegexSanitizer(regex: ".+?"), recordingId);
80+
await testRecordingHandler.RegisterSanitizer(new UriRegexSanitizer(regex: "ABC123"), recordingId);
81+
await testRecordingHandler.RegisterSanitizer(new BodyRegexSanitizer(regex: ".+?"), recordingId);
7982
testRecordingHandler.SetMatcherForRecording(recordingId, new CustomDefaultMatcher(compareBodies: false, excludedHeaders: "an-excluded-header"));
8083

8184
var model = new ActiveMetadataModel(testRecordingHandler, recordingId);
8285
var descriptions = model.Descriptions.ToList();
8386

87+
int defaultExtensionCount = await GetDefaultExtensionCount();
88+
8489
// we should have exactly DefaultExtensionCount + 2 if we're counting all the customizations appropriately
85-
Assert.True(descriptions.Count == DefaultExtensionCount + 3);
90+
Assert.True(descriptions.Count == defaultExtensionCount + 3);
8691
Assert.True(model.Matchers.Count() == 1);
87-
Assert.True(model.Sanitizers.Count() == DefaultExtensionCount + 2);
92+
Assert.True(model.Sanitizers.Count() == defaultExtensionCount + 2);
8893

8994
// confirm that the overridden matcher is showing up
90-
Assert.True(descriptions[DefaultExtensionCount].ConstructorDetails.Arguments[1].Item2 == "\"ABC123\"");
91-
Assert.True(descriptions[DefaultExtensionCount + 1].ConstructorDetails.Arguments[1].Item2 == "\".+?\"");
95+
Assert.True(descriptions[defaultExtensionCount].ConstructorDetails.Arguments[1].Item2 == "\"ABC123\"");
96+
Assert.True(descriptions[defaultExtensionCount + 1].ConstructorDetails.Arguments[1].Item2 == "\".+?\"");
9297

9398
// and finally confirm our sanitizers are what we expect
94-
Assert.True(descriptions[DefaultExtensionCount + 2].Name == "CustomDefaultMatcher");
99+
Assert.True(descriptions[defaultExtensionCount + 2].Name == "CustomDefaultMatcher");
95100
}
96101
}
97102
}

tools/test-proxy/Azure.Sdk.Tools.TestProxy.Tests/LoggingTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public async Task PlaybackLogsSanitizedRequest()
5252
HttpResponse response = new DefaultHttpContext().Response;
5353
await testRecordingHandler.HandlePlaybackRequest(recordingId, request, response);
5454

55-
AssertLogs(logger, 5, 9, 12);
55+
AssertLogs(logger, 4, 8, 12);
5656
}
5757
finally
5858
{
@@ -88,7 +88,7 @@ public async Task RecordingHandlerLogsSanitizedRequests()
8888
var recordingId = httpContext.Response.Headers["x-recording-id"].ToString();
8989

9090
await testRecordingHandler.HandleRecordRequestAsync(recordingId, request, httpContext.Response);
91-
testRecordingHandler.StopRecording(recordingId);
91+
await testRecordingHandler.StopRecording(recordingId);
9292

9393
try
9494
{

tools/test-proxy/Azure.Sdk.Tools.TestProxy.Tests/PlaybackTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public async void TestStartPlaybackInMemory()
6363
await recordController.Start();
6464
var inMemId = recordContext.Response.Headers["x-recording-id"].ToString();
6565
recordContext.Request.Headers["x-recording-id"] = new string[] { inMemId };
66-
recordController.Stop();
66+
await recordController.Stop();
6767

6868
// apply same recordingId when starting in-memory session
6969
var playbackContext = new DefaultHttpContext();
@@ -175,7 +175,7 @@ public async void TestStopPlaybackInMemory()
175175
await recordController.Start();
176176
var inMemId = recordContext.Response.Headers["x-recording-id"].ToString();
177177
recordContext.Request.Headers["x-recording-id"] = new string[] { inMemId };
178-
recordController.Stop();
178+
await recordController.Stop();
179179

180180
var playbackContext = new DefaultHttpContext();
181181
playbackContext.Request.Headers["x-recording-id"] = inMemId;

0 commit comments

Comments
 (0)