Return correct error string for known socket errors
authorKurt Pattyn <pattyn.kurt@gmail.com>
Sun, 9 Mar 2014 10:05:36 +0000 (11:05 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 12 Mar 2014 09:55:46 +0000 (10:55 +0100)
Task-number: QTBUG-37228
Change-Id: I246b858694ea456bce9a0fc4ac963a83502fd058
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
src/websockets/qwebsocket_p.cpp
tests/auto/qwebsocket/tst_qwebsocket.cpp

index be589db..c51ba38 100644 (file)
@@ -92,7 +92,7 @@ QWebSocketPrivate::QWebSocketPrivate(const QString &origin, QWebSocketProtocol::
     QObjectPrivate(),
     q_ptr(pWebSocket),
     m_pSocket(),
-    m_errorString(QWebSocket::tr("Unknown error")),
+    m_errorString(),
     m_version(version),
     m_resourceName(),
     m_requestUrl(),
index f7f57b7..d2c5055 100644 (file)
@@ -146,6 +146,7 @@ private Q_SLOTS:
     void tst_invalidOrigin();
     void tst_sendTextMessage();
     void tst_sendBinaryMessage();
+    void tst_errorString();
 };
 
 tst_QWebSocket::tst_QWebSocket()
@@ -202,8 +203,7 @@ void tst_QWebSocket::tst_initialisation()
     QCOMPARE(socket->origin(), expectedOrigin);
     QCOMPARE(socket->version(), expectedVersion);
     QCOMPARE(socket->error(), QAbstractSocket::UnknownSocketError);
-    //error string defaults to "Unknown error" (localised)
-    QVERIFY(!socket->errorString().isEmpty());
+    QVERIFY(socket->errorString().isEmpty());
     QVERIFY(!socket->isValid());
     QVERIFY(socket->localAddress().isNull());
     QCOMPARE(socket->localPort(), quint16(0));
@@ -298,7 +298,7 @@ void tst_QWebSocket::tst_invalidOpen()
     //at this point the socket is in a connecting state
     //so, there should no error at this point
     QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError);
-    QVERIFY(!socket.errorString().isEmpty());
+    //QVERIFY(socket.errorString().isEmpty());
     QVERIFY(!socket.isValid());
     QVERIFY(socket.localAddress().isNull());
     QCOMPARE(socket.localPort(), quint16(0));
@@ -407,11 +407,15 @@ void tst_QWebSocket::tst_invalidOrigin()
 
 void tst_QWebSocket::tst_sendTextMessage()
 {
-    //will resolve in another commit
+    //TODO: will resolve in another commit
 #ifndef Q_OS_WIN
     EchoServer echoServer;
 
     QWebSocket socket;
+
+    //should return 0 because socket is not open yet
+    QCOMPARE(socket.sendTextMessage(QStringLiteral("1234")), 0);
+
     QSignalSpy socketConnectedSpy(&socket, SIGNAL(connected()));
     QSignalSpy textMessageReceived(&socket, SIGNAL(textMessageReceived(QString)));
     QSignalSpy textFrameReceived(&socket, SIGNAL(textFrameReceived(QString,bool)));
@@ -477,11 +481,15 @@ void tst_QWebSocket::tst_sendTextMessage()
 
 void tst_QWebSocket::tst_sendBinaryMessage()
 {
-    //will resolve in another commit
+    //TODO: will resolve in another commit
 #ifndef Q_OS_WIN
     EchoServer echoServer;
 
     QWebSocket socket;
+
+    //should return 0 because socket is not open yet
+    QCOMPARE(socket.sendBinaryMessage(QByteArrayLiteral("1234")), 0);
+
     QSignalSpy socketConnectedSpy(&socket, SIGNAL(connected()));
     QSignalSpy textMessageReceived(&socket, SIGNAL(textMessageReceived(QString)));
     QSignalSpy textFrameReceived(&socket, SIGNAL(textFrameReceived(QString,bool)));
@@ -514,7 +522,7 @@ void tst_QWebSocket::tst_sendBinaryMessage()
 
     socket.close();
 
-    //QTBUG-36762: QWebSocket emits multiplied signals when socket was reopened
+    //QTBUG-36762: QWebSocket emits multiple signals when socket is reopened
     socketConnectedSpy.clear();
     binaryMessageReceived.clear();
     binaryFrameReceived.clear();
@@ -545,6 +553,28 @@ void tst_QWebSocket::tst_sendBinaryMessage()
 #endif
 }
 
+void tst_QWebSocket::tst_errorString()
+{
+    //Check for QTBUG-37228: QWebSocket returns "Unknown Error" for known errors
+    QWebSocket socket;
+
+    //check that the default error string is empty
+    QVERIFY(socket.errorString().isEmpty());
+
+    QSignalSpy errorSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError)));
+
+    socket.open(QUrl(QStringLiteral("ws://someserver.on.mars:9999")));
+
+    if (errorSpy.count() == 0)
+        errorSpy.wait();
+    QCOMPARE(errorSpy.count(), 1);
+    QList<QVariant> arguments = errorSpy.takeFirst();
+    QAbstractSocket::SocketError socketError =
+            qvariant_cast<QAbstractSocket::SocketError>(arguments.at(0));
+    QCOMPARE(socketError, QAbstractSocket::HostNotFoundError);
+    QCOMPARE(socket.errorString(), QStringLiteral("Host not found"));
+}
+
 QTEST_MAIN(tst_QWebSocket)
 
 #include "tst_qwebsocket.moc"