summaryrefslogtreecommitdiff
path: root/tests/compare.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/compare.rs')
-rw-r--r--tests/compare.rs37
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");