this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 157 lines 4.8 kB view raw
1use assert_cmd::prelude::*; 2use assert_fs::prelude::*; 3use predicates::prelude::*; 4use std::process::Command; 5 6mod common; 7use common::*; 8 9/// `cmprss tar --append` grows an existing tar archive with new entries and 10/// the resulting archive extracts both original and appended files. 11#[test] 12fn tar_append_adds_entry() -> Result<(), Box<dyn std::error::Error>> { 13 let original = create_test_file("original.txt", "original contents")?; 14 let extra = create_test_file("extra.txt", "appended contents")?; 15 let working_dir = create_working_dir()?; 16 let archive = working_dir.child("archive.tar"); 17 18 Command::cargo_bin("cmprss")? 19 .arg("tar") 20 .arg(original.path()) 21 .arg(archive.path()) 22 .assert() 23 .success(); 24 archive.assert(predicate::path::is_file()); 25 26 Command::cargo_bin("cmprss")? 27 .arg("tar") 28 .arg("--append") 29 .arg(extra.path()) 30 .arg(archive.path()) 31 .assert() 32 .success(); 33 34 Command::cargo_bin("cmprss")? 35 .arg("tar") 36 .arg("--extract") 37 .arg(archive.path()) 38 .arg(working_dir.path()) 39 .assert() 40 .success(); 41 42 assert_files_equal(original.path(), &working_dir.child("original.txt")); 43 assert_files_equal(extra.path(), &working_dir.child("extra.txt")); 44 Ok(()) 45} 46 47/// `cmprss zip --append` grows an existing zip archive with new entries. 48#[test] 49fn zip_append_adds_entry() -> Result<(), Box<dyn std::error::Error>> { 50 let original = create_test_file("original.txt", "original contents")?; 51 let extra = create_test_file("extra.txt", "appended contents")?; 52 let working_dir = create_working_dir()?; 53 let archive = working_dir.child("archive.zip"); 54 55 Command::cargo_bin("cmprss")? 56 .arg("zip") 57 .arg(original.path()) 58 .arg(archive.path()) 59 .assert() 60 .success(); 61 archive.assert(predicate::path::is_file()); 62 63 Command::cargo_bin("cmprss")? 64 .arg("zip") 65 .arg("--append") 66 .arg(extra.path()) 67 .arg(archive.path()) 68 .assert() 69 .success(); 70 71 Command::cargo_bin("cmprss")? 72 .arg("zip") 73 .arg("--extract") 74 .arg(archive.path()) 75 .arg(working_dir.path()) 76 .assert() 77 .success(); 78 79 assert_files_equal(original.path(), &working_dir.child("original.txt")); 80 assert_files_equal(extra.path(), &working_dir.child("extra.txt")); 81 Ok(()) 82} 83 84/// Appending to a stream codec (e.g. gzip) must fail cleanly — there's no 85/// notion of "entries" in a stream format. 86#[test] 87fn gzip_append_fails() -> Result<(), Box<dyn std::error::Error>> { 88 let working_dir = create_working_dir()?; 89 let archive = working_dir.child("data.gz"); 90 let input = create_test_file("data.txt", "hello")?; 91 92 // Create a valid .gz to append to. 93 Command::cargo_bin("cmprss")? 94 .arg("gzip") 95 .arg(input.path()) 96 .arg(archive.path()) 97 .assert() 98 .success(); 99 100 let extra = create_test_file("extra.txt", "more")?; 101 Command::cargo_bin("cmprss")? 102 .arg("gzip") 103 .arg("--append") 104 .arg(extra.path()) 105 .arg(archive.path()) 106 .assert() 107 .failure() 108 .stderr(predicate::str::contains("do not support --append")); 109 Ok(()) 110} 111 112/// Appending to a compound pipeline like `tar.gz` must fail — it would 113/// require decompressing and recompressing the whole archive. 114#[test] 115fn tar_gz_append_fails() -> Result<(), Box<dyn std::error::Error>> { 116 let working_dir = create_working_dir()?; 117 let archive = working_dir.child("archive.tar.gz"); 118 let input = create_test_file("data.txt", "hello")?; 119 120 Command::cargo_bin("cmprss")? 121 .arg("tar.gz") 122 .arg(input.path()) 123 .arg(archive.path()) 124 .assert() 125 .success(); 126 127 let extra = create_test_file("extra.txt", "more")?; 128 Command::cargo_bin("cmprss")? 129 .arg("tar.gz") 130 .arg("--append") 131 .arg(extra.path()) 132 .arg(archive.path()) 133 .assert() 134 .failure() 135 .stderr(predicate::str::contains("compound archive")); 136 Ok(()) 137} 138 139/// `--append` with a non-existent target must error rather than create a new 140/// archive. 141#[test] 142fn tar_append_missing_target_errors() -> Result<(), Box<dyn std::error::Error>> { 143 let working_dir = create_working_dir()?; 144 let missing = working_dir.child("missing.tar"); 145 let extra = create_test_file("extra.txt", "x")?; 146 147 // Non-existent trailing path is normally treated as the output to create; 148 // --append should reject it instead. 149 Command::cargo_bin("cmprss")? 150 .arg("tar") 151 .arg("--append") 152 .arg(extra.path()) 153 .arg(missing.path()) 154 .assert() 155 .failure(); 156 Ok(()) 157}