diff options
| author | Hermes Agent <hermes@localhost> | 2026-08-12 03:00:45 +0000 |
|---|---|---|
| committer | Hermes Agent <hermes@localhost> | 2026-08-12 03:00:45 +0000 |
| commit | a60cf70253fb1e22dfcc480385c0499272b75477 (patch) | |
| tree | fc662e61c1c76109c3e23142c35422908f24397c /tests/compare.rs | |
| parent | 5384232eec4dff669cd2bb68ee93c34b6b63c78c (diff) | |
Collect hardlink facts from archive artifacts
Diffstat (limited to 'tests/compare.rs')
| -rw-r--r-- | tests/compare.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/compare.rs b/tests/compare.rs index 37135a7..63e4a4f 100644 --- a/tests/compare.rs +++ b/tests/compare.rs @@ -217,6 +217,43 @@ fn normalizes_legacy_dot_prefixed_archive_paths_before_comparison() { } #[test] +fn collects_hardlink_targets_from_an_archive_for_semantic_comparison() { + let fixture = tempdir().expect("temporary directory"); + let artifact = fixture.path().join("legacy.tar"); + let file = fs::File::create(&artifact).expect("create legacy archive"); + let mut archive = tar::Builder::new(file); + let mut header = tar::Header::new_gnu(); + header.set_size(11); + header.set_mode(0o644); + header.set_cksum(); + archive + .append_data(&mut header, "./usr/bin/controller", Cursor::new(b"controller\n")) + .expect("append regular member"); + let mut link_header = tar::Header::new_gnu(); + link_header.set_entry_type(tar::EntryType::Link); + link_header.set_size(0); + link_header.set_cksum(); + archive + .append_link( + &mut link_header, + "./usr/bin/controller-link", + "./usr/bin/controller", + ) + .expect("append hardlink member"); + archive.finish().expect("finish legacy archive"); + + let manifest = ArtifactManifest::collect_archive(&artifact).expect("collect archive facts"); + + assert!( + manifest.files.iter().any(|record| { + record == &FileRecord::hardlink("usr/bin/controller-link", "usr/bin/controller") + }), + "collected files: {:?}", + manifest.files + ); +} + +#[test] fn normalizes_dot_prefixed_paths_from_a_legacy_tree_archive() { let fixture = tempdir().expect("temporary directory"); let rootfs = fixture.path().join("rootfs"); |