diff options
Diffstat (limited to 'tests/auto/shared/httpserver.cpp')
-rw-r--r-- | tests/auto/shared/httpserver.cpp | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/tests/auto/shared/httpserver.cpp b/tests/auto/shared/httpserver.cpp index 6012379f2..8d14c18ff 100644 --- a/tests/auto/shared/httpserver.cpp +++ b/tests/auto/shared/httpserver.cpp @@ -27,44 +27,59 @@ ****************************************************************************/ #include "httpserver.h" -#include "waitforsignal.h" +#include <QLoggingCategory> + +Q_LOGGING_CATEGORY(gHttpServerLog, "HttpServer") HttpServer::HttpServer(QObject *parent) : QObject(parent) { connect(&m_tcpServer, &QTcpServer::newConnection, this, &HttpServer::handleNewConnection); - if (!m_tcpServer.listen()) - qWarning("HttpServer: listen() failed"); - m_url = QStringLiteral("http://127.0.0.1:") + QString::number(m_tcpServer.serverPort()); } -QUrl HttpServer::url(const QString &path) const +bool HttpServer::start() { - auto copy = m_url; - copy.setPath(path); - return copy; + m_error = false; + + if (!m_tcpServer.listen()) { + qCWarning(gHttpServerLog).noquote() << m_tcpServer.errorString(); + return false; + } + + m_url.setScheme(QStringLiteral("http")); + m_url.setHost(QStringLiteral("127.0.0.1")); + m_url.setPort(m_tcpServer.serverPort()); + + return true; } -void HttpServer::handleNewConnection() +bool HttpServer::stop() { - auto reqRep = new HttpReqRep(m_tcpServer.nextPendingConnection(), this); - connect(reqRep, &HttpReqRep::readFinished, this, &HttpServer::handleReadFinished); + m_tcpServer.close(); + return !m_error; } -void HttpServer::handleReadFinished(bool ok) +QUrl HttpServer::url(const QString &path) const { - auto reqRep = qobject_cast<HttpReqRep *>(sender()); - if (ok) - Q_EMIT newRequest(reqRep); - else - reqRep->deleteLater(); + auto copy = m_url; + copy.setPath(path); + return copy; } -std::unique_ptr<HttpReqRep> waitForRequest(HttpServer *server) +void HttpServer::handleNewConnection() { - std::unique_ptr<HttpReqRep> result; - waitForSignal(server, &HttpServer::newRequest, [&](HttpReqRep *rr) { - rr->setParent(nullptr); - result.reset(rr); + auto rr = new HttpReqRep(m_tcpServer.nextPendingConnection(), this); + connect(rr, &HttpReqRep::requestReceived, [this, rr]() { + Q_EMIT newRequest(rr); + rr->close(); + }); + connect(rr, &HttpReqRep::responseSent, [this, rr]() { + qCInfo(gHttpServerLog).noquote() << rr->requestMethod() << rr->requestPath() + << rr->responseStatus() << rr->responseBody().size(); + }); + connect(rr, &HttpReqRep::error, [this, rr](const QString &error) { + qCWarning(gHttpServerLog).noquote() << rr->requestMethod() << rr->requestPath() + << error; + m_error = true; }); - return result; + connect(rr, &HttpReqRep::closed, rr, &QObject::deleteLater); } |