feat(mockfs): add DumpDB method
This commit is contained in:
@@ -1,14 +1,17 @@
|
|||||||
package mockfs
|
package mockfs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/mattn/go-sqlite3"
|
||||||
"go.senan.xyz/gonic/server/db"
|
"go.senan.xyz/gonic/server/db"
|
||||||
"go.senan.xyz/gonic/server/scanner"
|
"go.senan.xyz/gonic/server/scanner"
|
||||||
"go.senan.xyz/gonic/server/scanner/tags"
|
"go.senan.xyz/gonic/server/scanner/tags"
|
||||||
@@ -246,6 +249,55 @@ func (m *MockFS) SetTags(path string, cb func(*Tags)) {
|
|||||||
cb(m.reader.tags[abspath])
|
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 {
|
type mreader struct {
|
||||||
tags map[string]*Tags
|
tags map[string]*Tags
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user