aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py
diff options
context:
space:
mode:
authormaxim-yurchuk <maxim-yurchuk@yandex-team.com>2024-10-09 12:29:46 +0300
committermaxim-yurchuk <maxim-yurchuk@yandex-team.com>2024-10-09 13:14:22 +0300
commit9731d8a4bb7ee2cc8554eaf133bb85498a4c7d80 (patch)
treea8fb3181d5947c0d78cf402aa56e686130179049 /contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py
parenta44b779cd359f06c3ebbef4ec98c6b38609d9d85 (diff)
downloadydb-9731d8a4bb7ee2cc8554eaf133bb85498a4c7d80.tar.gz
publishFullContrib: true for ydb
<HIDDEN_URL> commit_hash:c82a80ac4594723cebf2c7387dec9c60217f603e
Diffstat (limited to 'contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py')
-rw-r--r--contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py b/contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py
new file mode 100644
index 00000000000..d74908bc387
--- /dev/null
+++ b/contrib/python/requests-mock/py3/tests/pytest/test_with_pytest.py
@@ -0,0 +1,119 @@
+try:
+ from http import HTTPStatus
+ HTTP_STATUS_FOUND = HTTPStatus.FOUND
+except ImportError:
+ from httplib import FOUND as HTTP_STATUS_FOUND
+
+import pytest
+import requests
+import requests_mock
+
+
+def test_simple(requests_mock):
+ requests_mock.get('https://httpbin.org/get', text='data')
+ assert 'data' == requests.get('https://httpbin.org/get').text
+
+
+def test_redirect_and_nesting():
+ url_inner = "inner-mock://example.test/"
+ url_middle = "middle-mock://example.test/"
+ url_outer = "outer-mock://example.test/"
+ url_base = "https://www.example.com/"
+
+ text_middle = 'middle' + url_middle
+ text_outer = 'outer' + url_outer
+ text_base = 'outer' + url_base
+
+ with requests_mock.Mocker() as outer_mock:
+ outer_mock.get(url_base, text=text_base)
+ outer_mock.get(url_outer, text=text_outer)
+
+ with requests_mock.Mocker(real_http=True) as middle_mock:
+ middle_mock.get(url_middle, text=text_middle)
+
+ with requests_mock.Mocker() as inner_mock:
+ inner_mock.post(url_inner,
+ status_code=HTTP_STATUS_FOUND,
+ headers={'location': url_base})
+ inner_mock.get(url_base, real_http=True)
+
+ assert text_base == requests.post(url_inner).text # nosec
+
+ with pytest.raises(requests_mock.NoMockAddress):
+ requests.get(url_middle)
+
+ with pytest.raises(requests_mock.NoMockAddress):
+ requests.get(url_outer)
+
+ # back to middle mock
+ with pytest.raises(requests_mock.NoMockAddress):
+ requests.post(url_inner)
+
+ assert text_middle == requests.get(url_middle).text # nosec
+ assert text_outer == requests.get(url_outer).text # nosec
+
+ # back to outter mock
+ with pytest.raises(requests_mock.NoMockAddress):
+ requests.post(url_inner)
+
+ with pytest.raises(requests_mock.NoMockAddress):
+ requests.get(url_middle)
+
+ assert text_outer == requests.get(url_outer).text # nosec
+
+
+def test_mixed_mocks():
+ url = 'mock://example.test/'
+ with requests_mock.Mocker() as global_mock:
+ global_mock.get(url, text='global')
+ session = requests.Session()
+ text = session.get(url).text
+ assert text == 'global' # nosec
+ with requests_mock.Mocker(session=session) as session_mock:
+ session_mock.get(url, real_http=True)
+ text = session.get(url).text
+ assert text == 'global' # nosec
+
+
+def test_threaded_sessions():
+ """
+ When using requests_futures.FuturesSession() with a ThreadPoolExecutor
+ there is a race condition where one threaded request removes the
+ monkeypatched get_adapter() method from the Session before another threaded
+ request is finished using it.
+ """
+ from requests_futures.sessions import FuturesSession
+
+ url1 = 'http://www.example.com/requests-mock-fake-url1'
+ url2 = 'http://www.example.com/requests-mock-fake-url2'
+
+ with requests_mock.Mocker() as m:
+ # respond with 204 so we know its us
+ m.get(url1, status_code=204)
+ m.get(url2, status_code=204)
+
+ # NOTE(phodge): just firing off two .get() requests right after each
+ # other was a pretty reliable way to reproduce the race condition on my
+ # intel Macbook Pro but YMMV. Guaranteeing the race condition to
+ # reappear might require replacing the Session.send() with a wrapper
+ # that delays kicking off the request for url1 until the request for
+ # url2 has restored the original session.get_adapter(), but replacing
+ # Session.send() could be difficult because the requests_mock.Mocker()
+ # context manager has *already* monkeypatched this method.
+ session = FuturesSession()
+ future1 = session.get(url1)
+ future2 = session.get(url2)
+
+ # verify both requests were handled by the mock dispatcher
+ assert future1.result().status_code == 204
+ assert future2.result().status_code == 204
+
+
+class TestClass(object):
+
+ def configure(self, requests_mock):
+ requests_mock.get('https://httpbin.org/get', text='data')
+
+ def test_one(self, requests_mock):
+ self.configure(requests_mock)
+ assert 'data' == requests.get('https://httpbin.org/get').text