You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

check_test.go 1.9KB

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