github.com/ssube/gitlab-ci-multi-runner@v1.2.1-0.20160607142738-b8d1285632e6/helpers/archives/zip_create_test.go (about)

     1  package archives
     2  
     3  import (
     4  	"archive/zip"
     5  	"io/ioutil"
     6  	"os"
     7  	"syscall"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  var testZipFileContent = []byte("test content")
    14  
    15  func createTestFile(t *testing.T) string {
    16  	err := ioutil.WriteFile("test_file.txt", testZipFileContent, 0640)
    17  	assert.NoError(t, err)
    18  	return "test_file.txt"
    19  }
    20  
    21  func createSymlinkFile(t *testing.T) string {
    22  	err := os.Symlink("old_symlink", "new_symlink")
    23  	assert.NoError(t, err)
    24  	return "new_symlink"
    25  }
    26  
    27  func createTestDirectory(t *testing.T) string {
    28  	err := os.Mkdir("test_directory", 0711)
    29  	assert.NoError(t, err)
    30  	return "test_directory"
    31  }
    32  
    33  func createTestPipe(t *testing.T) string {
    34  	err := syscall.Mkfifo("test_pipe", 0600)
    35  	assert.NoError(t, err)
    36  	return "test_pipe"
    37  }
    38  
    39  func TestZipCreate(t *testing.T) {
    40  	td, err := ioutil.TempDir("", "zip_create")
    41  	if !assert.NoError(t, err) {
    42  		return
    43  	}
    44  
    45  	wd, err := os.Getwd()
    46  	assert.NoError(t, err)
    47  	defer os.Chdir(wd)
    48  
    49  	err = os.Chdir(td)
    50  	assert.NoError(t, err)
    51  
    52  	tempFile, err := ioutil.TempFile("", "archive")
    53  	if !assert.NoError(t, err) {
    54  		return
    55  	}
    56  	tempFile.Close()
    57  	defer os.Remove(tempFile.Name())
    58  
    59  	err = CreateZipFile(tempFile.Name(), []string{
    60  		createTestFile(t),
    61  		createSymlinkFile(t),
    62  		createTestDirectory(t),
    63  		createTestPipe(t),
    64  		"non_existing_file.txt",
    65  	})
    66  	if !assert.NoError(t, err) {
    67  		return
    68  	}
    69  
    70  	archive, err := zip.OpenReader(tempFile.Name())
    71  	if !assert.NoError(t, err) {
    72  		return
    73  	}
    74  	defer archive.Close()
    75  
    76  	assert.Len(t, archive.File, 3)
    77  	assert.Equal(t, "test_file.txt", archive.File[0].Name)
    78  	assert.Equal(t, 0640, archive.File[0].Mode().Perm())
    79  	assert.NotEmpty(t, archive.File[0].Extra)
    80  	assert.Equal(t, "new_symlink", archive.File[1].Name)
    81  	assert.Equal(t, "test_directory/", archive.File[2].Name)
    82  	assert.NotEmpty(t, archive.File[2].Extra)
    83  	assert.True(t, archive.File[2].Mode().IsDir())
    84  }