package wal import ( "crypto/rand" "encoding/hex" "fmt" mrand "math/rand" "os" "path/filepath" "reflect" ) func _b(in string) []byte { return []byte(in) } func randString() string { buf := make([]byte, 1+mrand.Intn(20)) rand.Read(buf) return hex.EncodeToString(buf) } func randID() uint64 { return uint64(mrand.Uint32()) } func randPath() string { buf := make([]byte, 8) rand.Read(buf) return filepath.Join(os.TempDir(), hex.EncodeToString(buf)) } func readWAL(walPath string) (l []Record) { f := NewFollower(walPath) defer f.Close() f.Replay(0, func(rec Record) error { l = append(l, rec) return nil }) return l } func walEqual(walPath string, expected []Record) error { recs := readWAL(walPath) return recsEqual(recs, expected) } func recsEqual(recs, expected []Record) error { if len(recs) != len(expected) { return fmt.Errorf("Expected %d records but found %d", len(expected), len(recs)) } for i, rec := range recs { exp := expected[i] if !reflect.DeepEqual(rec, exp) { return fmt.Errorf("Mismatched records: %v != %v", rec, exp) } } return nil } func walsEqual(path1, path2 string) error { return recsEqual(readWAL(path1), readWAL(path2)) }