gitea源码

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package v1_15
  4. import (
  5. "testing"
  6. "code.gitea.io/gitea/models/migrations/base"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func Test_AddIssueResourceIndexTable(t *testing.T) {
  10. // Create the models used in the migration
  11. type Issue struct {
  12. ID int64 `xorm:"pk autoincr"`
  13. RepoID int64 `xorm:"UNIQUE(s)"`
  14. Index int64 `xorm:"UNIQUE(s)"`
  15. }
  16. // Prepare and load the testing database
  17. x, deferable := base.PrepareTestEnv(t, 0, new(Issue))
  18. if x == nil || t.Failed() {
  19. defer deferable()
  20. return
  21. }
  22. defer deferable()
  23. // Run the migration
  24. if err := AddIssueResourceIndexTable(x); err != nil {
  25. assert.NoError(t, err)
  26. return
  27. }
  28. type ResourceIndex struct {
  29. GroupID int64 `xorm:"pk"`
  30. MaxIndex int64 `xorm:"index"`
  31. }
  32. start := 0
  33. const batchSize = 1000
  34. for {
  35. indexes := make([]ResourceIndex, 0, batchSize)
  36. err := x.Table("issue_index").Limit(batchSize, start).Find(&indexes)
  37. assert.NoError(t, err)
  38. for _, idx := range indexes {
  39. var maxIndex int
  40. has, err := x.SQL("SELECT max(`index`) FROM issue WHERE repo_id = ?", idx.GroupID).Get(&maxIndex)
  41. assert.NoError(t, err)
  42. assert.True(t, has)
  43. assert.EqualValues(t, maxIndex, idx.MaxIndex)
  44. }
  45. if len(indexes) < batchSize {
  46. break
  47. }
  48. start += len(indexes)
  49. }
  50. }