code.gitea.io/gitea@v1.22.3/modules/packages/alpine/metadata_test.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package alpine 5 6 import ( 7 "archive/tar" 8 "bytes" 9 "compress/gzip" 10 "io" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 const ( 17 packageName = "gitea" 18 packageVersion = "1.0.1" 19 packageDescription = "Package Description" 20 packageProjectURL = "https://gitea.io" 21 packageMaintainer = "KN4CK3R <dummy@gitea.io>" 22 ) 23 24 func createPKGINFOContent(name, version string) []byte { 25 return []byte(`pkgname = ` + name + ` 26 pkgver = ` + version + ` 27 pkgdesc = ` + packageDescription + ` 28 url = ` + packageProjectURL + ` 29 # comment 30 builddate = 1678834800 31 packager = Gitea <pack@ag.er> 32 size = 123456 33 arch = aarch64 34 origin = origin 35 commit = 1111e709613fbc979651b09ac2bc27c6591a9999 36 maintainer = ` + packageMaintainer + ` 37 license = MIT 38 depend = common 39 install_if = value 40 depend = gitea 41 provides = common 42 provides = gitea`) 43 } 44 45 func TestParsePackage(t *testing.T) { 46 createPackage := func(name string, content []byte) io.Reader { 47 names := []string{"first.stream", name} 48 contents := [][]byte{{0}, content} 49 50 var buf bytes.Buffer 51 zw := gzip.NewWriter(&buf) 52 53 for i := range names { 54 if i != 0 { 55 zw.Close() 56 zw.Reset(&buf) 57 } 58 59 tw := tar.NewWriter(zw) 60 hdr := &tar.Header{ 61 Name: names[i], 62 Mode: 0o600, 63 Size: int64(len(contents[i])), 64 } 65 tw.WriteHeader(hdr) 66 tw.Write(contents[i]) 67 tw.Close() 68 } 69 70 zw.Close() 71 72 return &buf 73 } 74 75 t.Run("MissingPKGINFOFile", func(t *testing.T) { 76 data := createPackage("dummy.txt", []byte{}) 77 78 pp, err := ParsePackage(data) 79 assert.Nil(t, pp) 80 assert.ErrorIs(t, err, ErrMissingPKGINFOFile) 81 }) 82 83 t.Run("InvalidPKGINFOFile", func(t *testing.T) { 84 data := createPackage(".PKGINFO", []byte{}) 85 86 pp, err := ParsePackage(data) 87 assert.Nil(t, pp) 88 assert.ErrorIs(t, err, ErrInvalidName) 89 }) 90 91 t.Run("Valid", func(t *testing.T) { 92 data := createPackage(".PKGINFO", createPKGINFOContent(packageName, packageVersion)) 93 94 p, err := ParsePackage(data) 95 assert.NoError(t, err) 96 assert.NotNil(t, p) 97 98 assert.Equal(t, "Q1SRYURM5+uQDqfHSwTnNIOIuuDVQ=", p.FileMetadata.Checksum) 99 }) 100 } 101 102 func TestParsePackageInfo(t *testing.T) { 103 t.Run("InvalidName", func(t *testing.T) { 104 data := createPKGINFOContent("", packageVersion) 105 106 p, err := ParsePackageInfo(bytes.NewReader(data)) 107 assert.Nil(t, p) 108 assert.ErrorIs(t, err, ErrInvalidName) 109 }) 110 111 t.Run("InvalidVersion", func(t *testing.T) { 112 data := createPKGINFOContent(packageName, "") 113 114 p, err := ParsePackageInfo(bytes.NewReader(data)) 115 assert.Nil(t, p) 116 assert.ErrorIs(t, err, ErrInvalidVersion) 117 }) 118 119 t.Run("Valid", func(t *testing.T) { 120 data := createPKGINFOContent(packageName, packageVersion) 121 122 p, err := ParsePackageInfo(bytes.NewReader(data)) 123 assert.NoError(t, err) 124 assert.NotNil(t, p) 125 126 assert.Equal(t, packageName, p.Name) 127 assert.Equal(t, packageVersion, p.Version) 128 assert.Equal(t, packageDescription, p.VersionMetadata.Description) 129 assert.Equal(t, packageMaintainer, p.VersionMetadata.Maintainer) 130 assert.Equal(t, packageProjectURL, p.VersionMetadata.ProjectURL) 131 assert.Equal(t, "MIT", p.VersionMetadata.License) 132 assert.Empty(t, p.FileMetadata.Checksum) 133 assert.Equal(t, "Gitea <pack@ag.er>", p.FileMetadata.Packager) 134 assert.EqualValues(t, 1678834800, p.FileMetadata.BuildDate) 135 assert.EqualValues(t, 123456, p.FileMetadata.Size) 136 assert.Equal(t, "aarch64", p.FileMetadata.Architecture) 137 assert.Equal(t, "origin", p.FileMetadata.Origin) 138 assert.Equal(t, "1111e709613fbc979651b09ac2bc27c6591a9999", p.FileMetadata.CommitHash) 139 assert.Equal(t, "value", p.FileMetadata.InstallIf) 140 assert.ElementsMatch(t, []string{"common", "gitea"}, p.FileMetadata.Provides) 141 assert.ElementsMatch(t, []string{"common", "gitea"}, p.FileMetadata.Dependencies) 142 }) 143 }