1#include "testengine.hpp"
3#include "testengine_p.h"
8using namespace Qt::Literals::StringLiterals;
10TestEngine::TestEngine(
Application *app,
const QVariantMap &opts)
15int TestEngine::workerId()
const
20TestEngine::TestResponse TestEngine::createRequest(
const QByteArray &method,
21 const QByteArray &path,
22 const QByteArray &query,
26 QIODevice *bodyDevice =
nullptr;
27 if (headers.
header(
"Sequential").isEmpty()) {
28 bodyDevice =
new QBuffer(body);
30 bodyDevice =
new SequentialBuffer(body);
32 bodyDevice->open(QIODevice::ReadOnly);
35 if (bodyDevice->size()) {
39 TestEngineConnection req;
41 QByteArray _path = path;
44 req.protocol =
"HTTP/1.1"_ba;
46 req.serverAddress =
"127.0.0.1"_ba;
47 req.remoteAddress = QHostAddress(u
"127.0.0.1"_s);
48 req.remotePort = 3000;
49 req.remoteUser = QString{};
50 req.headers = headersCL;
51 req.startOfRequest = std::chrono::steady_clock::now();
52 req.body = bodyDevice;
54 Q_EMIT processRequestAsync(&req);
57 req.m_eventLoop.exec();
60 ret.body = req.m_responseData;
61 ret.statusCode = req.m_statusCode;
62 ret.headers = req.m_headers;
67TestEngine::TestResponse TestEngine::createRequest(
const QByteArray &method,
69 const QByteArray &query,
73 return createRequest(method, path.toLatin1(), query, headers, body);
76bool TestEngine::init()
78 return initApplication() && postForkApplication();
81SequentialBuffer::SequentialBuffer(QByteArray *buffer)
86bool SequentialBuffer::isSequential()
const
91qint64 SequentialBuffer::bytesAvailable()
const
93 return buf->size() + QIODevice::bytesAvailable();
96qint64 SequentialBuffer::readData(
char *data, qint64 maxlen)
98 QByteArray mid = buf->mid(pos(), maxlen);
99 memcpy(data, mid.data(), mid.size());
101 buf->remove(0, mid.size());
105qint64 SequentialBuffer::writeData(
const char *data, qint64 len)
112TestEngineConnection::TestEngineConnection() =
default;
114qint64 TestEngineConnection::doWrite(
const char *data, qint64 len)
116 m_responseData.append(data, len);
120bool TestEngineConnection::writeHeaders(quint16 status,
const Headers &headers)
122 m_statusCode = status;
128void TestEngineConnection::processingFinished()
133#include "moc_testengine.cpp"
The Cutelyst application.
The Cutelyst namespace holds all public Cutelyst API.