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