code.gitea.io/gitea@v1.22.3/modules/packages/goproxy/metadata_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package goproxy
     5  
     6  import (
     7  	"archive/zip"
     8  	"bytes"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  const (
    15  	packageName    = "gitea.com/go-gitea/gitea"
    16  	packageVersion = "v0.0.1"
    17  )
    18  
    19  func TestParsePackage(t *testing.T) {
    20  	createArchive := func(files map[string][]byte) *bytes.Reader {
    21  		var buf bytes.Buffer
    22  		zw := zip.NewWriter(&buf)
    23  		for name, content := range files {
    24  			w, _ := zw.Create(name)
    25  			w.Write(content)
    26  		}
    27  		zw.Close()
    28  		return bytes.NewReader(buf.Bytes())
    29  	}
    30  
    31  	t.Run("EmptyPackage", func(t *testing.T) {
    32  		data := createArchive(nil)
    33  
    34  		p, err := ParsePackage(data, int64(data.Len()))
    35  		assert.Nil(t, p)
    36  		assert.ErrorIs(t, err, ErrInvalidStructure)
    37  	})
    38  
    39  	t.Run("InvalidNameOrVersionStructure", func(t *testing.T) {
    40  		data := createArchive(map[string][]byte{
    41  			packageName + "/" + packageVersion + "/go.mod": {},
    42  		})
    43  
    44  		p, err := ParsePackage(data, int64(data.Len()))
    45  		assert.Nil(t, p)
    46  		assert.ErrorIs(t, err, ErrInvalidStructure)
    47  	})
    48  
    49  	t.Run("GoModFileInWrongDirectory", func(t *testing.T) {
    50  		data := createArchive(map[string][]byte{
    51  			packageName + "@" + packageVersion + "/subdir/go.mod": {},
    52  		})
    53  
    54  		p, err := ParsePackage(data, int64(data.Len()))
    55  		assert.NotNil(t, p)
    56  		assert.NoError(t, err)
    57  		assert.Equal(t, packageName, p.Name)
    58  		assert.Equal(t, packageVersion, p.Version)
    59  		assert.Equal(t, "module gitea.com/go-gitea/gitea", p.GoMod)
    60  	})
    61  
    62  	t.Run("Valid", func(t *testing.T) {
    63  		data := createArchive(map[string][]byte{
    64  			packageName + "@" + packageVersion + "/subdir/go.mod": []byte("invalid"),
    65  			packageName + "@" + packageVersion + "/go.mod":        []byte("valid"),
    66  		})
    67  
    68  		p, err := ParsePackage(data, int64(data.Len()))
    69  		assert.NotNil(t, p)
    70  		assert.NoError(t, err)
    71  		assert.Equal(t, packageName, p.Name)
    72  		assert.Equal(t, packageVersion, p.Version)
    73  		assert.Equal(t, "valid", p.GoMod)
    74  	})
    75  }