Files
litestream/internal/testingutil/testingutil.go
2022-01-31 09:21:20 -07:00

91 lines
1.6 KiB
Go

package testingutil
import (
"bytes"
"io"
"os"
"testing"
"github.com/pierrec/lz4/v4"
)
// ReadFile reads all data from filename. Fail on error.
func ReadFile(tb testing.TB, filename string) []byte {
tb.Helper()
b, err := os.ReadFile(filename)
if err != nil {
tb.Fatal(err)
}
return b
}
// CopyFile copies all data from src to dst. Fail on error.
func CopyFile(tb testing.TB, src, dst string) {
tb.Helper()
r, err := os.Open(src)
if err != nil {
tb.Fatal(err)
}
defer r.Close()
w, err := os.Create(dst)
if err != nil {
tb.Fatal(err)
}
defer w.Close()
if _, err := io.Copy(w, r); err != nil {
tb.Fatal(err)
}
}
// Getpwd returns the working directory. Fail on error.
func Getwd(tb testing.TB) string {
tb.Helper()
dir, err := os.Getwd()
if err != nil {
tb.Fatal(err)
}
return dir
}
// Setenv sets the environment variable key to value. The returned function reverts it.
func Setenv(tb testing.TB, key, value string) func() {
tb.Helper()
prevValue := os.Getenv(key)
if err := os.Setenv(key, value); err != nil {
tb.Fatal(err)
}
return func() {
if err := os.Setenv(key, prevValue); err != nil {
tb.Fatal(tb)
}
}
}
func CompressLZ4(tb testing.TB, b []byte) []byte {
tb.Helper()
var buf bytes.Buffer
zw := lz4.NewWriter(&buf)
if _, err := zw.Write(b); err != nil {
tb.Fatal(err)
} else if err := zw.Close(); err != nil {
tb.Fatal(err)
}
return buf.Bytes()
}
func DecompressLZ4(tb testing.TB, b []byte) []byte {
tb.Helper()
buf, err := io.ReadAll(lz4.NewReader(bytes.NewReader(b)))
if err != nil {
tb.Fatal(err)
}
return buf
}