@@ -19,6 +19,7 @@ import (
1919 "code.gitea.io/gitea/models/unittest"
2020 user_model "code.gitea.io/gitea/models/user"
2121 alpine_module "code.gitea.io/gitea/modules/packages/alpine"
22+ alpine_service "code.gitea.io/gitea/services/packages/alpine"
2223 "code.gitea.io/gitea/tests"
2324
2425 "github.com/stretchr/testify/assert"
@@ -59,7 +60,34 @@ Djfa/2q5bH4699v++uMAAAAAAAAAAAAAAAAAAAAAAHbgA/eXQh8AKAAA`
5960 content , err := base64 .StdEncoding .DecodeString (base64AlpinePackageContent )
6061 assert .NoError (t , err )
6162
62- branches := []string {"v3.16" , "v3.17" , "v3.18" }
63+ base64AlpinePackageNoArchContent := `H4sIAAAAAAACA9ML9nT30wsKdtQrLU4t0jUzTUo1NDVP0ysqTtQrKE1ioAYwAAIzExMwDQTotCGI
64+ bWhiampuYmRiaGrMYGBoZGZkxKBgwEAHUFpcklikoMAwQkHLB7eoE40P9n5jvx32t7Dy9rq7x19k
65+ 66cJPV38t/h+vWe2jdXy+/PzPT0YTF5z39i4cPFptcLa1C1lD0z/XvrNp6In/7nP4PPCF2pZu8uV
66+ z74QXLxpY1XWJuVFysqVf+PdizccFbD6ZL/QPGXd1Ri1fec2XBNuYfK/rFa6wF/h3dK/W12f8mxP
67+ 04iP3aCy+vPx7h9S+5M1LLkWr5M/4ezGt3bDW/FjBp/S9hiKP72s/XrJ0vWtO0zr5wa+D/X8XluW
68+ d7BLP7XS3YUhd8WbPPF/NW3691ONJbXsRb69O7BIMZC96uTri+utC/fbie5J+n7zhCxD4Aep/qet
69+ QnlCZyN8MhNdVNlNl7965R1nExrrGvfI/YQZFx8Dg+d9122hZsYd/24WL/L69OWrDAN/y//nS7im
70+ XEive3v7QeTe433TPj/X71+9yHiV6+E9k++3TL8V0Xoq9panhNt23fLgau/pTOvmKx6bV/pS26+Y
71+ 5UP4viyuklYeu4/BZl6rLINe1L/uWuUXcH5z7pa2b9+/rp/v/8dFgc1PL3bO3/iVcrI//J/LMU2X
72+ Nzu1IaMmWXnGp7CmyQIR39d0Nai9/+tdPbfjvmsNH88Tu7uVrvNuJE0wjxfePXGv/KHNXD+mnG0t
73+ yTPu+Na0b5WR9O4t0yMd9T5k6ui7hOyU/jL/4dOn6neLwhdrZIZfcl1ectnGvUTurWDo1vY5Gw9k
74+ PTQLVgcA61F+7gAEAAAfiwgAAAAAAAID7VVNa9wwEPXZv2Ig53hHlizbCzkVkobQJtDkB4wl2SvW
75+ lhdbTpP++oyXQGEPLYU2paTvIs3X05PQSNnmjp4+OrJumjfZ3c3V9efL2+T3AhlaqePIOB0Rc50I
76+ VRSlypUoZIJCKJQJPCVvgGWONLGU5H1CCDDRD+4CU57S6zT5j3eCP9Tyv9T/GsuT/scyLxPAt+z/
77+ aRzjj/J+Fv9HcQZXLriJorPQPAM1i+8tyEzkGZ5PmJ7BMvvQQUt7tx4BPPJH4ccAIpN5Jjj+hSJc
78+ ugZAghDbArco4eH+A+SYq/Sw7wINDi6g89HReRhpMrvVzTzsFZlaV2Hbutmw4zVhmXo2djEe5u1m
79+ c6zNzDikR3mW1a61JepaC0SZHsjsqTsyPoR9GL+GdPbf1iSFtU5Xyu/c4+Q7H04lMfvgI3vT3hsX
80+ 5rX40/U9b5CWOA78Mhrq+2ewLjrDp7VNWQbtaF6ZXVWZIhdV09RWOIvU6BqNboSxLSEpkrpQq80x
81+ W1Nla6NavuqtrJQ0sv17D+4L2oD1lwAIAAAfiwgAAAAAAAID7dM/SgNBFAbw6cSAnYXlXsDNm50/
82+ u1METBeIkEBMK87uzKKEJbB/IN7CxhN4AI/gNcRD6BWciI0WSiBGxO/XvA9mile8L+5P7WrkrfN1
83+ 049dV1XXbNso0FK+zeDzJC4SxqVSqUwkV4IR51KkLFqxHeia1tZhFfY/cR4V7VXlB9QL0b5HnUXD
84+ 6fj4bDI5ncXFpS8WTVfFs9GQD5wVxgrvlde5zMmJRKm89KVRmnhmyJYuo5RMj8Ef8EOV36j/6/yx
85+ /5qnxKJ1J8MZJifskD2Zu+fzxfggmT+83F4c3dw/7u1vtf/1ctl+9e+7dwAAAAAAAAAAAAAAAAAA
86+ AACAX/AKARNTyAAoAAA=`
87+ noarchContent , err := base64 .StdEncoding .DecodeString (base64AlpinePackageNoArchContent )
88+ assert .NoError (t , err )
89+
90+ branches := []string {"v3.16" , "v3.17" }
6391 repositories := []string {"main" , "testing" }
6492
6593 rootURL := fmt .Sprintf ("/api/packages/%s/alpine" , user .Name )
@@ -139,63 +167,71 @@ Djfa/2q5bH4699v++uMAAAAAAAAAAAAAAAAAAAAAAHbgA/eXQh8AKAAA`
139167 })
140168 })
141169
142- t . Run ( "Index" , func (t * testing. T ) {
143- defer tests . PrintCurrentTest ( t )( )
170+ readIndexContent := func (r io. Reader ) ( string , error ) {
171+ br := bufio . NewReader ( r )
144172
145- url := fmt .Sprintf ("%s/%s/%s/x86_64/APKINDEX.tar.gz" , rootURL , branch , repository )
173+ gzr , err := gzip .NewReader (br )
174+ if err != nil {
175+ return "" , err
176+ }
146177
147- req := NewRequest (t , "GET" , url )
148- resp := MakeRequest (t , req , http .StatusOK )
149-
150- assert .Condition (t , func () bool {
151- br := bufio .NewReader (resp .Body )
152-
153- gzr , err := gzip .NewReader (br )
154- assert .NoError (t , err )
178+ for {
179+ gzr .Multistream (false )
155180
181+ tr := tar .NewReader (gzr )
156182 for {
157- gzr .Multistream (false )
183+ hd , err := tr .Next ()
184+ if err == io .EOF {
185+ break
186+ }
187+ if err != nil {
188+ return "" , err
189+ }
158190
159- tr := tar .NewReader (gzr )
160- for {
161- hd , err := tr .Next ()
162- if err == io .EOF {
163- break
191+ if hd .Name == alpine_service .IndexFilename {
192+ buf , err := io .ReadAll (tr )
193+ if err != nil {
194+ return "" , err
164195 }
165- assert .NoError (t , err )
166196
167- if hd .Name == "APKINDEX" {
168- buf , err := io .ReadAll (tr )
169- assert .NoError (t , err )
170-
171- s := string (buf )
172-
173- assert .Contains (t , s , "C:Q1/se1PjO94hYXbfpNR1/61hVORIc=\n " )
174- assert .Contains (t , s , "P:" + packageName + "\n " )
175- assert .Contains (t , s , "V:" + packageVersion + "\n " )
176- assert .Contains (t , s , "A:x86_64\n " )
177- assert .Contains (t , s , "T:Gitea Test Package\n " )
178- assert .Contains (t , s , "U:https://gitea.io/\n " )
179- assert .Contains (t , s , "L:MIT\n " )
180- assert .Contains (t , s , "S:1353\n " )
181- assert .Contains (t , s , "I:4096\n " )
182- assert .Contains (t , s , "o:gitea-test\n " )
183- assert .
Contains (
t ,
s ,
"m:KN4CK3R <[email protected] >\n " )
184- assert .Contains (t , s , "t:1679498030\n " )
185-
186- return true
187- }
197+ return string (buf ), nil
188198 }
199+ }
189200
190- err = gzr .Reset (br )
191- if err == io .EOF {
192- break
193- }
194- assert .NoError (t , err )
201+ err = gzr .Reset (br )
202+ if err == io .EOF {
203+ break
204+ }
205+ if err != nil {
206+ return "" , err
195207 }
208+ }
196209
197- return false
198- })
210+ return "" , io .EOF
211+ }
212+
213+ t .Run ("Index" , func (t * testing.T ) {
214+ defer tests .PrintCurrentTest (t )()
215+
216+ req := NewRequest (t , "GET" , fmt .Sprintf ("%s/%s/%s/x86_64/APKINDEX.tar.gz" , rootURL , branch , repository ))
217+ resp := MakeRequest (t , req , http .StatusOK )
218+
219+ content , err := readIndexContent (resp .Body )
220+ assert .NoError (t , err )
221+
222+ assert .Contains (t , content , "C:Q1/se1PjO94hYXbfpNR1/61hVORIc=\n " )
223+ assert .Contains (t , content , "P:" + packageName + "\n " )
224+ assert .Contains (t , content , "V:" + packageVersion + "\n " )
225+ assert .Contains (t , content , "A:x86_64\n " )
226+ assert .NotContains (t , content , "A:noarch\n " )
227+ assert .Contains (t , content , "T:Gitea Test Package\n " )
228+ assert .Contains (t , content , "U:https://gitea.io/\n " )
229+ assert .Contains (t , content , "L:MIT\n " )
230+ assert .Contains (t , content , "S:1353\n " )
231+ assert .Contains (t , content , "I:4096\n " )
232+ assert .Contains (t , content , "o:gitea-test\n " )
233+ assert .
Contains (
t ,
content ,
"m:KN4CK3R <[email protected] >\n " )
234+ assert .Contains (t , content , "t:1679498030\n " )
199235 })
200236
201237 t .Run ("Download" , func (t * testing.T ) {
@@ -204,6 +240,35 @@ Djfa/2q5bH4699v++uMAAAAAAAAAAAAAAAAAAAAAAHbgA/eXQh8AKAAA`
204240 req := NewRequest (t , "GET" , fmt .Sprintf ("%s/%s/%s/x86_64/%s-%s.apk" , rootURL , branch , repository , packageName , packageVersion ))
205241 MakeRequest (t , req , http .StatusOK )
206242 })
243+
244+ t .Run ("NoArch" , func (t * testing.T ) {
245+ defer tests .PrintCurrentTest (t )()
246+
247+ req := NewRequestWithBody (t , "PUT" , fmt .Sprintf ("%s/%s/%s" , rootURL , branch , repository ), bytes .NewReader (noarchContent )).
248+ AddBasicAuth (user .Name )
249+ MakeRequest (t , req , http .StatusCreated )
250+
251+ req = NewRequest (t , "GET" , fmt .Sprintf ("%s/%s/%s/x86_64/APKINDEX.tar.gz" , rootURL , branch , repository ))
252+ resp := MakeRequest (t , req , http .StatusOK )
253+
254+ content , err := readIndexContent (resp .Body )
255+ assert .NoError (t , err )
256+
257+ assert .Contains (t , content , "C:Q1/se1PjO94hYXbfpNR1/61hVORIc=\n " )
258+ assert .Contains (t , content , "A:x86_64\n " )
259+ assert .Contains (t , content , "C:Q1kbH5WoIPFccQYyATanaKXd2cJcc=\n " )
260+ assert .NotContains (t , content , "A:noarch\n " )
261+
262+ // noarch package should be available with every architecture requested
263+ for _ , arch := range []string {alpine_module .NoArch , "x86_64" , "my_arch" } {
264+ req := NewRequest (t , "GET" , fmt .Sprintf ("%s/%s/%s/%s/gitea-noarch-1.4-r0.apk" , rootURL , branch , repository , arch ))
265+ MakeRequest (t , req , http .StatusOK )
266+ }
267+
268+ req = NewRequest (t , "DELETE" , fmt .Sprintf ("%s/%s/%s/noarch/gitea-noarch-1.4-r0.apk" , rootURL , branch , repository )).
269+ AddBasicAuth (user .Name )
270+ MakeRequest (t , req , http .StatusNoContent )
271+ })
207272 })
208273 }
209274 }
0 commit comments