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