Skip to content

Commit 402c1a5

Browse files
[Recorder] Fixes connectionStringSanitizer regression - incorrect bodies (#29897)
`{ target : value }` being sent to test proxy instead of ` { target: target, value: value } ` Regression happened when we migrated to batch sanitizers. Added a couple of tests as well to make sure the requests are hit at the test-proxy level and it doesn't error out.
1 parent 2b4b381 commit 402c1a5

3 files changed

Lines changed: 47 additions & 8 deletions

File tree

sdk/test-utils/recorder/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
- Added support for the TestProxy/addSanitizers API, which improves the recording of tests by reducing flakiness and timeouts caused by concurrent requests. This helps to speed up the recording process and reduces the burden on the test proxy.
1414
- Adds `removeCentralSanitizers` option to the `RecorderStartOptions` to allow users pass in the central sanitizer ids to skip the specific santiizers at the test proxy level.
1515

16+
### Bugs Fixed
17+
18+
- Fixes connectionStringSanitizer regression stemmed from batch sanitizers migration, where the request bodies are incorrect.
19+
1620
## 4.0.0 (2024-04-09)
1721

1822
### Features Added

sdk/test-utils/recorder/src/sanitizer.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ function makeBatchSanitizerBody(sanitizers: SanitizerOptions): SanitizerRequestB
7373
uriSubscriptionIdSanitizer,
7474
resetSanitizer,
7575
} = sanitizers;
76+
let connectionStringSanitizersBodies: SanitizerRequestBody[] = [];
77+
for (const sanitizer of connectionStringSanitizers ?? []) {
78+
connectionStringSanitizersBodies = connectionStringSanitizersBodies.concat(
79+
makeConnectionStringSanitizerBody(sanitizer),
80+
);
81+
}
7682

7783
return (<SanitizerRequestBody[]>[]).concat(
7884
getSanitizerBodies(
@@ -88,7 +94,7 @@ function makeBatchSanitizerBody(sanitizers: SanitizerOptions): SanitizerRequestB
8894
uriSanitizers,
8995
makeFindReplaceSanitizerBody("UriRegexSanitizer", "UriStringSanitizer"),
9096
),
91-
getSanitizerBodies(connectionStringSanitizers, makeConnectionStringSanitizerBody),
97+
connectionStringSanitizersBodies,
9298
getSanitizerBodies(bodyKeySanitizers, makeBodyKeySanitizerBody),
9399
getSanitizerBodies(continuationSanitizers, makeContinuationSanitizerBody),
94100
removeHeaderSanitizer
@@ -250,7 +256,7 @@ function makeHeaderSanitizerBody(sanitizer: HeaderSanitizer): SanitizerRequestBo
250256
*/
251257
function makeConnectionStringSanitizerBody(
252258
sanitizer: ConnectionStringSanitizer,
253-
): SanitizerRequestBody {
259+
): SanitizerRequestBody[] {
254260
if (!sanitizer.actualConnString) {
255261
throw new RecorderError(
256262
`Attempted to add an invalid sanitizer - ${JSON.stringify({
@@ -260,12 +266,9 @@ function makeConnectionStringSanitizerBody(
260266
);
261267
}
262268
const pairsMatched = getRealAndFakePairs(sanitizer.actualConnString, sanitizer.fakeConnString);
263-
return {
264-
Name: "GeneralStringSanitizer",
265-
Body: {
266-
...pairsMatched,
267-
},
268-
};
269+
return Object.entries(pairsMatched).map(([key, value]) => {
270+
return { Name: "GeneralStringSanitizer", Body: { value, target: key } };
271+
});
269272
}
270273

271274
/**

sdk/test-utils/recorder/test/sanitizers.spec.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,38 @@ import { env } from "../src/index.js";
130130
);
131131
});
132132

133+
it("Connection string sanitizer - singular", async () => {
134+
await recorder.start({
135+
envSetupForPlayback: {},
136+
sanitizerOptions: {
137+
connectionStringSanitizers: [
138+
{
139+
fakeConnString: "endpoint=https://endpoint/;accesskey=banana",
140+
actualConnString: "endpoint=https://realEndpoint/;accessKey=realBanana",
141+
},
142+
],
143+
},
144+
});
145+
});
146+
147+
it("Connection string sanitizer - multiple", async () => {
148+
await recorder.start({
149+
envSetupForPlayback: {},
150+
sanitizerOptions: {
151+
connectionStringSanitizers: [
152+
{
153+
fakeConnString: "endpoint=https://endpoint/;accessKey=banana",
154+
actualConnString: "endpoint=https://realEndpoint/;accessKey=realBanana",
155+
},
156+
{
157+
fakeConnString: "endpoint2=https://randomEndpoint/;Key3=banana",
158+
actualConnString: "endpoint2=https://finalEndpoint/;Key3=realBanana",
159+
},
160+
],
161+
},
162+
});
163+
});
164+
133165
it("BodyKeySanitizer", async () => {
134166
secretValue = "ab12cd34ef";
135167
await recorder.start({

0 commit comments

Comments
 (0)