From bfa38ba5ee0a7a4387eddc30feb1e3ad2e1aab78 Mon Sep 17 00:00:00 2001 From: Trygve Aaberge Date: Tue, 31 Jan 2023 20:04:20 +0100 Subject: Don't set future result in __await__ --- tests/test_http_request.py | 89 +++++++++++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 24 deletions(-) (limited to 'tests/test_http_request.py') diff --git a/tests/test_http_request.py b/tests/test_http_request.py index 3c74e1f..a9e941d 100644 --- a/tests/test_http_request.py +++ b/tests/test_http_request.py @@ -15,6 +15,7 @@ def test_http_request_success(mock_method: MagicMock): options = {"option": "1"} timeout = 123 coroutine = http_request(url, options, timeout) + future = coroutine.send(None) assert isinstance(future, FutureProcess) @@ -28,19 +29,23 @@ def test_http_request_success(mock_method: MagicMock): response = "response" body = f"HTTP/2 200\r\n\r\n{response}" + future.set_result(("", 0, body, "")) with pytest.raises(StopIteration) as excinfo: - coroutine.send(("", 0, body, "")) + coroutine.send(None) assert excinfo.value.value == response def test_http_request_error_process_return_code(): url = "http://example.com" coroutine = http_request(url, {}, 0, max_retries=0) - assert isinstance(coroutine.send(None), FutureProcess) + + future = coroutine.send(None) + assert isinstance(future, FutureProcess) + future.set_result(("", -2, "", "")) with pytest.raises(HttpError) as excinfo: - coroutine.send(("", -2, "", "")) + coroutine.send(None) assert excinfo.value.url == url assert excinfo.value.return_code == -2 @@ -51,10 +56,13 @@ def test_http_request_error_process_return_code(): def test_http_request_error_process_stderr(): url = "http://example.com" coroutine = http_request(url, {}, 0, max_retries=0) - assert isinstance(coroutine.send(None), FutureProcess) + + future = coroutine.send(None) + assert isinstance(future, FutureProcess) + future.set_result(("", 0, "", "err")) with pytest.raises(HttpError) as excinfo: - coroutine.send(("", 0, "", "err")) + coroutine.send(None) assert excinfo.value.url == url assert excinfo.value.return_code == 0 @@ -65,13 +73,16 @@ def test_http_request_error_process_stderr(): def test_http_request_error_process_http(): url = "http://example.com" coroutine = http_request(url, {}, 0, max_retries=0) - assert isinstance(coroutine.send(None), FutureProcess) + + future = coroutine.send(None) + assert isinstance(future, FutureProcess) response = "response" body = f"HTTP/2 400\r\n\r\n{response}" + future.set_result(("", 0, body, "")) with pytest.raises(HttpError) as excinfo: - coroutine.send(("", 0, body, "")) + coroutine.send(None) assert excinfo.value.url == url assert excinfo.value.return_code == 0 @@ -82,31 +93,53 @@ def test_http_request_error_process_http(): def test_http_request_error_retry_success(): url = "http://example.com" coroutine = http_request(url, {}, 0, max_retries=2) - assert isinstance(coroutine.send(None), FutureProcess) - assert isinstance(coroutine.send(("", -2, "", "")), FutureTimer) - assert isinstance(coroutine.send((0,)), FutureProcess) + future_1 = coroutine.send(None) + assert isinstance(future_1, FutureProcess) + future_1.set_result(("", -2, "", "")) + + future_2 = coroutine.send(None) + assert isinstance(future_2, FutureTimer) + future_2.set_result((0,)) + + future_3 = coroutine.send(None) + assert isinstance(future_3, FutureProcess) response = "response" body = f"HTTP/2 200\r\n\r\n{response}" + future_3.set_result(("", 0, body, "")) with pytest.raises(StopIteration) as excinfo: - coroutine.send(("", 0, body, "")) + coroutine.send(None) assert excinfo.value.value == response def test_http_request_error_retry_error(): url = "http://example.com" coroutine = http_request(url, {}, 0, max_retries=2) - assert isinstance(coroutine.send(None), FutureProcess) - assert isinstance(coroutine.send(("", -2, "", "")), FutureTimer) - assert isinstance(coroutine.send((0,)), FutureProcess) - assert isinstance(coroutine.send(("", -2, "", "")), FutureTimer) - assert isinstance(coroutine.send((0,)), FutureProcess) + future_1 = coroutine.send(None) + assert isinstance(future_1, FutureProcess) + future_1.set_result(("", -2, "", "")) + + future_2 = coroutine.send(None) + assert isinstance(future_2, FutureTimer) + future_2.set_result((0,)) + + future_3 = coroutine.send(None) + assert isinstance(future_3, FutureProcess) + future_3.set_result(("", -2, "", "")) + + future_4 = coroutine.send(None) + assert isinstance(future_4, FutureTimer) + future_4.set_result((0,)) + + future_5 = coroutine.send(None) + assert isinstance(future_5, FutureProcess) + future_5.set_result(("", -2, "", "")) with pytest.raises(HttpError) as excinfo: - coroutine.send(("", -2, "", "")) + coroutine.send(None) assert excinfo.value.url == url assert excinfo.value.return_code == -2 @@ -135,9 +168,10 @@ def test_http_request_multiple_headers(): .strip() .replace("\n", "\r\n") ) + future.set_result(("", 0, body, "")) with pytest.raises(StopIteration) as excinfo: - coroutine.send(("", 0, body, "")) + coroutine.send(future) assert excinfo.value.value == response @@ -145,20 +179,27 @@ def test_http_request_multiple_headers(): def test_http_request_ratelimit(mock_method: MagicMock): url = "http://example.com" coroutine = http_request(url, {}, 0) - assert isinstance(coroutine.send(None), FutureProcess) + + future_1 = coroutine.send(None) + assert isinstance(future_1, FutureProcess) body = "HTTP/2 429\r\nRetry-After: 12\r\n\r\n" + future_1.set_result(("", 0, body, "")) - timer = coroutine.send(("", 0, body, "")) - assert isinstance(timer, FutureTimer) + future_2 = coroutine.send(None) + assert isinstance(future_2, FutureTimer) + future_2.set_result((0,)) mock_method.assert_called_once_with( - 12000, 0, 1, get_callback_name(weechat_task_cb), timer.id + 12000, 0, 1, get_callback_name(weechat_task_cb), future_2.id ) - assert isinstance(coroutine.send((0,)), FutureProcess) + future_3 = coroutine.send(None) + assert isinstance(future_3, FutureProcess) response = "response" + future_3.set_result(("", 0, f"HTTP/2 200\r\n\r\n{response}", "")) + with pytest.raises(StopIteration) as excinfo: - coroutine.send(("", 0, f"HTTP/2 200\r\n\r\n{response}", "")) + coroutine.send(None) assert excinfo.value.value == response -- cgit