code.gitea.io/gitea@v1.19.3/modules/packages/chef/metadata_test.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package chef 5 6 import ( 7 "archive/tar" 8 "bytes" 9 "compress/gzip" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 const ( 17 packageName = "gitea" 18 packageVersion = "1.0.1" 19 packageAuthor = "KN4CK3R" 20 packageDescription = "Package Description" 21 packageRepositoryURL = "https://gitea.io/gitea/gitea" 22 ) 23 24 func TestParsePackage(t *testing.T) { 25 t.Run("MissingMetadataFile", func(t *testing.T) { 26 var buf bytes.Buffer 27 zw := gzip.NewWriter(&buf) 28 tw := tar.NewWriter(zw) 29 tw.Close() 30 zw.Close() 31 32 p, err := ParsePackage(&buf) 33 assert.Nil(t, p) 34 assert.ErrorIs(t, err, ErrMissingMetadataFile) 35 }) 36 37 t.Run("Valid", func(t *testing.T) { 38 var buf bytes.Buffer 39 zw := gzip.NewWriter(&buf) 40 tw := tar.NewWriter(zw) 41 42 content := `{"name":"` + packageName + `","version":"` + packageVersion + `"}` 43 44 hdr := &tar.Header{ 45 Name: packageName + "/metadata.json", 46 Mode: 0o600, 47 Size: int64(len(content)), 48 } 49 tw.WriteHeader(hdr) 50 tw.Write([]byte(content)) 51 52 tw.Close() 53 zw.Close() 54 55 p, err := ParsePackage(&buf) 56 assert.NoError(t, err) 57 assert.NotNil(t, p) 58 assert.Equal(t, packageName, p.Name) 59 assert.Equal(t, packageVersion, p.Version) 60 assert.NotNil(t, p.Metadata) 61 }) 62 } 63 64 func TestParseChefMetadata(t *testing.T) { 65 t.Run("InvalidName", func(t *testing.T) { 66 for _, name := range []string{" test", "test "} { 67 p, err := ParseChefMetadata(strings.NewReader(`{"name":"` + name + `","version":"1.0.0"}`)) 68 assert.Nil(t, p) 69 assert.ErrorIs(t, err, ErrInvalidName) 70 } 71 }) 72 73 t.Run("InvalidVersion", func(t *testing.T) { 74 for _, version := range []string{"1", "1.2.3.4", "1.0.0 "} { 75 p, err := ParseChefMetadata(strings.NewReader(`{"name":"test","version":"` + version + `"}`)) 76 assert.Nil(t, p) 77 assert.ErrorIs(t, err, ErrInvalidVersion) 78 } 79 }) 80 81 t.Run("Valid", func(t *testing.T) { 82 p, err := ParseChefMetadata(strings.NewReader(`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","maintainer":"` + packageAuthor + `","source_url":"` + packageRepositoryURL + `"}`)) 83 assert.NotNil(t, p) 84 assert.NoError(t, err) 85 86 assert.Equal(t, packageName, p.Name) 87 assert.Equal(t, packageVersion, p.Version) 88 assert.Equal(t, packageDescription, p.Metadata.Description) 89 assert.Equal(t, packageAuthor, p.Metadata.Author) 90 assert.Equal(t, packageRepositoryURL, p.Metadata.RepositoryURL) 91 }) 92 }