diff options
Diffstat (limited to 'tests/compare.rs')
| -rw-r--r-- | tests/compare.rs | 28 |
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"); |