blob: 1ce864a884cb57180c9c38f6ddb9490da492e518 [file] [log] [blame] [edit]
"""
:module: tests.shell
:synopsis: Common shell operations for testing.
:author: [email protected] (Yesudeep Mangalapilly)
:author: [email protected] (MickaĆ«l Schoentgen)
"""
from __future__ import annotations
import errno
import os
import os.path
import shutil
import tempfile
import time
def cd(path):
os.chdir(path)
def pwd():
return os.getcwd()
def mkfile(path):
"""Creates a file"""
with open(path, "ab"):
pass
def mkdir(path, *, parents=False):
"""Creates a directory (optionally also creates all the parent directories
in the path)."""
if parents:
try:
os.makedirs(path)
except OSError as e:
if not e.errno == errno.EEXIST:
raise
else:
os.mkdir(path)
def rm(path, *, recursive=False):
"""Deletes files or directories."""
if os.path.isdir(path):
if recursive:
shutil.rmtree(path)
else:
raise OSError(errno.EISDIR, os.strerror(errno.EISDIR), path)
else:
os.remove(path)
def touch(path, times=None):
"""Updates the modified timestamp of a file or directory."""
if os.path.isdir(path):
os.utime(path, times)
else:
with open(path, "ab"):
os.utime(path, times)
def truncate(path):
"""Truncates a file."""
with open(path, "wb"):
os.utime(path, None)
def mv(src_path, dest_path):
"""Moves files or directories."""
try:
os.rename(src_path, dest_path)
except OSError:
# this will happen on windows
os.remove(dest_path)
os.rename(src_path, dest_path)
def mkdtemp():
return tempfile.mkdtemp()
def ls(path="."):
return os.listdir(path)
def msize(path):
"""Modify the file size without updating the modified time."""
with open(path, "w") as w:
w.write("")
os.utime(path, (0, 0))
time.sleep(0.4)
with open(path, "w") as w:
w.write("0")
os.utime(path, (0, 0))
def mount_tmpfs(path):
os.system(f"sudo mount -t tmpfs none {path}")
def unmount(path):
os.system(f"sudo umount {path}")