gitlab.com/jfprevost/gitlab-runner-notlscheck@v11.11.4+incompatible/helpers/archives/gzip_create_test.go (about) 1 package archives 2 3 import ( 4 "bytes" 5 "compress/gzip" 6 "io" 7 "io/ioutil" 8 "os" 9 "path/filepath" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 ) 14 15 var testGzipFileContent = []byte("test content") 16 17 func testGzipStreams(t *testing.T, r io.Reader, streams [][]byte) { 18 gz, err := gzip.NewReader(r) 19 if err == io.EOF && len(streams) == 0 { 20 return 21 } 22 require.NoError(t, err) 23 defer gz.Close() 24 25 stream := 0 26 for ; stream < len(streams); stream++ { 27 if stream > 0 { 28 err := gz.Reset(r) 29 require.NoError(t, err, "stream should have another gzip archive") 30 } 31 32 gz.Multistream(false) 33 34 readed, err := ioutil.ReadAll(gz) 35 require.NoError(t, err, "gzip archive should be uncompressed") 36 require.Equal(t, readed, streams[stream], "gzip archive should equal content") 37 } 38 39 if gz.Reset(r) != io.EOF { 40 t.Fatal("gzip stream should end") 41 } 42 } 43 44 func TestGzipArchiveOfMultipleFiles(t *testing.T) { 45 file, err := ioutil.TempFile("", "test_file") 46 require.NoError(t, err) 47 defer file.Close() 48 defer os.Remove(file.Name()) 49 50 file.Write(testZipFileContent) 51 file.Close() 52 53 var buffer bytes.Buffer 54 err = CreateGzipArchive(&buffer, []string{file.Name(), file.Name()}) 55 require.NoError(t, err) 56 57 testGzipStreams(t, &buffer, [][]byte{testGzipFileContent, testGzipFileContent}) 58 } 59 60 func TestGzipArchivingShouldFailIfDirectoryIsBeingArchived(t *testing.T) { 61 dir, err := ioutil.TempDir("", "test_dir") 62 require.NoError(t, err) 63 defer os.Remove(dir) 64 65 var buffer bytes.Buffer 66 err = CreateGzipArchive(&buffer, []string{dir}) 67 require.Errorf(t, err, "the %q is not a regular file", dir) 68 } 69 70 func TestGzipArchivingShouldFailIfSymlinkIsBeingArchived(t *testing.T) { 71 dir, err := ioutil.TempDir("", "test_dir") 72 require.NoError(t, err) 73 defer os.Remove(dir) 74 75 filePath := filepath.Join(dir, "file") 76 err = ioutil.WriteFile(filePath, testGzipFileContent, 0644) 77 require.NoError(t, err) 78 79 symlinkPath := filepath.Join(dir, "symlink") 80 err = os.Symlink(filePath, symlinkPath) 81 require.NoError(t, err) 82 83 var buffer bytes.Buffer 84 err = CreateGzipArchive(&buffer, []string{filePath, symlinkPath}) 85 require.Errorf(t, err, "the %q is not a regular file", symlinkPath) 86 } 87 88 func TestGzipDoesNotArchiveNonExistingFile(t *testing.T) { 89 var buffer bytes.Buffer 90 err := CreateGzipArchive(&buffer, []string{"non-existing-file"}) 91 require.NoError(t, err) 92 93 // test that we have empty number of streams 94 testGzipStreams(t, &buffer, [][]byte{}) 95 } 96 97 func TestGzipArchivesExistingAndNonExistingFile(t *testing.T) { 98 dir, err := ioutil.TempDir("", "test_dir") 99 require.NoError(t, err) 100 defer os.Remove(dir) 101 102 filePath := filepath.Join(dir, "file") 103 err = ioutil.WriteFile(filePath, testGzipFileContent, 0644) 104 require.NoError(t, err) 105 106 var buffer bytes.Buffer 107 err = CreateGzipArchive(&buffer, []string{filePath, "non-existing-file"}) 108 109 // we have only one stream 110 testGzipStreams(t, &buffer, [][]byte{testGzipFileContent}) 111 }