MCPcopy Create free account
hub / github.com/aptly-dev/aptly / TestLinkFromPool

Method TestLinkFromPool

gcs/public_test.go:238–297  ·  view source on GitHub ↗
(c *C)

Source from the content-addressed store, hash-verified

236}
237
238func (s *PublishedStorageSuite) TestLinkFromPool(c *C) {
239 root := c.MkDir()
240 pool := files.NewPackagePool(root, false)
241 cs := files.NewMockChecksumStorage()
242
243 tmpFile1 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
244 c.Assert(os.WriteFile(tmpFile1, []byte("Contents"), 0644), IsNil)
245 cksum1 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
246
247 tmpFile2 := filepath.Join(c.MkDir(), "mars-invaders_1.03.deb")
248 c.Assert(os.WriteFile(tmpFile2, []byte("Spam"), 0644), IsNil)
249 cksum2 := utils.ChecksumInfo{MD5: "e9dfd31cc505d51fc26975250750deab"}
250
251 tmpFile3 := filepath.Join(c.MkDir(), "netboot/boot.img.gz")
252 _ = os.MkdirAll(filepath.Dir(tmpFile3), 0777)
253 c.Assert(os.WriteFile(tmpFile3, []byte("Contents"), 0644), IsNil)
254 cksum3 := utils.ChecksumInfo{MD5: "c1df1da7a1ce305a3b60af9d5733ac1d"}
255
256 src1, err := pool.Import(tmpFile1, "mars-invaders_1.03.deb", &cksum1, true, cs)
257 c.Assert(err, IsNil)
258 src2, err := pool.Import(tmpFile2, "mars-invaders_1.03.deb", &cksum2, true, cs)
259 c.Assert(err, IsNil)
260 src3, err := pool.Import(tmpFile3, "netboot/boot.img.gz", &cksum3, true, cs)
261 c.Assert(err, IsNil)
262
263 // first link from pool
264 err = s.storage.LinkFromPool("", filepath.Join("pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src1, cksum1, false)
265 c.Check(err, IsNil)
266 c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
267
268 // duplicate link from pool (same MD5 → no-op)
269 err = s.storage.LinkFromPool("", filepath.Join("pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src1, cksum1, false)
270 c.Check(err, IsNil)
271 c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
272
273 // link from pool with conflict, no force
274 err = s.storage.LinkFromPool("", filepath.Join("pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src2, cksum2, false)
275 c.Check(err, ErrorMatches, ".*file already exists and is different.*")
276 c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
277
278 // link from pool with conflict and force
279 err = s.storage.LinkFromPool("", filepath.Join("pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src2, cksum2, true)
280 c.Check(err, IsNil)
281 c.Check(s.GetFile(c, "pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Spam"))
282
283 // for prefixed storage:
284 err = s.prefixedStorage.LinkFromPool("", filepath.Join("pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, src1, cksum1, false)
285 c.Check(err, IsNil)
286
287 // 2nd link from pool, providing wrong path for source file:
288 // should hit the path cache and skip upload (which would otherwise fail).
289 err = s.prefixedStorage.LinkFromPool("", filepath.Join("pool", "main", "m/mars-invaders"), "mars-invaders_1.03.deb", pool, "wrong-looks-like-pathcache-doesnt-work", cksum1, false)
290 c.Check(err, IsNil)
291 c.Check(s.GetFile(c, "lala/pool/main/m/mars-invaders/mars-invaders_1.03.deb"), DeepEquals, []byte("Contents"))
292
293 // link from pool with nested file name
294 err = s.storage.LinkFromPool("", "dists/jessie/non-free/installer-i386/current/images", "netboot/boot.img.gz", pool, src3, cksum3, false)
295 c.Check(err, IsNil)

Callers

nothing calls this directly

Calls 7

ImportMethod · 0.95
GetFileMethod · 0.95
NewPackagePoolFunction · 0.92
NewMockChecksumStorageFunction · 0.92
MkDirMethod · 0.65
LinkFromPoolMethod · 0.65
CheckMethod · 0.45

Tested by

no test coverage detected