forked from TrueCloudLab/restic
96 lines
1.6 KiB
Go
96 lines
1.6 KiB
Go
package textfile
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/hex"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
// writeTempfile writes data to a new temporary file and returns its name
|
|
// and a callback that removes it.
|
|
func writeTempfile(t testing.TB, data []byte) (string, func()) {
|
|
t.Helper()
|
|
|
|
f, err := ioutil.TempFile("", "restic-test-textfile-read-")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
name := f.Name()
|
|
|
|
defer func() {
|
|
closeErr := f.Close()
|
|
if err == nil && closeErr != nil {
|
|
err = closeErr
|
|
}
|
|
if err != nil {
|
|
// ignore subsequent errors
|
|
_ = os.Remove(name)
|
|
t.Fatal(err)
|
|
}
|
|
}()
|
|
|
|
_, err = f.Write(data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return name, func() {
|
|
err := os.Remove(name)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func dec(s string) []byte {
|
|
data, err := hex.DecodeString(s)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return data
|
|
}
|
|
|
|
func TestRead(t *testing.T) {
|
|
var tests = []struct {
|
|
data []byte
|
|
want []byte
|
|
}{
|
|
{data: []byte("foo bar baz")},
|
|
{data: []byte("Ööbär")},
|
|
{
|
|
data: []byte("\xef\xbb\xbffööbär"),
|
|
want: []byte("fööbär"),
|
|
},
|
|
{
|
|
data: dec("feff006600f600f6006200e40072"),
|
|
want: []byte("fööbär"),
|
|
},
|
|
{
|
|
data: dec("fffe6600f600f6006200e4007200"),
|
|
want: []byte("fööbär"),
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run("", func(t *testing.T) {
|
|
want := test.want
|
|
if want == nil {
|
|
want = test.data
|
|
}
|
|
|
|
tempname, cleanup := writeTempfile(t, test.data)
|
|
defer cleanup()
|
|
|
|
data, err := Read(tempname)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !bytes.Equal(want, data) {
|
|
t.Errorf("invalid data returned, want:\n %q\ngot:\n %q", want, data)
|
|
}
|
|
})
|
|
}
|
|
}
|