code.gitea.io/gitea@v1.21.7/services/pull/check_test.go (about) 1 // Copyright 2019 The Gitea Authors. 2 // All rights reserved. 3 // SPDX-License-Identifier: MIT 4 5 package pull 6 7 import ( 8 "context" 9 "strconv" 10 "testing" 11 "time" 12 13 "code.gitea.io/gitea/models/db" 14 issues_model "code.gitea.io/gitea/models/issues" 15 "code.gitea.io/gitea/models/unittest" 16 "code.gitea.io/gitea/modules/queue" 17 "code.gitea.io/gitea/modules/setting" 18 19 "github.com/stretchr/testify/assert" 20 ) 21 22 func TestPullRequest_AddToTaskQueue(t *testing.T) { 23 assert.NoError(t, unittest.PrepareTestDatabase()) 24 25 idChan := make(chan int64, 10) 26 testHandler := func(items ...string) []string { 27 for _, s := range items { 28 id, _ := strconv.ParseInt(s, 10, 64) 29 idChan <- id 30 } 31 return nil 32 } 33 34 cfg, err := setting.GetQueueSettings(setting.CfgProvider, "pr_patch_checker") 35 assert.NoError(t, err) 36 prPatchCheckerQueue, err = queue.NewWorkerPoolQueueWithContext(context.Background(), "pr_patch_checker", cfg, testHandler, true) 37 assert.NoError(t, err) 38 39 pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) 40 AddToTaskQueue(db.DefaultContext, pr) 41 42 assert.Eventually(t, func() bool { 43 pr = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) 44 return pr.Status == issues_model.PullRequestStatusChecking 45 }, 1*time.Second, 100*time.Millisecond) 46 47 has, err := prPatchCheckerQueue.Has(strconv.FormatInt(pr.ID, 10)) 48 assert.True(t, has) 49 assert.NoError(t, err) 50 51 go prPatchCheckerQueue.Run() 52 53 select { 54 case id := <-idChan: 55 assert.EqualValues(t, pr.ID, id) 56 case <-time.After(time.Second): 57 assert.Fail(t, "Timeout: nothing was added to pullRequestQueue") 58 } 59 60 has, err = prPatchCheckerQueue.Has(strconv.FormatInt(pr.ID, 10)) 61 assert.False(t, has) 62 assert.NoError(t, err) 63 64 pr = unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) 65 assert.Equal(t, issues_model.PullRequestStatusChecking, pr.Status) 66 67 prPatchCheckerQueue.ShutdownWait(5 * time.Second) 68 prPatchCheckerQueue = nil 69 }