From 0ba38b84b606c09b803b4645897528cb17b22f93 Mon Sep 17 00:00:00 2001 From: Jonas Gastal Date: Sun, 10 Feb 2013 01:31:51 -0200 Subject: Make TestHTTPServer header comparison order independent. The order of headers in an HTTP request is irrelevant and program behavior should not depend on it. Change-Id: I77e1b6265ceed8a38f04e425ba8e6eb70b5227f1 Reviewed-by: Richard J. Moore Reviewed-by: Shane Kearns --- tests/auto/shared/testhttpserver.cpp | 53 ++++++++++++++++++++++-------------- tests/auto/shared/testhttpserver.h | 5 +++- 2 files changed, 36 insertions(+), 22 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/shared/testhttpserver.cpp b/tests/auto/shared/testhttpserver.cpp index 205d5cec5d..fd681710de 100644 --- a/tests/auto/shared/testhttpserver.cpp +++ b/tests/auto/shared/testhttpserver.cpp @@ -137,7 +137,19 @@ bool TestHTTPServer::wait(const QUrl &expect, const QUrl &reply, const QUrl &bod bodyData = bodyFile.readAll(); } - waitData = expectFile.readAll(); + QByteArray line; + bool headers_done = false; + while (!(line = expectFile.readLine()).isEmpty()) { + line.replace('\r', ""); + if (line.at(0) == '\n') { + headers_done = true; + continue; + } + if (headers_done) + waitData.body.append(line); + else + waitData.headers.append(line); + } /* while (waitData.endsWith('\n')) waitData = waitData.left(waitData.count() - 1); @@ -199,39 +211,38 @@ void TestHTTPServer::readyRead() QTcpSocket *socket = qobject_cast(sender()); if (!socket || socket->state() == QTcpSocket::ClosingState) return; - QByteArray ba = socket->readAll(); - if (!dirs.isEmpty()) { - serveGET(socket, ba); + serveGET(socket, socket->readAll()); return; } - if (m_hasFailed || waitData.isEmpty()) { - qWarning() << "TestHTTPServer: Unexpected data" << ba; + if (m_hasFailed || (waitData.body.isEmpty() && waitData.headers.count() == 0)) { + qWarning() << "TestHTTPServer: Unexpected data" << socket->readAll(); return; } - for (int ii = 0; ii < ba.count(); ++ii) { - const char c = ba.at(ii); - if (c == '\r' && waitData.isEmpty()) - continue; - else if (!waitData.isEmpty() && c == waitData.at(0)) - waitData = waitData.mid(1); - else if (c == '\r') - continue; - else { - QByteArray data = ba.mid(ii); - qWarning() << "TestHTTPServer: Unexpected data" << data << "\nExpected: " << waitData; + QByteArray line; + while (!(line = socket->readLine()).isEmpty()) { + line.replace('\r', ""); + if (line.at(0) == '\n') { + QByteArray data = socket->readAll(); + if (waitData.body != data) { + qWarning() << "TestHTTPServer: Unexpected data" << data << "\nExpected: " << waitData.body; + m_hasFailed = true; + socket->disconnectFromHost(); + return; + } + } + else if (!waitData.headers.contains(line)) { + qWarning() << "TestHTTPServer: Unexpected header:" << line << "\nExpected headers: " << waitData.headers; m_hasFailed = true; socket->disconnectFromHost(); return; } } - if (waitData.isEmpty()) { - socket->write(replyData); - socket->disconnectFromHost(); - } + socket->write(replyData); + socket->disconnectFromHost(); } bool TestHTTPServer::reply(QTcpSocket *socket, const QByteArray &fileName) diff --git a/tests/auto/shared/testhttpserver.h b/tests/auto/shared/testhttpserver.h index 15e08afd0c..ce0501f170 100644 --- a/tests/auto/shared/testhttpserver.h +++ b/tests/auto/shared/testhttpserver.h @@ -81,7 +81,10 @@ private: QHash dataCache; QList > toSend; - QByteArray waitData; + struct WaitData { + QList headers; + QByteArray body; + } waitData; QByteArray replyData; QByteArray bodyData; bool m_hasFailed; -- cgit v1.2.3