123 lines
3.9 KiB
Python
123 lines
3.9 KiB
Python
|
import unittest
|
||
|
|
||
|
from .exceptions import *
|
||
|
from .http import Headers
|
||
|
|
||
|
|
||
|
class ExceptionsTests(unittest.TestCase):
|
||
|
|
||
|
def test_str(self):
|
||
|
for exception, exception_str in [
|
||
|
(
|
||
|
InvalidHandshake("Invalid request"),
|
||
|
"Invalid request",
|
||
|
),
|
||
|
(
|
||
|
AbortHandshake(200, Headers(), b'OK\n'),
|
||
|
"HTTP 200, 0 headers, 3 bytes",
|
||
|
),
|
||
|
(
|
||
|
InvalidMessage("Malformed HTTP message"),
|
||
|
"Malformed HTTP message",
|
||
|
),
|
||
|
(
|
||
|
InvalidHeader('Name', ''),
|
||
|
"Missing or empty Name header",
|
||
|
),
|
||
|
(
|
||
|
InvalidHeader('Name', 'Value'),
|
||
|
"Invalid Name header: Value",
|
||
|
),
|
||
|
(
|
||
|
InvalidHeaderFormat(
|
||
|
'Sec-WebSocket-Protocol', "expected token", 'a=|', 3),
|
||
|
"Invalid Sec-WebSocket-Protocol header: "
|
||
|
"expected token at 3 in a=|",
|
||
|
),
|
||
|
(
|
||
|
InvalidHeaderValue('Sec-WebSocket-Version', '42'),
|
||
|
"Invalid Sec-WebSocket-Version header: 42",
|
||
|
),
|
||
|
|
||
|
(
|
||
|
InvalidUpgrade('Upgrade', ''),
|
||
|
"Missing or empty Upgrade header",
|
||
|
),
|
||
|
(
|
||
|
InvalidUpgrade('Connection', 'websocket'),
|
||
|
"Invalid Connection header: websocket",
|
||
|
),
|
||
|
(
|
||
|
InvalidOrigin('http://bad.origin'),
|
||
|
'Invalid Origin header: http://bad.origin',
|
||
|
),
|
||
|
(
|
||
|
InvalidStatusCode(403),
|
||
|
"Status code not 101: 403",
|
||
|
),
|
||
|
(
|
||
|
NegotiationError("Unsupported subprotocol: spam"),
|
||
|
"Unsupported subprotocol: spam",
|
||
|
),
|
||
|
(
|
||
|
InvalidParameterName('|'),
|
||
|
"Invalid parameter name: |",
|
||
|
),
|
||
|
(
|
||
|
InvalidParameterValue('a', '|'),
|
||
|
"Invalid value for parameter a: |",
|
||
|
),
|
||
|
(
|
||
|
DuplicateParameter('a'),
|
||
|
"Duplicate parameter: a",
|
||
|
),
|
||
|
(
|
||
|
InvalidState("WebSocket connection isn't established yet"),
|
||
|
"WebSocket connection isn't established yet",
|
||
|
),
|
||
|
(
|
||
|
ConnectionClosed(1000, ''),
|
||
|
"WebSocket connection is closed: code = 1000 "
|
||
|
"(OK), no reason",
|
||
|
),
|
||
|
(
|
||
|
ConnectionClosed(1001, 'bye'),
|
||
|
"WebSocket connection is closed: code = 1001 "
|
||
|
"(going away), reason = bye",
|
||
|
),
|
||
|
(
|
||
|
ConnectionClosed(1006, None),
|
||
|
"WebSocket connection is closed: code = 1006 "
|
||
|
"(connection closed abnormally [internal]), no reason"
|
||
|
),
|
||
|
(
|
||
|
ConnectionClosed(1016, None),
|
||
|
"WebSocket connection is closed: code = 1016 "
|
||
|
"(unknown), no reason"
|
||
|
),
|
||
|
(
|
||
|
ConnectionClosed(3000, None),
|
||
|
"WebSocket connection is closed: code = 3000 "
|
||
|
"(registered), no reason"
|
||
|
),
|
||
|
(
|
||
|
ConnectionClosed(4000, None),
|
||
|
"WebSocket connection is closed: code = 4000 "
|
||
|
"(private use), no reason"
|
||
|
),
|
||
|
(
|
||
|
InvalidURI("| isn't a valid URI"),
|
||
|
"| isn't a valid URI",
|
||
|
),
|
||
|
(
|
||
|
PayloadTooBig("Payload length exceeds limit: 2 > 1 bytes"),
|
||
|
"Payload length exceeds limit: 2 > 1 bytes",
|
||
|
),
|
||
|
(
|
||
|
WebSocketProtocolError("Invalid opcode: 7"),
|
||
|
"Invalid opcode: 7",
|
||
|
),
|
||
|
]:
|
||
|
with self.subTest(exception=exception):
|
||
|
self.assertEqual(str(exception), exception_str)
|