summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/compare.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/tests/compare.rs b/tests/compare.rs
index 7dd44e2..a175195 100644
--- a/tests/compare.rs
+++ b/tests/compare.rs
@@ -3,7 +3,7 @@ use alt_controller_image::archive::NativeTarWriter;
use alt_controller_image::manifest::{
ArchiveMemberRecord, ArtifactManifest, FileRecord, InitrdRecord, PackageRecord, ServiceRecord,
};
-use std::fs;
+use std::fs::{self, hard_link};
use std::io::Cursor;
use std::os::unix::fs::symlink;
use tempfile::tempdir;
@@ -254,6 +254,32 @@ fn collects_hardlink_targets_from_an_archive_for_semantic_comparison() {
}
#[test]
+fn rootfs_collection_preserves_hardlink_facts_like_archive_collection() {
+ let fixture = tempdir().expect("temporary directory");
+ let rootfs = fixture.path().join("rootfs");
+ fs::create_dir_all(rootfs.join("usr/bin")).expect("create binary directory");
+ fs::write(rootfs.join("usr/bin/controller"), "controller\n").expect("write binary");
+ hard_link(
+ rootfs.join("usr/bin/controller"),
+ rootfs.join("usr/bin/controller-link"),
+ )
+ .expect("create hardlink");
+ let artifact = fixture.path().join("controller.tar");
+ NativeTarWriter::new()
+ .write(&rootfs, &artifact)
+ .expect("write native archive");
+
+ let rootfs_manifest = ArtifactManifest::collect(&rootfs, vec![], None, &artifact)
+ .expect("collect rootfs facts");
+ let archive_manifest = ArtifactManifest::collect_archive(&artifact).expect("collect archive facts");
+
+ assert_eq!(rootfs_manifest.files, archive_manifest.files);
+ assert!(rootfs_manifest.files.iter().any(|record| {
+ record == &FileRecord::hardlink("usr/bin/controller-link", "usr/bin/controller")
+ }));
+}
+
+#[test]
fn normalizes_dot_prefixed_paths_from_a_legacy_tree_archive() {
let fixture = tempdir().expect("temporary directory");
let rootfs = fixture.path().join("rootfs");