self-update: add basic test for extractToFile

This commit is contained in:
Michael Eischer 2023-01-20 23:53:20 +01:00
parent 34e67e3510
commit e16a6d4c50
1 changed files with 44 additions and 0 deletions

View File

@ -0,0 +1,44 @@
package selfupdate
import (
"archive/zip"
"bytes"
"os"
"path/filepath"
"testing"
rtest "github.com/restic/restic/internal/test"
)
func TestExtractToFileZip(t *testing.T) {
printf := func(string, ...interface{}) {}
dir := t.TempDir()
ext := "zip"
data := []byte("Hello World!")
// create dummy archive
var archive bytes.Buffer
zw := zip.NewWriter(&archive)
w, err := zw.CreateHeader(&zip.FileHeader{
Name: "example.exe",
UncompressedSize64: uint64(len(data)),
})
rtest.OK(t, err)
_, err = w.Write(data[:])
rtest.OK(t, err)
rtest.OK(t, zw.Close())
// run twice to test creating a new file and overwriting
for i := 0; i < 2; i++ {
outfn := filepath.Join(dir, ext+"-out")
rtest.OK(t, extractToFile(archive.Bytes(), "src."+ext, outfn, printf))
outdata, err := os.ReadFile(outfn)
rtest.OK(t, err)
rtest.Assert(t, bytes.Equal(data[:], outdata), "%v contains wrong data", outfn)
// overwrite to test the file is properly overwritten
rtest.OK(t, os.WriteFile(outfn, []byte{1, 2, 3}, 0))
}
}