Skip to content

Commit a6537f0

Browse files
committed
✅ Refresh owner metadata fixtures
1 parent 472dac1 commit a6537f0

8 files changed

Lines changed: 86 additions & 53 deletions

File tree

cli/tests/cli/migrate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
mod acl_0_19_1;
2-
mod fprm_to_owner_facet;
2+
mod fprm_0_33_0;

cli/tests/cli/migrate/fprm_to_owner_facet.rs renamed to cli/tests/cli/migrate/fprm_0_33_0.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use portable_network_archive::cli;
55
use std::collections::BTreeMap;
66

77
const PERMISSION_MODE_BITS: u16 = 0o7777;
8+
const LEGACY_FIXTURE: &str = "migrate_fprm_0_33_0/0.33.0/zstd_keep_all.pna";
89

910
struct Captured {
1011
uid: u64,
@@ -24,10 +25,10 @@ struct Captured {
2425
#[allow(deprecated)]
2526
fn migrate_converts_fprm_to_owner_facet() {
2627
setup();
27-
TestResources::extract_in("zstd_keep_all.pna", "migrate_fprm_to_owner_facet/").unwrap();
28+
TestResources::extract_in("0.33.0/zstd_keep_all.pna", "migrate_fprm_0_33_0/").unwrap();
2829

2930
let mut pre: BTreeMap<String, Captured> = BTreeMap::new();
30-
archive::for_each_entry("migrate_fprm_to_owner_facet/zstd_keep_all.pna", |entry| {
31+
archive::for_each_entry(LEGACY_FIXTURE, |entry| {
3132
let path = entry.header().path().to_string();
3233
let meta = entry.metadata();
3334
let p = meta
@@ -54,16 +55,16 @@ fn migrate_converts_fprm_to_owner_facet() {
5455
"experimental",
5556
"migrate",
5657
"-f",
57-
"migrate_fprm_to_owner_facet/zstd_keep_all.pna",
58+
LEGACY_FIXTURE,
5859
"--output",
59-
"migrate_fprm_to_owner_facet/migrated.pna",
60+
"migrate_fprm_0_33_0/migrated.pna",
6061
])
6162
.unwrap()
6263
.execute()
6364
.unwrap();
6465

6566
let mut post_count = 0usize;
66-
archive::for_each_entry("migrate_fprm_to_owner_facet/migrated.pna", |entry| {
67+
archive::for_each_entry("migrate_fprm_0_33_0/migrated.pna", |entry| {
6768
post_count += 1;
6869
let path = entry.header().path().to_string();
6970
let meta = entry.metadata();

cli/tests/cli/stdio/archive_source_uid_override.rs

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ use crate::utils::{EmbedExt, TestResources, archive, setup};
22
use assert_cmd::cargo::cargo_bin_cmd;
33
use std::path::PathBuf;
44

5-
/// Precondition: An fPRM-only archive is used as an `@archive` transform source.
5+
/// Precondition: An owner-facet archive is used as an `@archive` transform source.
66
/// Action: Run `experimental stdio --create` with a `--uid` ownership override.
77
/// Expectation: Each transformed entry carries the overridden owner uid as an
8-
/// owner-facet value, and the legacy fPRM chunk is NOT also emitted (no
9-
/// fPRM/owner-facet coexistence).
8+
/// owner-facet value while preserving the other owner facets, and the legacy
9+
/// fPRM chunk is not emitted.
1010
#[test]
1111
#[allow(deprecated)]
1212
fn stdio_archive_source_uid_override_drops_fprm() {
@@ -15,17 +15,29 @@ fn stdio_archive_source_uid_override_drops_fprm() {
1515
let base = PathBuf::from("stdio_archive_source_uid_override");
1616
TestResources::extract_in("zstd_keep_all.pna", &base).unwrap();
1717

18-
let mut pre_count = 0usize;
18+
let mut pre = Vec::new();
1919
archive::for_each_entry(base.join("zstd_keep_all.pna"), |entry| {
20-
pre_count += 1;
20+
let meta = entry.metadata();
2121
assert!(
22-
entry.metadata().permission().is_some(),
23-
"fixture entry {} should carry fPRM permission",
22+
meta.permission().is_none(),
23+
"fixture entry {} should not carry fPRM permission",
2424
entry.header().path()
2525
);
26+
assert!(
27+
meta.owner_uid().is_some() && meta.permission_mode().is_some(),
28+
"fixture entry {} should carry owner facets",
29+
entry.header().path()
30+
);
31+
pre.push((
32+
entry.header().path().to_string(),
33+
meta.owner_gid().map(|v| v.get()),
34+
meta.owner_user_name().map(|v| v.as_str().to_owned()),
35+
meta.owner_group_name().map(|v| v.as_str().to_owned()),
36+
meta.permission_mode().map(|v| v.get()),
37+
));
2638
})
2739
.unwrap();
28-
assert!(pre_count > 0, "source archive should contain entries");
40+
assert!(!pre.is_empty(), "source archive should contain entries");
2941

3042
let output_archive = base.join("output.pna");
3143
cargo_bin_cmd!("pna")
@@ -47,24 +59,35 @@ fn stdio_archive_source_uid_override_drops_fprm() {
4759
.assert()
4860
.success();
4961

50-
let mut post_count = 0usize;
62+
let mut post = Vec::new();
5163
archive::for_each_entry(&output_archive, |entry| {
52-
post_count += 1;
5364
let path = entry.header().path().to_string();
5465
let meta = entry.metadata();
5566
assert!(
5667
meta.permission().is_none(),
57-
"fPRM must not coexist with owner-facet after override for {path}"
68+
"fPRM must not be emitted after owner override for {path}"
5869
);
5970
assert_eq!(
6071
meta.owner_uid().map(|v| v.get()),
6172
Some(4242),
6273
"overridden uid should be emitted as owner-facet for {path}"
6374
);
75+
post.push((
76+
path,
77+
meta.owner_gid().map(|v| v.get()),
78+
meta.owner_user_name().map(|v| v.as_str().to_owned()),
79+
meta.owner_group_name().map(|v| v.as_str().to_owned()),
80+
meta.permission_mode().map(|v| v.get()),
81+
));
6482
})
6583
.unwrap();
6684
assert_eq!(
67-
post_count, pre_count,
85+
post.len(),
86+
pre.len(),
6887
"transform should preserve all entries"
6988
);
89+
assert_eq!(
90+
post, pre,
91+
"uid override should preserve non-uid owner facets"
92+
);
7093
}

cli/tests/cli/strip.rs

Lines changed: 44 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ fn strip_removes_unspecified_metadata() {
1919
let path = entry.header().path().to_string();
2020
let meta = entry.metadata();
2121
assert!(
22-
meta.permission().is_some() && meta.modified().is_some(),
23-
"entry {path} should have both permission and timestamp before strip"
22+
meta.permission_mode().is_some() && meta.modified().is_some(),
23+
"entry {path} should have both permission mode and timestamp before strip"
2424
);
2525
pre_timestamps.insert(path, meta.modified());
2626
})
@@ -76,31 +76,44 @@ fn strip_removes_unspecified_metadata() {
7676
);
7777
}
7878

79-
/// Precondition: An fPRM-only archive carries ownership metadata.
79+
/// Precondition: An archive carries ownership metadata as owner facets.
8080
/// Action: Run `pna strip --keep-permission`.
81-
/// Expectation: Ownership is preserved as owner-facet chunks (rescued from fPRM); the legacy fPRM chunk is not emitted.
81+
/// Expectation: Ownership is preserved as owner-facet chunks; the legacy fPRM chunk is not emitted.
8282
#[test]
8383
#[allow(deprecated)]
84-
fn strip_keep_permission_rescues_fprm_to_owner_facet() {
84+
fn strip_keep_permission_preserves_owner_facets() {
85+
struct OwnerFacets {
86+
uid: Option<u64>,
87+
gid: Option<u64>,
88+
uname: Option<String>,
89+
gname: Option<String>,
90+
mode: Option<u16>,
91+
}
92+
8593
setup();
8694
TestResources::extract_in("zstd_keep_all.pna", "strip_keep_perm/").unwrap();
8795

88-
let mut pre: BTreeMap<String, (u64, u64, String, String, u16)> = BTreeMap::new();
96+
let mut pre: BTreeMap<String, OwnerFacets> = BTreeMap::new();
8997
archive::for_each_entry("strip_keep_perm/zstd_keep_all.pna", |entry| {
9098
let path = entry.header().path().to_string();
91-
let p = entry
92-
.metadata()
93-
.permission()
94-
.expect("fixture entry should carry fPRM permission");
99+
let meta = entry.metadata();
100+
assert!(
101+
meta.permission().is_none(),
102+
"fixture entry should not carry fPRM permission for {path}"
103+
);
104+
assert!(
105+
meta.permission_mode().is_some(),
106+
"fixture entry should carry owner-facet permission mode for {path}"
107+
);
95108
pre.insert(
96109
path,
97-
(
98-
p.uid(),
99-
p.gid(),
100-
p.uname().to_string(),
101-
p.gname().to_string(),
102-
p.permissions(),
103-
),
110+
OwnerFacets {
111+
uid: meta.owner_uid().map(|v| v.get()),
112+
gid: meta.owner_gid().map(|v| v.get()),
113+
uname: meta.owner_user_name().map(|v| v.as_str().to_owned()),
114+
gname: meta.owner_group_name().map(|v| v.as_str().to_owned()),
115+
mode: meta.permission_mode().map(|v| v.get()),
116+
},
104117
);
105118
})
106119
.unwrap();
@@ -123,40 +136,36 @@ fn strip_keep_permission_rescues_fprm_to_owner_facet() {
123136
post_count += 1;
124137
let path = entry.header().path().to_string();
125138
let meta = entry.metadata();
126-
let (uid, gid, uname, gname, mode) = pre
139+
let expected = pre
127140
.get(&path)
128141
.unwrap_or_else(|| panic!("unexpected entry after strip: {path}"));
129142
assert!(
130143
meta.permission().is_none(),
131144
"fPRM must not be emitted after strip --keep-permission for {path}"
132145
);
133-
assert_eq!(meta.owner_uid().map(|v| v.get()), Some(*uid), "uid {path}");
134-
assert_eq!(meta.owner_gid().map(|v| v.get()), Some(*gid), "gid {path}");
135-
let expected_uname = if uname.is_empty() {
136-
None
137-
} else {
138-
Some(uname.as_str())
139-
};
140-
let expected_gname = if gname.is_empty() {
141-
None
142-
} else {
143-
Some(gname.as_str())
144-
};
146+
assert_eq!(
147+
meta.owner_uid().map(|v| v.get()),
148+
expected.uid,
149+
"uid {path}"
150+
);
151+
assert_eq!(
152+
meta.owner_gid().map(|v| v.get()),
153+
expected.gid,
154+
"gid {path}"
155+
);
145156
assert_eq!(
146157
meta.owner_user_name().map(|v| v.as_str()),
147-
expected_uname,
158+
expected.uname.as_deref(),
148159
"uname {path}"
149160
);
150161
assert_eq!(
151162
meta.owner_group_name().map(|v| v.as_str()),
152-
expected_gname,
163+
expected.gname.as_deref(),
153164
"gname {path}"
154165
);
155-
// `PermissionMode::from` masks reserved bits outside `0o7777`
156-
// (file-type bits in the legacy fPRM `st_mode`) to 0 on construction.
157166
assert_eq!(
158167
meta.permission_mode().map(|v| v.get()),
159-
Some(*mode & 0o7777),
168+
expected.mode,
160169
"mode {path}"
161170
);
162171
})
114 KB
Binary file not shown.
112 KB
Binary file not shown.

resources/test/zstd_keep_all.pna

768 Bytes
Binary file not shown.
432 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)