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  }