github.com/secure-build/gitlab-runner@v12.5.0+incompatible/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 _, err = io.WriteString(testFile, "test file") 20 require.NoError(t, err) 21 } 22 23 func createArchiveWithGitPath(t *testing.T, archive *zip.Writer) { 24 testGitFile, err := archive.Create(".git/test_file") 25 require.NoError(t, err) 26 _, err = io.WriteString(testGitFile, "test git file") 27 require.NoError(t, err) 28 } 29 30 func testOnArchive(t *testing.T, createArchive func(t *testing.T, archive *zip.Writer), testCase func(t *testing.T, fileName string)) { 31 tempFile, err := ioutil.TempFile("", "archive") 32 require.NoError(t, err) 33 defer tempFile.Close() 34 defer os.Remove(tempFile.Name()) 35 36 archive := zip.NewWriter(tempFile) 37 defer archive.Close() 38 39 createArchive(t, archive) 40 archive.Close() 41 tempFile.Close() 42 43 testCase(t, tempFile.Name()) 44 } 45 46 func TestExtractZipFile(t *testing.T) { 47 testOnArchive(t, createDefaultArchive, func(t *testing.T, fileName string) { 48 err := ExtractZipFile(fileName) 49 require.NoError(t, err) 50 51 stat, err := os.Stat("temporary_file.txt") 52 assert.False(t, os.IsNotExist(err), "Expected temporary_file.txt to exist") 53 if !os.IsNotExist(err) { 54 assert.NoError(t, err) 55 } 56 57 if stat != nil { 58 defer os.Remove("temporary_file.txt") 59 assert.Equal(t, int64(9), stat.Size()) 60 } 61 }) 62 63 } 64 65 func TestExtractZipFileWithGitPath(t *testing.T) { 66 testOnArchive(t, createArchiveWithGitPath, func(t *testing.T, fileName string) { 67 output := logrus.StandardLogger().Out 68 var buf bytes.Buffer 69 logrus.SetOutput(&buf) 70 defer logrus.SetOutput(output) 71 72 err := ExtractZipFile(fileName) 73 require.NoError(t, err) 74 75 assert.Contains(t, buf.String(), "Part of .git directory is on the list of files to extract") 76 77 stat, err := os.Stat(".git/test_file") 78 assert.False(t, os.IsNotExist(err), "Expected .git/test_file to exist") 79 if !os.IsNotExist(err) { 80 assert.NoError(t, err) 81 } 82 83 if stat != nil { 84 defer os.Remove(".git/test_file") 85 assert.Equal(t, int64(13), stat.Size()) 86 } 87 }) 88 } 89 90 func TestExtractZipFileNotFound(t *testing.T) { 91 err := ExtractZipFile("non_existing_zip_file.zip") 92 assert.Error(t, err) 93 }