Source code for oras.tests.test_utils
__author__ = "Vanessa Sochat"
__copyright__ = "Copyright The ORAS Authors."
__license__ = "Apache-2.0"
import json
import os
import pathlib
import shutil
import pytest
import oras.utils as utils
[docs]
def test_write_read_files(tmp_path):
print("Testing utils.write_file...")
tmpfile = str(tmp_path / "written_file.txt")
assert not os.path.exists(tmpfile)
utils.write_file(tmpfile, "hello!")
assert os.path.exists(tmpfile)
print("Testing utils.read_file...")
content = utils.read_file(tmpfile)
assert content == "hello!"
[docs]
def test_workdir(tmp_path):
print("Testing utils.workdir")
noodle_base = os.path.join(tmp_path, "noodles")
os.makedirs(noodle_base)
pathlib.Path(os.path.join(noodle_base, "pasta.txt")).touch()
assert "pasta.txt" not in os.listdir()
with utils.workdir(noodle_base):
assert "pasta.txt" in os.listdir()
[docs]
def test_write_bad_json(tmp_path):
bad_json = {"Wakkawakkawakka'}": [{True}, "2", 3]}
tmpfile = str(tmp_path / "json_file.txt")
assert not os.path.exists(tmpfile)
with pytest.raises(TypeError):
utils.write_json(bad_json, tmpfile)
[docs]
def test_write_json(tmp_path):
good_json = {"Wakkawakkawakka": [True, "2", 3]}
tmpfile = str(tmp_path / "good_json_file.txt")
assert not os.path.exists(tmpfile)
utils.write_json(good_json, tmpfile)
with open(tmpfile, "r") as f:
content = json.loads(f.read())
assert isinstance(content, dict)
assert "Wakkawakkawakka" in content
content = utils.read_json(tmpfile)
assert "Wakkawakkawakka" in content
[docs]
def test_copyfile(tmp_path):
print("Testing utils.copyfile")
original = str(tmp_path / "location1.txt")
dest = str(tmp_path / "location2.txt")
print(original)
print(dest)
utils.write_file(original, "CONTENT IN FILE")
utils.copyfile(original, dest)
assert os.path.exists(original)
assert os.path.exists(dest)
[docs]
def test_get_tmpdir_tmpfile():
print("Testing utils.get_tmpdir, get_tmpfile")
tmpdir = utils.get_tmpdir()
assert os.path.exists(tmpdir)
assert os.path.basename(tmpdir).startswith("oras")
shutil.rmtree(tmpdir)
tmpdir = utils.get_tmpdir(prefix="name")
assert os.path.basename(tmpdir).startswith("name")
shutil.rmtree(tmpdir)
tmpfile = utils.get_tmpfile()
assert "oras" in tmpfile
os.remove(tmpfile)
tmpfile = utils.get_tmpfile(prefix="pancakes")
assert "pancakes" in tmpfile
os.remove(tmpfile)
[docs]
def test_mkdir_p(tmp_path):
print("Testing utils.mkdir_p")
dirname = str(tmp_path / "input")
result = os.path.join(dirname, "level1", "level2", "level3")
utils.mkdir_p(result)
assert os.path.exists(result)
[docs]
def test_print_json():
print("Testing utils.print_json")
result = utils.print_json({1: 1})
assert result == '{\n "1": 1\n}'
[docs]
def test_split_path_and_content():
"""
Test split path and content function.
Function has additional logic for Windows - this isn't included in these tests as
they don't usually run on Windows.
"""
testref = "path/to/config:application/vnd.oci.image.config.v1+json"
path_content = utils.split_path_and_content(testref)
assert path_content.path == "path/to/config"
assert path_content.content == "application/vnd.oci.image.config.v1+json"
testref = "/dev/null:application/vnd.oci.image.config.v1+json"
path_content = utils.split_path_and_content(testref)
assert path_content.path == "/dev/null"
assert path_content.content == "application/vnd.oci.image.config.v1+json"
testref = "/dev/null"
path_content = utils.split_path_and_content(testref)
assert path_content.path == "/dev/null"
assert not path_content.content
testref = "path/to/config.json"
path_content = utils.split_path_and_content(testref)
assert path_content.path == "path/to/config.json"
assert not path_content.content