Skip to content

Commit 093f864

Browse files
committed
Support FreeBSD-specific behavior in statfs interop test.
Filed https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253424 for the behavior of `(struct statfs*)->f_iosize', which is not being set to the value returned by the filesystem server. issue: #5
1 parent 7406126 commit 093f864

File tree

1 file changed

+90
-42
lines changed

1 file changed

+90
-42
lines changed

fuse/src/protocol/statfs/statfs_interop_test.rs

+90-42
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ impl fuse::FuseHandlers for TestFS {
6060
) {
6161
self.requests.send(format!("{:#?}", request)).unwrap();
6262
let mut response = fuse::StatfsResponse::new();
63-
response.set_block_count(10);
64-
response.set_block_size(20);
65-
response.set_blocks_available(30);
66-
response.set_blocks_free(40);
67-
response.set_fragment_size(50);
68-
response.set_inode_count(60);
69-
response.set_inodes_free(70);
70-
response.set_max_filename_length(80);
63+
response.set_block_size(10);
64+
response.set_block_count(20);
65+
response.set_blocks_free(30);
66+
response.set_blocks_available(40);
67+
response.set_inode_count(50);
68+
response.set_inodes_free(60);
69+
response.set_max_filename_length(70);
70+
response.set_fragment_size(80);
7171
respond.ok(&response);
7272
}
7373
}
@@ -94,15 +94,28 @@ fn statfs() {
9494
};
9595
assert_eq!(rc, 0);
9696

97+
#[cfg(target_os = "linux")]
9798
let expect = r#"statfs {
98-
f_bsize: 20,
99-
f_blocks: 10,
100-
f_bfree: 40,
101-
f_bavail: 30,
102-
f_files: 60,
103-
f_ffree: 70,
104-
f_namelen: 80,
105-
f_frsize: 50,
99+
f_bsize: 10,
100+
f_blocks: 20,
101+
f_bfree: 30,
102+
f_bavail: 40,
103+
f_files: 50,
104+
f_ffree: 60,
105+
f_namelen: 70,
106+
f_frsize: 80,
107+
}"#;
108+
// https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253424
109+
#[cfg(target_os = "freebsd")]
110+
let expect = r#"statfs {
111+
f_bsize: 80,
112+
f_iosize: 65536,
113+
f_blocks: 20,
114+
f_bfree: 30,
115+
f_bavail: 40,
116+
f_files: 50,
117+
f_ffree: 60,
118+
f_namemax: 70,
106119
}"#;
107120
let got = format!("{:#?}", &DebugStatfs(stat_buf));
108121
if let Some(diff) = diff_str(expect, &got) {
@@ -112,8 +125,13 @@ fn statfs() {
112125
});
113126
assert_eq!(requests.len(), 1);
114127

128+
#[cfg(target_os = "linux")]
115129
let expect = r#"StatfsRequest {
116130
node_id: 2,
131+
}"#;
132+
#[cfg(target_os = "freebsd")]
133+
let expect = r#"StatfsRequest {
134+
node_id: 1,
117135
}"#;
118136
if let Some(diff) = diff_str(expect, &requests[0]) {
119137
println!("{}", diff);
@@ -132,15 +150,30 @@ fn statfs_statvfs() {
132150
};
133151
assert_eq!(rc, 0);
134152

153+
#[cfg(target_os = "linux")]
154+
let expect = r#"statvfs {
155+
f_bsize: 10,
156+
f_frsize: 80,
157+
f_blocks: 20,
158+
f_bfree: 30,
159+
f_bavail: 40,
160+
f_files: 50,
161+
f_ffree: 60,
162+
f_favail: 60,
163+
f_namemax: 70,
164+
}"#;
165+
// https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253424
166+
#[cfg(target_os = "freebsd")]
135167
let expect = r#"statvfs {
136-
f_bsize: 20,
137-
f_blocks: 10,
138-
f_bfree: 40,
139-
f_bavail: 30,
140-
f_files: 60,
141-
f_ffree: 70,
142-
f_namemax: 80,
143-
f_frsize: 50,
168+
f_bsize: 65536,
169+
f_frsize: 80,
170+
f_blocks: 20,
171+
f_bfree: 30,
172+
f_bavail: 40,
173+
f_files: 50,
174+
f_ffree: 60,
175+
f_favail: 60,
176+
f_namemax: 255,
144177
}"#;
145178
let got = format!("{:#?}", &DebugStatvfs(stat_buf));
146179
if let Some(diff) = diff_str(expect, &got) {
@@ -150,8 +183,13 @@ fn statfs_statvfs() {
150183
});
151184
assert_eq!(requests.len(), 1);
152185

186+
#[cfg(target_os = "linux")]
153187
let expect = r#"StatfsRequest {
154188
node_id: 2,
189+
}"#;
190+
#[cfg(target_os = "freebsd")]
191+
let expect = r#"StatfsRequest {
192+
node_id: 1,
155193
}"#;
156194
if let Some(diff) = diff_str(expect, &requests[0]) {
157195
println!("{}", diff);
@@ -161,26 +199,35 @@ fn statfs_statvfs() {
161199

162200
struct DebugStatfs(libc::statfs);
163201

202+
#[cfg(target_os = "linux")]
164203
impl fmt::Debug for DebugStatfs {
165204
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
166-
let mut s = fmt.debug_struct("statfs");
167-
s.field("f_bsize", &self.0.f_bsize);
168-
s.field("f_blocks", &self.0.f_blocks);
169-
s.field("f_bfree", &self.0.f_bfree);
170-
s.field("f_bavail", &self.0.f_bavail);
171-
s.field("f_files", &self.0.f_files);
172-
s.field("f_ffree", &self.0.f_ffree);
205+
fmt.debug_struct("statfs")
206+
.field("f_bsize", &self.0.f_bsize)
207+
.field("f_blocks", &self.0.f_blocks)
208+
.field("f_bfree", &self.0.f_bfree)
209+
.field("f_bavail", &self.0.f_bavail)
210+
.field("f_files", &self.0.f_files)
211+
.field("f_ffree", &self.0.f_ffree)
212+
.field("f_namelen", &self.0.f_namelen)
213+
.field("f_frsize", &self.0.f_frsize)
214+
.finish()
215+
}
216+
}
173217

174-
#[cfg(target_os = "linux")]
175-
{
176-
s.field("f_namelen", &self.0.f_namelen);
177-
s.field("f_frsize", &self.0.f_frsize);
178-
}
179-
#[cfg(target_os = "freebsd")]
180-
{
181-
s.field("f_namemax", &self.0.f_namemax);
182-
}
183-
s.finish()
218+
#[cfg(target_os = "freebsd")]
219+
impl fmt::Debug for DebugStatfs {
220+
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
221+
fmt.debug_struct("statfs")
222+
.field("f_bsize", &self.0.f_bsize)
223+
.field("f_iosize", &self.0.f_iosize)
224+
.field("f_blocks", &self.0.f_blocks)
225+
.field("f_bfree", &self.0.f_bfree)
226+
.field("f_bavail", &self.0.f_bavail)
227+
.field("f_files", &self.0.f_files)
228+
.field("f_ffree", &self.0.f_ffree)
229+
.field("f_namemax", &self.0.f_namemax)
230+
.finish()
184231
}
185232
}
186233

@@ -190,13 +237,14 @@ impl fmt::Debug for DebugStatvfs {
190237
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
191238
fmt.debug_struct("statvfs")
192239
.field("f_bsize", &self.0.f_bsize)
240+
.field("f_frsize", &self.0.f_frsize)
193241
.field("f_blocks", &self.0.f_blocks)
194242
.field("f_bfree", &self.0.f_bfree)
195243
.field("f_bavail", &self.0.f_bavail)
196244
.field("f_files", &self.0.f_files)
197245
.field("f_ffree", &self.0.f_ffree)
246+
.field("f_favail", &self.0.f_favail)
198247
.field("f_namemax", &self.0.f_namemax)
199-
.field("f_frsize", &self.0.f_frsize)
200248
.finish()
201249
}
202250
}

0 commit comments

Comments
 (0)