This repository has been archived on 2024-12-22. You can view files and clone it, but cannot push or open issues or pull requests.
PyBitmessage-2024-12-22/mockenv/lib/python3.6/site-packages/kivy/tests/test_urlrequest.py

159 lines
4.7 KiB
Python
Raw Normal View History

2022-07-22 12:43:59 +02:00
'''
UrlRequest tests
================
'''
import pytest
import threading
from datetime import datetime
from time import sleep
from base64 import b64encode
import os
def wait_request_is_finished(kivy_clock, request, timeout=10):
start_time = datetime.now()
timed_out = False
while not request.is_finished and not timed_out:
kivy_clock.tick()
sleep(.1)
timed_out = (datetime.now() - start_time).total_seconds() > timeout
assert request.is_finished
def ensure_called_from_thread(queue):
"""Ensures the callback is called from this thread (main)."""
tid = threading.get_ident()
assert queue[0][0] == tid
assert queue[-2][0] == tid
assert queue[-1][0] == tid
def check_queue_values(queue):
"""Helper function verifying the queue contains the expected values."""
# we should have 2 progress minimum and one success
assert len(queue) >= 3
assert queue[0][1] == 'progress'
assert queue[-2][1] == 'progress'
assert queue[-1][1] in ('success', 'redirect')
assert queue[0][2][0] == 0
assert queue[-2][2][0] == queue[-2][2][1]
class UrlRequestQueue:
def __init__(self, queue):
self.queue = queue
def _on_success(self, req, *args):
self.queue.append((threading.get_ident(), 'success', args))
def _on_redirect(self, req, *args):
self.queue.append((threading.get_ident(), 'redirect', args))
def _on_error(self, req, *args):
self.queue.append((threading.get_ident(), 'error', args))
def _on_progress(self, req, *args):
self.queue.append((threading.get_ident(), 'progress', args))
@pytest.mark.skipif(os.environ.get('NONETWORK'), reason="No network")
def test_callbacks(kivy_clock):
from kivy.network.urlrequest import UrlRequest
obj = UrlRequestQueue([])
queue = obj.queue
req = UrlRequest('http://google.com',
on_success=obj._on_success,
on_progress=obj._on_progress,
on_error=obj._on_error,
on_redirect=obj._on_redirect,
debug=True)
wait_request_is_finished(kivy_clock, req)
if req.error and req.error.errno == 11001:
pytest.skip('Cannot connect to get address')
ensure_called_from_thread(queue)
check_queue_values(queue)
@pytest.mark.skipif(os.environ.get('NONETWORK'), reason="No network")
def test_auth_header(kivy_clock):
from kivy.network.urlrequest import UrlRequest
obj = UrlRequestQueue([])
queue = obj.queue
head = {
"Authorization": "Basic {}".format(b64encode(
"{}:{}".format('user', 'passwd').encode('utf-8')
).decode('utf-8'))
}
req = UrlRequest(
'http://httpbin.org/basic-auth/user/passwd',
on_success=obj._on_success,
on_progress=obj._on_progress,
on_error=obj._on_error,
on_redirect=obj._on_redirect,
req_headers=head,
debug=True
)
wait_request_is_finished(kivy_clock, req)
if req.error and req.error.errno == 11001:
pytest.skip('Cannot connect to get address')
ensure_called_from_thread(queue)
check_queue_values(queue)
assert queue[-1][2] == ({'authenticated': True, 'user': 'user'}, )
@pytest.mark.skipif(os.environ.get('NONETWORK'), reason="No network")
def test_auth_auto(kivy_clock):
from kivy.network.urlrequest import UrlRequest
obj = UrlRequestQueue([])
queue = obj.queue
req = UrlRequest(
'http://user:passwd@httpbin.org/basic-auth/user/passwd',
on_success=obj._on_success,
on_progress=obj._on_progress,
on_error=obj._on_error,
on_redirect=obj._on_redirect,
debug=True
)
wait_request_is_finished(kivy_clock, req)
if req.error and req.error.errno == 11001:
pytest.skip('Cannot connect to get address')
ensure_called_from_thread(queue)
check_queue_values(queue)
assert queue[-1][2] == ({'authenticated': True, 'user': 'user'}, )
@pytest.mark.skipif(os.environ.get('nonetwork'), reason="no network")
@pytest.mark.parametrize("scheme", ("http", "https"))
def test_ca_file(kivy_clock, scheme):
"""Passing a `ca_file` should not crash on http scheme, refs #6946"""
from kivy.network.urlrequest import UrlRequest
import certifi
obj = UrlRequestQueue([])
queue = obj.queue
req = UrlRequest(
f"{scheme}://httpbin.org/get",
on_success=obj._on_success,
on_progress=obj._on_progress,
on_error=obj._on_error,
on_redirect=obj._on_redirect,
ca_file=certifi.where(),
debug=True
)
wait_request_is_finished(kivy_clock, req)
if req.error and req.error.errno == 11001:
pytest.skip('Cannot connect to get address')
ensure_called_from_thread(queue)
check_queue_values(queue)