MCPcopy
hub / github.com/benbjohnson/litestream / buildLTXFixtureWithPages

Function buildLTXFixtureWithPages

vfs_test.go:987–1046  ·  view source on GitHub ↗
(tb testing.TB, txid ltx.TXID, pageSize uint32, pgnos []uint32, fill byte)

Source from the content-addressed store, hash-verified

985}
986
987func buildLTXFixtureWithPages(tb testing.TB, txid ltx.TXID, pageSize uint32, pgnos []uint32, fill byte) *ltxFixture {
988 tb.Helper()
989 if len(pgnos) == 0 {
990 tb.Fatalf("pgnos required")
991 }
992 if txid == 1 {
993 if len(pgnos) == 0 || pgnos[0] != 1 {
994 tb.Fatalf("snapshot fixture must start at page 1")
995 }
996 }
997
998 var buf bytes.Buffer
999 enc, err := ltx.NewEncoder(&buf)
1000 if err != nil {
1001 tb.Fatalf("new encoder: %v", err)
1002 }
1003 maxPg := uint32(0)
1004 for _, pg := range pgnos {
1005 if pg > maxPg {
1006 maxPg = pg
1007 }
1008 }
1009 if maxPg == 0 {
1010 maxPg = 1
1011 }
1012 hdr := ltx.Header{
1013 Version: ltx.Version,
1014 PageSize: pageSize,
1015 Commit: maxPg,
1016 MinTXID: txid,
1017 MaxTXID: txid,
1018 Timestamp: time.Now().UnixMilli(),
1019 Flags: ltx.HeaderFlagNoChecksum,
1020 }
1021 if err := enc.EncodeHeader(hdr); err != nil {
1022 tb.Fatalf("encode header: %v", err)
1023 }
1024 for _, pg := range pgnos {
1025 if pg == 0 {
1026 pg = 1
1027 }
1028 page := bytes.Repeat([]byte{fill}, int(pageSize))
1029 if err := enc.EncodePage(ltx.PageHeader{Pgno: pg}, page); err != nil {
1030 tb.Fatalf("encode page %d: %v", pg, err)
1031 }
1032 }
1033 if err := enc.Close(); err != nil {
1034 tb.Fatalf("close encoder: %v", err)
1035 }
1036
1037 info := &ltx.FileInfo{
1038 Level: 0,
1039 MinTXID: txid,
1040 MaxTXID: txid,
1041 Size: int64(buf.Len()),
1042 CreatedAt: time.Now().UTC(),
1043 }
1044

Calls 1

CloseMethod · 0.45

Tested by

no test coverage detected