Skip to content

enterprise/providers/scim: fix last_updated for OAuth interactive#22678

Merged
BeryJu merged 1 commit into
mainfrom
enterprise/providers/scim/fix-oauth-interactive-last-updated
May 27, 2026
Merged

enterprise/providers/scim: fix last_updated for OAuth interactive#22678
BeryJu merged 1 commit into
mainfrom
enterprise/providers/scim/fix-oauth-interactive-last-updated

Conversation

@BeryJu
Copy link
Copy Markdown
Member

@BeryJu BeryJu commented May 27, 2026

No description provided.

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
@BeryJu BeryJu requested a review from a team as a code owner May 27, 2026 08:32
@BeryJu BeryJu added area:backend backport/version-2026.5 Add this label to PRs to backport changes to version-2026.5 labels May 27, 2026
@netlify
Copy link
Copy Markdown

netlify Bot commented May 27, 2026

Deploy Preview for authentik-docs ready!

Name Link
🔨 Latest commit a7c4fcd
🔍 Latest deploy log https://app.netlify.com/projects/authentik-docs/deploys/6a16ac18e71c120007d19782
😎 Deploy Preview https://deploy-preview-22678--authentik-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 27, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
731 1 730 0
View the top 1 failed test(s) by shortest run time
tests.e2e.test_endpoints_flow.TestEndpointsFlow::test_login
Stack Traces | 107s run time
self = <unittest.case._Outcome object at 0x7f61b6bc6510>
test_case = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>
subTest = False

    @contextlib.contextmanager
    def testPartExecutor(self, test_case, subTest=False):
        old_success = self.success
        self.success = True
        try:
>           yield

.../hostedtoolcache/Python/3.14.5.............../x64/lib/python3.14/unittest/case.py:58: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>
result = <TestCaseFunction test_login>

    def run(self, result=None):
        if result is None:
            result = self.defaultTestResult()
            startTestRun = getattr(result, 'startTestRun', None)
            stopTestRun = getattr(result, 'stopTestRun', None)
            if startTestRun is not None:
                startTestRun()
        else:
            stopTestRun = None
    
        result.startTest(self)
        try:
            testMethod = getattr(self, self._testMethodName)
            if (getattr(self.__class__, "__unittest_skip__", False) or
                getattr(testMethod, "__unittest_skip__", False)):
                # If the class or method was skipped.
                skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
                            or getattr(testMethod, '__unittest_skip_why__', ''))
                _addSkip(result, self, skip_why)
                return result
    
            expecting_failure = (
                getattr(self, "__unittest_expecting_failure__", False) or
                getattr(testMethod, "__unittest_expecting_failure__", False)
            )
            outcome = _Outcome(result)
            start_time = time.perf_counter()
            try:
                self._outcome = outcome
    
                with outcome.testPartExecutor(self):
                    self._callSetUp()
                if outcome.success:
                    outcome.expecting_failure = expecting_failure
                    with outcome.testPartExecutor(self):
>                       self._callTestMethod(testMethod)

.../hostedtoolcache/Python/3.14.5.............../x64/lib/python3.14/unittest/case.py:669: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>
method = <bound method TestEndpointsFlow.test_login of <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>>

    def _callTestMethod(self, method):
>       result = method()
                 ^^^^^^^^

.../hostedtoolcache/Python/3.14.5.............../x64/lib/python3.14/unittest/case.py:615: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>
args = (), kwargs = {}

    @wraps(func)
    def wrapper(self: TransactionTestCase, *args, **kwargs):
        """Run test again if we're below max_retries, including tearDown and
        setUp. Otherwise raise the error"""
        nonlocal count
        try:
>           return func(self, *args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/decorators.py:60: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = (<tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>,)
kwargs = {}, file = 'default/flow-default-invalidation-flow.yaml'
content = 'version: 1\nmetadata:\n  name: Default - Invalidation flow\nentries:\n- attrs:\n    designation: invalidation\n    na...0\n    stage: !KeyOf default-invalidation-logout\n    target: !KeyOf flow\n  model: authentik_flows.flowstagebinding\n'

    @wraps(func)
    def wrapper(*args, **kwargs):
        for file in files:
            content = BlueprintInstance(path=file).retrieve()
            Importer.from_string(content).apply()
>       return func(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^

.../blueprints/tests/__init__.py:25: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>

    @retry()
    @apply_blueprint(
        "default/flow-default-authentication-flow.yaml",
        "default/flow-default-invalidation-flow.yaml",
    )
    def test_login(self):
        """test default login flow"""
        rc, output = self.driver_container.exec_run(
            ["ak-sysd", "domains", "join", "ak", "-a", self.live_server_url],
            user="root",
            environment={"AK_SYS_INSECURE_ENV_TOKEN": self.enrollment_token.key},
        )
>       self.assertEqual(rc, 0, str(output))

tests/e2e/test_endpoints_flow.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>
first = 1, second = 0
msg = 'b\'time="2026-05-27T08:43:36Z" level=info msg="finished call" grpc.code=Unknown grpc.component=client grpc.error="rpc...join\\n\\nGlobal Flags:\\n      --config-file string   Config file path (default "........./etc/authentik/config.json")\\n\\n\''

    def assertEqual(self, first, second, msg=None):
        """Fail if the two objects are unequal as determined by the '=='
           operator.
        """
        assertion_func = self._getAssertEqualityFunc(first, second)
>       assertion_func(first, second, msg=msg)

.../hostedtoolcache/Python/3.14.5.............../x64/lib/python3.14/unittest/case.py:925: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <tests.e2e.test_endpoints_flow.TestEndpointsFlow testMethod=test_login>
first = 1, second = 0
msg = '1 != 0 : b\'time="2026-05-27T08:43:36Z" level=info msg="finished call" grpc.code=Unknown grpc.component=client grpc.e...join\\n\\nGlobal Flags:\\n      --config-file string   Config file path (default "........./etc/authentik/config.json")\\n\\n\''

    def _baseAssertEqual(self, first, second, msg=None):
        """The default assertEqual implementation, not type specific."""
        if not first == second:
            standardMsg = '%s != %s' % _common_shorten_repr(first, second)
            msg = self._formatMessage(msg, standardMsg)
>           raise self.failureException(msg)
E           AssertionError: 1 != 0 : b'time="2026-05-27T08:43:36Z" level=info msg="finished call" grpc.code=Unknown grpc.component=client grpc.error="rpc error: code = Unknown desc = failed to checkin: HTTP Error \'400 Bad Request\' during request \'POST .../agents/connectors/check_in/\': \\"{\\"os\\":{\\"version\\":[\\"This field may not be blank.\\"]}}\\" (Request ID \'154ae5b61b754193b262f88217d5442b\')" grpc.method=DomainEnroll grpc.method_type=unary grpc.service=sys_ctrl.SystemCtrl grpc.start_time="2026-05-27T08:43:04Z" grpc.time_ms=31828.494 logger=cli.system_grpc protocol=grpc\nError: rpc error: code = Unknown desc = failed to checkin: HTTP Error \'400 Bad Request\' during request \'POST .../agents/connectors/check_in/\': "{"os":{"version":["This field may not be blank."]}}" (Request ID \'154ae5b61b754193b262f88217d5442b\')\nUsage:\n  ak-sysd domains join [domain_name] [flags]\n\nFlags:\n  -a, --authentik-url string   URL to the authentik Instance\n  -h, --help                   help for join\n\nGlobal Flags:\n      --config-file string   Config file path (default "........./etc/authentik/config.json")\n\n'

.../hostedtoolcache/Python/3.14.5.............../x64/lib/python3.14/unittest/case.py:918: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@BeryJu BeryJu merged commit 5409b54 into main May 27, 2026
108 of 115 checks passed
@BeryJu BeryJu deleted the enterprise/providers/scim/fix-oauth-interactive-last-updated branch May 27, 2026 21:33
@authentik-automation
Copy link
Copy Markdown
Contributor

🍒 Cherry-pick to version-2026.5 created: #22700

BeryJu added a commit that referenced this pull request May 27, 2026
…erry-pick #22678 to version-2026.5) (#22700)

enterprise/providers/scim: fix last_updated for OAuth interactive (#22678)

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
Co-authored-by: Jens L. <jens@goauthentik.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:backend backport/version-2026.5 Add this label to PRs to backport changes to version-2026.5

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants