From d7baf25a6b60f5393cbe021024b335a9321fabc2 Mon Sep 17 00:00:00 2001 From: Gusted Date: Wed, 30 Apr 2025 14:59:33 +0000 Subject: [PATCH] chore: fix test to avoid data race (#7731) - The global Git version can be accessed by background services such as the PR checker, to minimize data race because of `MockVariableValue` resetting it. Run the mocked Git version as first test. - Followup of forgejo/forgejo#7527 CI that is failing: https://codeberg.org/forgejo/forgejo/actions/runs/73021/jobs/10 Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7731 Reviewed-by: Earl Warren Co-authored-by: Gusted Co-committed-by: Gusted --- tests/integration/pull_merge_test.go | 39 ++++++++++++++++++---------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/tests/integration/pull_merge_test.go b/tests/integration/pull_merge_test.go index 7c4f84fe67..93b932e2e1 100644 --- a/tests/integration/pull_merge_test.go +++ b/tests/integration/pull_merge_test.go @@ -303,26 +303,37 @@ func TestCantMergeConflict(t *testing.T) { gitRepo, err := gitrepo.OpenRepository(git.DefaultContext, repo1) require.NoError(t, err) - err = pull.Merge(t.Context(), pr, user1, gitRepo, repo_model.MergeStyleMerge, "", "CONFLICT", false) - require.Error(t, err, "Merge should return an error due to conflict") - assert.True(t, models.IsErrMergeConflicts(err), "Merge error is not a conflict error") + t.Run("Rebase", func(t *testing.T) { + t.Run("Git version without replay", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + oldVersion, err := version.NewVersion("2.43.0") + require.NoError(t, err) + defer test.MockVariableValue(&git.GitVersion, oldVersion)() - t.Run("Git version with replay", func(t *testing.T) { - require.NoError(t, git.CheckGitVersionAtLeast("2.44")) + err = pull.Merge(t.Context(), pr, user1, gitRepo, repo_model.MergeStyleRebase, "", "CONFLICT", false) + require.Error(t, err, "Merge should return an error due to conflict") + assert.True(t, models.IsErrRebaseConflicts(err), "Merge error is not a conflict error") + }) + t.Run("Git version with replay", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + if git.CheckGitVersionAtLeast("2.44") != nil { + t.SkipNow() + } - err = pull.Merge(t.Context(), pr, user1, gitRepo, repo_model.MergeStyleRebase, "", "CONFLICT", false) - require.Error(t, err, "Merge should return an error due to conflict") - assert.True(t, models.IsErrRebaseConflicts(err), "Merge error is not a conflict error") + err = pull.Merge(t.Context(), pr, user1, gitRepo, repo_model.MergeStyleRebase, "", "CONFLICT", false) + require.Error(t, err, "Merge should return an error due to conflict") + assert.True(t, models.IsErrRebaseConflicts(err), "Merge error is not a conflict error") + }) }) - t.Run("Git version without replay", func(t *testing.T) { - oldVersion, err := version.NewVersion("2.43.0") - require.NoError(t, err) - defer test.MockVariableValue(&git.GitVersion, oldVersion)() - err = pull.Merge(t.Context(), pr, user1, gitRepo, repo_model.MergeStyleRebase, "", "CONFLICT", false) + t.Run("Merge", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + + err = pull.Merge(t.Context(), pr, user1, gitRepo, repo_model.MergeStyleMerge, "", "CONFLICT", false) require.Error(t, err, "Merge should return an error due to conflict") - assert.True(t, models.IsErrRebaseConflicts(err), "Merge error is not a conflict error") + assert.True(t, models.IsErrMergeConflicts(err), "Merge error is not a conflict error") }) + gitRepo.Close() }) }