code.gitea.io/gitea@v1.19.3/modules/packages/vagrant/metadata_test.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package vagrant 5 6 import ( 7 "archive/tar" 8 "bytes" 9 "compress/gzip" 10 "io" 11 "testing" 12 13 "code.gitea.io/gitea/modules/json" 14 15 "github.com/stretchr/testify/assert" 16 ) 17 18 const ( 19 author = "gitea" 20 description = "Package Description" 21 projectURL = "https://gitea.io" 22 repositoryURL = "https://gitea.io/gitea/gitea" 23 ) 24 25 func TestParseMetadataFromBox(t *testing.T) { 26 createArchive := func(files map[string][]byte) io.Reader { 27 var buf bytes.Buffer 28 zw := gzip.NewWriter(&buf) 29 tw := tar.NewWriter(zw) 30 for filename, content := range files { 31 hdr := &tar.Header{ 32 Name: filename, 33 Mode: 0o600, 34 Size: int64(len(content)), 35 } 36 tw.WriteHeader(hdr) 37 tw.Write(content) 38 } 39 tw.Close() 40 zw.Close() 41 return &buf 42 } 43 44 t.Run("MissingInfoFile", func(t *testing.T) { 45 data := createArchive(map[string][]byte{"dummy.txt": {}}) 46 47 metadata, err := ParseMetadataFromBox(data) 48 assert.NotNil(t, metadata) 49 assert.NoError(t, err) 50 }) 51 52 t.Run("Valid", func(t *testing.T) { 53 content, err := json.Marshal(map[string]string{ 54 "description": description, 55 "author": author, 56 "website": projectURL, 57 "repository": repositoryURL, 58 }) 59 assert.NoError(t, err) 60 61 data := createArchive(map[string][]byte{"info.json": content}) 62 63 metadata, err := ParseMetadataFromBox(data) 64 assert.NotNil(t, metadata) 65 assert.NoError(t, err) 66 67 assert.Equal(t, author, metadata.Author) 68 assert.Equal(t, description, metadata.Description) 69 assert.Equal(t, projectURL, metadata.ProjectURL) 70 assert.Equal(t, repositoryURL, metadata.RepositoryURL) 71 }) 72 } 73 74 func TestParseInfoFile(t *testing.T) { 75 t.Run("UnknownKeys", func(t *testing.T) { 76 content, err := json.Marshal(map[string]string{ 77 "package": "", 78 "dummy": "", 79 }) 80 assert.NoError(t, err) 81 82 metadata, err := ParseInfoFile(bytes.NewReader(content)) 83 assert.NotNil(t, metadata) 84 assert.NoError(t, err) 85 86 assert.Empty(t, metadata.Author) 87 assert.Empty(t, metadata.Description) 88 assert.Empty(t, metadata.ProjectURL) 89 assert.Empty(t, metadata.RepositoryURL) 90 }) 91 92 t.Run("Valid", func(t *testing.T) { 93 content, err := json.Marshal(map[string]string{ 94 "description": description, 95 "author": author, 96 "website": projectURL, 97 "repository": repositoryURL, 98 }) 99 assert.NoError(t, err) 100 101 metadata, err := ParseInfoFile(bytes.NewReader(content)) 102 assert.NotNil(t, metadata) 103 assert.NoError(t, err) 104 105 assert.Equal(t, author, metadata.Author) 106 assert.Equal(t, description, metadata.Description) 107 assert.Equal(t, projectURL, metadata.ProjectURL) 108 assert.Equal(t, repositoryURL, metadata.RepositoryURL) 109 }) 110 }