mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-06 19:45:29 +00:00
96 lines
2.3 KiB
Python
Executable File
96 lines
2.3 KiB
Python
Executable File
#!/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 -- compress test-file test-file.{format}")
|
|
os.remove('test-file')
|
|
os.system(f"cargo run -- 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')
|
|
os.remove(f'test-file.{format}')
|
|
|
|
|
|
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",
|
|
|
|
# TODO: Is this right?
|
|
# Perhaps the output should be application/x-lzma
|
|
"application/octet-stream",
|
|
"application/octet-stream"
|
|
]
|
|
|
|
for file in files:
|
|
rv = os.system(f"cargo run -- compress ../src/ {file}")
|
|
if rv != 0:
|
|
print(f"Failed while compressing {file}")
|
|
os._exit(2)
|
|
|
|
for (file, expected_mime) in zip(files, expected_mime_types):
|
|
if m.file(file) != expected_mime:
|
|
print(f"Test failed at file {file}.")
|
|
print(f"Got: {m.file(file)}.")
|
|
print(f"Expected: {expected_mime}.")
|
|
os._exit(2)
|
|
|
|
for (idx, file) in enumerate(files):
|
|
rv = os.system(f"cargo run -- {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("zip")
|
|
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") |