fork of https://github.com/sourcegraph/zoekt
1package index
2
3import (
4 "encoding/json"
5 "os"
6 "path/filepath"
7 "testing"
8
9 "github.com/sourcegraph/zoekt"
10)
11
12func TestSetTombstone(t *testing.T) {
13 mockRepos = mkRepos("r1", "r2", "r3")
14
15 readMeta := func(shard string) []byte {
16 blob, err := os.ReadFile(shard + ".meta")
17 if err != nil && !os.IsNotExist(err) {
18 t.Fatal(err)
19 }
20 return blob
21 }
22
23 dir := t.TempDir()
24 ghostShard := filepath.Join(dir, "test.zoekt")
25
26 isAlive := func(alive []bool) {
27 t.Helper()
28 blob := readMeta(ghostShard)
29 ghostRepos := []*zoekt.Repository{}
30 if err := json.Unmarshal(blob, &ghostRepos); err != nil {
31 t.Fatal(err)
32 }
33 for i, repo := range ghostRepos {
34 if repo.Tombstone == alive[i] {
35 t.Fatalf("r%d: want %t, got %t\n", i+1, alive[i], repo.Tombstone)
36 }
37 }
38 }
39
40 if err := SetTombstone(ghostShard, 2); err != nil {
41 t.Fatal(err)
42 }
43 isAlive([]bool{true, false, true})
44
45 if err := SetTombstone(ghostShard, 1); err != nil {
46 t.Fatal(err)
47 }
48 isAlive([]bool{false, false, true})
49
50 if err := UnsetTombstone(ghostShard, 2); err != nil {
51 t.Fatal(err)
52 }
53 isAlive([]bool{false, true, true})
54}
55
56func mkRepos(repoNames ...string) []*zoekt.Repository {
57 ret := make([]*zoekt.Repository, 0, len(repoNames))
58 for i, n := range repoNames {
59 ret = append(ret, &zoekt.Repository{ID: uint32(i + 1), Name: n})
60 }
61 return ret
62}