Skip to content

Fix MDM SSO callback 'missing profile' error for Android enrollment#45046

Open
sharon-fdm wants to merge 4 commits intomainfrom
fix-45024-android-sso-missing-profile
Open

Fix MDM SSO callback 'missing profile' error for Android enrollment#45046
sharon-fdm wants to merge 4 commits intomainfrom
fix-45024-android-sso-missing-profile

Conversation

@sharon-fdm
Copy link
Copy Markdown
Collaborator

@sharon-fdm sharon-fdm commented May 8, 2026

Closes #45024

Summary

  • Fixed the MDM SSO callback handler returning a "missing profile: missing profile" error when an Android device enrolls via SSO (OTA enrollment) on a Fleet instance that does not have Apple MDM configured.
  • Refactored all MDM SSO initiator magic strings ("ota_enroll", "setup_experience", "account_driven_enroll") into named constants (fleet.SSOInitiatorOTAEnroll, etc.) to prevent typos and missed cases — which is the class of bug that caused this issue.

Code walkthrough

The bug

The bug is in ee/server/service/mdm.go in mdmSSOHandleCallbackAuth().

The flow:

  1. Android enrollment hits /enroll?enroll_secret=xxx → frontend calls InitiateMDMSSO with initiator "ota_enroll" (server/service/frontend.go:248)
  2. User authenticates at the SAML IdP
  3. The SSO callback arrives at MDMSSOCallback → calls mdmSSOHandleCallbackAuth
  4. After successful SAML auth, the function checks early-exit conditions:
    • Line 1133: account-driven enrollment (originalURL == appleMDMAccountDrivenEnrollmentUrl) → no match for OTA
    • Line 1139: Initiator != "setup_experience"true for "ota_enroll" → enters the block
  5. Line 1140: calls getAutomaticEnrollmentProfile() → returns nil because no Apple MDM is configured
  6. Line 1144–1146: depProf == nilreturns "missing profile" error

Note that MDMSSOCallback (the caller) already has a guard at line 931 that correctly skips the Apple MDM verification for /enroll? paths:

if !strings.HasPrefix(originalURL, "/enroll?") && ssoRequestData.Initiator != "setup_experience" {
    if err := svc.VerifyMDMAppleConfigured(ctx); err != nil { ... }
}

But mdmSSOHandleCallbackAuth was missing the equivalent guard — it unconditionally tried to fetch the Apple DEP profile for any non-setup_experience initiator.

The fix

Adds an early return for OTA enrollments (where originalURL starts with /enroll?), matching the existing pattern for account-driven enrollments right above it. OTA enrollments don't use the Apple DEP profile token.

The refactor

Replaced all raw initiator string literals across the backend with named constants defined in server/fleet/app.go:

Constant Value Used by
fleet.SSOInitiatorOTAEnroll "ota_enroll" /enroll page (Android, BYOD iPhone/iPad)
fleet.SSOInitiatorSetupExperience "setup_experience" Orbit agent (macOS Setup Assistant)
fleet.SSOInitiatorAccountDrivenEnroll "account_driven_enroll" Apple account-driven MDM enrollment

Constants are in server/fleet/ (not server/sso/) so orbit can import them without pulling in Redis dependencies.

Files changed:

  • ee/server/service/mdm.go — 6 string replacements (switch cases + comparisons)
  • server/service/frontend.go — 1 replacement
  • orbit/cmd/orbit/orbit.go — 1 replacement
  • server/service/testing_client.go — 1 replacement
  • server/service/integration_mdm_test.go — 1 replacement

Local reproduction

Setup

  1. Started dev server: build/fleet serve --dev --dev_license
  2. Infrastructure: MySQL, Redis, SimpleSAML IdP via docker compose up
  3. Created admin user and enroll secret
  4. Configured MDM SSO (entity_id: mdm.test.com, SimpleSAML IdP at localhost:9080)
  5. Set enable_end_user_authentication: true directly in DB (API blocks this without Apple MDM — matches customer state)
  6. Did NOT configure Apple MDM — only SSO + EUA, simulating Android-only instance

Steps

  1. GET https://localhost:8080/enroll?enroll_secret=test_enroll_secret → 303 redirect to SimpleSAML IdP
  2. Completed SAML login programmatically (user: sso_user, pass: user123#)
  3. POST https://localhost:8080/api/v1/fleet/mdm/sso/callback with the SAMLResponse

Before fix

=== CALLBACK RESULT ===
Status: HTTP/2 303
Location: /mdm/sso/callback?error=true

=== SERVER LOGS ===
ts=2026-05-08T16:53:49Z level=error component=http method=POST
  uri=/api/v1/fleet/mdm/sso/callback took=12.148708ms
  err="missing profile: missing profile"

After fix

=== CALLBACK RESULT ===
Status: HTTP/2 303
Location: /enroll?enroll_secret=test_enroll_secret&enrollment_reference=7c67326c-...&initiator=ota_enroll&profile_token=

=== SERVER LOGS ===
ts=2026-05-08T17:27:54Z level=info component=http method=POST
  uri=/api/v1/fleet/mdm/sso/callback took=15.973ms

No errors. Successful redirect back to the enrollment page with the enrollment reference.

Integration test

Added TestOTAEnrollSSOWithoutAppleDEPProfile which:

  1. Configures SSO and creates a team with IdP enabled
  2. Deletes all Apple DEP enrollment profiles to simulate an Android-only instance
  3. Runs the full OTA enrollment SSO flow (GET /enroll → SAML IdP login → callback)
  4. Verifies the callback redirects to /enroll?... with enrollment_reference and initiator=ota_enroll (not ?error=true)

Confirmed the test fails without the fix (err="missing profile: missing profile") and passes with the fix.

Also added a LoginOTAEnrollSSOUser test helper that drives the complete OTA SSO flow starting from GET /enroll through SAML IdP login to the callback, using a single cookie jar.

Test plan

  • Verify Android SSO enrollment works on an instance with only Android MDM configured (no Apple MDM)
  • Verify Apple DEP enrollment with SSO still works (the DEP profile path is unchanged)
  • Verify Apple OTA enrollment with SSO still works (also uses /enroll? path)
  • Verify account-driven enrollment with SSO still works (has its own early return)
  • Verify setup experience SSO still works (uses Initiator == "setup_experience")

Summary by CodeRabbit

  • Bug Fixes
    • Resolved a regression where OTA enrollment via SSO would fail with a "missing profile" error on instances without Apple MDM configured.

…45024)

When an Android device enrolls via SSO (OTA enrollment), the callback
handler tried to fetch an Apple DEP automatic enrollment profile that
doesn't exist when only Android MDM is configured. Add an early return
for OTA enrollments that skips the DEP profile fetch, matching the
existing guard pattern for account-driven enrollments.
Adds TestOTAEnrollSSOWithoutAppleDEPProfile which verifies the full OTA
enrollment SSO flow succeeds even when no Apple DEP automatic enrollment
profile exists (simulating an Android-only instance). Also adds
LoginOTAEnrollSSOUser test helper that drives the complete OTA SSO flow
starting from GET /enroll through SAML IdP login to the callback.
@sharon-fdm sharon-fdm marked this pull request as ready for review May 8, 2026 17:42
@sharon-fdm sharon-fdm requested a review from a team as a code owner May 8, 2026 17:42
Copilot AI review requested due to automatic review settings May 8, 2026 17:42
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 8, 2026

Review Change Stack
No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 6d3cbb6e-447a-4334-b0ab-3e3beb71c240

📥 Commits

Reviewing files that changed from the base of the PR and between e060631 and e6db1ae.

📒 Files selected for processing (5)
  • ee/server/service/mdm.go
  • orbit/cmd/orbit/orbit.go
  • server/fleet/mdm.go
  • server/service/integration_mdm_test.go
  • server/service/testing_client.go
✅ Files skipped from review due to trivial changes (1)
  • server/fleet/mdm.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • server/service/integration_mdm_test.go
  • server/service/testing_client.go

Walkthrough

This PR fixes an Android enrollment SSO regression by introducing SSO initiator constants and making the MDM callback handler conditional on enrollment flow type. The change adds four exported constants to identify enrollment flows (OTA enroll, setup experience, account-driven enroll, Apple MDM SSO), updates the SSO initiation and callback logic to dispatch based on these constants instead of hard-coded strings, and conditionally skips automatic DEP profile lookup for OTA flows. Frontend and Orbit client code are wired to use the constants, a test helper implements end-to-end SAML OTA enrollment, and a regression test verifies the callback succeeds without DEP profiles on Android-only instances.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: fixing the MDM SSO callback error for Android enrollment when Apple MDM is not configured.
Description check ✅ Passed The description is comprehensive, addressing the bug, fix, refactoring, reproduction steps, and testing. It follows the template structure with a related issue, detailed explanation, and testing information.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-45024-android-sso-missing-profile

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
server/service/testing_client.go (1)

489-513: 💤 Low value

Optional: extract the shared SAML POST-to-callback flow to reduce duplication.

Steps 3-5 (lines 489–513) are nearly identical to loginSSOUserWithBody lines 592–618 — the same IdP form-submit, SAMLResponse regex extraction, and callback POST. The only structural difference between the two helpers is how the IdP URL is obtained (via /enroll redirect here vs. Fleet /api/v1/fleet/mdm/sso initiation in loginSSOUserWithBody).

Extracting a private helper that accepts an already-known IdP URL and drives the SAML credential submission + callback POST would eliminate the duplication:

♻️ Suggested refactor sketch
+// doSAMLFlow drives the IdP credential submission and Fleet SSO callback given
+// an already-resolved IdP URL. The cookie jar on client must carry any session
+// cookie set before the call. Returns the callback HTTP response.
+func (ts *withServer) doSAMLFlow(client *http.Client, idpURL, callbackPath, username, password string) *http.Response {
+    t := ts.s.T()
+    resp, err := client.Get(idpURL)
+    require.NoError(t, err)
+    parsed, err := url.Parse(resp.Header.Get("Location"))
+    require.NoError(t, err)
+    data := url.Values{
+        "username":  {username},
+        "password":  {password},
+        "AuthState": {parsed.Query().Get("AuthState")},
+    }
+    resp, err = client.PostForm(parsed.Scheme+"://"+parsed.Host+parsed.Path, data)
+    require.NoError(t, err)
+    defer resp.Body.Close()
+    body, err := io.ReadAll(resp.Body)
+    require.NoError(t, err)
+    re := regexp.MustCompile(`name="SAMLResponse" value="([^\s]*)" />`)
+    matches := re.FindSubmatch(body)
+    require.NotEmptyf(t, matches, "callback HTML doesn't contain a SAMLResponse value, got body: %s", body)
+    q := url.QueryEscape(string(matches[1]))
+    cbResp, err := client.Post(ts.server.URL+callbackPath+"?SAMLResponse="+q, "application/x-www-form-urlencoded", nil)
+    require.NoError(t, err)
+    return cbResp
+}

Then LoginOTAEnrollSSOUser becomes:

-    // Step 2: Follow IdP redirect to get the login page
-    resp, err = client.Get(idpURL)
-    require.NoError(t, err)
-    // Step 3-5: ...identical block...
+    return ts.doSAMLFlow(client, idpURL, "/api/v1/fleet/mdm/sso/callback", username, password)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@server/service/testing_client.go` around lines 489 - 513, Steps 3–5 duplicate
logic across LoginOTAEnrollSSOUser and loginSSOUserWithBody; extract that flow
into a private helper (e.g., submitSAMLFromIdP) that takes the IdP URL (string),
an http.Client instance, credentials (username, password), and the callback
base/URL, then performs the form POST to the IdP (reusing client.PostForm),
reads the response body, runs the existing
regexp.MustCompile(`name="SAMLResponse" value="([^\s]*)" />`) to extract the
SAMLResponse, and finally posts the SAMLResponse to the Fleet callback endpoint
(reusing client.Post). Replace the duplicated blocks in LoginOTAEnrollSSOUser
and loginSSOUserWithBody with calls to this helper, preserving error
handling/assertions (require.NoError/require.NotEmptyf) semantics.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@server/service/testing_client.go`:
- Around line 489-513: Steps 3–5 duplicate logic across LoginOTAEnrollSSOUser
and loginSSOUserWithBody; extract that flow into a private helper (e.g.,
submitSAMLFromIdP) that takes the IdP URL (string), an http.Client instance,
credentials (username, password), and the callback base/URL, then performs the
form POST to the IdP (reusing client.PostForm), reads the response body, runs
the existing regexp.MustCompile(`name="SAMLResponse" value="([^\s]*)" />`) to
extract the SAMLResponse, and finally posts the SAMLResponse to the Fleet
callback endpoint (reusing client.Post). Replace the duplicated blocks in
LoginOTAEnrollSSOUser and loginSSOUserWithBody with calls to this helper,
preserving error handling/assertions (require.NoError/require.NotEmptyf)
semantics.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 267bf5b9-2884-4e40-972e-0d14887c9efc

📥 Commits

Reviewing files that changed from the base of the PR and between bc89773 and e856bd3.

📒 Files selected for processing (4)
  • changes/45024-android-sso-missing-profile
  • ee/server/service/mdm.go
  • server/service/integration_mdm_test.go
  • server/service/testing_client.go

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Fixes an SSO callback failure during OTA enrollment by skipping Apple DEP profile lookup when enrolling via /enroll?, allowing Android/BYOD SSO enrollment to succeed on instances without Apple MDM configured.

Changes:

  • Add an early return in mdmSSOHandleCallbackAuth for OTA enrollment callbacks (/enroll?) to avoid Apple DEP profile requirements.
  • Add an integration regression test covering OTA enrollment SSO without any Apple DEP profile present.
  • Add a testing client helper to execute the full OTA enrollment SSO flow via /enroll?enroll_secret=....

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated 6 comments.

File Description
server/service/testing_client.go Adds a helper to drive the OTA enrollment SSO flow end-to-end in integration tests.
server/service/integration_mdm_test.go Adds regression test ensuring OTA enrollment SSO succeeds without Apple DEP profile.
ee/server/service/mdm.go Skips Apple DEP profile access for /enroll? OTA SSO callbacks.
changes/45024-android-sso-missing-profile Adds changelog entry for the fixed Android SSO “missing profile” error.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread server/service/testing_client.go
Comment thread server/service/testing_client.go
Comment thread server/service/testing_client.go
Comment thread server/service/testing_client.go Outdated
Comment thread server/service/testing_client.go
Comment thread server/service/integration_mdm_test.go
Replace raw string literals "ota_enroll", "setup_experience", and
"account_driven_enroll" with named constants in fleet.SSO* to prevent
typos and missed cases. Constants are defined in server/fleet/app.go
so they can be imported by all packages including orbit.
@codecov
Copy link
Copy Markdown

codecov Bot commented May 8, 2026

Codecov Report

❌ Patch coverage is 87.50000% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 66.79%. Comparing base (bc89773) to head (e6db1ae).
⚠️ Report is 11 commits behind head on main.

Files with missing lines Patch % Lines
ee/server/service/mdm.go 50.00% 1 Missing and 3 partials ⚠️
server/service/testing_client.go 95.65% 1 Missing and 1 partial ⚠️
orbit/cmd/orbit/orbit.go 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #45046      +/-   ##
==========================================
+ Coverage   66.77%   66.79%   +0.02%     
==========================================
  Files        2718     2720       +2     
  Lines      218795   219037     +242     
  Branches    10625    10625              
==========================================
+ Hits       146100   146314     +214     
- Misses      59531    59551      +20     
- Partials    13164    13172       +8     
Flag Coverage Δ
backend 68.67% <87.50%> (+0.02%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@qodo-free-for-open-source-projects
Copy link
Copy Markdown

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: test-go (integration-mdm, mysql:8.0.44) / test

Failed stage: Run Go Tests [❌]

Failed test name: TestIntegrationsMDM/TestSSO

Failure summary:

The action failed because the Go integration test suite TestIntegrationsMDM had test failures, which
caused make test-go to exit non-zero (make[1]: *** [Makefile:278: .run-go-tests] Error 1, then make:
*** [Makefile:393: test-go] Error 2).

Failures shown in the log:
- TestIntegrationsMDM/TestSSO failed at
server/service/integration_mdm_test.go:6465 with an assertion failure: Error: Should be true (the
expected boolean condition evaluated to false during the SSO flow).
-
TestIntegrationsMDM/TestSSOWithSCIM failed because an HTTP request during the test returned 400
instead of 200:
- Request error: POST /api/mdm/apple/enroll returned err: token is required
-
Assertion at server/test/httptest/http.go:52 (called from
server/service/integration_mdm_test.go:7400 / server/service/integration_mdm_test.go:6846) reported
expected: 200 vs actual: 400, with JSON error Bad request ... reason: token is required.

Note: There was also a skipped test
(TestIntegrationsMDM/TestTurnOnLifecycleEventsWindows/wiped_host_turns_on_MDM/automatic_enrollment)
which did not fail the job.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

1356:  �[36;1mattempt=1�[0m
1357:  �[36;1m�[0m
1358:  �[36;1mwhile [ $attempt -le $max_attempts ]; do�[0m
1359:  �[36;1m  echo "Attempt $attempt of $max_attempts"�[0m
1360:  �[36;1m�[0m
1361:  �[36;1m  # Try to connect to MySQL�[0m
1362:  �[36;1m  if wait_for_mysql "mysql_test"; then�[0m
1363:  �[36;1m    # If MySQL is ready, try to connect to MySQL replica�[0m
1364:  �[36;1m    if wait_for_mysql "mysql_replica_test"; then�[0m
1365:  �[36;1m      # Both are ready, we're done�[0m
1366:  �[36;1m      echo "All MySQL connections successful"�[0m
1367:  �[36;1m      exit 0�[0m
1368:  �[36;1m    fi�[0m
1369:  �[36;1m  fi�[0m
1370:  �[36;1m�[0m
1371:  �[36;1m  # If we get here, at least one connection failed�[0m
1372:  �[36;1m  echo "Failed to connect to MySQL on attempt $attempt"�[0m
1373:  �[36;1m�[0m
1374:  �[36;1m  if [ $attempt -lt $max_attempts ]; then�[0m
1375:  �[36;1m    echo "Restarting containers and trying again..."�[0m
1376:  �[36;1m    restart_containers�[0m
1377:  �[36;1m  else�[0m
1378:  �[36;1m    echo "Maximum attempts reached. Failing the job."�[0m
1379:  �[36;1m    exit 1�[0m
...

1471:  go: downloading github.com/micromdm/micromdm v1.9.0
1472:  go: downloading pgregory.net/rapid v1.2.0
1473:  go: downloading software.sslmate.com/src/go-pkcs12 v0.4.0
1474:  go: downloading github.com/elimity-com/scim v0.0.0-20240320110924-172bf2aee9c8
1475:  go: downloading github.com/scim2/filter-parser/v2 v2.2.0
1476:  go: downloading github.com/russellhaering/goxmldsig v1.6.0
1477:  go: downloading github.com/remitly-oss/httpsig-go v1.2.0
1478:  go: downloading github.com/Azure/go-ntlmssp v0.1.1
1479:  go: downloading github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb
1480:  go: downloading github.com/cavaliergopher/rpm v1.2.0
1481:  go: downloading github.com/saferwall/pe v1.5.5
1482:  go: downloading github.com/sassoftware/relic/v8 v8.0.1
1483:  go: downloading github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8
1484:  go: downloading github.com/agnivade/levenshtein v1.2.1
1485:  go: downloading github.com/bmatcuk/doublestar/v4 v4.10.0
1486:  go: downloading github.com/hashicorp/go-multierror v1.1.1
1487:  go: downloading github.com/open-policy-agent/opa v1.4.2
...

1659:  �[32m✓�[0m Integrations MDM test MDM mac OS setup update team config 3 (0.04s)
1660:  �[32m✓�[0m Integrations MDM test MDM mac OS setup update team config 3#01 (0.08s)
1661:  �[32m✓�[0m Integrations MDM test MDM mac OS setup update team config 4 (0.04s)
1662:  �[32m✓�[0m Integrations MDM test MDM mac OS setup update team config 4#01 (0.08s)
1663:  �[32m✓�[0m Integrations MDM test MDM mac OS setup update team config 5 (0.05s)
1664:  �[32m✓�[0m Integrations MDM test MDM mac OS setup update team config 6 (0.04s)
1665:  �[32m✓�[0m Integrations MDM test MDM mac OS setup validate enable end user authentication (0.61s)
1666:  �[32m✓�[0m Integrations MDM test MDM migration (2.21s)
1667:  �[32m✓�[0m Integrations MDM test MDM profiles include any labels (1.08s)
1668:  �[32m✓�[0m Integrations MDM test MDM request without certs (0.14s)
1669:  �[32m✓�[0m Integrations MDM test MDM windows command results (0.19s)
1670:  �[32m✓�[0m Integrations MDM test ONC profile released after cert template deleted (0.46s)
1671:  �[32m✓�[0m Integrations MDM test ONC profile withheld until cert ready (0.45s)
1672:  �[32m✓�[0m Integrations MDM test OTA enroll SSO without apple DEP profile (0.37s)
1673:  �[32m✓�[0m Integrations MDM test OTA enrollment (3.27s)
1674:  �[32m✓�[0m Integrations MDM test OTA enrollment errors (0.43s)
1675:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if body is unsigned (0.00s)
1676:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if idp uuid does not match an account (0.33s)
1677:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if idp uuid is required but not set (0.07s)
1678:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if invalid apple signature (0.01s)
1679:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if invalid device signature (0.01s)
1680:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if no body is provided (0.00s)
1681:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if no enroll secret is provided (0.00s)
1682:  �[32m✓�[0m Integrations MDM test OTA enrollment errors if serial is missing (0.00s)
1683:  �[32m✓�[0m Integrations MDM test OTA enrollment succeeds (2.43s)
...

1742:  �[32m✓�[0m Integrations MDM test apple DDM fleet variables (3.48s)
1743:  �[32m✓�[0m Integrations MDM test apple DDM reconciliation (2.52s)
1744:  �[32m✓�[0m Integrations MDM test apple DDM secret variables (1.04s)
1745:  �[32m✓�[0m Integrations MDM test apple DDM secret variables upload (0.31s)
1746:  �[32m✓�[0m Integrations MDM test apple DDM status report (0.68s)
1747:  �[32m✓�[0m Integrations MDM test apple MDM account driven user enrollment (1.53s)
1748:  �[32m✓�[0m Integrations MDM test apple MDM actions on personal host (0.88s)
1749:  �[32m✓�[0m Integrations MDM test apple MDM device enrollment (0.88s)
1750:  �[32m✓�[0m Integrations MDM test apple MDMCSR request (0.50s)
1751:  �[32m✓�[0m Integrations MDM test apple config secret variables upload (0.34s)
1752:  �[32m✓�[0m Integrations MDM test apple get apple MDM (0.41s)
1753:  �[32m✓�[0m Integrations MDM test apple profile deletion (2.31s)
1754:  �[32m✓�[0m Integrations MDM test apple profile management (3.81s)
1755:  �[32m✓�[0m Integrations MDM test apple profile resend race condition (0.83s)
1756:  �[32m✓�[0m Integrations MDM test apple profile retries (2.73s)
1757:  �[32m✓�[0m Integrations MDM test apple profile retries repeated device error (0.41s)
1758:  �[32m✓�[0m Integrations MDM test apple profile retries retry after device error (0.47s)
1759:  �[32m✓�[0m Integrations MDM test apple profile retries retry after verification (0.33s)
...

1865:  �[32m✓�[0m Integrations MDM test certificate template authorization for team users team admin can list own team certificates (0.03s)
1866:  �[32m✓�[0m Integrations MDM test certificate template authorization for team users team admin cannot list other team certificates (0.05s)
1867:  �[32m✓�[0m Integrations MDM test certificate template lifecycle (0.66s)
1868:  �[32m✓�[0m Integrations MDM test certificate template no team with IDP variable (0.43s)
1869:  �[32m✓�[0m Integrations MDM test certificate template renewal (2.72s)
1870:  �[32m✓�[0m Integrations MDM test certificate template renewal boundary 3 1d expires 3 1d (0.24s)
1871:  �[32m✓�[0m Integrations MDM test certificate template renewal long lived 36 5d expires 7d (0.41s)
1872:  �[32m✓�[0m Integrations MDM test certificate template renewal long lived 9 0d expires 2 9d (0.28s)
1873:  �[32m✓�[0m Integrations MDM test certificate template renewal long lived 9 0d expires 3 1d (0.20s)
1874:  �[32m✓�[0m Integrations MDM test certificate template renewal short lived 1 0d expires 4d (0.42s)
1875:  �[32m✓�[0m Integrations MDM test certificate template renewal short lived 1 0d expires 6d (0.22s)
1876:  �[32m✓�[0m Integrations MDM test certificate template renewal short lived 3 0d expires 1 4d (0.32s)
1877:  �[32m✓�[0m Integrations MDM test certificate template renewal short lived 3 0d expires 1 6d (0.23s)
1878:  �[32m✓�[0m Integrations MDM test certificate template resend (2.42s)
1879:  �[32m✓�[0m Integrations MDM test certificate template resend automatic retry (1.52s)
1880:  �[32m✓�[0m Integrations MDM test certificate template spec endpoint and AMAPI failure (0.62s)
1881:  �[32m✓�[0m Integrations MDM test certificate template team transfer (0.99s)
...

1886:  �[32m✓�[0m Integrations MDM test certificate template with SANIDP variable (0.36s)
1887:  �[32m✓�[0m Integrations MDM test clear passcode command (0.83s)
1888:  �[32m✓�[0m Integrations MDM test connected to fleet without checkout (0.92s)
1889:  �[32m✓�[0m Integrations MDM test custom SCEP config (0.28s)
1890:  �[32m✓�[0m Integrations MDM test custom SCEP integration (2.48s)
1891:  �[32m✓�[0m Integrations MDM test custom configuration web URL (1.23s)
1892:  �[32m✓�[0m Integrations MDM test delete MDM profile cancels installs (2.29s)
1893:  �[32m✓�[0m Integrations MDM test delete multiple hosts pending DEP (1.04s)
1894:  �[32m✓�[0m Integrations MDM test deprecated default apple BM team (0.65s)
1895:  �[32m✓�[0m Integrations MDM test device MDM manual enroll (0.46s)
1896:  �[32m✓�[0m Integrations MDM test device multiple auth messages (0.71s)
1897:  �[32m✓�[0m Integrations MDM test digi cert config (0.50s)
1898:  �[32m✓�[0m Integrations MDM test digi cert integration (2.14s)
1899:  �[32m✓�[0m Integrations MDM test digi cert integration with host platform (1.10s)
1900:  �[32m✓�[0m Integrations MDM test disk encryption shared setting (0.89s)
1901:  �[32m✓�[0m Integrations MDM test dont ignore any profile errors (1.08s)
1902:  �[32m✓�[0m Integrations MDM test enforce minium OS version (3.36s)
...

1927:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso disabled no machine info (0.00s)
1928:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso disabled no match for software update device ID (0.10s)
1929:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled (0.67s)
1930:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled cannot parse OS version (0.04s)
1931:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled device above latest (0.21s)
1932:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled device below latest (0.13s)
1933:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled device below latest but MDM cannot request software update (0.10s)
1934:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled device equal to latest (0.06s)
1935:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled no machine info (0.00s)
1936:  �[32m✓�[0m Integrations MDM test enforce minium OS version team setting equal to latest sso enabled no match for software update device ID (0.10s)
1937:  �[32m✓�[0m Integrations MDM test enqueue MDM command (0.73s)
1938:  �[32m✓�[0m Integrations MDM test enqueue MDM command with secret (0.73s)
1939:  �[32m✓�[0m Integrations MDM test enroll after DEP sync IOSI pad OS (0.84s)
1940:  �[32m✓�[0m Integrations MDM test enroll orbit after DEP sync (0.28s)
1941:  �[32m✓�[0m Integrations MDM test enrollment profiles with special chars (0.43s)
1942:  �[32m✓�[0m Integrations MDM test error on enrollment install profile produces activity (0.59s)
1943:  �[32m✓�[0m Integrations MDM test escrow buddy backwards compat (0.58s)
1944:  �[32m✓�[0m Integrations MDM test file vault profile updated on MDM toggle (0.91s)
1945:  �[32m✓�[0m Integrations MDM test fleetd configuration (0.45s)
1946:  �[32m✓�[0m Integrations MDM test get MDMCSR (0.64s)
1947:  �[32m✓�[0m Integrations MDM test get bootstrap token (0.39s)
1948:  �[32m✓�[0m Integrations MDM test get bootstrap token bootstrap token not set (0.01s)
1949:  �[32m✓�[0m Integrations MDM test get bootstrap token bootstrap token set (0.01s)
1950:  �[32m✓�[0m Integrations MDM test get bootstrap token no cert auth association (0.01s)
1951:  �[32m✓�[0m Integrations MDM test get bootstrap token no device record (0.01s)
1952:  �[32m✓�[0m Integrations MDM test get default DEP profile (0.77s)
1953:  �[32m✓�[0m Integrations MDM test get default DEP profile any user with permission to read enrollment profiles on any team can read default (0.38s)
1954:  �[32m✓�[0m Integrations MDM test get default DEP profile any user with permission to read enrollment profiles on any team can read default global maintainer succeeds (0.10s)
1955:  �[32m✓�[0m Integrations MDM test get default DEP profile any user with permission to read enrollment profiles on any team can read default global observer fails (0.10s)
1956:  �[32m✓�[0m Integrations MDM test get default DEP profile any user with permission to read enrollment profiles on any team can read default team maintainer succeeds (0.08s)
1957:  �[32m✓�[0m Integrations MDM test get default DEP profile any user with permission to read enrollment profiles on any team can read default team observer fails (0.07s)
1958:  �[32m✓�[0m Integrations MDM test get default DEP profile no default profile, returns in-code profile (0.01s)
...

1993:  �[32m✓�[0m Integrations MDM test list MDM config profiles <nil>: []s tring{"per page", " 2 "} (0.01s)
1994:  �[32m✓�[0m Integrations MDM test list hosts software title ID filter (0.71s)
1995:  �[32m✓�[0m Integrations MDM test list software titles by hash and name (0.53s)
1996:  �[32m✓�[0m Integrations MDM test lock unlock wipe IOS ipad OS (8.14s)
1997:  �[32m✓�[0m Integrations MDM test lock unlock wipe IOS ipad OS i OS (2.44s)
1998:  �[32m✓�[0m Integrations MDM test lock unlock wipe IOS ipad OS i OS can't lock manually enrolled host (0.16s)
1999:  �[32m✓�[0m Integrations MDM test lock unlock wipe IOS ipad OS i pad OS (3.32s)
2000:  �[32m✓�[0m Integrations MDM test lock unlock wipe IOS ipad OS i pad OS can't lock manually enrolled host (0.16s)
2001:  �[32m✓�[0m Integrations MDM test lock unlock wipe mac OS (3.29s)
2002:  �[32m✓�[0m Integrations MDM test lock unlock wipe windows linux (3.44s)
2003:  �[32m✓�[0m Integrations MDM test lock unlock wipe windows linux linux (0.97s)
2004:  �[32m✓�[0m Integrations MDM test lock unlock wipe windows linux windows (2.14s)
2005:  �[32m✓�[0m Integrations MDM test macos setup assistant (2.44s)
2006:  �[32m✓�[0m Integrations MDM test managed local account (4.01s)
2007:  �[32m✓�[0m Integrations MDM test managed local account enrollment flow (1.25s)
2008:  �[32m✓�[0m Integrations MDM test managed local account failed enrollment (0.66s)
2009:  �[32m✓�[0m Integrations MDM test managed local account rotation flow (1.41s)
2010:  �[32m✓�[0m Integrations MDM test managed local account setup experience global config (0.11s)
2011:  �[32m✓�[0m Integrations MDM test managed local account setup experience team config (0.16s)
2012:  �[32m✓�[0m Integrations MDM test manual enrollment commands (0.97s)
2013:  �[32m✓�[0m Integrations MDM test migrate MDM device webhook (0.63s)
2014:  �[32m✓�[0m Integrations MDM test migrate MDM device webhook errors (0.42s)
2015:  �[32m✓�[0m Integrations MDM test no email discovery request (0.15s)
2016:  �[32m✓�[0m Integrations MDM test no team VPP app icons (0.31s)
2017:  �[32m✓�[0m Integrations MDM test non MD windows hosts ignored in disk encryption stats (1.07s)
2018:  �[32m✓�[0m Integrations MDM test orbit config nudge settings (1.33s)
2019:  �[32m✓�[0m Integrations MDM test org logo (0.21s)
2020:  �[32m✓�[0m Integrations MDM test puppet match preassign profiles (2.15s)
2021:  �[32m✓�[0m Integrations MDM test puppet run (3.57s)
2022:  �[32m✓�[0m Integrations MDM test recovery lock password integration (20.82s)
2023:  �[32m✓�[0m Integrations MDM test recovery lock password integration MDM command failure - host marked as failed (0.93s)
2024:  �[32m✓�[0m Integrations MDM test recovery lock password integration MDM on, feature enabled - full lifecycle (1.16s)
2025:  �[32m✓�[0m Integrations MDM test recovery lock password integration MDM on, feature off - no recovery lock password set (0.80s)
2026:  �[32m✓�[0m Integrations MDM test recovery lock password integration admin API unenroll soft-deletes stored recovery lock password (1.35s)
2027:  �[32m✓�[0m Integrations MDM test recovery lock password integration auto-rotation triggers after password is viewed (1.01s)
2028:  �[32m✓�[0m Integrations MDM test recovery lock password integration cron sweep soft-deletes stored recovery lock password when host reports enrolled=false (0.79s)
2029:  �[32m✓�[0m Integrations MDM test recovery lock password integration device check out soft-deletes stored recovery lock password (1.10s)
2030:  �[32m✓�[0m Integrations MDM test recovery lock password integration failed host state persists error message (0.96s)
2031:  �[32m✓�[0m Integrations MDM test recovery lock password integration feature disabled with host in pending state (1.25s)
2032:  �[32m✓�[0m Integrations MDM test recovery lock password integration feature disabled with host in verified state (1.02s)
2033:  �[32m✓�[0m Integrations MDM test recovery lock password integration feature re-enabled with host in removing enforcement state (0.64s)
2034:  �[32m✓�[0m Integrations MDM test recovery lock password integration get recovery lock password API (0.96s)
2035:  �[32m✓�[0m Integrations MDM test recovery lock password integration get recovery lock password for non-apple-silicon host returns error (0.43s)
2036:  �[32m✓�[0m Integrations MDM test recovery lock password integration multiple hosts processed in batch (2.00s)
...

2038:  �[32m✓�[0m Integrations MDM test recovery lock password integration re-enrollment soft-deletes stored password and cron re-s ETs (1.55s)
2039:  �[32m✓�[0m Integrations MDM test recovery lock password integration rotate password API initiates rotation (1.16s)
2040:  �[32m✓�[0m Integrations MDM test recovery lock password integration team-specific recovery lock password (1.82s)
2041:  �[32m✓�[0m Integrations MDM test recovery lock password integration viewing password sets auto rotate at (0.89s)
2042:  �[32m✓�[0m Integrations MDM test recreate deleted i phone ADE (1.17s)
2043:  �[32m✓�[0m Integrations MDM test recreate deleted i phone BYOD (0.72s)
2044:  �[32m✓�[0m Integrations MDM test reenrolling ADE device after removing it from ABM (1.62s)
2045:  �[32m✓�[0m Integrations MDM test refetch IOSI pad OS (2.36s)
2046:  �[32m✓�[0m Integrations MDM test refetch after reenroll IOS no delete (2.02s)
2047:  �[32m✓�[0m Integrations MDM test refresh VPP app versions (0.46s)
2048:  �[32m✓�[0m Integrations MDM test refresh VPP app versions for all platforms (1.04s)
2049:  �[32m✓�[0m Integrations MDM test release worker (2.15s)
2050:  �[32m✓�[0m Integrations MDM test release worker automatic release (1.75s)
2051:  �[32m✓�[0m Integrations MDM test release worker automatic release ignores user scoped config profiles (0.62s)
2052:  �[32m✓�[0m Integrations MDM test release worker automatic release waits for config profiles being installed (1.13s)
2053:  �[32m✓�[0m Integrations MDM test remove failed profiles (1.95s)
2054:  �[32m✓�[0m Integrations MDM test run MDM commands (0.84s)
...

2059:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=false; enrollment profile from DEPUs ing post=false; with MDM migration deadline=true (2.08s)
2060:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=false; enrollment profile from DEPUs ing post=true; with MDM migration deadline=false (1.31s)
2061:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=false; enrollment profile from DEPUs ing post=true; with MDM migration deadline=true (1.46s)
2062:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=true; enrollment profile from DEPUs ing post=false; with MDM migration deadline=false (1.71s)
2063:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=true; enrollment profile from DEPUs ing post=false; with MDM migration deadline=true (1.57s)
2064:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=true; enrollment profile from DEPUs ing post=true; with MDM migration deadline=false (0.93s)
2065:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i pad setup experience;enable release manually=true; enrollment profile from DEPUs ing post=true; with MDM migration deadline=true (1.57s)
2066:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=false; enrollment profile from DEPUs ing post=false; with MDM migration deadline=false (1.73s)
2067:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=false; enrollment profile from DEPUs ing post=false; with MDM migration deadline=true (1.67s)
2068:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=false; enrollment profile from DEPUs ing post=true; with MDM migration deadline=false (1.83s)
2069:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=false; enrollment profile from DEPUs ing post=true; with MDM migration deadline=true (1.84s)
2070:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=true; enrollment profile from DEPUs ing post=false; with MDM migration deadline=false (0.82s)
2071:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=true; enrollment profile from DEPUs ing post=false; with MDM migration deadline=true (1.38s)
2072:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=true; enrollment profile from DEPUs ing post=true; with MDM migration deadline=false (1.11s)
2073:  �[32m✓�[0m Integrations MDM test setup experience IOS and i pad OS i phone setup experience;enable release manually=true; enrollment profile from DEPUs ing post=true; with MDM migration deadline=true (1.07s)
2074:  �[32m✓�[0m Integrations MDM test setup experience VPP install error (1.99s)
2075:  �[32m✓�[0m Integrations MDM test setup experience VPPCRUD (1.36s)
...

2167:  �[32m✓�[0m Integrations MDM test windows azure initiated bad keys (0.60s)
2168:  �[32m✓�[0m Integrations MDM test windows azure initiated enrollment and mapping (1.24s)
2169:  �[32m✓�[0m Integrations MDM test windows azure initiated tenant IDs (0.44s)
2170:  �[32m✓�[0m Integrations MDM test windows config secret variables upload (0.67s)
2171:  �[32m✓�[0m Integrations MDM test windows device SCEP profile (0.77s)
2172:  �[32m✓�[0m Integrations MDM test windows fresh enroll empty query (0.54s)
2173:  �[32m✓�[0m Integrations MDM test windows migration enabled (0.37s)
2174:  �[32m✓�[0m Integrations MDM test windows profile management (4.88s)
2175:  �[32m✓�[0m Integrations MDM test windows profile management edit profile does not delete locuri used by another profile (0.33s)
2176:  �[32m✓�[0m Integrations MDM test windows profile management edit profile removes locuri sends delete (0.37s)
2177:  �[32m✓�[0m Integrations MDM test windows profile resend (0.88s)
2178:  �[32m✓�[0m Integrations MDM test windows profile resend do not resend if nothing changed (0.33s)
2179:  �[32m✓�[0m Integrations MDM test windows profile resend resend if contents changed (0.34s)
2180:  �[32m✓�[0m Integrations MDM test windows profile retries (0.91s)
2181:  �[32m✓�[0m Integrations MDM test windows profile retries does not retry after successful delivery (0.13s)
2182:  �[32m✓�[0m Integrations MDM test windows profile retries retries 1 time before marking as failed (0.39s)
2183:  �[32m✓�[0m Integrations MDM test windows profile retry (1.06s)
2184:  �[32m✓�[0m Integrations MDM test windows profile retry command gets retried with replace after 418 (0.55s)
2185:  �[32m✓�[0m Integrations MDM test windows profile retry no resend on non-retryable error (0.12s)
2186:  �[32m✓�[0m Integrations MDM test windows profile retry other hosts can not get all commands (0.08s)
2187:  �[32m✓�[0m Integrations MDM test windows profiles fleet variable substitution (1.02s)
2188:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables (0.42s)
2189:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables HOST UUID variable accepted for team (0.04s)
2190:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables HOST UUID variable accepted globally (0.03s)
2191:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables HOST UUID variable with braces accepted (0.04s)
2192:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables batch with regular and variable profiles accepted (0.04s)
2193:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables mixed supported and unsupported variables rejected (0.02s)
2194:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables multiple HOST UUID variables in single profile accepted (0.04s)
2195:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables unknown fleet variable rejected (0.02s)
2196:  �[32m✓�[0m Integrations MDM test windows profiles with fleet variables unsupported variable rejected (0.02s)
2197:  �[32m✓�[0m Integrations MDM test windows rekey flow (0.26s)
2198:  �[32m✓�[0m Integrations MDM test windows user SCEP profile (0.45s)
2199:  �[32m✓�[0m Integrations MDM test wipe linux cancels upcoming activities (0.86s)
2200:  �[32m✓�[0m Integrations MDM test wipe mac OS cancels upcoming activities (1.07s)
2201:  �[32m✓�[0m Integrations MDM test wipe mac OSUs er channel error keeps upcoming activities (0.66s)
2202:  �[32m✓�[0m Integrations MDM test wipe windows cancels upcoming activities (0.48s)
2203:  �[32m✓�[0m Integrations MDM test wipe windows reenroll as new host (0.63s)
2204:  === �[33mSkipped�[0m
2205:  === �[33mSKIP�[0m: server/service TestIntegrationsMDM/TestTurnOnLifecycleEventsWindows/wiped_host_turns_on_MDM/automatic_enrollment (0.00s)
2206:  integration_mdm_lifecycle_test.go:459: wipe tests are not supported for windows automatic enrollment until we fix #TODO
2207:  --- SKIP: TestIntegrationsMDM/TestTurnOnLifecycleEventsWindows/wiped_host_turns_on_MDM/automatic_enrollment (0.00s)
2208:  === �[31mFailed�[0m
2209:  === �[31mFAIL�[0m: server/service TestIntegrationsMDM/TestSSO (1.41s)
...

2228:  ts=level=info msg="update host dep assign profile responses" profile_uuid=abc status=SUCCESS devices=1 serials=[49BSXE7M3RW5] abm_token_id=<nil>
2229:  {"time":"2026-05-08T19:29:12.634911608Z","level":"WARN","msg":"App config: `macos_setup` is deprecated, please use `setup_experience` instead","log_topic":"deprecated-field-names"}
2230:  {"time":"2026-05-08T19:29:12.708747651Z","level":"WARN","msg":"App config: `macos_setup` is deprecated, please use `setup_experience` instead","log_topic":"deprecated-field-names"}
2231:  {"time":"2026-05-08T19:29:12.745727206Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_all_profiles","hosts_count":0}
2232:  {"time":"2026-05-08T19:29:12.759966845Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_profile","hosts_count":0}
2233:  {"time":"2026-05-08T19:29:12.785471703Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"profile_changed","hosts_count":0}
2234:  ts=level=info msg="update host dep assign profile responses" profile_uuid=abc status=SUCCESS devices=1 serials=[49BSXE7M3RW5] abm_token_id=<nil>
2235:  {"time":"2026-05-08T19:29:12.844164365Z","level":"WARN","msg":"App config: `macos_setup` is deprecated, please use `setup_experience` instead","log_topic":"deprecated-field-names"}
2236:  {"time":"2026-05-08T19:29:12.859266235Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_all_profiles","hosts_count":0}
2237:  {"time":"2026-05-08T19:29:12.865596953Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_profile","hosts_count":0}
2238:  {"time":"2026-05-08T19:29:12.875931604Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"profile_changed","hosts_count":0}
2239:  ts=level=info msg="update host dep assign profile responses" profile_uuid=abc status=SUCCESS devices=1 serials=[49BSXE7M3RW5] abm_token_id=<nil>
2240:  {"time":"2026-05-08T19:29:12.944355395Z","level":"INFO","msg":"","method":"POST","uri":"/api/v1/fleet/mdm/sso","took":24868643}
2241:  {"time":"2026-05-08T19:29:13.01174766Z","level":"INFO","msg":"","method":"POST","uri":"/api/v1/fleet/mdm/sso/callback?SAMLResponse=PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iIElEPSJfN2JkODNiYjBlOWNlMWJhODhiYzM4NTBhMGFhMTA5YzI4Njk0YjU2MTRjIiBWZXJzaW9uPSIyLjAiIElzc3VlSW5zdGFudD0iMjAyNi0wNS0wOFQxOToyOToxMloiIERlc3RpbmF0aW9uPSJodHRwczovL2xvY2FsaG9zdDo4MDgwL2FwaS92MS9mbGVldC9tZG0vc3NvL2NhbGxiYWNrIiBJblJlc3BvbnNlVG89ImlkLWE3MWUwODdjMDJmYmJlNWU0OTNiZjk3YjA1YzYzZDZiNmUyNjc0YjIiPjxzYW1sOklzc3Vlcj5odHRwOi8vbG9jYWxob3N0OjkwODAvc2ltcGxlc2FtbC9zYW1sMi9pZHAvbWV0YWRhdGEucGhwPC9zYW1sOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4KICA8ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPgogICAgPGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz4KICA8ZHM6UmVmZXJlbmNlIFVSST0iI183YmQ4M2JiMGU5Y2UxYmE4OGJjMzg1MGEwYWExMDljMjg2OTRiNTYxNGMiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM%2BPGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5rNTJJL3ZzMFQyRlF0MVU4QTJNMTRwSHpZekEzcVlKdkt1dWFxNW1pdHg4PTwvZHM6RGlnZXN0VmFsdWU%2BPC9kczpSZWZlcmVuY2U%2BPC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZT50d1lYaHdxTkdWNFNhb2ZvcWZoT3NwajZoT1dyVCsvWFBZVTVLYnpoMVVlb3dXZ0ZFUkdvbXl2TUJVOVh4MmZPaHNBemJid0JFdWxBeWJoaXBTYWE4cnErbG5jSFJWV243SkQ0NkllVDF0SStmaVBJdzBHQzlxUU9GRlozRFpkWG1PbGZXelVBRXhJLzNIb1d5WUtZQWVTRXVsSHNZdFBCUmZiL1lYZHh6czdOZ0NvOGd2dVM2dG82NU4vNmZUYk1MM2xBR25uTlZJYmxlQ3RSZk1NYXg1dUVPK204MzZRcWtHNUhudTkwVmFOYTBXRC90bkd4UnJzQTFmc3pmd2tUMzZ0K0lleWsxQ3ZVRDVMNUV2ZUZrc2Z5T2NaMjF5a0NkYTVha1k4cHdBczdtQTdiQWhLcmJFOXovbmtka0Q0Y2xnczhUbEZuUE14UEk2MUE2dlgxNHc9PTwvZHM6U2lnbmF0dXJlVmFsdWU%2BCjxkczpLZXlJbmZvPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSURYVENDQWtXZ0F3SUJBZ0lKQUxtVlZ1RFd1NE5ZTUEwR0NTcUdTSWIzRFFFQkN3VUFNRVV4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3SHdZRFZRUUtEQmhKYm5SbGNtNWxkQ0JYYVdSbmFYUnpJRkIwZVNCTWRHUXdIaGNOTVRZeE1qTXhNVFF6TkRRM1doY05ORGd3TmpJMU1UUXpORFEzV2pCRk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTBaWEp1WlhRZ1YybGtaMmwwY3lCUWRIa2dUSFJrTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF6VUNGb3pnTmIxaDFNMGp6TlJTQ2poT0JuUit1VmJWcGFXZlhZSVIrQWhXRGRFZTVyeVkrQ2dhdk9nOGJmTHlieXpGZGVobFlkRFJna2VkRUIvR2pHOGFKdzA2bDBxRjRqRE9BdzBrRXlnV0N1Mm1jSDdYT3hSdCtZQUgzVFZIYS9IdTFXM1dqemtvYnFxcUxROGdrS1dXTTI3Zk9nQVo2R2llYUpCTjZWQlNNTWNQZXkzSFdMQm1jK1RZSm12MWRiYU8yakhoS2g4cGZLdzBXMTJWTThQMVBJTzhndjRQaHUvdXVKWWllQldLaXhCRXl5MGxIanlpeFlGQ1IxMnhkaDRDQTQ3cTk1OFpSR25uRFVHRlZFMVFoZ1JhY0pDT1o5YmQ1dDltcjhLTGFWQllUQ0pvNUVSRThqeW1hYjVkUHFlNXFLZkpzQ1ppcVdnbGJqVW85dHdJREFRQUJvMUF3VGpBZEJnTlZIUTRFRmdRVXhwdXdjcy9DWVFPeXVpK3IxRyszS3hCTmh4a3dId1lEVlIwakJCZ3dGb0FVeHB1d2NzL0NZUU95dWkrcjFHKzNLeEJOaHhrd0RBWURWUjBUQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQWlXVUtzLzJ4L3ZpTkNLaTNZNmJsRXVDdEFHaHpPT1o5RWpydko4K0NPSDNSYWczdFZCV3JjQlozL3VoaFBxNWd5OWxxdzRPa3ZFd3M5OS81akZzWDFGSjZNS0JncWZ1eTd5aDVzMVlmTTBBTkhZY3pNbVlwWmVBY1FmMkNHQWFWZndUVGZTbHpOTHNGMmxXL2x5N3lhcEZ6bFlTSkxHb1ZFK09IRXU4ZzVTbE5BQ1VFZmtYdys1RWdoaCtLemxJTjdSNlE3cjJpeFdORkJDL2pXZjdOS1VmSnlYOHFJRzVtZDFZVWVUNkdCVzlCbTIvMS9SaU8yNEpUYVlsZkxkS0s5VFliOHNHNUIrT0xhYjJESW1HOTlDSjI1UmtBY1NvYldORjV6RDBPNmxnT28zY0VkQi9rc0NxM2htdGxDL0RsTFovRDhDSis3VnVablMxclIybmFRPT08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbHA6U3RhdHVzPjxzYW1scDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiLz48L3NhbWxwOlN0YXR1cz48c2FtbDpBc3NlcnRpb24geG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBJRD0iXzkwMjJhODU5NTViZjQ1YjM0MzE0OTNmOTcxYjk2ZGMwNzkxYzEzNTdiZiIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMjYtMDUtMDhUMTk6Mjk6MTJaIj48c2FtbDpJc3N1ZXI%2BaHR0cDovL2xvY2FsaG9zdDo5MDgwL3NpbXBsZXNhbWwvc2FtbDIvaWRwL21ldGFkYXRhLnBocDwvc2FtbDpJc3N1ZXI%2BPGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI%2BCiAgPGRzOlNpZ25lZEluZm8%2BPGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz4KICAgIDxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8%2BCiAgPGRzOlJlZmVyZW5jZSBVUkk9IiNfOTAyMmE4NTk1NWJmNDViMzQzMTQ5M2Y5NzFiOTZkYzA3OTFjMTM1N2JmIj48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8%2BPC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU%2BQ2hlZHFHS0pzMmlKbVV2NUNEVTVoSXRXcFM2RFBOaXdRNmN4R0dVTHZHOD08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU%2BcjZTdjRLU2QwZU90cjZIbUhyTDVuTjM2R3FPL1B3cWlkSnUySU16dmlpK25JQXRYZVphY2l0SWdRUmNCbXZqR1VRcEJkM1VEU2hCdGpRVDBlQTUxVDh2WU90ZkdEcktUTm5ZZEtCZmxZWERrcHNtWFdVNEYxbkdORnMyV2d2OFR3c2czc1BlUXJlZ0xUZDhuV3IwRHVlYStKN0Z6QmVoTHpZVS9MRnZiWS85dUVzT1lCcmQva1BxcjZMNTFEVS80dDF0RUtmcUVPS1FsWVI3Sm1yUUdUQnNJWUk3Y1kxVjNlYVVKZVVXQXBoZ1VxTkY5OFV2OVQwQ0QvWi9ndXd2T1NqaEFyYkl3a2hYaUZBdjFpeUZ3ckwzM3poOU50NDRMbGpFR3c0QmRPYSthYjlrMVJoVDgzSGZhY1E0ZUZ4Y3VrcXpZNGVYbVJJR093RzkxVHl0alVRPT08L2RzOlNpZ25hdHVyZVZhbHVlPgo8ZHM6S2V5SW5mbz48ZHM6WDUwOURhdGE%2BPGRzOlg1MDlDZXJ0aWZpY2F0ZT5NSUlEWFRDQ0FrV2dBd0lCQWdJSkFMbVZWdURXdTROWU1BMEdDU3FHU0liM0RRRUJDd1VBTUVVeEN6QUpCZ05WQkFZVEFrRlZNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWGFXUm5hWFJ6SUZCMGVTQk1kR1F3SGhjTk1UWXhNak14TVRRek5EUTNXaGNOTkRnd05qSTFNVFF6TkRRM1dqQkZNUXN3Q1FZRFZRUUdFd0pCVlRFVE1CRUdBMVVFQ0F3S1UyOXRaUzFUZEdGMFpURWhNQjhHQTFVRUNnd1lTVzUwWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBelVDRm96Z05iMWgxTTBqek5SU0NqaE9CblIrdVZiVnBhV2ZYWUlSK0FoV0RkRWU1cnlZK0NnYXZPZzhiZkx5Ynl6RmRlaGxZZERSZ2tlZEVCL0dqRzhhSncwNmwwcUY0akRPQXcwa0V5Z1dDdTJtY0g3WE94UnQrWUFIM1RWSGEvSHUxVzNXanprb2JxcXFMUThna0tXV00yN2ZPZ0FaNkdpZWFKQk42VkJTTU1jUGV5M0hXTEJtYytUWUptdjFkYmFPMmpIaEtoOHBmS3cwVzEyVk04UDFQSU84Z3Y0UGh1L3V1SllpZUJXS2l4QkV5eTBsSGp5aXhZRkNSMTJ4ZGg0Q0E0N3E5NThaUkdubkRVR0ZWRTFRaGdSYWNKQ09aOWJkNXQ5bXI4S0xhVkJZVENKbzVFUkU4anltYWI1ZFBxZTVxS2ZKc0NaaXFXZ2xialVvOXR3SURBUUFCbzFBd1RqQWRCZ05WSFE0RUZnUVV4cHV3Y3MvQ1lRT3l1aStyMUcrM0t4Qk5oeGt3SHdZRFZSMGpCQmd3Rm9BVXhwdXdjcy9DWVFPeXVpK3IxRyszS3hCTmh4a3dEQVlEVlIwVEJBVXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUFpV1VLcy8yeC92aU5DS2kzWTZibEV1Q3RBR2h6T09aOUVqcnZKOCtDT0gzUmFnM3RWQldyY0JaMy91aGhQcTVneTlscXc0T2t2RXdzOTkvNWpGc1gxRko2TUtCZ3FmdXk3eWg1czFZZk0wQU5IWWN6TW1ZcFplQWNRZjJDR0FhVmZ3VFRmU2x6TkxzRjJsVy9seTd5YXBGemxZU0pMR29WRStPSEV1OGc1U2xOQUNVRWZrWHcrNUVnaGgrS3psSU43UjZRN3IyaXhXTkZCQy9qV2Y3TktVZkp5WDhxSUc1bWQxWVVlVDZHQlc5Qm0yLzEvUmlPMjRKVGFZbGZMZEtLOVRZYjhzRzVCK09MYWIyREltRzk5Q0oyNVJrQWNTb2JXTkY1ekQwTzZsZ09vM2NFZEIva3NDcTNobXRsQy9EbExaL0Q4Q0orN1Z1Wm5TMXJSMm5hUT09PC9kczpYNTA5Q2VydGlmaWNhdGU%2BPC9kczpYNTA5RGF0YT48L2RzOktleUluZm8%2BPC9kczpTaWduYXR1cmU%2BPHNhbWw6U3ViamVjdD48c2FtbDpOYW1lSUQgU1BOYW1lUXVhbGlmaWVyPSJtZG0udGVzdC5jb20iIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXMiPnNzb191c2VyQGV4YW1wbGUuY29tPC9zYW1sOk5hbWVJRD48c2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uIE1ldGhvZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlciI%2BPHNhbWw6U3ViamVjdENvbmZpcm1hdGlvbkRhdGEgTm90T25PckFmdGVyPSIyMDI2LTA1LTA4VDE5OjM0OjEyWiIgUmVjaXBpZW50PSJodHRwczovL2xvY2FsaG9zdDo4MDgwL2FwaS92MS9mbGVldC9tZG0vc3NvL2NhbGxiYWNrIiBJblJlc3BvbnNlVG89ImlkLWE3MWUwODdjMDJmYmJlNWU0OTNiZjk3YjA1YzYzZDZiNmUyNjc0YjIiLz48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWw6U3ViamVjdD48c2FtbDpDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAyNi0wNS0wOFQxOToyODo0MloiIE5vdE9uT3JBZnRlcj0iMjAyNi0wNS0wOFQxOTozNDoxMloiPjxzYW1sOkF1ZGllbmNlUmVzdHJpY3Rpb24%2BPHNhbWw6QXVkaWVuY2U%2BbWRtLnRlc3QuY29tPC9zYW1sOkF1ZGllbmNlPjwvc2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uPjwvc2FtbDpDb25kaXRpb25zPjxzYW1sOkF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAyNi0wNS0wOFQxOToyOToxMloiIFNlc3Npb25Ob3RPbk9yQWZ0ZXI9IjIwMjYtMDUtMDlUMDM6Mjk6MTJaIiBTZXNzaW9uSW5kZXg9Il80MTQwY2UwNGRhZmFjMDI1NGNhZDFhZDUyNzY2NTFlMWVmZWJkYjBlNDIiPjxzYW1sOkF1dGhuQ29udGV4dD48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWw6QXV0aG5Db250ZXh0Pjwvc2FtbDpBdXRoblN0YXRlbWVudD48c2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ%2BPHNhbWw6QXR0cmlidXRlIE5hbWU9InVpZCIgTmFtZUZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDpiYXNpYyI%2BPHNhbWw6QXR0cmlidXRlVmFsdWUgeHNpOnR5cGU9InhzOnN0cmluZyI%2BMTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT48L3NhbWw6QXR0cmlidXRlPjxzYW1sOkF0dHJpYnV0ZSBOYW1lPSJlZHVQZXJzb25BZmZpbGlhdGlvbiIgTmFtZUZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDpiYXNpYyI%2BPHNhbWw6QXR0cmlidXRlVmFsdWUgeHNpOnR5cGU9InhzOnN0cmluZyI%2BZ3JvdXAxPC9zYW1sOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDpBdHRyaWJ1dGU%2BPHNhbWw6QXR0cmlidXRlIE5hbWU9ImRpc3BsYXluYW1lIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OmJhc2ljIj48c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4c2k6dHlwZT0ieHM6c3RyaW5nIj5TU08gVXNlciAxPC9zYW1sOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDpBdHRyaWJ1dGU%2BPHNhbWw6QXR0cmlidXRlIE5hbWU9ImVtYWlsIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OmJhc2ljIj48c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4c2k6dHlwZT0ieHM6c3RyaW5nIj5zc29fdXNlckBleGFtcGxlLmNvbTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT48L3NhbWw6QXR0cmlidXRlPjwvc2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ%2BPC9zYW1sOkFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg%3D%3D","took":13775698}
2242:  integration_mdm_test.go:6465: 
2243:  Error Trace:	/home/runner/work/fleet/fleet/server/service/integration_mdm_test.go:6465
2244:  Error:      	Should be true
2245:  Test:       	TestIntegrationsMDM/TestSSO
2246:  ts=level=debug msg="cleanup orphaned software titles" rows_affected=0 took=1.599784ms
2247:  {"time":"2026-05-08T19:29:13.18141497Z","level":"WARN","msg":"App config: `macos_setup` is deprecated, please use `setup_experience` instead","log_topic":"deprecated-field-names"}
2248:  {"time":"2026-05-08T19:29:13.198228923Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_all_profiles","hosts_count":0}
2249:  --- FAIL: TestIntegrationsMDM/TestSSO (1.41s)
2250:  === �[31mFAIL�[0m: server/service TestIntegrationsMDM/TestSSOWithSCIM (0.68s)
...

2260:  {"time":"2026-05-08T19:29:13.382456446Z","level":"INFO","msg":"process device response","serial_number":"JXV13D7QBUCV","device_assigned_by":"","device_assigned_date":"0001-01-01T00:00:00Z","op_date":"0001-01-01T00:00:00Z","op_type":"added","profile_status":"","profile_assign_time":"0001-01-01T00:00:00Z","push_push_time":"0001-01-01T00:00:00Z","profile_uuid":"","mdm_migration_deadline":"nil"}
2261:  ts=level=info msg="get hosts with previously deleted dep assignments" serials=""
2262:  {"time":"2026-05-08T19:29:13.391562958Z","level":"INFO","msg":"devices to assign DEP profiles","to_add":"JXV13D7QBUCV","to_remove":"","to_modify":""}
2263:  {"time":"2026-05-08T19:29:13.40137859Z","level":"INFO","msg":"profile assigned","profile_uuid":"abc","devices":1,"success":1}
2264:  ts=level=info msg="update host dep assign profile responses" profile_uuid=abc status=SUCCESS devices=1 serials=[JXV13D7QBUCV] abm_token_id=0x54662886b88
2265:  {"time":"2026-05-08T19:29:13.425131886Z","level":"WARN","msg":"App config: `macos_setup` is deprecated, please use `setup_experience` instead","log_topic":"deprecated-field-names"}
2266:  {"time":"2026-05-08T19:29:13.454757889Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_all_profiles","hosts_count":0}
2267:  {"time":"2026-05-08T19:29:13.471827443Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_profile","hosts_count":0}
2268:  {"time":"2026-05-08T19:29:13.476458491Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_profile","hosts_count":0}
2269:  {"time":"2026-05-08T19:29:13.486538768Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"profile_changed","hosts_count":0}
2270:  {"time":"2026-05-08T19:29:13.494898849Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"profile_changed","hosts_count":0}
2271:  ts=level=info msg="update host dep assign profile responses" profile_uuid=abc status=SUCCESS devices=1 serials=[JXV13D7QBUCV] abm_token_id=<nil>
2272:  ts=level=info msg="update host dep assign profile responses" profile_uuid=abc status=SUCCESS devices=1 serials=[JXV13D7QBUCV] abm_token_id=<nil>
2273:  {"time":"2026-05-08T19:29:13.625918106Z","level":"INFO","msg":"","method":"POST","uri":"/api/v1/fleet/mdm/sso","took":21259642}
2274:  {"time":"2026-05-08T19:29:13.689558134Z","level":"INFO","msg":"","method":"POST","uri":"/api/v1/fleet/mdm/sso/callback?SAMLResponse=PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iIElEPSJfN2JiOTcyM2VlOTcwMmY4MjBkYzljZTExNTRlNzdmMDA1ZjA2ZjJlM2ViIiBWZXJzaW9uPSIyLjAiIElzc3VlSW5zdGFudD0iMjAyNi0wNS0wOFQxOToyOToxM1oiIERlc3RpbmF0aW9uPSJodHRwczovL2xvY2FsaG9zdDo4MDgwL2FwaS92MS9mbGVldC9tZG0vc3NvL2NhbGxiYWNrIiBJblJlc3BvbnNlVG89ImlkLTM2ZDYzY2ZlMjRkMmZmMmQ3MjE2MDVmZGEyNmNlODQyN2M5ODc5M2QiPjxzYW1sOklzc3Vlcj5odHRwOi8vbG9jYWxob3N0OjkwODAvc2ltcGxlc2FtbC9zYW1sMi9pZHAvbWV0YWRhdGEucGhwPC9zYW1sOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4KICA8ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPgogICAgPGRzOlNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZHNpZy1tb3JlI3JzYS1zaGEyNTYiLz4KICA8ZHM6UmVmZXJlbmNlIFVSST0iI183YmI5NzIzZWU5NzAyZjgyMGRjOWNlMTE1NGU3N2YwMDVmMDZmMmUzZWIiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM%2BPGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT5hNzhjQWNZMFA2dEJGbHhYRjBsNXpUdXQyL01ncmlRUy9lYUoxMXFIK3hJPTwvZHM6RGlnZXN0VmFsdWU%2BPC9kczpSZWZlcmVuY2U%2BPC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZT55T1NZRHZrR0owamlVNzRIeVR5OTdQclZFeDViVWJ6bDIxQ0s1YmFZMFJDMUtxeDhZU1U3RHZ0UC9DcE1xZkFXcGZtRU9oY2xFcnk1emJycHB1TVg1eWNUL095d0poRUpZRExzcmNZZCtPeERSVEpoVjByalF4VXpPQVRzSVFSdXcwS0Q0SnZ0QkVwb0RzazV1Vy9qMUVDMG8zMmgxdEZvUHRxdE45VkRjeFlIKythTzk4VUFLdGVnZFBiZEVubVhrR2RYalNteGc5elEwUVcwU3FwRDZXSXdDMnRzL1cwYmk5ZFhvd3RhL3E3QUx2dS90ajNyQmlGNzQzK1g3U3RIYnRka0JIRkthbU5WR0lMK29Ta0lBYkFEdWNaNko3d1RoR3Rmck1MbHBvQ29CNDVlbS9JRUxKYkt3QTE2QVJBRlNMQTRYVWNIclZkalFSVW56dHBOd3c9PTwvZHM6U2lnbmF0dXJlVmFsdWU%2BCjxkczpLZXlJbmZvPjxkczpYNTA5RGF0YT48ZHM6WDUwOUNlcnRpZmljYXRlPk1JSURYVENDQWtXZ0F3SUJBZ0lKQUxtVlZ1RFd1NE5ZTUEwR0NTcUdTSWIzRFFFQkN3VUFNRVV4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlEVlFRSURBcFRiMjFsTFZOMFlYUmxNU0V3SHdZRFZRUUtEQmhKYm5SbGNtNWxkQ0JYYVdSbmFYUnpJRkIwZVNCTWRHUXdIaGNOTVRZeE1qTXhNVFF6TkRRM1doY05ORGd3TmpJMU1UUXpORFEzV2pCRk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQXdLVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTBaWEp1WlhRZ1YybGtaMmwwY3lCUWRIa2dUSFJrTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF6VUNGb3pnTmIxaDFNMGp6TlJTQ2poT0JuUit1VmJWcGFXZlhZSVIrQWhXRGRFZTVyeVkrQ2dhdk9nOGJmTHlieXpGZGVobFlkRFJna2VkRUIvR2pHOGFKdzA2bDBxRjRqRE9BdzBrRXlnV0N1Mm1jSDdYT3hSdCtZQUgzVFZIYS9IdTFXM1dqemtvYnFxcUxROGdrS1dXTTI3Zk9nQVo2R2llYUpCTjZWQlNNTWNQZXkzSFdMQm1jK1RZSm12MWRiYU8yakhoS2g4cGZLdzBXMTJWTThQMVBJTzhndjRQaHUvdXVKWWllQldLaXhCRXl5MGxIanlpeFlGQ1IxMnhkaDRDQTQ3cTk1OFpSR25uRFVHRlZFMVFoZ1JhY0pDT1o5YmQ1dDltcjhLTGFWQllUQ0pvNUVSRThqeW1hYjVkUHFlNXFLZkpzQ1ppcVdnbGJqVW85dHdJREFRQUJvMUF3VGpBZEJnTlZIUTRFRmdRVXhwdXdjcy9DWVFPeXVpK3IxRyszS3hCTmh4a3dId1lEVlIwakJCZ3dGb0FVeHB1d2NzL0NZUU95dWkrcjFHKzNLeEJOaHhrd0RBWURWUjBUQkFVd0F3RUIvekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBQWlXVUtzLzJ4L3ZpTkNLaTNZNmJsRXVDdEFHaHpPT1o5RWpydko4K0NPSDNSYWczdFZCV3JjQlozL3VoaFBxNWd5OWxxdzRPa3ZFd3M5OS81akZzWDFGSjZNS0JncWZ1eTd5aDVzMVlmTTBBTkhZY3pNbVlwWmVBY1FmMkNHQWFWZndUVGZTbHpOTHNGMmxXL2x5N3lhcEZ6bFlTSkxHb1ZFK09IRXU4ZzVTbE5BQ1VFZmtYdys1RWdoaCtLemxJTjdSNlE3cjJpeFdORkJDL2pXZjdOS1VmSnlYOHFJRzVtZDFZVWVUNkdCVzlCbTIvMS9SaU8yNEpUYVlsZkxkS0s5VFliOHNHNUIrT0xhYjJESW1HOTlDSjI1UmtBY1NvYldORjV6RDBPNmxnT28zY0VkQi9rc0NxM2htdGxDL0RsTFovRDhDSis3VnVablMxclIybmFRPT08L2RzOlg1MDlDZXJ0aWZpY2F0ZT48L2RzOlg1MDlEYXRhPjwvZHM6S2V5SW5mbz48L2RzOlNpZ25hdHVyZT48c2FtbHA6U3RhdHVzPjxzYW1scDpTdGF0dXNDb2RlIFZhbHVlPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6c3RhdHVzOlN1Y2Nlc3MiLz48L3NhbWxwOlN0YXR1cz48c2FtbDpBc3NlcnRpb24geG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBJRD0iX2QxOWM4ZGVmMmI0Y2U0MjgyOTQwMzQ5MDYyZDI3YzQwMDM2YTc1YzM4NyIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMjYtMDUtMDhUMTk6Mjk6MTNaIj48c2FtbDpJc3N1ZXI%2BaHR0cDovL2xvY2FsaG9zdDo5MDgwL3NpbXBsZXNhbWwvc2FtbDIvaWRwL21ldGFkYXRhLnBocDwvc2FtbDpJc3N1ZXI%2BPGRzOlNpZ25hdHVyZSB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI%2BCiAgPGRzOlNpZ25lZEluZm8%2BPGRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz4KICAgIDxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8%2BCiAgPGRzOlJlZmVyZW5jZSBVUkk9IiNfZDE5YzhkZWYyYjRjZTQyODI5NDAzNDkwNjJkMjdjNDAwMzZhNzVjMzg3Ij48ZHM6VHJhbnNmb3Jtcz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz48ZHM6VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIi8%2BPC9kczpUcmFuc2Zvcm1zPjxkczpEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGVuYyNzaGEyNTYiLz48ZHM6RGlnZXN0VmFsdWU%2BUGVTYzlGZzVMb0lXbjNvV1dTOEp1WXhNRmt6KzN4QXhFdjJWKzBNeWVYST08L2RzOkRpZ2VzdFZhbHVlPjwvZHM6UmVmZXJlbmNlPjwvZHM6U2lnbmVkSW5mbz48ZHM6U2lnbmF0dXJlVmFsdWU%2BZURiTG12cnROSzA4ODZMMUQ0TWxFM2luVXhvazA0WTdZSFE0THZ2TjBYbVZhcDFaaEVSeWNha1p2NXZvdHBOME5SOUhHODVRcEZXN0RWYW9XdXZQbVhoSS90RUFXRThMVVE2MU11UXpDY3EwV3d5RG5oUWQrZ0hwQjJmMC9GaW5FS2x2aitPa3VDM2xUWVhpY2ZLT2NPTnAzbXJNeUVjUlFHSU5yY0Vublh6bEpIb0VyNHM1REZnMGFWU0UwTEdvaUNSU1g2UHRiQm1PMmxoeGVwWktrVmdkM3pNOTgwUjF6L01FMzg2djZ5REtFcW1Wc040RzYrTGpWbFRVRFlwYWNMTWNwYmkwanR6b1pMZFJ1WUJwam85YXJmcU5QNVRSN1BwUUxqd2UvN1ZrTlNrTUVTU3l1d3BkUEltd3BOQXg4dXNzT0JVNExIRDIxbDM5cjV6d2ZnPT08L2RzOlNpZ25hdHVyZVZhbHVlPgo8ZHM6S2V5SW5mbz48ZHM6WDUwOURhdGE%2BPGRzOlg1MDlDZXJ0aWZpY2F0ZT5NSUlEWFRDQ0FrV2dBd0lCQWdJSkFMbVZWdURXdTROWU1BMEdDU3FHU0liM0RRRUJDd1VBTUVVeEN6QUpCZ05WQkFZVEFrRlZNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWGFXUm5hWFJ6SUZCMGVTQk1kR1F3SGhjTk1UWXhNak14TVRRek5EUTNXaGNOTkRnd05qSTFNVFF6TkRRM1dqQkZNUXN3Q1FZRFZRUUdFd0pCVlRFVE1CRUdBMVVFQ0F3S1UyOXRaUzFUZEdGMFpURWhNQjhHQTFVRUNnd1lTVzUwWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBelVDRm96Z05iMWgxTTBqek5SU0NqaE9CblIrdVZiVnBhV2ZYWUlSK0FoV0RkRWU1cnlZK0NnYXZPZzhiZkx5Ynl6RmRlaGxZZERSZ2tlZEVCL0dqRzhhSncwNmwwcUY0akRPQXcwa0V5Z1dDdTJtY0g3WE94UnQrWUFIM1RWSGEvSHUxVzNXanprb2JxcXFMUThna0tXV00yN2ZPZ0FaNkdpZWFKQk42VkJTTU1jUGV5M0hXTEJtYytUWUptdjFkYmFPMmpIaEtoOHBmS3cwVzEyVk04UDFQSU84Z3Y0UGh1L3V1SllpZUJXS2l4QkV5eTBsSGp5aXhZRkNSMTJ4ZGg0Q0E0N3E5NThaUkdubkRVR0ZWRTFRaGdSYWNKQ09aOWJkNXQ5bXI4S0xhVkJZVENKbzVFUkU4anltYWI1ZFBxZTVxS2ZKc0NaaXFXZ2xialVvOXR3SURBUUFCbzFBd1RqQWRCZ05WSFE0RUZnUVV4cHV3Y3MvQ1lRT3l1aStyMUcrM0t4Qk5oeGt3SHdZRFZSMGpCQmd3Rm9BVXhwdXdjcy9DWVFPeXVpK3IxRyszS3hCTmh4a3dEQVlEVlIwVEJBVXdBd0VCL3pBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQUFpV1VLcy8yeC92aU5DS2kzWTZibEV1Q3RBR2h6T09aOUVqcnZKOCtDT0gzUmFnM3RWQldyY0JaMy91aGhQcTVneTlscXc0T2t2RXdzOTkvNWpGc1gxRko2TUtCZ3FmdXk3eWg1czFZZk0wQU5IWWN6TW1ZcFplQWNRZjJDR0FhVmZ3VFRmU2x6TkxzRjJsVy9seTd5YXBGemxZU0pMR29WRStPSEV1OGc1U2xOQUNVRWZrWHcrNUVnaGgrS3psSU43UjZRN3IyaXhXTkZCQy9qV2Y3TktVZkp5WDhxSUc1bWQxWVVlVDZHQlc5Qm0yLzEvUmlPMjRKVGFZbGZMZEtLOVRZYjhzRzVCK09MYWIyREltRzk5Q0oyNVJrQWNTb2JXTkY1ekQwTzZsZ09vM2NFZEIva3NDcTNobXRsQy9EbExaL0Q4Q0orN1Z1Wm5TMXJSMm5hUT09PC9kczpYNTA5Q2VydGlmaWNhdGU%2BPC9kczpYNTA5RGF0YT48L2RzOktleUluZm8%2BPC9kczpTaWduYXR1cmU%2BPHNhbWw6U3ViamVjdD48c2FtbDpOYW1lSUQgU1BOYW1lUXVhbGlmaWVyPSJtZG0udGVzdC5jb20iIEZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6MS4xOm5hbWVpZC1mb3JtYXQ6ZW1haWxBZGRyZXMiPnNzb191c2VyX25vX2Rpc3BsYXluYW1lQGV4YW1wbGUuY29tPC9zYW1sOk5hbWVJRD48c2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uIE1ldGhvZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlciI%2BPHNhbWw6U3ViamVjdENvbmZpcm1hdGlvbkRhdGEgTm90T25PckFmdGVyPSIyMDI2LTA1LTA4VDE5OjM0OjEzWiIgUmVjaXBpZW50PSJodHRwczovL2xvY2FsaG9zdDo4MDgwL2FwaS92MS9mbGVldC9tZG0vc3NvL2NhbGxiYWNrIiBJblJlc3BvbnNlVG89ImlkLTM2ZDYzY2ZlMjRkMmZmMmQ3MjE2MDVmZGEyNmNlODQyN2M5ODc5M2QiLz48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj48L3NhbWw6U3ViamVjdD48c2FtbDpDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAyNi0wNS0wOFQxOToyODo0M1oiIE5vdE9uT3JBZnRlcj0iMjAyNi0wNS0wOFQxOTozNDoxM1oiPjxzYW1sOkF1ZGllbmNlUmVzdHJpY3Rpb24%2BPHNhbWw6QXVkaWVuY2U%2BbWRtLnRlc3QuY29tPC9zYW1sOkF1ZGllbmNlPjwvc2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uPjwvc2FtbDpDb25kaXRpb25zPjxzYW1sOkF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAyNi0wNS0wOFQxOToyOToxM1oiIFNlc3Npb25Ob3RPbk9yQWZ0ZXI9IjIwMjYtMDUtMDlUMDM6Mjk6MTNaIiBTZXNzaW9uSW5kZXg9Il81Zjk5NTE2M2Q2YTNiOGQ0MWE5MzY2YzEyMTgxYWQxYzlmZDgzNTQzNTQiPjxzYW1sOkF1dGhuQ29udGV4dD48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWw6QXV0aG5Db250ZXh0Pjwvc2FtbDpBdXRoblN0YXRlbWVudD48c2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ%2BPHNhbWw6QXR0cmlidXRlIE5hbWU9InVpZCIgTmFtZUZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDpiYXNpYyI%2BPHNhbWw6QXR0cmlidXRlVmFsdWUgeHNpOnR5cGU9InhzOnN0cmluZyI%2BNzwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT48L3NhbWw6QXR0cmlidXRlPjxzYW1sOkF0dHJpYnV0ZSBOYW1lPSJlZHVQZXJzb25BZmZpbGlhdGlvbiIgTmFtZUZvcm1hdD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmF0dHJuYW1lLWZvcm1hdDpiYXNpYyI%2BPHNhbWw6QXR0cmlidXRlVmFsdWUgeHNpOnR5cGU9InhzOnN0cmluZyI%2BZ3JvdXAxPC9zYW1sOkF0dHJpYnV0ZVZhbHVlPjwvc2FtbDpBdHRyaWJ1dGU%2BPHNhbWw6QXR0cmlidXRlIE5hbWU9ImVtYWlsIiBOYW1lRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXR0cm5hbWUtZm9ybWF0OmJhc2ljIj48c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4c2k6dHlwZT0ieHM6c3RyaW5nIj5zc29fdXNlcl9ub19kaXNwbGF5bmFtZUBleGFtcGxlLmNvbTwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT48L3NhbWw6QXR0cmlidXRlPjwvc2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ%2BPC9zYW1sOkFzc2VydGlvbj48L3NhbWxwOlJlc3BvbnNlPg%3D%3D","took":14134214}
2275:  {"time":"2026-05-08T19:29:13.690070136Z","level":"INFO","msg":"request error","path":"/api/mdm/apple/enroll","took":17337,"internal":"","uuid":"1eacfc9e-d4e4-498e-a30e-4e0faad703c1","err":"token is required"}
2276:  http.go:52: 
2277:  Error Trace:	/home/runner/work/fleet/fleet/server/test/httptest/http.go:52
2278:  /home/runner/work/fleet/fleet/server/service/testing_client.go:308
2279:  /home/runner/work/fleet/fleet/server/service/integration_mdm_test.go:7400
2280:  /home/runner/work/fleet/fleet/server/service/integration_mdm_test.go:6846
2281:  /home/runner/go/pkg/mod/github.com/stretchr/testify@v1.11.1/suite/suite.go:196
2282:  Error:      	Not equal: 
2283:  expected: 200
2284:  actual  : 400
2285:  Test:       	TestIntegrationsMDM/TestSSOWithSCIM
2286:  Messages:   	Fleet jsonError: {Message:Bad request Code:0 Errors:[map[name:base reason:token is required]] UUID:1eacfc9e-d4e4-498e-a30e-4e0faad703c1}
2287:  ts=level=debug msg="cleanup orphaned software titles" rows_affected=0 took=1.785755ms
2288:  {"time":"2026-05-08T19:29:13.85935918Z","level":"WARN","msg":"App config: `macos_setup` is deprecated, please use `setup_experience` instead","log_topic":"deprecated-field-names"}
2289:  {"time":"2026-05-08T19:29:13.87528605Z","level":"INFO","msg":"queueing macOS setup assistant job","enabled":"true","macos_setup_assistant":"update_all_profiles","hosts_count":0}
2290:  --- FAIL: TestIntegrationsMDM/TestSSOWithSCIM (0.68s)
2291:  === �[31mFAIL�[0m: server/service TestIntegrationsMDM (468.97s)
2292:  integration_mdm_test.go:313: >>> using S3-compatible software installer store
2293:  {"time":"2026-05-08T19:24:32.153992871Z","level":"INFO","msg":"","method":"POST","uri":"/api/latest/fleet/login","took":94625114,"op":"login","email":"admin1@example.com","public_ip":"127.0.0.1"}
2294:  DONE 645 tests, 1 skipped, 3 failures in 469.347s
2295:  make[1]: *** [Makefile:278: .run-go-tests] Error 1
2296:  make[1]: Leaving directory '/home/runner/work/fleet/fleet'
2297:  make: *** [Makefile:393: test-go] Error 2
2298:  ##[error]Process completed with exit code 2.
2299:  ##[group]Run actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a
2300:  with:
2301:  name: integration-mdm-mysql8.0.44-coverage
2302:  path: ./coverage.txt
2303:  if-no-files-found: error
2304:  compression-level: 6
...

2316:  With the provided path, there will be 1 file uploaded
2317:  Artifact name is valid!
2318:  Root directory input is valid!
2319:  Beginning upload of artifact content to blob storage
2320:  Uploaded bytes 543299
2321:  Finished uploading artifact content to blob storage!
2322:  SHA256 hash of uploaded artifact zip is 7dc1c7ddd3e4a3017159c90895dbed620f86cad4c58796cf24b4839b963175df
2323:  Finalizing artifact upload
2324:  Artifact integration-mdm-mysql8.0.44-coverage.zip successfully finalized. Artifact ID 6887208256
2325:  Artifact integration-mdm-mysql8.0.44-coverage has been successfully uploaded! Final size is 543299 bytes. Artifact ID is 6887208256
2326:  Artifact download URL: https://github.com/fleetdm/fleet/actions/runs/25574237201/artifacts/6887208256
2327:  ##[group]Run c1grep() { grep "$@" || test $? = 1; }
2328:  �[36;1mc1grep() { grep "$@" || test $? = 1; }�[0m
2329:  �[36;1mc1grep -oP 'FAIL: .*$' /tmp/gotest.log > /tmp/summary.txt�[0m
2330:  �[36;1mc1grep 'test timed out after' /tmp/gotest.log >> /tmp/summary.txt�[0m
2331:  �[36;1mc1grep 'fatal error:' /tmp/gotest.log >> /tmp/summary.txt�[0m
2332:  �[36;1mc1grep -A 10 'panic: runtime error: ' /tmp/gotest.log >> /tmp/summary.txt�[0m
2333:  �[36;1mc1grep ' FAIL\t' /tmp/gotest.log >> /tmp/summary.txt�[0m
2334:  �[36;1mGO_FAIL_SUMMARY=$(head -n 5 /tmp/summary.txt | sed ':a;N;$!ba;s/\n/\\n/g')�[0m
2335:  �[36;1mecho "GO_FAIL_SUMMARY=$GO_FAIL_SUMMARY"�[0m
2336:  �[36;1mif [[ -z "$GO_FAIL_SUMMARY" ]]; then�[0m
2337:  �[36;1m  GO_FAIL_SUMMARY="unknown, please check the build URL"�[0m
2338:  �[36;1mfi�[0m
2339:  �[36;1mGO_FAIL_SUMMARY=$GO_FAIL_SUMMARY envsubst < .github/workflows/config/slack_payload_template.json > ./payload.json�[0m
2340:  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
2341:  env:
2342:  RACE_ENABLED: false
2343:  GO_TEST_TIMEOUT: 20m
2344:  DOCKER_COMMAND: docker compose -f docker-compose.yml -f docker-compose-redis-cluster.yml up -d mysql_test mysql_replica_test redis redis-cluster-1 redis-cluster-2 redis-cluster-3 redis-cluster-4 redis-cluster-5 redis-cluster-6 redis-cluster-setup s3 saml_idp mailhog mailpit smtp4dev_test
2345:  RUN_TESTS_ARG: -run=^TestIntegrationsMDM
2346:  CI_TEST_PKG: service
2347:  NEED_DOCKER: 1
2348:  ARTIFACT_PREFIX: integration-mdm-mysql8.0.44
2349:  GOTOOLCHAIN: local
2350:  ##[endgroup]
2351:  GO_FAIL_SUMMARY=FAIL: TestIntegrationsMDM/TestSSO (1.41s)\nFAIL: TestIntegrationsMDM/TestSSOWithSCIM (0.68s)
2352:  ##[group]Run actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a
2353:  with:
2354:  name: integration-mdm-mysql8.0.44-test-log
2355:  path: /tmp/gotest.log
2356:  if-no-files-found: error
2357:  compression-level: 6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MDM SSO callback returns "missing profile" error for Android enrollment

3 participants