Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
feat(mockfs): add DumpDB method
  • Loading branch information
sentriz committed Feb 24, 2022
1 parent 1647eaa commit b0d5861
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions server/mockfs/mockfs.go
@@ -1,14 +1,17 @@
package mockfs

import (
"context"
"errors"
"fmt"
"net/url"
"os"
"path/filepath"
"strings"
"testing"
"time"

"github.com/mattn/go-sqlite3"
"go.senan.xyz/gonic/server/db"
"go.senan.xyz/gonic/server/scanner"
"go.senan.xyz/gonic/server/scanner/tags"
Expand Down Expand Up @@ -246,6 +249,55 @@ func (m *MockFS) SetTags(path string, cb func(*Tags)) {
cb(m.reader.tags[abspath])
}

func (m *MockFS) DumpDB(suffix ...string) {
var p []string
p = append(p,
"gonic", "dump",
strings.ReplaceAll(m.t.Name(), string(filepath.Separator), "-"),
fmt.Sprint(time.Now().UnixNano()),
)
p = append(p, suffix...)

destPath := filepath.Join(os.TempDir(), strings.Join(p, "-"))
dest, err := db.New(destPath, url.Values{})
if err != nil {
m.t.Fatalf("create dest db: %v", err)
}
defer dest.Close()

connSrc, err := m.db.DB.DB().Conn(context.Background())
if err != nil {
m.t.Fatalf("getting src raw conn: %v", err)
}
defer connSrc.Close()
connDest, err := dest.DB.DB().Conn(context.Background())
if err != nil {
m.t.Fatalf("getting dest raw conn: %v", err)
}
defer connDest.Close()

err = connDest.Raw(func(connDest interface{}) error {
return connSrc.Raw(func(connSrc interface{}) error {
connDestq := connDest.(*sqlite3.SQLiteConn)
connSrcq := connSrc.(*sqlite3.SQLiteConn)
bk, err := connDestq.Backup("main", connSrcq, "main")
if err != nil {
return fmt.Errorf("create backup db: %w", err)
}
for done, _ := bk.Step(-1); !done; {
m.t.Logf("dumping db...")
}
if err := bk.Finish(); err != nil {
return fmt.Errorf("finishing dump: %w", err)
}
return nil
})
})
if err != nil {
m.t.Fatalf("backing up: %v", err)
}
}

type mreader struct {
tags map[string]*Tags
}
Expand Down

0 comments on commit b0d5861

Please sign in to comment.