Skip to content

Commit fb671f1

Browse files
committed
add new tests for filesizes
1 parent 7c3ac94 commit fb671f1

File tree

1 file changed

+287
-0
lines changed

1 file changed

+287
-0
lines changed

tests/testsuite/package.rs

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2469,3 +2469,290 @@ version = "0.1.0"
24692469
&[("Cargo.toml", &rewritten_toml)],
24702470
);
24712471
}
2472+
2473+
fn verify_packaged_status_line(
2474+
output: std::process::Output,
2475+
num_files: usize,
2476+
uncompressed_size: usize,
2477+
compressed_size: usize,
2478+
) {
2479+
let stderr = String::from_utf8(output.stderr).unwrap();
2480+
let mut packaged_lines = stderr
2481+
.lines()
2482+
.filter(|line| line.trim().starts_with("Packaged"));
2483+
let packaged_line = packaged_lines
2484+
.next()
2485+
.expect("`Packaged` status line should appear in stderr");
2486+
assert!(
2487+
packaged_lines.next().is_none(),
2488+
"Only one `Packaged` status line should appear in stderr"
2489+
);
2490+
let size_info = packaged_line.trim().trim_start_matches("Packaged").trim();
2491+
let uncompressed = cargo::util::format_bytes(uncompressed_size as f32);
2492+
let compressed = cargo::util::format_bytes(compressed_size as f32);
2493+
let expected = format!(
2494+
"{} files, {:.1}{}B ({:.1}{}B compressed)",
2495+
num_files, uncompressed.0, uncompressed.1, compressed.0, compressed.1
2496+
);
2497+
assert_eq!(size_info, expected);
2498+
}
2499+
2500+
#[cargo_test]
2501+
fn basic_filesizes() {
2502+
let cargo_toml_orig_contents = r#"
2503+
[package]
2504+
name = "foo"
2505+
version = "0.0.1"
2506+
authors = []
2507+
exclude = ["*.txt"]
2508+
license = "MIT"
2509+
description = "foo"
2510+
"#;
2511+
let main_rs_contents = r#"fn main() { println!("🦀"); }"#;
2512+
let cargo_toml_contents = format!(
2513+
r#"{}
2514+
[package]
2515+
name = "foo"
2516+
version = "0.0.1"
2517+
authors = []
2518+
exclude = ["*.txt"]
2519+
description = "foo"
2520+
license = "MIT"
2521+
"#,
2522+
cargo::core::package::MANIFEST_PREAMBLE
2523+
);
2524+
let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2525+
# It is not intended for manual editing.
2526+
version = 3
2527+
2528+
[[package]]
2529+
name = "foo"
2530+
version = "0.0.1"
2531+
"#;
2532+
let p = project()
2533+
.file("Cargo.toml", cargo_toml_orig_contents)
2534+
.file("src/main.rs", main_rs_contents)
2535+
.file("src/bar.txt", "Ignored text file contents") // should be ignored when packaging
2536+
.build();
2537+
2538+
let uncompressed_size = cargo_toml_orig_contents.len()
2539+
+ main_rs_contents.len()
2540+
+ cargo_toml_contents.len()
2541+
+ cargo_lock_contents.len();
2542+
let output = p.cargo("package").exec_with_output().unwrap();
2543+
2544+
assert!(p.root().join("target/package/foo-0.0.1.crate").is_file());
2545+
p.cargo("package -l")
2546+
.with_stdout(
2547+
"\
2548+
Cargo.lock
2549+
Cargo.toml
2550+
Cargo.toml.orig
2551+
src/main.rs
2552+
",
2553+
)
2554+
.run();
2555+
p.cargo("package").with_stdout("").run();
2556+
2557+
let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap();
2558+
let compressed_size = f.metadata().unwrap().len() as usize;
2559+
verify_packaged_status_line(output, 4, uncompressed_size, compressed_size);
2560+
validate_crate_contents(
2561+
f,
2562+
"foo-0.0.1.crate",
2563+
&["Cargo.lock", "Cargo.toml", "Cargo.toml.orig", "src/main.rs"],
2564+
&[
2565+
("Cargo.lock", cargo_lock_contents),
2566+
("Cargo.toml", &cargo_toml_contents),
2567+
("Cargo.toml.orig", cargo_toml_orig_contents),
2568+
("src/main.rs", main_rs_contents),
2569+
],
2570+
);
2571+
}
2572+
2573+
#[cargo_test]
2574+
fn larger_filesizes() {
2575+
let cargo_toml_orig_contents = r#"
2576+
[package]
2577+
name = "foo"
2578+
version = "0.0.1"
2579+
authors = []
2580+
license = "MIT"
2581+
description = "foo"
2582+
"#;
2583+
let lots_of_crabs = std::iter::repeat("🦀").take(1337).collect::<String>();
2584+
let main_rs_contents = format!(r#"fn main() {{ println!("{}"); }}"#, lots_of_crabs);
2585+
let bar_txt_contents = "This file is relatively uncompressible, to increase the compressed
2586+
package size beyond 1KiB.
2587+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
2588+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
2589+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
2590+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
2591+
sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
2592+
laborum.";
2593+
let cargo_toml_contents = format!(
2594+
r#"{}
2595+
[package]
2596+
name = "foo"
2597+
version = "0.0.1"
2598+
authors = []
2599+
description = "foo"
2600+
license = "MIT"
2601+
"#,
2602+
cargo::core::package::MANIFEST_PREAMBLE
2603+
);
2604+
let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2605+
# It is not intended for manual editing.
2606+
version = 3
2607+
2608+
[[package]]
2609+
name = "foo"
2610+
version = "0.0.1"
2611+
"#;
2612+
let p = project()
2613+
.file("Cargo.toml", cargo_toml_orig_contents)
2614+
.file("src/main.rs", &main_rs_contents)
2615+
.file("src/bar.txt", bar_txt_contents)
2616+
.build();
2617+
2618+
let uncompressed_size = cargo_toml_orig_contents.len()
2619+
+ main_rs_contents.len()
2620+
+ cargo_toml_contents.len()
2621+
+ cargo_lock_contents.len()
2622+
+ bar_txt_contents.len();
2623+
2624+
let output = p.cargo("package").exec_with_output().unwrap();
2625+
assert!(p.root().join("target/package/foo-0.0.1.crate").is_file());
2626+
p.cargo("package -l")
2627+
.with_stdout(
2628+
"\
2629+
Cargo.lock
2630+
Cargo.toml
2631+
Cargo.toml.orig
2632+
src/bar.txt
2633+
src/main.rs
2634+
",
2635+
)
2636+
.run();
2637+
p.cargo("package").with_stdout("").run();
2638+
2639+
let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap();
2640+
let compressed_size = f.metadata().unwrap().len() as usize;
2641+
verify_packaged_status_line(output, 5, uncompressed_size, compressed_size);
2642+
validate_crate_contents(
2643+
f,
2644+
"foo-0.0.1.crate",
2645+
&[
2646+
"Cargo.lock",
2647+
"Cargo.toml",
2648+
"Cargo.toml.orig",
2649+
"src/bar.txt",
2650+
"src/main.rs",
2651+
],
2652+
&[
2653+
("Cargo.lock", cargo_lock_contents),
2654+
("Cargo.toml", &cargo_toml_contents),
2655+
("Cargo.toml.orig", cargo_toml_orig_contents),
2656+
("src/bar.txt", bar_txt_contents),
2657+
("src/main.rs", &main_rs_contents),
2658+
],
2659+
);
2660+
}
2661+
2662+
#[cargo_test]
2663+
fn symlink_filesizes() {
2664+
if !symlink_supported() {
2665+
return;
2666+
}
2667+
2668+
let cargo_toml_orig_contents = r#"
2669+
[package]
2670+
name = "foo"
2671+
version = "0.0.1"
2672+
authors = []
2673+
license = "MIT"
2674+
description = "foo"
2675+
"#;
2676+
let lots_of_crabs = std::iter::repeat("🦀").take(1337).collect::<String>();
2677+
let main_rs_contents = format!(r#"fn main() {{ println!("{}"); }}"#, lots_of_crabs);
2678+
let bar_txt_contents = "This file is relatively uncompressible, to increase the compressed
2679+
package size beyond 1KiB.
2680+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt
2681+
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
2682+
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
2683+
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
2684+
sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est
2685+
laborum.";
2686+
let cargo_toml_contents = format!(
2687+
r#"{}
2688+
[package]
2689+
name = "foo"
2690+
version = "0.0.1"
2691+
authors = []
2692+
description = "foo"
2693+
license = "MIT"
2694+
"#,
2695+
cargo::core::package::MANIFEST_PREAMBLE
2696+
);
2697+
let cargo_lock_contents = r#"# This file is automatically @generated by Cargo.
2698+
# It is not intended for manual editing.
2699+
version = 3
2700+
2701+
[[package]]
2702+
name = "foo"
2703+
version = "0.0.1"
2704+
"#;
2705+
2706+
let p = project()
2707+
.file("Cargo.toml", cargo_toml_orig_contents)
2708+
.file("src/main.rs", &main_rs_contents)
2709+
.file("bla/bar.txt", bar_txt_contents)
2710+
.symlink_dir("bla", "foo")
2711+
.build();
2712+
2713+
let uncompressed_size = cargo_toml_orig_contents.len()
2714+
+ main_rs_contents.len()
2715+
+ cargo_toml_contents.len()
2716+
+ cargo_lock_contents.len()
2717+
+ bar_txt_contents.len() * 2;
2718+
2719+
let output = p.cargo("package").exec_with_output().unwrap();
2720+
assert!(p.root().join("target/package/foo-0.0.1.crate").is_file());
2721+
p.cargo("package -l")
2722+
.with_stdout(
2723+
"\
2724+
Cargo.lock
2725+
Cargo.toml
2726+
Cargo.toml.orig
2727+
bla/bar.txt
2728+
foo/bar.txt
2729+
src/main.rs
2730+
",
2731+
)
2732+
.run();
2733+
p.cargo("package").with_stdout("").run();
2734+
2735+
let f = File::open(&p.root().join("target/package/foo-0.0.1.crate")).unwrap();
2736+
let compressed_size = f.metadata().unwrap().len() as usize;
2737+
verify_packaged_status_line(output, 6, uncompressed_size, compressed_size);
2738+
validate_crate_contents(
2739+
f,
2740+
"foo-0.0.1.crate",
2741+
&[
2742+
"Cargo.lock",
2743+
"Cargo.toml",
2744+
"Cargo.toml.orig",
2745+
"bla/bar.txt",
2746+
"foo/bar.txt",
2747+
"src/main.rs",
2748+
],
2749+
&[
2750+
("Cargo.lock", cargo_lock_contents),
2751+
("Cargo.toml", &cargo_toml_contents),
2752+
("Cargo.toml.orig", cargo_toml_orig_contents),
2753+
("bla/bar.txt", bar_txt_contents),
2754+
("foo/bar.txt", bar_txt_contents),
2755+
("src/main.rs", &main_rs_contents),
2756+
],
2757+
);
2758+
}

0 commit comments

Comments
 (0)