gitea源码

metadata_test.go 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package chef
  4. import (
  5. "archive/tar"
  6. "bytes"
  7. "compress/gzip"
  8. "strings"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. const (
  13. packageName = "gitea"
  14. packageVersion = "1.0.1"
  15. packageAuthor = "KN4CK3R"
  16. packageDescription = "Package Description"
  17. packageRepositoryURL = "https://gitea.io/gitea/gitea"
  18. )
  19. func TestParsePackage(t *testing.T) {
  20. t.Run("MissingMetadataFile", func(t *testing.T) {
  21. var buf bytes.Buffer
  22. zw := gzip.NewWriter(&buf)
  23. tw := tar.NewWriter(zw)
  24. tw.Close()
  25. zw.Close()
  26. p, err := ParsePackage(&buf)
  27. assert.Nil(t, p)
  28. assert.ErrorIs(t, err, ErrMissingMetadataFile)
  29. })
  30. t.Run("Valid", func(t *testing.T) {
  31. var buf bytes.Buffer
  32. zw := gzip.NewWriter(&buf)
  33. tw := tar.NewWriter(zw)
  34. content := `{"name":"` + packageName + `","version":"` + packageVersion + `"}`
  35. hdr := &tar.Header{
  36. Name: packageName + "/metadata.json",
  37. Mode: 0o600,
  38. Size: int64(len(content)),
  39. }
  40. tw.WriteHeader(hdr)
  41. tw.Write([]byte(content))
  42. tw.Close()
  43. zw.Close()
  44. p, err := ParsePackage(&buf)
  45. assert.NoError(t, err)
  46. assert.NotNil(t, p)
  47. assert.Equal(t, packageName, p.Name)
  48. assert.Equal(t, packageVersion, p.Version)
  49. assert.NotNil(t, p.Metadata)
  50. })
  51. }
  52. func TestParseChefMetadata(t *testing.T) {
  53. t.Run("InvalidName", func(t *testing.T) {
  54. for _, name := range []string{" test", "test "} {
  55. p, err := ParseChefMetadata(strings.NewReader(`{"name":"` + name + `","version":"1.0.0"}`))
  56. assert.Nil(t, p)
  57. assert.ErrorIs(t, err, ErrInvalidName)
  58. }
  59. })
  60. t.Run("InvalidVersion", func(t *testing.T) {
  61. for _, version := range []string{"1", "1.2.3.4", "1.0.0 "} {
  62. p, err := ParseChefMetadata(strings.NewReader(`{"name":"test","version":"` + version + `"}`))
  63. assert.Nil(t, p)
  64. assert.ErrorIs(t, err, ErrInvalidVersion)
  65. }
  66. })
  67. t.Run("Valid", func(t *testing.T) {
  68. p, err := ParseChefMetadata(strings.NewReader(`{"name":"` + packageName + `","version":"` + packageVersion + `","description":"` + packageDescription + `","maintainer":"` + packageAuthor + `","source_url":"` + packageRepositoryURL + `"}`))
  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, packageDescription, p.Metadata.Description)
  74. assert.Equal(t, packageAuthor, p.Metadata.Author)
  75. assert.Equal(t, packageRepositoryURL, p.Metadata.RepositoryURL)
  76. })
  77. }