blob: b9f1fd2297ebf645bde03d1b9bfe8f17be3ec287 [file] [log] [blame]
package util
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/go/testutils/unittest"
)
func createFile(dir, prefix, content string, t *testing.T) string {
f, err := ioutil.TempFile(dir, prefix)
require.NoError(t, err)
_, err = f.WriteString(content)
require.NoError(t, err)
require.NoError(t, f.Close())
return f.Name()
}
func assertFileExists(dir, path, content string, t *testing.T) {
c, err := ioutil.ReadFile(filepath.Join(dir, filepath.Base(path)))
require.NoError(t, err)
require.Equal(t, content, string(c))
}
func TestZipE2E(t *testing.T) {
unittest.MediumTest(t)
// Create a directory in temp.
targetDir, err := ioutil.TempDir("", "zip_test")
require.NoError(t, err)
defer testutils.RemoveAll(t, targetDir)
// Populate the target dir.
// Create two files in target dir.
f1 := createFile(targetDir, "temp1", "testing1", t)
f2 := createFile(targetDir, "temp2", "testing2", t)
// Create subdir.
subDir, err := ioutil.TempDir(targetDir, "zip_test")
require.NoError(t, err)
// Create one file in subdir.
f3 := createFile(subDir, "temp3", "testing3", t)
// Create an empty subdir.
emptySubDir, err := ioutil.TempDir(targetDir, "zip_test")
require.NoError(t, err)
// Zip the directory.
outputDir, err := ioutil.TempDir("", "zip_location")
defer testutils.RemoveAll(t, outputDir)
zipPath := filepath.Join(outputDir, "test.zip")
err = ZipIt(zipPath, targetDir)
require.NoError(t, err)
// Assert that zip was created
_, err = os.Stat(zipPath)
require.NoError(t, err)
// Test UnZipping.
err = UnZip(outputDir, zipPath)
require.NoError(t, err)
// Assert that the 3 zipped files are in the right locations.
assertFileExists(outputDir, f1, "testing1", t)
assertFileExists(outputDir, f2, "testing2", t)
assertFileExists(filepath.Join(outputDir, filepath.Base(subDir)), f3, "testing3", t)
// Assert that the empty subdir was created.
_, err = os.Stat(filepath.Join(outputDir, filepath.Base(emptySubDir)))
require.NoError(t, err)
}