From e67e28300dd2a8a531150723d7d0791b9ccae156 Mon Sep 17 00:00:00 2001 From: Garima Garg <211866541+ggarima01@users.noreply.github.com> Date: Mon, 26 Oct 2026 11:31:20 -0700 Subject: [PATCH] Increase SCIM user update propagation wait to 90 seconds Increase Delay_SCIM_Update_User_After_Patch from 30 to 90 seconds to accommodate asynchronous propagation under concurrent full-suite load. Other waits and verification behavior remain unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 72d990bd-b8e0-479e-85c5-5388c3fbd195 --- .../StandardLogicApp/SCIM-Validation-Test-Overview.md | 2 +- .../StandardLogicApp/SCIMTests_Workflow.json | 2 +- .../StandardLogicApp/tests/README.md | 2 +- .../StandardLogicApp/tests/minimal-auth-selection.test.cjs | 6 ++++++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIM-Validation-Test-Overview.md b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIM-Validation-Test-Overview.md index 99a44cad..0a1ff259 100644 --- a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIM-Validation-Test-Overview.md +++ b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIM-Validation-Test-Overview.md @@ -77,7 +77,7 @@ Tests that don't apply are reported as **SKIPPED** (not failures). However, grou ## Test Categories Summary -The existing post-create and post-PATCH propagation waits in `SCIMTests_Workflow.json` are 30 seconds before dependent operations or verification reads. These waits cover null updates, user and group updates, and manager updates to allow asynchronously updated attributes to become visible. +The post-create and post-PATCH propagation waits in `SCIMTests_Workflow.json` are 30 seconds before dependent operations or verification reads, except `Delay_SCIM_Update_User_After_Patch`, which waits 90 seconds before verifying the direct user update. The longer wait accommodates observed propagation delays of approximately 60-65 seconds under concurrent full-suite load. Other null-update, group-update, and manager-update waits remain unchanged. For connections whose saved `baseAddress` contains `googleapis.com` (case-insensitive), initialization reads `/Schemas` and identifies mapped required attributes and subattributes, also honoring `targetSchema.required`. `SCIM_Null_Update_Test` excludes those targets from both empty-string and null PATCH payloads and their verification lists. For example, a required `emails[type eq "other"].value` is not cleared; optional sibling fields and optional address or enterprise-extension fields remain eligible. Clearing a whole complex attribute is also excluded when it contains a subattribute declared required by either `/Schemas` or another mapping's `targetSchema.required`, even if the parent is optional. The same parent protection applies to blank mapped sources in the Entra update payload. Schema URNs are matched separately, so a required extension attribute does not exclude an optional core attribute with the same name. diff --git a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIMTests_Workflow.json b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIMTests_Workflow.json index fac16395..5893f1b0 100644 --- a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIMTests_Workflow.json +++ b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/SCIMTests_Workflow.json @@ -2970,7 +2970,7 @@ "type": "Wait", "inputs": { "interval": { - "count": 30, + "count": 90, "unit": "Second" } } diff --git a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/README.md b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/README.md index 040cfed0..868829f4 100644 --- a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/README.md +++ b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/README.md @@ -71,7 +71,7 @@ Exit code `0` means the tests passed; a nonzero exit code indicates a failure. | Google empty-update provenance | Only a previously nonempty Google payload emptied by filtering receives the exception marker; already-empty/null payloads and other providers do not. | | Google nested-update filtering | Removing the last required blank/null nested source prunes its empty parent and reaches the existing pass exception; populated siblings, `false`, `0`, missing sources, and non-Google behavior are preserved. | | Google empty-update reporting | Successful create/provisioning remains mandatory; only eligible empty updates bypass the update phase and report `PASSED` with an explicit explanation. Normal updates and cleanup dependencies are preserved. | -| Preservation and consistency | Existing nested protocol actions, unrelated suite logic and collector remain unchanged; documentation uses the selector name; the template version is blank; final results identify the choice | +| Preservation and consistency | Existing nested protocol actions, unrelated suite logic and collector remain unchanged, except the intentional direct-user-update propagation wait adjustment; documentation uses the selector name; the template version is blank; final results identify the choice | | Version and timing output | Native result uses the deployed version; timestamps come from single captures; epoch/duration calculations cover whole seconds, subsecond truncation and midnight crossing | | Offline deployment | The PowerShell test below verifies version injection, preserved parameters, read-back and preflight failures without cloud calls | diff --git a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/minimal-auth-selection.test.cjs b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/minimal-auth-selection.test.cjs index c560b526..4117c7cd 100644 --- a/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/minimal-auth-selection.test.cjs +++ b/Microsoft.SCIM.LogicAppValidationTemplate/StandardLogicApp/tests/minimal-auth-selection.test.cjs @@ -407,6 +407,12 @@ test('token protocols and unrelated semantic source remain unchanged; naming and const actual = structuredClone(child.SCIMTests_Scope.actions[name]); // Permit the two new selection gates, but no changes inside their protocol actions. if (['Validate_Credentials_Test', 'Federated_Identity_Test'].includes(name)) actual.expression = old.SCIMTests_Scope.actions[name].expression; + if (name === 'SCIM_User_Update_Test') { + actual.actions.SCIM_User_Update_Test_Actions.actions.Check_Update_Has_Eligible_Attrs.actions + .Delay_SCIM_Update_User_After_Patch.inputs.interval.count = + old.SCIMTests_Scope.actions[name].actions.SCIM_User_Update_Test_Actions.actions + .Check_Update_Has_Eligible_Attrs.actions.Delay_SCIM_Update_User_After_Patch.inputs.interval.count; + } assert.deepEqual(actual, old.SCIMTests_Scope.actions[name], name); } const initialization = load('Initialization_Workflow.json');