Files
dvc/tests/remotes/http.py
T
Ruslan Kuprieiev 30212f886b tests: create remote fixture (#4163)
Usually we need it to parametrize tests with, so there is no
reason to duplicate the code. I've left `local_remote` fixture
just because it is so convenient and often used in a lot of tests.
2020-07-03 22:30:56 +03:00

49 lines
1.2 KiB
Python

# pylint:disable=abstract-method
import locale
import os
import uuid
import pytest
import requests
from dvc.path_info import HTTPURLInfo
from .base import Base
class HTTP(Base, HTTPURLInfo):
@staticmethod
def get_url(port): # pylint: disable=arguments-differ
dname = str(uuid.uuid4())
return f"http://127.0.0.1:{port}/{dname}"
def mkdir(self, mode=0o777, parents=False, exist_ok=False):
assert mode == 0o777
assert parents
assert not exist_ok
def write_bytes(self, contents):
assert isinstance(contents, bytes)
response = requests.post(self.url, data=contents)
assert response.status_code == 200
def write_text(self, contents, encoding=None, errors=None):
if not encoding:
encoding = locale.getpreferredencoding(False)
assert errors is None
self.write_bytes(contents.encode(encoding))
@pytest.fixture(scope="session")
def http_server(tmp_path_factory):
from tests.utils.httpd import StaticFileServer
directory = os.fspath(tmp_path_factory.mktemp("http"))
with StaticFileServer(directory=directory) as httpd:
yield httpd
@pytest.fixture
def http(http_server):
yield HTTP(HTTP.get_url(http_server.server_port))