mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
* test: clean flake8 config root clutter * test: pre-commit: add isort Compatible with black (see https://github.com/timothycrosley/isort/issues/694) * lint: reorder imports * lint: more complex imports * lint: fix deepsource * config: isort: add first party dvc * tests: restyled: add isort * temp commit to revert before merge * Revert "temp commit to revert before merge" This reverts commit 11db0fd8e95fe891597cbb9bf804480909b19e24.
135 lines
3.3 KiB
Python
135 lines
3.3 KiB
Python
import json
|
|
import platform
|
|
|
|
import mock
|
|
import pytest
|
|
from voluptuous import Any, Schema
|
|
|
|
from dvc import analytics
|
|
from dvc.cli import parse_args
|
|
|
|
|
|
@pytest.fixture
|
|
def tmp_global_dir(tmp_path):
|
|
"""
|
|
Fixture to prevent modifying the actual global config
|
|
"""
|
|
with mock.patch("dvc.config.Config.get_dir", return_value=str(tmp_path)):
|
|
yield
|
|
|
|
|
|
@mock.patch("dvc.daemon._spawn")
|
|
@mock.patch("json.dump")
|
|
def test_collect_and_send_report(mock_json, mock_daemon, tmp_global_dir):
|
|
analytics.collect_and_send_report()
|
|
report = mock_json.call_args[0][0]
|
|
|
|
with pytest.raises(KeyError):
|
|
report["cmd_class"]
|
|
|
|
with pytest.raises(KeyError):
|
|
report["cmd_return_code"]
|
|
|
|
args = parse_args(["add", "foo"])
|
|
return_code = 0
|
|
|
|
analytics.collect_and_send_report(args, return_code)
|
|
report = mock_json.call_args[0][0]
|
|
|
|
assert report["cmd_class"] == "CmdAdd"
|
|
assert report["cmd_return_code"] == return_code
|
|
|
|
assert mock_daemon.call_count == 2
|
|
|
|
|
|
def test_runtime_info(tmp_global_dir):
|
|
schema = Schema(
|
|
{
|
|
"dvc_version": str,
|
|
"is_binary": bool,
|
|
"scm_class": Any("Git", None),
|
|
"user_id": str,
|
|
"system_info": dict,
|
|
},
|
|
required=True,
|
|
)
|
|
|
|
assert schema(analytics._runtime_info())
|
|
|
|
|
|
@mock.patch("requests.post")
|
|
def test_send(mock_post, tmp_path):
|
|
import requests
|
|
|
|
url = "https://analytics.dvc.org"
|
|
report = {"name": "dummy report"}
|
|
report_file = tmp_path / "report"
|
|
|
|
report_file.write_text(json.dumps(report))
|
|
mock_post.side_effect = requests.exceptions.RequestException
|
|
|
|
analytics.send(str(report_file))
|
|
assert mock_post.called
|
|
assert mock_post.call_args.args[0] == url
|
|
assert not report_file.exists()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"config, result",
|
|
[
|
|
({}, True),
|
|
({"analytics": "false"}, False),
|
|
({"analytics": "true"}, True),
|
|
({"unknown": "broken"}, True),
|
|
({"analytics": "false", "unknown": "broken"}, False),
|
|
],
|
|
)
|
|
def test_is_enabled(dvc, config, result, monkeypatch, tmp_global_dir):
|
|
import configobj
|
|
|
|
conf = configobj.ConfigObj({"core": config})
|
|
conf.filename = dvc.config.files["repo"]
|
|
conf.write()
|
|
|
|
# reset DVC_TEST env var, which affects `is_enabled()`
|
|
monkeypatch.delenv("DVC_TEST")
|
|
|
|
assert result == analytics.is_enabled()
|
|
|
|
|
|
def test_system_info():
|
|
schema = Schema({"os": Any("windows", "mac", "linux")}, required=True)
|
|
|
|
system = platform.system()
|
|
|
|
if system == "Windows":
|
|
schema = schema.extend(
|
|
{
|
|
"windows_version_build": int,
|
|
"windows_version_major": int,
|
|
"windows_version_minor": int,
|
|
"windows_version_service_pack": str,
|
|
}
|
|
)
|
|
|
|
if system == "Darwin":
|
|
schema = schema.extend({"mac_version": str})
|
|
|
|
if system == "Linux":
|
|
schema = schema.extend(
|
|
{
|
|
"linux_distro": str,
|
|
"linux_distro_like": str,
|
|
"linux_distro_version": str,
|
|
}
|
|
)
|
|
|
|
assert schema(analytics._system_info())
|
|
|
|
|
|
def test_find_or_create_user_id(tmp_global_dir):
|
|
created = analytics._find_or_create_user_id()
|
|
found = analytics._find_or_create_user_id()
|
|
|
|
assert created == found
|