test_telemetry.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import httpx
  2. import pytest
  3. from packaging.version import parse as parse_python_version
  4. from reflex.utils import telemetry
  5. def test_telemetry():
  6. """Test that telemetry is sent correctly."""
  7. # Check that the user OS is one of the supported operating systems.
  8. user_os = telemetry.get_os()
  9. assert user_os is not None
  10. assert user_os in ["Linux", "Darwin", "Java", "Windows"]
  11. # Check that the CPU count and memory are greater than 0.
  12. assert telemetry.get_cpu_count() > 0
  13. # Check that the available memory is greater than 0
  14. assert telemetry.get_memory() > 0
  15. # Check that the Reflex version is not None.
  16. assert telemetry.get_reflex_version() is not None
  17. # Check that the Python version is greater than 3.7.
  18. python_version = telemetry.get_python_version()
  19. assert python_version is not None
  20. assert parse_python_version(python_version) >= parse_python_version("3.7")
  21. def test_disable():
  22. """Test that disabling telemetry works."""
  23. assert not telemetry._send("test", telemetry_enabled=False)
  24. @pytest.mark.parametrize("event", ["init", "reinit", "run-dev", "run-prod", "export"])
  25. def test_send(mocker, event):
  26. mocker.patch("httpx.post")
  27. mocker.patch(
  28. "builtins.open",
  29. mocker.mock_open(
  30. read_data='{"project_hash": "78285505863498957834586115958872998605"}'
  31. ),
  32. )
  33. mocker.patch("platform.platform", return_value="Mocked Platform")
  34. telemetry._send(event, telemetry_enabled=True)
  35. httpx.post.assert_called_once()
  36. if telemetry.get_os() == "Windows":
  37. open.assert_called_with(".web\\reflex.json", "r")
  38. elif telemetry.get_os() == "Linux":
  39. open.assert_called_with("/proc/meminfo", "rb", buffering=32768)
  40. else:
  41. open.assert_called_with(".web/reflex.json", "r")