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

Function createTestLTXFile

vfs_write_test.go:146–195  ·  view source on GitHub ↗

createTestLTXFile creates an LTX file with initial data for testing.

(t *testing.T, client *writeTestReplicaClient, txid ltx.TXID, pageSize uint32, commit uint32, pages map[uint32][]byte)

Source from the content-addressed store, hash-verified

144
145// createTestLTXFile creates an LTX file with initial data for testing.
146func createTestLTXFile(t *testing.T, client *writeTestReplicaClient, txid ltx.TXID, pageSize uint32, commit uint32, pages map[uint32][]byte) {
147 t.Helper()
148
149 var buf bytes.Buffer
150 enc, err := ltx.NewEncoder(&buf)
151 if err != nil {
152 t.Fatal(err)
153 }
154
155 if err := enc.EncodeHeader(ltx.Header{
156 Version: ltx.Version,
157 Flags: ltx.HeaderFlagNoChecksum,
158 PageSize: pageSize,
159 Commit: commit,
160 MinTXID: txid,
161 MaxTXID: txid,
162 Timestamp: time.Now().UnixMilli(),
163 }); err != nil {
164 t.Fatal(err)
165 }
166
167 // Sort page numbers to ensure proper encoding order (page 1 must be first for snapshots)
168 pgnos := make([]uint32, 0, len(pages))
169 for pgno := range pages {
170 pgnos = append(pgnos, pgno)
171 }
172 sort.Slice(pgnos, func(i, j int) bool { return pgnos[i] < pgnos[j] })
173
174 for _, pgno := range pgnos {
175 if err := enc.EncodePage(ltx.PageHeader{Pgno: pgno}, pages[pgno]); err != nil {
176 t.Fatal(err)
177 }
178 }
179
180 if err := enc.Close(); err != nil {
181 t.Fatal(err)
182 }
183
184 client.mu.Lock()
185 key := ltxKey(0, txid, txid)
186 client.ltxData[key] = buf.Bytes()
187 client.ltxFiles[0] = append(client.ltxFiles[0], &ltx.FileInfo{
188 Level: 0,
189 MinTXID: txid,
190 MaxTXID: txid,
191 CreatedAt: time.Now(),
192 Size: int64(buf.Len()),
193 })
194 client.mu.Unlock()
195}
196
197// setupWriteableVFSFile creates a VFSFile with write support enabled and a buffer file.
198func setupWriteableVFSFile(t *testing.T, client *writeTestReplicaClient) *VFSFile {

Calls 4

ltxKeyFunction · 0.85
CloseMethod · 0.45
LockMethod · 0.45
UnlockMethod · 0.45

Tested by

no test coverage detected