gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package cargo
  4. import (
  5. "bytes"
  6. "encoding/binary"
  7. "io"
  8. "strings"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestParsePackage(t *testing.T) {
  13. const (
  14. description = "Package Description"
  15. author = "KN4CK3R"
  16. homepage = "https://gitea.io/"
  17. license = "MIT"
  18. payload = "gitea test dummy payload" // a fake payload for test only
  19. )
  20. makeDefaultPackageMeta := func(name, version string) string {
  21. return `{
  22. "name":"` + name + `",
  23. "vers":"` + version + `",
  24. "description":"` + description + `",
  25. "authors": ["` + author + `"],
  26. "deps":[
  27. {
  28. "name":"dep",
  29. "version_req":"1.0"
  30. }
  31. ],
  32. "homepage":"` + homepage + `",
  33. "license":"` + license + `"
  34. }`
  35. }
  36. createPackage := func(metadata string) io.Reader {
  37. var buf bytes.Buffer
  38. binary.Write(&buf, binary.LittleEndian, uint32(len(metadata)))
  39. buf.WriteString(metadata)
  40. binary.Write(&buf, binary.LittleEndian, uint32(len(payload)))
  41. buf.WriteString(payload)
  42. return &buf
  43. }
  44. t.Run("InvalidName", func(t *testing.T) {
  45. for _, name := range []string{"", "0test", "-test", "_test", strings.Repeat("a", 65)} {
  46. data := createPackage(makeDefaultPackageMeta(name, "1.0.0"))
  47. cp, err := ParsePackage(data)
  48. assert.Nil(t, cp)
  49. assert.ErrorIs(t, err, ErrInvalidName)
  50. }
  51. })
  52. t.Run("InvalidVersion", func(t *testing.T) {
  53. for _, version := range []string{"", "1.", "-1.0", "1.0.0/1"} {
  54. data := createPackage(makeDefaultPackageMeta("test", version))
  55. cp, err := ParsePackage(data)
  56. assert.Nil(t, cp)
  57. assert.ErrorIs(t, err, ErrInvalidVersion)
  58. }
  59. })
  60. t.Run("Valid", func(t *testing.T) {
  61. data := createPackage(makeDefaultPackageMeta("test", "1.0.0"))
  62. cp, err := ParsePackage(data)
  63. assert.NotNil(t, cp)
  64. assert.NoError(t, err)
  65. assert.Equal(t, "test", cp.Name)
  66. assert.Equal(t, "1.0.0", cp.Version)
  67. assert.Equal(t, description, cp.Metadata.Description)
  68. assert.Equal(t, []string{author}, cp.Metadata.Authors)
  69. assert.Len(t, cp.Metadata.Dependencies, 1)
  70. assert.Equal(t, "dep", cp.Metadata.Dependencies[0].Name)
  71. assert.Nil(t, cp.Metadata.Dependencies[0].Package)
  72. assert.Equal(t, homepage, cp.Metadata.ProjectURL)
  73. assert.Equal(t, license, cp.Metadata.License)
  74. content, _ := io.ReadAll(cp.Content)
  75. assert.Equal(t, payload, string(content))
  76. })
  77. t.Run("Renamed", func(t *testing.T) {
  78. data := createPackage(`{
  79. "name":"test-pkg",
  80. "vers":"1.0",
  81. "description":"test-desc",
  82. "authors": ["test-author"],
  83. "deps":[
  84. {
  85. "name":"dep-renamed",
  86. "explicit_name_in_toml":"dep-explicit",
  87. "version_req":"1.0"
  88. }
  89. ],
  90. "homepage":"https://gitea.io/",
  91. "license":"MIT"
  92. }`)
  93. cp, err := ParsePackage(data)
  94. assert.NoError(t, err)
  95. assert.Equal(t, "test-pkg", cp.Name)
  96. assert.Equal(t, "https://gitea.io/", cp.Metadata.ProjectURL)
  97. assert.Equal(t, "dep-explicit", cp.Metadata.Dependencies[0].Name)
  98. assert.Equal(t, "dep-renamed", *cp.Metadata.Dependencies[0].Package)
  99. })
  100. }