1package repomgr
2
3import (
4 "context"
5 "fmt"
6 "os"
7 "path/filepath"
8 "testing"
9
10 bsky "github.com/bluesky-social/indigo/api/bsky"
11 "github.com/bluesky-social/indigo/carstore"
12 "github.com/bluesky-social/indigo/util"
13 "gorm.io/driver/sqlite"
14 "gorm.io/gorm"
15)
16
17func setupDb(t testing.TB, p string) *gorm.DB {
18 t.Helper()
19
20 db, err := gorm.Open(sqlite.Open(p))
21 if err != nil {
22 t.Fatal(err)
23 }
24
25 if err := db.Exec("PRAGMA journal_mode=WAL;").Error; err != nil {
26 t.Fatal(err)
27 }
28
29 if err := db.Exec("PRAGMA synchronous=normal;").Error; err != nil {
30 t.Fatal(err)
31 }
32
33 if err := db.Exec("PRAGMA temp_store=memory;").Error; err != nil {
34 t.Fatal(err)
35 }
36
37 if err := db.Exec("PRAGMA mmap_size=3000000000;").Error; err != nil {
38 t.Fatal(err)
39 }
40
41 return db
42}
43
44func BenchmarkRepoMgrCreates(b *testing.B) {
45 dir, err := os.MkdirTemp("", "integtest")
46 if err != nil {
47 b.Fatal(err)
48 }
49
50 cardb := setupDb(b, filepath.Join(dir, "car.sqlite"))
51
52 cspath := filepath.Join(dir, "carstore")
53 if err := os.Mkdir(cspath, 0775); err != nil {
54 b.Fatal(err)
55 }
56
57 // TODO: constructor for 'either type'
58 /*
59 cs, err := carstore.NewCarStore(cardb, []string{cspath})
60 if err != nil {
61 b.Fatal(err)
62 }
63 */
64 cs, err := carstore.NewNonArchivalCarstore(cardb)
65 if err != nil {
66 b.Fatal(err)
67 }
68
69 repoman := NewRepoManager(cs, &util.FakeKeyManager{})
70 repoman.noArchive = true
71
72 ctx := context.TODO()
73 if err := repoman.InitNewActor(ctx, 1, "hello.world", "did:foo:bar", "catdog", "", ""); err != nil {
74 b.Fatal(err)
75 }
76
77 b.ResetTimer()
78 for i := 0; i < b.N; i++ {
79 _, _, err = repoman.CreateRecord(ctx, 1, "app.bsky.feed.post", &bsky.FeedPost{
80 Text: "cats",
81 })
82 if err != nil {
83 b.Fatal(err)
84 }
85 }
86
87 fmt.Println(carstore.CacheHits, carstore.CacheMiss)
88}