85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package archive
|
|
|
|
import (
|
|
"archive/zip"
|
|
"io/ioutil"
|
|
"testing"
|
|
)
|
|
|
|
func TestZipArchiver_Content(t *testing.T) {
|
|
zipfilepath := "archive-content.zip"
|
|
archiver := NewZipArchiver(zipfilepath)
|
|
if err := archiver.ArchiveContent([]byte("This is some content"), "content.txt"); err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
|
|
ensureContents(t, zipfilepath, map[string][]byte{
|
|
"content.txt": []byte("This is some content"),
|
|
})
|
|
}
|
|
|
|
func TestZipArchiver_File(t *testing.T) {
|
|
zipfilepath := "archive-file.zip"
|
|
archiver := NewZipArchiver(zipfilepath)
|
|
if err := archiver.ArchiveFile("./test-fixtures/test-file.txt"); err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
|
|
ensureContents(t, zipfilepath, map[string][]byte{
|
|
"test-file.txt": []byte("This is test content"),
|
|
})
|
|
}
|
|
|
|
func TestZipArchiver_Dir(t *testing.T) {
|
|
zipfilepath := "archive-dir.zip"
|
|
archiver := NewZipArchiver(zipfilepath)
|
|
if err := archiver.ArchiveDir("./test-fixtures/test-dir"); err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
|
|
ensureContents(t, zipfilepath, map[string][]byte{
|
|
"file1.txt": []byte("This is file 1"),
|
|
"file2.txt": []byte("This is file 2"),
|
|
"file3.txt": []byte("This is file 3"),
|
|
})
|
|
}
|
|
|
|
func ensureContents(t *testing.T, zipfilepath string, wants map[string][]byte) {
|
|
r, err := zip.OpenReader(zipfilepath)
|
|
if err != nil {
|
|
t.Fatalf("could not open zip file: %s", err)
|
|
}
|
|
defer r.Close()
|
|
|
|
if len(r.File) != len(wants) {
|
|
t.Errorf("mismatched file count, got %d, want %d", len(r.File), len(wants))
|
|
}
|
|
for _, cf := range r.File {
|
|
ensureContent(t, wants, cf)
|
|
}
|
|
}
|
|
|
|
func ensureContent(t *testing.T, wants map[string][]byte, got *zip.File) {
|
|
want, ok := wants[got.Name]
|
|
if !ok {
|
|
t.Errorf("additional file in zip: %s", got.Name)
|
|
return
|
|
}
|
|
|
|
r, err := got.Open()
|
|
if err != nil {
|
|
t.Errorf("could not open file: %s", err)
|
|
}
|
|
defer r.Close()
|
|
gotContentBytes, err := ioutil.ReadAll(r)
|
|
if err != nil {
|
|
t.Errorf("could not read file: %s", err)
|
|
}
|
|
|
|
wantContent := string(want)
|
|
gotContent := string(gotContentBytes)
|
|
if gotContent != wantContent {
|
|
t.Errorf("mismatched content\ngot\n%s\nwant\n%s", gotContent, wantContent)
|
|
}
|
|
}
|