gitea源码

metadata_test.go 1.9KB

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