aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Gastal <jgastal@gmail.com>2013-02-10 01:31:51 -0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-06-07 02:14:33 +0200
commit0ba38b84b606c09b803b4645897528cb17b22f93 (patch)
tree0d9516f682bf5f77382eb5913cbb6124fde35033
parentcd4820fbbe1bd1d8a3ba74fcfc91c4264682b602 (diff)
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 <rich@kde.org> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
-rw-r--r--tests/auto/shared/testhttpserver.cpp53
-rw-r--r--tests/auto/shared/testhttpserver.h5
2 files changed, 36 insertions, 22 deletions
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<QTcpSocket *>(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<QTcpSocket *, QByteArray> dataCache;
QList<QPair<QTcpSocket *, QByteArray> > toSend;
- QByteArray waitData;
+ struct WaitData {
+ QList <QByteArray>headers;
+ QByteArray body;
+ } waitData;
QByteArray replyData;
QByteArray bodyData;
bool m_hasFailed;