gitea源码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package rpm
  4. import (
  5. "bytes"
  6. "compress/gzip"
  7. "encoding/base64"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestParsePackage(t *testing.T) {
  12. base64RpmPackageContent := `H4sICFayB2QCAGdpdGVhLXRlc3QtMS4wLjItMS14ODZfNjQucnBtAO2YV4gTQRjHJzl7wbNhhxVF
  13. VNwk2zd2PdvZ9Sxnd3Z3NllNsmF3o6congVFsWFHRWwIImIXfRER0QcRfPBJEXvvBQvWSfZTT0VQ
  14. 8TF/MuU33zcz3+zOJGEe73lyuQBRBWKWRzDrEddjuVAkxLMc+lsFUOWfm5bvvReAalWECg/TsivU
  15. dyKa0U61aVnl6wj0Uxe4nc8F92hZiaYE8CO/P0r7/Quegr0c7M/AvoCaGZEIWNGUqMHrhhGROIUT
  16. Zc7gOAOraoQzCNZ0WdU0HpEI5jiB4zlek3gT85wqCBomhomxoGCs8wImWMImbxqKgXVNUKKaqShR
  17. STKVKK9glFUNcf2g+/t27xs16v5x/eyOKftVGlIhyiuvvPLKK6+88sorr7zyyiuvvPKCO5HPnz+v
  18. pGVhhXsTsFVeSstuWR9anwU+Bk3Vch5wTwL3JkHg+8C1gR8A169wj1KdpobAj4HbAT+Be5VewE+h
  19. fz/g52AvBX4N9vHAb4AnA7+F8ePAH8BuA38ELgf+BLzQ50oIeBlw0OdAOXAlP57AGuCsbwGtbgCu
  20. DrwRuAb4bwau6T/PwFbgWsDXgWuD/y3gOmC/B1wI/Bi4AcT3Arih3z9YCNzI9w9m/YKUG4Nd9N9z
  21. pSZgHwrcFPgccFt//OADGE+F/q+Ao+D/FrijzwV1gbv4/QvaAHcFDgF3B5aB+wB3Be7rz1dQCtwP
  22. eDxwMcw3GbgU7AasdwzYE8DjwT4L/CeAvRx4IvBCYA3iWQds+FzpDjABfghsAj8BTgA/A/b8+StX
  23. A84A1wKe5s9fuRB4JpzHZv55rL8a/Dv49vpn/PErR4BvQX8Z+Db4l2W5CH2/f0W5+1fEoeFDBzFp
  24. rE/FMcK4mWQSOzN+aDOIqztW2rPsFKIyqh7sQERR42RVMSKihnzVHlQ8Ag0YLBYNEIajkhmuR5Io
  25. 7nlpt2M4nJs0ZNkoYaUyZahMlSfJImr1n1WjFVNCPCaTZgYNGdGL8YN2mX8WHfA/C7ViHJK0pxHG
  26. SrkeTiSI4T+7ubf85yrzRCQRQ5EVxVAjvIBVRY/KRFAVReIkhfARSddNSceayQkGliIKb0q8RAxJ
  27. 5QWNVxHIsW3Pz369bw+5jh5y0klE9Znqm0dF57b0HbGy2A5lVUBTZZrqZjdUjYoprFmpsBtHP5d0
  28. +ISltS2yk2mHuC4x+lgJMhgnidvuqy3b0suK0bm+tw3FMxI2zjm7/fA0MtQhplX2s7nYLZ2ZC0yg
  29. CxJZDokhORTJlrlcCvG5OieGBERlVCs7CfuS6WzQ/T2j+9f92BWxTFEcp2IkYccYGp2LYySEfreq
  30. irue4WRF5XkpKovw2wgpq2rZBI8bQZkzxEkiYaNwxnXCCVvHidzIiB3CM2yMYdNWmjDsaLovaE4c
  31. x3a6mLaTxB7rEj3jWN4M2p7uwPaa1GfI8BHFfcZMKhkycnhR7y781/a+A4t7FpWWTupRUtKbegwZ
  32. XMKwJinTSe70uhRcj55qNu3YHtE922Fdz7FTMTq9Q3TbMdiYrrPudMvT44S6u2miu138eC0tTN9D
  33. 2CFGHHtQsHHsGCRFDFbXuT9wx6mUTZfseydlkWZeJkW6xOgYjqXT+LA7I6XHaUx2xmUzqelWymA9
  34. rCXI9+D1BHbjsITssqhBNysw0tOWjcpmIh6+aViYPfftw8ZSGfRVPUqKiosZj5R5qGmk/8AjjRbZ
  35. d8b3vvngdPHx3HvMeCarIk7VVSwbgoZVkceEVyOmyUmGxBGNYDVKSFSOGlIkGqWnUZFkiY/wsmhK
  36. Mu0UFYgZ/bYnuvn/vz4wtCz8qMwsHUvP0PX3tbYFUctAPdrY6tiiDtcCddDECahx7SuVNP5dpmb5
  37. 9tMDyaXb7OAlk5acuPn57ss9mw6Wym0m1Fq2cej7tUt2LL4/b8enXU2fndk+fvv57ndnt55/cQob
  38. 7tpp/pEjDS7cGPZ6BY430+7danDq6f42Nw49b9F7zp6BiKpJb9s5P0AYN2+L159cnrur636rx+v1
  39. 7ae1K28QbMMcqI8CqwIrgwg9nTOp8Oj9q81plUY7ZuwXN8Vvs8wbAAA=`
  40. rpmPackageContent, err := base64.StdEncoding.DecodeString(base64RpmPackageContent)
  41. assert.NoError(t, err)
  42. zr, err := gzip.NewReader(bytes.NewReader(rpmPackageContent))
  43. assert.NoError(t, err)
  44. p, err := ParsePackage(zr)
  45. assert.NotNil(t, p)
  46. assert.NoError(t, err)
  47. assert.Equal(t, "gitea-test", p.Name)
  48. assert.Equal(t, "1.0.2-1", p.Version)
  49. assert.NotNil(t, p.VersionMetadata)
  50. assert.NotNil(t, p.FileMetadata)
  51. assert.Equal(t, "MIT", p.VersionMetadata.License)
  52. assert.Equal(t, "https://gitea.io", p.VersionMetadata.ProjectURL)
  53. assert.Equal(t, "RPM package summary", p.VersionMetadata.Summary)
  54. assert.Equal(t, "RPM package description", p.VersionMetadata.Description)
  55. assert.Equal(t, "x86_64", p.FileMetadata.Architecture)
  56. assert.Equal(t, "0", p.FileMetadata.Epoch)
  57. assert.Equal(t, "1.0.2", p.FileMetadata.Version)
  58. assert.Equal(t, "1", p.FileMetadata.Release)
  59. assert.Empty(t, p.FileMetadata.Vendor)
  60. assert.Equal(t, "KN4CK3R", p.FileMetadata.Packager)
  61. assert.Equal(t, "gitea-test-1.0.2-1.src.rpm", p.FileMetadata.SourceRpm)
  62. assert.Equal(t, "e44b1687d04b", p.FileMetadata.BuildHost)
  63. assert.EqualValues(t, 1678225964, p.FileMetadata.BuildTime)
  64. assert.EqualValues(t, 1678225964, p.FileMetadata.FileTime)
  65. assert.EqualValues(t, 13, p.FileMetadata.InstalledSize)
  66. assert.EqualValues(t, 272, p.FileMetadata.ArchiveSize)
  67. assert.Empty(t, p.FileMetadata.Conflicts)
  68. assert.Empty(t, p.FileMetadata.Obsoletes)
  69. assert.ElementsMatch(
  70. t,
  71. []*Entry{
  72. {
  73. Name: "gitea-test",
  74. Flags: "EQ",
  75. Version: "1.0.2",
  76. Epoch: "0",
  77. Release: "1",
  78. },
  79. {
  80. Name: "gitea-test(x86-64)",
  81. Flags: "EQ",
  82. Version: "1.0.2",
  83. Epoch: "0",
  84. Release: "1",
  85. },
  86. },
  87. p.FileMetadata.Provides,
  88. )
  89. assert.ElementsMatch(
  90. t,
  91. []*Entry{
  92. {
  93. Name: "/bin/sh",
  94. },
  95. {
  96. Name: "/bin/sh",
  97. },
  98. {
  99. Name: "/bin/sh",
  100. },
  101. {
  102. Name: "rpmlib(CompressedFileNames)",
  103. Flags: "LE",
  104. Version: "3.0.4",
  105. Epoch: "0",
  106. Release: "1",
  107. },
  108. {
  109. Name: "rpmlib(FileDigests)",
  110. Flags: "LE",
  111. Version: "4.6.0",
  112. Epoch: "0",
  113. Release: "1",
  114. },
  115. {
  116. Name: "rpmlib(PayloadFilesHavePrefix)",
  117. Flags: "LE",
  118. Version: "4.0",
  119. Epoch: "0",
  120. Release: "1",
  121. },
  122. {
  123. Name: "rpmlib(PayloadIsXz)",
  124. Flags: "LE",
  125. Version: "5.2",
  126. Epoch: "0",
  127. Release: "1",
  128. },
  129. },
  130. p.FileMetadata.Requires,
  131. )
  132. assert.ElementsMatch(
  133. t,
  134. []*File{
  135. {
  136. Path: "/usr/local/bin/hello",
  137. IsExecutable: true,
  138. },
  139. },
  140. p.FileMetadata.Files,
  141. )
  142. assert.ElementsMatch(
  143. t,
  144. []*Changelog{
  145. {
  146. Author: "KN4CK3R <dummy@gitea.io>",
  147. Date: 1678276800,
  148. Text: "- Changelog message.",
  149. },
  150. },
  151. p.FileMetadata.Changelogs,
  152. )
  153. }