mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-07 12:05:46 +00:00
Add a sad Python script for Ouch testing
This commit is contained in:
parent
ceb507fd14
commit
d99d8e71d3
88
makeshift_testing.py
Executable file
88
makeshift_testing.py
Executable file
@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
"""
|
||||||
|
Little integration testing script while proper integration tests in Rust aren't implemented.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import magic, os, hashlib
|
||||||
|
|
||||||
|
def make_random_file():
|
||||||
|
with open('test-file', 'wb') as fout:
|
||||||
|
fout.write(os.urandom(2048))
|
||||||
|
|
||||||
|
def sanity_check_format(format: str):
|
||||||
|
make_random_file()
|
||||||
|
md5sum = hashlib.md5(open('test-file', 'rb').read()).hexdigest()
|
||||||
|
os.system(f"cargo run -- -i test-file -o test-file.{format}")
|
||||||
|
os.remove('test-file')
|
||||||
|
os.system(f"cargo run -- -i test-file.{format}")
|
||||||
|
if md5sum != hashlib.md5(open('test-file', 'rb').read()).hexdigest():
|
||||||
|
print("Something went wrong with tar (de)compression.")
|
||||||
|
os._exit(2)
|
||||||
|
os.remove('test-file')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
# We'll use MIME sniffing through magic numbers to
|
||||||
|
# verify if ouch is actually outputting the file formats
|
||||||
|
# that it should
|
||||||
|
|
||||||
|
m = magic.open(magic.MAGIC_MIME)
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.mkdir("testbuilds")
|
||||||
|
except OSError:
|
||||||
|
print ("Could not make testbuilds folder. Exiting.")
|
||||||
|
os._exit(2)
|
||||||
|
|
||||||
|
os.chdir("testbuilds")
|
||||||
|
|
||||||
|
m.load()
|
||||||
|
files = [
|
||||||
|
"src.tar",
|
||||||
|
"src.zip",
|
||||||
|
"src.tar.gz",
|
||||||
|
"src.tar.bz",
|
||||||
|
"src.tar.bz2",
|
||||||
|
"src.tar.lz",
|
||||||
|
"src.tar.lzma",
|
||||||
|
]
|
||||||
|
|
||||||
|
expected_mime_types = [
|
||||||
|
"application/x-tar",
|
||||||
|
"application/zip",
|
||||||
|
"application/gzip",
|
||||||
|
"application/x-bzip2",
|
||||||
|
"application/x-bzip2",
|
||||||
|
"application/x-xz",
|
||||||
|
"application/x-xz"
|
||||||
|
]
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
rv = os.system(f"cargo run -- -i ../src/ -o {file}")
|
||||||
|
if rv != 0:
|
||||||
|
print(f"Failed while compressing {file}")
|
||||||
|
|
||||||
|
for (file, expected_mime) in zip(files, expected_mime_types):
|
||||||
|
if m.file(file) != expected_mime:
|
||||||
|
print(f"Test failed at file {file}")
|
||||||
|
os._exit(2)
|
||||||
|
|
||||||
|
for (idx, file) in enumerate(files):
|
||||||
|
rv = os.system(f"cargo run -- -i {file} -o out{idx}/")
|
||||||
|
if rv != 0:
|
||||||
|
print(f"Failed while decompressing {file}")
|
||||||
|
os._exit(2)
|
||||||
|
|
||||||
|
os.chdir("..")
|
||||||
|
os.system("rm -rf testbuilds")
|
||||||
|
|
||||||
|
# We'll now verify if ouch is not altering the data it is compressing
|
||||||
|
# and decompressing
|
||||||
|
|
||||||
|
sanity_check_format("tar")
|
||||||
|
sanity_check_format("tar.gz")
|
||||||
|
sanity_check_format("tar.bz")
|
||||||
|
sanity_check_format("tar.bz2")
|
||||||
|
sanity_check_format("tar.lz")
|
||||||
|
sanity_check_format("tar.lzma")
|
@ -50,7 +50,7 @@ impl Extension {
|
|||||||
"tar" => Ok(Tar),
|
"tar" => Ok(Tar),
|
||||||
"gz" => Ok(Gzip),
|
"gz" => Ok(Gzip),
|
||||||
"bz" | "bz2" => Ok(Bzip),
|
"bz" | "bz2" => Ok(Bzip),
|
||||||
"lz" | "lzma" => Ok(Lzma),
|
"xz" | "lz" | "lzma" => Ok(Lzma),
|
||||||
other => Err(error::Error::UnknownExtensionError(other.into())),
|
other => Err(error::Error::UnknownExtensionError(other.into())),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ fn extension_from_os_str(ext: &OsStr) -> Result<CompressionFormat, error::Error>
|
|||||||
"tar" => Ok(Tar),
|
"tar" => Ok(Tar),
|
||||||
"gz" => Ok(Gzip),
|
"gz" => Ok(Gzip),
|
||||||
"bz" | "bz2" => Ok(Bzip),
|
"bz" | "bz2" => Ok(Bzip),
|
||||||
"lzma" | "lz" => Ok(Lzma),
|
"xz" | "lzma" | "lz" => Ok(Lzma),
|
||||||
other => Err(error::Error::UnknownExtensionError(other.into())),
|
other => Err(error::Error::UnknownExtensionError(other.into())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user