mirror of
				https://github.com/django/daphne.git
				synced 2025-10-30 15:27:36 +03:00 
			
		
		
		
	This commit is contained in:
		
							parent
							
								
									7032f8e0f8
								
							
						
					
					
						commit
						78be865eb4
					
				|  | @ -219,7 +219,12 @@ class Server(object): | ||||||
|             "disconnected", None |             "disconnected", None | ||||||
|         ): |         ): | ||||||
|             return |             return | ||||||
|  |         try: | ||||||
|             self.check_headers_type(message) |             self.check_headers_type(message) | ||||||
|  |         except ValueError: | ||||||
|  |             # Ensure to send SOME reply. | ||||||
|  |             protocol.basic_error(500, b"Server Error", "Server Error") | ||||||
|  |             raise | ||||||
|         # Let the protocol handle it |         # Let the protocol handle it | ||||||
|         protocol.handle_reply(message) |         protocol.handle_reply(message) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -56,12 +56,16 @@ class DaphneTestCase(unittest.TestCase): | ||||||
|             # Return scope, messages, response |             # Return scope, messages, response | ||||||
|             return test_app.get_received() + (response,) |             return test_app.get_received() + (response,) | ||||||
| 
 | 
 | ||||||
|     def run_daphne_raw(self, data, timeout=1): |     def run_daphne_raw(self, data, *, responses=None, timeout=1): | ||||||
|         """ |         """ | ||||||
|         Runs daphne and sends it the given raw bytestring over a socket. Returns what it sends back. |         Runs Daphne and sends it the given raw bytestring over a socket. | ||||||
|  |         Accepts list of response messages the application will reply with. | ||||||
|  |         Returns what Daphne sends back. | ||||||
|         """ |         """ | ||||||
|         assert isinstance(data, bytes) |         assert isinstance(data, bytes) | ||||||
|         with DaphneTestingInstance() as test_app: |         with DaphneTestingInstance() as test_app: | ||||||
|  |             if responses is not None: | ||||||
|  |                 test_app.add_send_messages(responses) | ||||||
|             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||||
|             s.settimeout(timeout) |             s.settimeout(timeout) | ||||||
|             s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |             s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) | ||||||
|  |  | ||||||
|  | @ -169,3 +169,21 @@ class TestHTTPResponse(DaphneTestCase): | ||||||
|             str(context.exception), |             str(context.exception), | ||||||
|             "Header value 'True' expected to be `bytes`, but got `<class 'bool'>`", |             "Header value 'True' expected to be `bytes`, but got `<class 'bool'>`", | ||||||
|         ) |         ) | ||||||
|  | 
 | ||||||
|  |     def test_headers_type_raw(self): | ||||||
|  |         """ | ||||||
|  |         Daphne returns a 500 error response if the application sends invalid | ||||||
|  |         headers. | ||||||
|  |         """ | ||||||
|  |         response = self.run_daphne_raw( | ||||||
|  |             b"GET / HTTP/1.0\r\n\r\n", | ||||||
|  |             responses=[ | ||||||
|  |                 { | ||||||
|  |                     "type": "http.response.start", | ||||||
|  |                     "status": 200, | ||||||
|  |                     "headers": [["foo", b"bar"]], | ||||||
|  |                 }, | ||||||
|  |                 {"type": "http.response.body", "body": b""}, | ||||||
|  |             ], | ||||||
|  |         ) | ||||||
|  |         self.assertTrue(response.startswith(b"HTTP/1.0 500 Internal Server Error")) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user