github.com/alloyci/alloy-runner@v1.0.1-0.20180222164613-925503ccafd6/helpers/archives/zip_extract_test.go (about) 1 package archives 2 3 import ( 4 "archive/zip" 5 "bytes" 6 "io" 7 "io/ioutil" 8 "os" 9 "testing" 10 11 "github.com/Sirupsen/logrus" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func createDefaultArchive(t *testing.T, archive *zip.Writer) { 17 testFile, err := archive.Create("temporary_file.txt") 18 require.NoError(t, err) 19 io.WriteString(testFile, "test file") 20 } 21 22 func createArchiveWithGitPath(t *testing.T, archive *zip.Writer) { 23 testGitFile, err := archive.Create(".git/test_file") 24 require.NoError(t, err) 25 io.WriteString(testGitFile, "test git file") 26 } 27 28 func testOnArchive(t *testing.T, createArchive func(t *testing.T, archive *zip.Writer), testCase func(t *testing.T, fileName string)) { 29 tempFile, err := ioutil.TempFile("", "archive") 30 require.NoError(t, err) 31 defer tempFile.Close() 32 defer os.Remove(tempFile.Name()) 33 34 archive := zip.NewWriter(tempFile) 35 defer archive.Close() 36 37 createArchive(t, archive) 38 archive.Close() 39 tempFile.Close() 40 41 testCase(t, tempFile.Name()) 42 } 43 44 func TestExtractZipFile(t *testing.T) { 45 testOnArchive(t, createDefaultArchive, func(t *testing.T, fileName string) { 46 err := ExtractZipFile(fileName) 47 require.NoError(t, err) 48 49 stat, err := os.Stat("temporary_file.txt") 50 assert.False(t, os.IsNotExist(err), "Expected temporary_file.txt to exist") 51 if !os.IsNotExist(err) { 52 assert.NoError(t, err) 53 } 54 55 if stat != nil { 56 defer os.Remove("temporary_file.txt") 57 assert.Equal(t, int64(9), stat.Size()) 58 } 59 }) 60 61 } 62 63 func TestExtractZipFileWithGitPath(t *testing.T) { 64 testOnArchive(t, createArchiveWithGitPath, func(t *testing.T, fileName string) { 65 output := logrus.StandardLogger().Out 66 var buf bytes.Buffer 67 logrus.SetOutput(&buf) 68 defer logrus.SetOutput(output) 69 70 err := ExtractZipFile(fileName) 71 require.NoError(t, err) 72 73 assert.Contains(t, buf.String(), "Part of .git directory is on the list of files to extract") 74 75 stat, err := os.Stat(".git/test_file") 76 assert.False(t, os.IsNotExist(err), "Expected .git/test_file to exist") 77 if !os.IsNotExist(err) { 78 assert.NoError(t, err) 79 } 80 81 if stat != nil { 82 defer os.Remove(".git/test_file") 83 assert.Equal(t, int64(13), stat.Size()) 84 } 85 }) 86 } 87 88 func TestExtractZipFileNotFound(t *testing.T) { 89 err := ExtractZipFile("non_existing_zip_file.zip") 90 assert.Error(t, err) 91 }