From 8de366211241a8f1916480965d912fc0a23b955b Mon Sep 17 00:00:00 2001 From: Mohit25022005 Date: Thu, 7 May 2026 13:29:14 +0000 Subject: [PATCH] test: add concurrent sync regression test for LDAP team sync Signed-off-by: Mohit25022005 --- .../source/oauth2/source_group_sync_test.go | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 services/auth/source/oauth2/source_group_sync_test.go diff --git a/services/auth/source/oauth2/source_group_sync_test.go b/services/auth/source/oauth2/source_group_sync_test.go new file mode 100644 index 0000000000..a637eed373 --- /dev/null +++ b/services/auth/source/oauth2/source_group_sync_test.go @@ -0,0 +1,57 @@ +// Copyright 2026 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package oauth2 + +import ( + "sync" + "testing" + + "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/models/organization" + "code.gitea.io/gitea/models/unittest" + user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/container" + auth_source "code.gitea.io/gitea/services/auth/source" + + "github.com/stretchr/testify/assert" +) + +func TestSyncGroupsToTeamsConcurrentRuns(t *testing.T) { + assert.NoError(t, unittest.PrepareTestDatabase()) + + ctx := t.Context() + user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}) + team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2}) + org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: team.OrgID}) + + sourceGroupTeamMapping := map[string]map[string][]string{ + "ldap-group": { + org.Name: []string{team.Name}, + }, + } + + var wg sync.WaitGroup + for i := 0; i < 10; i++ { + wg.Add(2) + go func() { + defer wg.Done() + assert.NoError(t, auth_source.SyncGroupsToTeams(ctx, user, container.SetOf("ldap-group"), sourceGroupTeamMapping, true)) + }() + go func() { + defer wg.Done() + assert.NoError(t, auth_source.SyncGroupsToTeams(ctx, user, container.Set[string]{}, sourceGroupTeamMapping, true)) + }() + } + wg.Wait() + + memberCount, err := db.GetEngine(ctx).Count(&organization.TeamUser{OrgID: team.OrgID, TeamID: team.ID, UID: user.ID}) + assert.NoError(t, err) + assert.LessOrEqual(t, memberCount, int64(1)) + + team = unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: team.ID}) + totalCount, err := db.GetEngine(ctx).Count(&organization.TeamUser{OrgID: team.OrgID, TeamID: team.ID}) + assert.NoError(t, err) + assert.EqualValues(t, team.NumMembers, totalCount) + assert.GreaterOrEqual(t, team.NumMembers, 0) +}