1// +build !integration 2 3package archive_test 4 5import ( 6 "io/ioutil" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 11 "gitlab.com/gitlab-org/gitlab-runner/commands/helpers/archive" 12 13 "gitlab.com/gitlab-org/gitlab-runner/commands/helpers/archive/gziplegacy" 14 _ "gitlab.com/gitlab-org/gitlab-runner/commands/helpers/archive/raw" 15 "gitlab.com/gitlab-org/gitlab-runner/commands/helpers/archive/ziplegacy" 16) 17 18func TestDefaultRegistration(t *testing.T) { 19 tests := map[archive.Format]struct { 20 hasArchiver, hasExtractor bool 21 }{ 22 archive.Raw: {hasArchiver: true, hasExtractor: false}, 23 archive.Gzip: {hasArchiver: true, hasExtractor: false}, 24 archive.Zip: {hasArchiver: true, hasExtractor: true}, 25 } 26 27 for tn, tc := range tests { 28 t.Run(string(tn), func(t *testing.T) { 29 _, err := archive.NewArchiver(tn, nil, "", archive.DefaultCompression) 30 31 if tc.hasArchiver { 32 assert.NoError(t, err) 33 } else { 34 assert.ErrorIs(t, err, archive.ErrUnsupportedArchiveFormat) 35 } 36 37 _, err = archive.NewExtractor(tn, nil, 0, "") 38 39 if tc.hasExtractor { 40 assert.NoError(t, err) 41 } else { 42 assert.ErrorIs(t, err, archive.ErrUnsupportedArchiveFormat) 43 } 44 }) 45 } 46} 47 48func TestRegister(t *testing.T) { 49 format := archive.Format("new-format") 50 51 archive.Register(format, ziplegacy.NewArchiver, ziplegacy.NewExtractor) 52 53 _, err := archive.NewArchiver(format, nil, "", archive.DefaultCompression) 54 assert.NoError(t, err) 55 56 _, err = archive.NewExtractor(format, nil, 0, "") 57 assert.NoError(t, err) 58} 59 60func TestRegisterOverride(t *testing.T) { 61 existingGzipArchiver, err := gziplegacy.NewArchiver(ioutil.Discard, "", archive.DefaultCompression) 62 assert.NoError(t, err) 63 64 existingZipArchiver, err := ziplegacy.NewArchiver(ioutil.Discard, "", archive.DefaultCompression) 65 assert.NoError(t, err) 66 67 existingZipExtractor, err := ziplegacy.NewExtractor(nil, 0, "") 68 assert.NoError(t, err) 69 70 // assert existing archiver 71 archiver, err := archive.NewArchiver(archive.Gzip, nil, "", archive.DefaultCompression) 72 assert.NoError(t, err) 73 assert.IsType(t, existingGzipArchiver, archiver) 74 75 _, err = archive.NewExtractor(archive.Gzip, nil, 0, "") 76 assert.Error(t, err) 77 78 // override 79 archive.Register(archive.Gzip, ziplegacy.NewArchiver, ziplegacy.NewExtractor) 80 81 archiver, err = archive.NewArchiver(archive.Gzip, nil, "", archive.DefaultCompression) 82 assert.NoError(t, err) 83 assert.IsType(t, existingZipArchiver, archiver) 84 85 extractor, err := archive.NewExtractor(archive.Gzip, nil, 0, "") 86 assert.NoError(t, err) 87 assert.IsType(t, existingZipExtractor, extractor) 88} 89