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  }