Exemple #1
0
    def test_log(self, mock_enable_trace: Mock):
        with patch("streamlink.plugin.api.websocket.rootlogger", Mock(level=DEBUG)):
            WebsocketClient(self.session, "wss://localhost:0")
        self.assertFalse(mock_enable_trace.called)

        with patch("streamlink.plugin.api.websocket.rootlogger", Mock(level=TRACE)):
            WebsocketClient(self.session, "wss://localhost:0")
        self.assertTrue(mock_enable_trace.called)
Exemple #2
0
    def test_user_agent(self):
        client = WebsocketClient(self.session, "wss://localhost:0")
        self.assertEqual(client.ws.header, [
            f"User-Agent: {self.session.http.headers['User-Agent']}"
        ])

        client = WebsocketClient(self.session, "wss://localhost:0", header=["User-Agent: foo"])
        self.assertEqual(client.ws.header, [
            "User-Agent: foo"
        ])
Exemple #3
0
    def test_reconnect_once(self, mock_wsapp: Mock):
        client = WebsocketClient(self.session, "wss://localhost:0")
        run_forever_entered = Event()
        run_forever_ended = Event()

        # noinspection PyUnusedLocal
        def mock_run_forever(**data):
            run_forever_entered.set()
            run_forever_ended.wait(1)
            run_forever_ended.clear()

        client.ws.keep_running = True
        client.ws.run_forever.side_effect = mock_run_forever

        client.start()
        self.assertEqual(client.ws.close.call_count, 0)
        self.assertEqual(mock_wsapp.call_count, 1, "Creates initial connection")
        self.assertFalse(client._reconnect, "Has not set the _reconnect state")
        self.assertTrue(run_forever_entered.wait(1), "Enters run_forever loop on client thread")
        run_forever_entered.clear()

        client.reconnect()
        self.assertEqual(client.ws.close.call_count, 1)
        self.assertEqual(mock_wsapp.call_count, 2, "Creates new connection")
        self.assertTrue(client._reconnect, "Has set the _reconnect state")

        run_forever_ended.set()
        self.assertTrue(run_forever_entered.wait(1), "Enters run_forever loop on client thread again")
        self.assertFalse(client._reconnect, "Has reset the _reconnect state")

        run_forever_ended.set()
        client.join(1)
        self.assertFalse(client.is_alive())
        self.assertEqual(mock_wsapp.call_count, 2, "Connection has ended regularly")
Exemple #4
0
 def test_send(self):
     client = WebsocketClient(self.session, "wss://localhost:0")
     with patch.object(client, "ws") as mock_ws:
         client.send("foo")
         client.send(b"foo", ABNF.OPCODE_BINARY)
         client.send_json({"foo": "bar", "baz": "qux"})
     self.assertEqual(mock_ws.send.call_args_list, [
         call("foo", ABNF.OPCODE_TEXT),
         call(b"foo", ABNF.OPCODE_BINARY),
         call("{\"foo\":\"bar\",\"baz\":\"qux\"}", ABNF.OPCODE_TEXT),
     ])
Exemple #5
0
 def test_handlers(self):
     client = WebsocketClient(self.session, "wss://localhost:0")
     self.assertEqual(client.ws.on_open, client.on_open)
     self.assertEqual(client.ws.on_error, client.on_error)
     self.assertEqual(client.ws.on_close, client.on_close)
     self.assertEqual(client.ws.on_ping, client.on_ping)
     self.assertEqual(client.ws.on_pong, client.on_pong)
     self.assertEqual(client.ws.on_message, client.on_message)
     self.assertEqual(client.ws.on_cont_message, client.on_cont_message)
     self.assertEqual(client.ws.on_data, client.on_data)
Exemple #6
0
    def test_reconnect_disconnected(self, mock_wsapp: Mock):
        client = WebsocketClient(self.session, "wss://localhost:0")
        event_run_forever_entered = Event()

        # noinspection PyUnusedLocal
        def mock_run_forever(**data):
            client.ws.keep_running = False
            event_run_forever_entered.set()

        client.ws.keep_running = True
        client.ws.run_forever.side_effect = mock_run_forever

        client.start()
        self.assertTrue(event_run_forever_entered.wait(1), "Enters run_forever loop on ws client thread")
        self.assertEqual(mock_wsapp.call_count, 1)
        client.reconnect()
        self.assertEqual(mock_wsapp.call_count, 1, "Doesn't reconnect if disconnected")
        client.join()
Exemple #7
0
 def test_args_and_proxy(self):
     self.session.set_option("http-proxy", "https://*****:*****@hostname:1234")
     client = WebsocketClient(
         self.session,
         "wss://localhost:0",
         subprotocols=["sub1", "sub2"],
         cookie="cookie",
         sockopt=("sockopt1", "sockopt2"),
         sslopt={"ssloptkey": "ssloptval"},
         host="customhost",
         origin="customorigin",
         suppress_origin=True,
         ping_interval=30,
         ping_timeout=4,
         ping_payload="ping"
     )
     self.assertEqual(client.ws.url, "wss://localhost:0")
     self.assertEqual(client.ws.subprotocols, ["sub1", "sub2"])
     self.assertEqual(client.ws.cookie, "cookie")
     with patch.object(client.ws, "run_forever") as mock_ws_run_forever:
         client.start()
         client.join(1)
     self.assertFalse(client.is_alive())
     self.assertEqual(mock_ws_run_forever.call_args_list, [
         call(
             sockopt=("sockopt1", "sockopt2"),
             sslopt={"ssloptkey": "ssloptval"},
             host="customhost",
             origin="customorigin",
             suppress_origin=True,
             ping_interval=30,
             ping_timeout=4,
             ping_payload="ping",
             proxy_type="https",
             http_proxy_host="hostname",
             http_proxy_port=1234,
             http_proxy_auth=("username", "password")
         )
     ])