29
29
from web3 ._utils .http_session_manager import (
30
30
HTTPSessionManager ,
31
31
)
32
+ from web3 .exceptions import (
33
+ TimeExhausted ,
34
+ )
32
35
from web3 .utils .caching import (
33
36
SimpleCache ,
34
37
)
@@ -44,6 +47,15 @@ def __init__(self, text="", status_code=200):
44
47
self .reason = None
45
48
self .content = "content"
46
49
50
+ def __enter__ (self ):
51
+ return self
52
+
53
+ def __exit__ (self , exc_type , exc_value , traceback ):
54
+ pass
55
+
56
+ def iter_content (self ):
57
+ return [b"iter content" ]
58
+
47
59
@staticmethod
48
60
def json ():
49
61
return json .dumps ({"data" : "content" })
@@ -110,7 +122,59 @@ def test_session_manager_make_post_request_no_args(mocker, http_session_manager)
110
122
assert len (http_session_manager .session_cache ) == 1
111
123
cache_key = generate_cache_key (f"{ threading .get_ident ()} :{ TEST_URI } " )
112
124
session = http_session_manager .session_cache .get_cache_entry (cache_key )
113
- session .post .assert_called_once_with (TEST_URI , data = b"request" , timeout = 30 )
125
+ session .post .assert_called_once_with (
126
+ TEST_URI , data = b"request" , timeout = 30 , stream = False
127
+ )
128
+
129
+ # Ensure the adapter was created with default values
130
+ check_adapters_mounted (session )
131
+ adapter = session .get_adapter (TEST_URI )
132
+ assert isinstance (adapter , HTTPAdapter )
133
+ assert adapter ._pool_connections == DEFAULT_POOLSIZE
134
+ assert adapter ._pool_maxsize == DEFAULT_POOLSIZE
135
+
136
+
137
+ def test_session_manager_make_post_request_streaming (mocker , http_session_manager ):
138
+ mocker .patch ("requests.Session.post" , return_value = MockedResponse ())
139
+
140
+ # Submit a first request to create a session
141
+ assert len (http_session_manager .session_cache ) == 0
142
+ response = http_session_manager .make_post_request (
143
+ TEST_URI , data = b"request" , stream = True
144
+ )
145
+ assert response == b"iter content"
146
+ assert len (http_session_manager .session_cache ) == 1
147
+ cache_key = generate_cache_key (f"{ threading .get_ident ()} :{ TEST_URI } " )
148
+ session = http_session_manager .session_cache .get_cache_entry (cache_key )
149
+ session .post .assert_called_once_with (
150
+ TEST_URI , data = b"request" , timeout = 30 , stream = True
151
+ )
152
+
153
+ # Ensure the adapter was created with passed in values
154
+ check_adapters_mounted (session )
155
+ adapter = session .get_adapter (TEST_URI )
156
+ assert isinstance (adapter , HTTPAdapter )
157
+ assert adapter ._pool_connections == DEFAULT_POOLSIZE
158
+ assert adapter ._pool_maxsize == DEFAULT_POOLSIZE
159
+
160
+
161
+ def test_session_manager_make_post_request_times_out_while_streaming (
162
+ mocker , http_session_manager
163
+ ):
164
+ mocker .patch ("requests.Session.post" , return_value = MockedResponse ())
165
+
166
+ # Submit a first request to create a session
167
+ assert len (http_session_manager .session_cache ) == 0
168
+ with pytest .raises (TimeExhausted ):
169
+ http_session_manager .make_post_request (
170
+ TEST_URI , data = b"request" , stream = True , timeout = 0.000001
171
+ )
172
+ assert len (http_session_manager .session_cache ) == 1
173
+ cache_key = generate_cache_key (f"{ threading .get_ident ()} :{ TEST_URI } " )
174
+ session = http_session_manager .session_cache .get_cache_entry (cache_key )
175
+ session .post .assert_called_once_with (
176
+ TEST_URI , data = b"request" , timeout = 0.000001 , stream = True
177
+ )
114
178
115
179
# Ensure the adapter was created with default values
116
180
check_adapters_mounted (session )
@@ -140,7 +204,9 @@ def test_session_manager_precached_session(mocker, http_session_manager):
140
204
141
205
# Ensure the timeout was passed to the request
142
206
session = http_session_manager .cache_and_return_session (TEST_URI )
143
- session .post .assert_called_once_with (TEST_URI , data = b"request" , timeout = 60 )
207
+ session .post .assert_called_once_with (
208
+ TEST_URI , data = b"request" , timeout = 60 , stream = False
209
+ )
144
210
145
211
# Ensure the adapter parameters match those we specified
146
212
check_adapters_mounted (session )
0 commit comments