Merge pull request #3014 from efiop/test

tests: func: convert test_get.py test_utils.py to new fixtures
This commit is contained in:
Ruslan Kuprieiev
2019-12-30 18:31:53 +02:00
committed by GitHub
2 changed files with 159 additions and 161 deletions
+115 -105
View File
@@ -1,11 +1,11 @@
from __future__ import unicode_literals
import filecmp
import logging
import os
import pytest
from dvc.cache import Cache
from dvc.config import Config
from dvc.exceptions import UrlNotDvcRepoError
from dvc.repo.get import GetDVCFileError, PathMissingError
@@ -13,171 +13,181 @@ from dvc.repo import Repo
from dvc.system import System
from dvc.utils import makedirs
from dvc.utils.compat import fspath
from dvc.utils import fspath_py35
from tests.utils import trees_equal
def test_get_repo_file(erepo):
src = erepo.FOO
dst = erepo.FOO + "_imported"
def test_get_repo_file(tmp_dir, erepo_dir, monkeypatch):
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.dvc_gen("file", "contents", commit="create file")
Repo.get(erepo.root_dir, src, dst)
Repo.get(fspath(erepo_dir), "file", "file_imported")
assert os.path.exists(dst)
assert os.path.isfile(dst)
assert filecmp.cmp(erepo.FOO, dst, shallow=False)
assert os.path.isfile("file_imported")
assert (tmp_dir / "file_imported").read_text() == "contents"
def test_get_repo_dir(erepo):
src = erepo.DATA_DIR
dst = erepo.DATA_DIR + "_imported"
def test_get_repo_dir(tmp_dir, erepo_dir, monkeypatch):
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.dvc_gen({"dir": {"file": "contents"}}, commit="create dir")
Repo.get(erepo.root_dir, src, dst)
Repo.get(fspath(erepo_dir), "dir", "dir_imported")
assert os.path.exists(dst)
assert os.path.isdir(dst)
trees_equal(src, dst)
assert os.path.isdir("dir_imported")
trees_equal(fspath(erepo_dir / "dir"), "dir_imported")
def test_get_regular_file(erepo):
def test_get_git_file(tmp_dir, erepo_dir):
src = "some_file"
dst = "some_file_imported"
src_path = os.path.join(erepo.root_dir, src)
erepo.create(src_path, "hello")
erepo.dvc.scm.add([src_path])
erepo.dvc.scm.commit("add a regular file")
Repo.get(erepo.root_dir, src, dst)
erepo_dir.scm_gen({src: "hello"}, commit="add a regular file")
assert os.path.exists(dst)
assert os.path.isfile(dst)
assert filecmp.cmp(src_path, dst, shallow=False)
Repo.get(fspath(erepo_dir), src, dst)
assert (tmp_dir / dst).is_file()
assert (tmp_dir / dst).read_text() == "hello"
def test_get_regular_dir(erepo):
def test_get_git_dir(tmp_dir, erepo_dir):
src = "some_directory"
dst = "some_directory_imported"
src_file_path = os.path.join(erepo.root_dir, src, "file.txt")
erepo.create(src_file_path, "hello")
erepo.dvc.scm.add([src_file_path])
erepo.dvc.scm.commit("add a regular dir")
Repo.get(erepo.root_dir, src, dst)
erepo_dir.scm_gen({src: {"file.txt": "hello"}}, commit="add a regular dir")
assert os.path.exists(dst)
assert os.path.isdir(dst)
trees_equal(os.path.join(erepo.root_dir, src), dst)
Repo.get(fspath(erepo_dir), src, dst)
assert (tmp_dir / dst).is_dir()
trees_equal(fspath(erepo_dir / src), fspath(tmp_dir / dst))
def test_cache_type_is_properly_overridden(erepo):
erepo.dvc.config.set(
Config.SECTION_CACHE, Config.SECTION_CACHE_TYPE, "symlink"
)
erepo.dvc.scm.add([erepo.dvc.config.config_file])
erepo.dvc.scm.commit("set cache type to symlinks")
def test_cache_type_is_properly_overridden(tmp_dir, erepo_dir, monkeypatch):
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.dvc.config.set(
Config.SECTION_CACHE, Config.SECTION_CACHE_TYPE, "symlink"
)
erepo_dir.dvc.cache = Cache(erepo_dir.dvc)
erepo_dir.scm_add(
[erepo_dir.dvc.config.config_file], "set cache type to symlinks"
)
erepo_dir.dvc_gen("file", "contents", "create file")
assert System.is_symlink(erepo_dir / "file")
src = erepo.FOO
dst = erepo.FOO + "_imported"
Repo.get(fspath(erepo_dir), "file", "file_imported")
Repo.get(erepo.root_dir, src, dst)
assert not System.is_symlink(dst)
assert os.path.exists(dst)
assert os.path.isfile(dst)
assert not System.is_symlink("file_imported")
assert (tmp_dir / "file_imported").read_text() == "contents"
def test_get_repo_rev(erepo):
src = "version"
dst = src
def test_get_repo_rev(tmp_dir, erepo_dir, monkeypatch):
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.scm.checkout("new_branch", create_new=True)
erepo_dir.dvc_gen("file", "contents", commit="create file on branch")
erepo_dir.scm.checkout("master")
Repo.get(erepo.root_dir, src, dst, rev="branch")
Repo.get(fspath(erepo_dir), "file", "file_imported", rev="new_branch")
assert os.path.exists(dst)
assert os.path.isfile(dst)
with open(dst, "r+") as fobj:
assert fobj.read() == "branch"
assert (tmp_dir / "file_imported").read_text() == "contents"
def test_get_from_non_dvc_repo(git_erepo):
def test_get_from_non_dvc_repo(tmp_dir, erepo_dir):
erepo_dir.scm.repo.index.remove([erepo_dir.dvc.dvc_dir], r=True)
erepo_dir.scm.commit("remove dvc")
with pytest.raises(UrlNotDvcRepoError):
Repo.get(git_erepo.root_dir, "some_file.zip")
Repo.get(fspath(erepo_dir), "some_file.zip")
def test_get_a_dvc_file(erepo):
def test_get_a_dvc_file(tmp_dir, erepo_dir):
with pytest.raises(GetDVCFileError):
Repo.get(erepo.root_dir, "some_file.dvc")
Repo.get(fspath(erepo_dir), "some_file.dvc")
# https://github.com/iterative/dvc/pull/2837#discussion_r352123053
def test_get_full_dvc_path(erepo):
external_data_dir = erepo.mkdtemp()
external_data = os.path.join(external_data_dir, "ext_data")
with open(external_data, "w+") as fobj:
fobj.write("ext_data")
def test_get_full_dvc_path(tmp_dir, erepo_dir, tmp_path_factory, monkeypatch):
path = tmp_path_factory.mktemp("ext")
external_data = path / "ext_data"
external_data.write_text("ext_data")
cur_dir = os.getcwd()
os.chdir(erepo.root_dir)
erepo.dvc.add(external_data)
erepo.dvc.scm.add(["ext_data.dvc"])
erepo.dvc.scm.commit("add external data")
os.chdir(cur_dir)
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.dvc.add(fspath(external_data))
erepo_dir.scm_add(["ext_data.dvc"], commit="add external data")
Repo.get(erepo.root_dir, external_data, "ext_data_imported")
assert os.path.isfile("ext_data_imported")
assert filecmp.cmp(external_data, "ext_data_imported", shallow=False)
Repo.get(fspath(erepo_dir), fspath(external_data), "ext_data_imported")
assert (tmp_dir / "ext_data_imported").is_file()
assert (tmp_dir / "ext_data_imported").read_text() == "ext_data"
def test_non_cached_output(tmp_path, erepo):
os.chdir(erepo.root_dir)
erepo.dvc.run(
outs_no_cache=["non_cached_file"], cmd="echo hello > non_cached_file"
)
erepo.dvc.scm.add(["non_cached_file", "non_cached_file.dvc"])
erepo.dvc.scm.commit("add non-cached output")
os.chdir(fspath_py35(tmp_path))
Repo.get(erepo.root_dir, "non_cached_file")
def test_non_cached_output(tmp_dir, erepo_dir, monkeypatch):
src = "non_cached_file"
dst = src + "_imported"
src = os.path.join(erepo.root_dir, "non_cached_file")
assert os.path.isfile("non_cached_file")
assert filecmp.cmp(src, "non_cached_file", shallow=False)
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.dvc.run(
outs_no_cache=[src], cmd="echo hello > non_cached_file"
)
erepo_dir.scm.add([src, src + ".dvc"])
erepo_dir.scm.commit("add non-cached output")
Repo.get(fspath(erepo_dir), src, dst)
assert (tmp_dir / dst).is_file()
# NOTE: using strip() to account for `echo` differences on win and *nix
assert (tmp_dir / dst).read_text().strip() == "hello"
# https://github.com/iterative/dvc/pull/2837#discussion_r352123053
def test_absolute_file_outside_repo(erepo):
def test_absolute_file_outside_repo(tmp_dir, erepo_dir):
with pytest.raises(PathMissingError):
Repo.get(erepo.root_dir, "/root/")
Repo.get(fspath(erepo_dir), "/root/")
def test_unknown_path(erepo):
def test_unknown_path(tmp_dir, erepo_dir):
with pytest.raises(PathMissingError):
Repo.get(erepo.root_dir, "a_non_existing_file")
Repo.get(fspath(erepo_dir), "a_non_existing_file")
@pytest.mark.parametrize("dname", [".", "dir", "dir/subdir"])
def test_get_to_dir(dname, erepo):
src = erepo.FOO
def test_get_to_dir(tmp_dir, erepo_dir, monkeypatch, dname):
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.dvc_gen("file", "contents", commit="create file")
makedirs(dname, exist_ok=True)
Repo.get(erepo.root_dir, src, dname)
Repo.get(fspath(erepo_dir), "file", dname)
dst = os.path.join(dname, os.path.basename(src))
assert os.path.isdir(dname)
assert filecmp.cmp(erepo.FOO, dst, shallow=False)
assert (tmp_dir / dname).is_dir()
assert (tmp_dir / dname / "file").read_text() == "contents"
def test_get_from_non_dvc_master(erepo, tmp_path, monkeypatch, caplog):
monkeypatch.chdir(fspath(tmp_path))
erepo.dvc.scm.repo.index.remove([".dvc"], r=True)
erepo.dvc.scm.commit("remove .dvc")
def test_get_from_non_dvc_master(
tmp_dir, erepo_dir, tmp_path, monkeypatch, caplog
):
with monkeypatch.context() as m:
m.chdir(fspath(erepo_dir))
erepo_dir.scm.checkout("new_branch", create_new=True)
erepo_dir.scm_gen(
{"some_file": "some_contents"}, commit="create some file"
)
erepo_dir.scm.checkout("master")
erepo_dir.dvc.scm.repo.index.remove([".dvc"], r=True)
erepo_dir.dvc.scm.commit("remove .dvc")
# sanity check
with pytest.raises(UrlNotDvcRepoError):
Repo.get(fspath(erepo_dir), "some_file")
caplog.clear()
imported_file = "foo_imported"
dst = "file_imported"
with caplog.at_level(logging.INFO, logger="dvc"):
Repo.get(erepo._root_dir, erepo.FOO, out=imported_file, rev="branch")
Repo.get(fspath(erepo_dir), "some_file", out=dst, rev="new_branch")
assert caplog.text == ""
assert filecmp.cmp(
os.path.join(erepo._root_dir, erepo.FOO), imported_file, shallow=False
)
assert (tmp_dir / dst).read_text() == "some_contents"
+44 -56
View File
@@ -1,84 +1,72 @@
# encoding: utf-8
import filecmp
import os
import shutil
import stat
import pytest
from dvc import utils
from tests.basic_env import TestDvc
class TestUtils(TestDvc):
def test_copyfile(self):
src = "file1"
dest = "file2"
dest_dir = "testdir"
def test_copyfile(tmp_dir):
src = "file1"
dest = "file2"
dest_dir = "testdir"
with open(src, "w+") as f:
f.write("file1contents")
tmp_dir.gen(src, "file1contents")
os.mkdir(dest_dir)
os.mkdir(dest_dir)
utils.copyfile(src, dest)
self.assertTrue(filecmp.cmp(src, dest, shallow=False))
utils.copyfile(src, dest)
assert (tmp_dir / dest).read_text() == "file1contents"
utils.copyfile(src, dest_dir)
self.assertTrue(
filecmp.cmp(src, "{}/{}".format(dest_dir, src), shallow=False)
)
utils.copyfile(src, dest_dir)
assert (tmp_dir / dest_dir / src).read_text() == "file1contents"
shutil.rmtree(dest_dir)
os.remove(src)
os.remove(dest)
def test_file_md5_crlf(self):
with open("cr", "wb+") as fd:
fd.write(b"a\nb\nc")
with open("crlf", "wb+") as fd:
fd.write(b"a\r\nb\r\nc")
def test_file_md5_crlf(tmp_dir):
tmp_dir.gen("cr", b"a\nb\nc")
tmp_dir.gen("crlf", b"a\r\nb\r\nc")
assert utils.file_md5("cr")[0] == utils.file_md5("crlf")[0]
self.assertEqual(utils.file_md5("cr")[0], utils.file_md5("crlf")[0])
def test_dict_md5(self):
d = {
"cmd": "python code.py foo file1",
"locked": "true",
"outs": [
{
"path": "file1",
"metric": {"type": "raw"},
"cache": False,
"md5": "acbd18db4cc2f85cedef654fccc4a4d8",
}
],
"deps": [
{"path": "foo", "md5": "acbd18db4cc2f85cedef654fccc4a4d8"},
{"path": "code.py", "md5": "d05447644b89960913c7eee5fd776adb"},
],
}
def test_dict_md5():
d = {
"cmd": "python code.py foo file1",
"locked": "true",
"outs": [
{
"path": "file1",
"metric": {"type": "raw"},
"cache": False,
"md5": "acbd18db4cc2f85cedef654fccc4a4d8",
}
],
"deps": [
{"path": "foo", "md5": "acbd18db4cc2f85cedef654fccc4a4d8"},
{"path": "code.py", "md5": "d05447644b89960913c7eee5fd776adb"},
],
}
md5 = "8b263fa05ede6c3145c164829be694b4"
md5 = "8b263fa05ede6c3145c164829be694b4"
self.assertEqual(md5, utils.dict_md5(d, exclude=["metric", "locked"]))
assert md5 == utils.dict_md5(d, exclude=["metric", "locked"])
def test_boxify(self):
expected = (
"+-----------------+\n"
"| |\n"
"| message |\n"
"| |\n"
"+-----------------+\n"
)
assert expected == utils.boxify("message")
def test_boxify():
expected = (
"+-----------------+\n"
"| |\n"
"| message |\n"
"| |\n"
"+-----------------+\n"
)
assert expected == utils.boxify("message")
@pytest.mark.skipif(os.name == "nt", reason="Not supported for Windows.")
def test_makedirs_permissions(tmpdir):
def test_makedirs_permissions(tmp_dir):
dir_mode = 0o755
os.chdir(str(tmpdir))
intermediate_dir = "тестовая-директория"
test_dir = os.path.join(intermediate_dir, "data")