Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix ls: test_ls_allocation_size fails on filesystem f2fs (android) #6076

Merged
merged 2 commits into from
Mar 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ concurrency:

env:
TERMUX: v0.118.0
KEY_POSTFIX: nextest+rustc-hash+adb+sshd+upgrade+XGB+inc17
KEY_POSTFIX: nextest+rustc-hash+adb+sshd+upgrade+XGB+inc18
COMMON_EMULATOR_OPTIONS: -no-window -noaudio -no-boot-anim -camera-back none -gpu swiftshader_indirect
EMULATOR_DISK_SIZE: 12GB
EMULATOR_HEAP_SIZE: 2048M
Expand Down
60 changes: 43 additions & 17 deletions tests/by-util/test_ls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,21 @@ fn test_ls_ordering() {
.stdout_matches(&Regex::new("some-dir1:\\ntotal 0").unwrap());
}

#[cfg(all(unix, feature = "df", not(target_os = "freebsd")))]
fn get_filesystem_type(scene: &TestScenario, path: &Path) -> String {
let mut cmd = scene.ccmd("df");
cmd.args(&["-PT"]).arg(path);
let output = cmd.succeeds();
let stdout_str = String::from_utf8_lossy(output.stdout());
println!("output of stat call ({:?}):\n{}", cmd, stdout_str);
let regex_str = r#"Filesystem\s+Type\s+.+[\r\n]+([^\s]+)\s+(?<fstype>[^\s]+)\s+"#;
let regex = Regex::new(regex_str).unwrap();
let m = regex.captures(&stdout_str).unwrap();
let fstype = m["fstype"].to_owned();
println!("detected fstype: {}", fstype);
fstype
}

#[cfg(all(feature = "truncate", feature = "dd"))]
#[test] // FIXME: fix this test for FreeBSD
fn test_ls_allocation_size() {
Expand All @@ -81,7 +96,7 @@ fn test_ls_allocation_size() {
at.mkdir("some-dir1");
at.touch("some-dir1/empty-file");

#[cfg(unix)]
#[cfg(all(unix, feature = "df"))]
{
scene
.ccmd("truncate")
Expand Down Expand Up @@ -115,13 +130,24 @@ fn test_ls_allocation_size() {
.succeeds()
.stdout_matches(&Regex::new("[^ ] 2 [^ ]").unwrap());

#[cfg(not(target_os = "freebsd"))]
let (zero_file_size_4k, zero_file_size_1k, zero_file_size_8k, zero_file_size_4m) =
match get_filesystem_type(&scene, &scene.fixtures.subdir).as_str() {
// apparently f2fs (flash friendly fs) accepts small overhead for better performance
"f2fs" => (4100, 1025, 8200, "4.1M"),
_ => (4096, 1024, 8192, "4.0M"),
};

#[cfg(not(target_os = "freebsd"))]
scene
.ucmd()
.arg("-s1")
.arg("some-dir1")
.succeeds()
.stdout_is("total 4096\n 0 empty-file\n 0 file-with-holes\n4096 zero-file\n");
.stdout_is(format!(
"total {zero_file_size_4k}\n 0 empty-file\n 0 file-with-holes\n\
{zero_file_size_4k} zero-file\n"
));

scene
.ucmd()
Expand All @@ -138,7 +164,7 @@ fn test_ls_allocation_size() {
.arg("some-dir1")
.succeeds()
.stdout_contains("0 empty-file")
.stdout_contains("4096 zero-file");
.stdout_contains(format!("{zero_file_size_4k} zero-file"));

// Test alignment of different block sized files
let res = scene.ucmd().arg("-si1").arg("some-dir1").succeeds();
Expand Down Expand Up @@ -185,10 +211,10 @@ fn test_ls_allocation_size() {
.arg("-s1")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 1024")
.stdout_contains(format!("total {zero_file_size_1k}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("1024 zero-file");
.stdout_contains(format!("{zero_file_size_1k} zero-file"));

#[cfg(not(target_os = "freebsd"))]
scene
Expand All @@ -210,10 +236,10 @@ fn test_ls_allocation_size() {
.arg("-s1")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 1024")
.stdout_contains(format!("total {zero_file_size_1k}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("1024 zero-file");
.stdout_contains(format!("{zero_file_size_1k} zero-file"));

#[cfg(not(target_os = "freebsd"))]
scene
Expand All @@ -222,10 +248,10 @@ fn test_ls_allocation_size() {
.arg("-s1")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 8192")
.stdout_contains(format!("total {zero_file_size_8k}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("8192 zero-file");
.stdout_contains(format!("{zero_file_size_8k} zero-file"));

// -k should make 'ls' ignore the env var
#[cfg(not(target_os = "freebsd"))]
Expand All @@ -235,10 +261,10 @@ fn test_ls_allocation_size() {
.arg("-s1k")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 4096")
.stdout_contains(format!("total {zero_file_size_4k}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("4096 zero-file");
.stdout_contains(format!("{zero_file_size_4k} zero-file"));

// but manually specified blocksize overrides -k
#[cfg(not(target_os = "freebsd"))]
Expand All @@ -248,10 +274,10 @@ fn test_ls_allocation_size() {
.arg("--block-size=4K")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 1024")
.stdout_contains(format!("total {zero_file_size_1k}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("1024 zero-file");
.stdout_contains(format!("{zero_file_size_1k} zero-file"));

#[cfg(not(target_os = "freebsd"))]
scene
Expand All @@ -260,10 +286,10 @@ fn test_ls_allocation_size() {
.arg("--block-size=4K")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 1024")
.stdout_contains(format!("total {zero_file_size_1k}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("1024 zero-file");
.stdout_contains(format!("{zero_file_size_1k} zero-file"));

// si option should always trump the human-readable option
#[cfg(not(target_os = "freebsd"))]
Expand All @@ -285,10 +311,10 @@ fn test_ls_allocation_size() {
.arg("--block-size=human-readable")
.arg("some-dir1")
.succeeds()
.stdout_contains("total 4.0M")
.stdout_contains(format!("total {zero_file_size_4m}"))
.stdout_contains("0 empty-file")
.stdout_contains("0 file-with-holes")
.stdout_contains("4.0M zero-file");
.stdout_contains(format!("{zero_file_size_4m} zero-file"));

#[cfg(not(target_os = "freebsd"))]
scene
Expand Down
9 changes: 3 additions & 6 deletions util/android-commands.sh
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,6 @@ run_command_via_ssh() {

test_ssh_connection() {
run_command_via_ssh echo ssh connection is working
run_command_via_ssh free -mh
}

# takes a local (on runner side) script file and runs it via ssh on the virtual android device. forwards return code.
Expand Down Expand Up @@ -509,7 +508,7 @@ snapshot() {

apt_upgrade_all_packages

install_packages_via_ssh_using_apt "rust binutils openssl tar"
install_packages_via_ssh_using_apt "rust binutils openssl tar mount-utils"

echo "Read /proc/cpuinfo"
run_command_via_ssh "cat /proc/cpuinfo"
Expand Down Expand Up @@ -573,8 +572,7 @@ build() {

reinit_ssh_connection

echo "Read /proc/cpuinfo"
run_command_via_ssh "cat /proc/cpuinfo"
run_script_file_via_ssh "$this_repo/util/android-scripts/collect-info.sh"

command="export CARGO_TERM_COLOR=always;
export CARGO_INCREMENTAL=0; \
Expand All @@ -589,8 +587,7 @@ tests() {

reinit_ssh_connection

echo "Read /proc/cpuinfo"
run_command_via_ssh "cat /proc/cpuinfo"
run_script_file_via_ssh "$this_repo/util/android-scripts/collect-info.sh"

run_script_file_via_ssh "$this_repo/util/android-scripts/run-tests.sh" || return

Expand Down
7 changes: 7 additions & 0 deletions util/android-scripts/collect-info.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

# spell-checker:ignore nextest watchplus PIPESTATUS

echo "system resources - RAM:"
free -hm
echo "system resources - CPU:"
lscpu
echo "system resources - file systems:"
mount

echo "$HOME"
PATH=$HOME/.cargo/bin:$PATH
export PATH
Expand Down
Loading