Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package code
  4. import (
  5. "context"
  6. "os"
  7. "testing"
  8. "code.gitea.io/gitea/models/unittest"
  9. "code.gitea.io/gitea/modules/git"
  10. "code.gitea.io/gitea/modules/indexer/code/bleve"
  11. "code.gitea.io/gitea/modules/indexer/code/elasticsearch"
  12. "code.gitea.io/gitea/modules/indexer/code/internal"
  13. _ "code.gitea.io/gitea/models"
  14. _ "code.gitea.io/gitea/models/actions"
  15. _ "code.gitea.io/gitea/models/activities"
  16. "github.com/stretchr/testify/assert"
  17. )
  18. func TestMain(m *testing.M) {
  19. unittest.MainTest(m)
  20. }
  21. func testIndexer(name string, t *testing.T, indexer internal.Indexer) {
  22. t.Run(name, func(t *testing.T) {
  23. var repoID int64 = 1
  24. err := index(git.DefaultContext, indexer, repoID)
  25. assert.NoError(t, err)
  26. keywords := []struct {
  27. RepoIDs []int64
  28. Keyword string
  29. IDs []int64
  30. Langs int
  31. }{
  32. {
  33. RepoIDs: nil,
  34. Keyword: "Description",
  35. IDs: []int64{repoID},
  36. Langs: 1,
  37. },
  38. {
  39. RepoIDs: []int64{2},
  40. Keyword: "Description",
  41. IDs: []int64{},
  42. Langs: 0,
  43. },
  44. {
  45. RepoIDs: nil,
  46. Keyword: "repo1",
  47. IDs: []int64{repoID},
  48. Langs: 1,
  49. },
  50. {
  51. RepoIDs: []int64{2},
  52. Keyword: "repo1",
  53. IDs: []int64{},
  54. Langs: 0,
  55. },
  56. {
  57. RepoIDs: nil,
  58. Keyword: "non-exist",
  59. IDs: []int64{},
  60. Langs: 0,
  61. },
  62. }
  63. for _, kw := range keywords {
  64. t.Run(kw.Keyword, func(t *testing.T) {
  65. total, res, langs, err := indexer.Search(context.TODO(), kw.RepoIDs, "", kw.Keyword, 1, 10, false)
  66. assert.NoError(t, err)
  67. assert.Len(t, kw.IDs, int(total))
  68. assert.Len(t, langs, kw.Langs)
  69. ids := make([]int64, 0, len(res))
  70. for _, hit := range res {
  71. ids = append(ids, hit.RepoID)
  72. assert.EqualValues(t, "# repo1\n\nDescription for repo1", hit.Content)
  73. }
  74. assert.EqualValues(t, kw.IDs, ids)
  75. })
  76. }
  77. assert.NoError(t, indexer.Delete(context.Background(), repoID))
  78. })
  79. }
  80. func TestBleveIndexAndSearch(t *testing.T) {
  81. unittest.PrepareTestEnv(t)
  82. dir := t.TempDir()
  83. idx := bleve.NewIndexer(dir)
  84. _, err := idx.Init(context.Background())
  85. if err != nil {
  86. assert.Fail(t, "Unable to create bleve indexer Error: %v", err)
  87. if idx != nil {
  88. idx.Close()
  89. }
  90. return
  91. }
  92. defer idx.Close()
  93. testIndexer("beleve", t, idx)
  94. }
  95. func TestESIndexAndSearch(t *testing.T) {
  96. unittest.PrepareTestEnv(t)
  97. u := os.Getenv("TEST_INDEXER_CODE_ES_URL")
  98. if u == "" {
  99. t.SkipNow()
  100. return
  101. }
  102. indexer := elasticsearch.NewIndexer(u, "gitea_codes")
  103. if _, err := indexer.Init(context.Background()); err != nil {
  104. assert.Fail(t, "Unable to init ES indexer Error: %v", err)
  105. if indexer != nil {
  106. indexer.Close()
  107. }
  108. return
  109. }
  110. defer indexer.Close()
  111. testIndexer("elastic_search", t, indexer)
  112. }