summaryrefslogtreecommitdiff
path: root/tests/unit/test_utils_filesystem.py
blob: 3ef814dce4b8060b49d116c826ee2d5cbb9fa6cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import os
import shutil

import pytest

from pip._internal.utils.filesystem import copy2_fixed, is_socket
from tests.lib.filesystem import make_socket_file, make_unreadable_file
from tests.lib.path import Path


def make_file(path):
    Path(path).touch()


def make_valid_symlink(path):
    target = path + "1"
    make_file(target)
    os.symlink(target, path)


def make_broken_symlink(path):
    os.symlink("foo", path)


def make_dir(path):
    os.mkdir(path)


skip_on_windows = pytest.mark.skipif("sys.platform == 'win32'")


@skip_on_windows
@pytest.mark.parametrize("create,result", [
    (make_socket_file, True),
    (make_file, False),
    (make_valid_symlink, False),
    (make_broken_symlink, False),
    (make_dir, False),
])
def test_is_socket(create, result, tmpdir):
    target = tmpdir.joinpath("target")
    create(target)
    assert os.path.lexists(target)
    assert is_socket(target) == result


@pytest.mark.parametrize("create,error_type", [
    pytest.param(
        make_socket_file, shutil.SpecialFileError, marks=skip_on_windows
    ),
    (make_unreadable_file, OSError),
])
def test_copy2_fixed_raises_appropriate_errors(create, error_type, tmpdir):
    src = tmpdir.joinpath("src")
    create(src)
    dest = tmpdir.joinpath("dest")

    with pytest.raises(error_type):
        copy2_fixed(src, dest)

    assert not dest.exists()