tst_QNetworkReply::ioGetFromBuiltinHttp - fix for large kernel buffers
On some platforms our 1200 x 1000 bytes seems to be not enough to fill kernel buffers (socket write). But it's not a reason to fail test, just skip it. Task-number:QTBUG-49205 Change-Id: I13ea6f315f9318288ba054cf8bfa6cdd61e489d2 Reviewed-by: Richard J. Moore <rich@kde.org>
This commit is contained in:
parent
8c2ca33073
commit
8e43f25edd
@ -199,6 +199,7 @@ public Q_SLOTS:
|
|||||||
|
|
||||||
protected Q_SLOTS:
|
protected Q_SLOTS:
|
||||||
void nestedEventLoops_slot();
|
void nestedEventLoops_slot();
|
||||||
|
void notEnoughData();
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void init();
|
void init();
|
||||||
@ -487,6 +488,7 @@ private Q_SLOTS:
|
|||||||
void parentingRepliesToTheApp();
|
void parentingRepliesToTheApp();
|
||||||
private:
|
private:
|
||||||
QString testDataDir;
|
QString testDataDir;
|
||||||
|
bool notEnoughDataForFastSender;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool tst_QNetworkReply::seedCreated = false;
|
bool tst_QNetworkReply::seedCreated = false;
|
||||||
@ -991,11 +993,13 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// a server that sends the data provided at construction time, useful for HTTP
|
// a server that sends the data provided at construction time, useful for HTTP
|
||||||
FastSender(const QByteArray& data, bool https, bool fillBuffer)
|
FastSender(const QByteArray& data, bool https, bool fillBuffer, tst_QNetworkReply *listener = 0)
|
||||||
: wantedSize(data.size()), port(-1), protocol(ProvidedData),
|
: wantedSize(data.size()), port(-1), protocol(ProvidedData),
|
||||||
doSsl(https), fillKernelBuffer(fillBuffer), transferRate(-1),
|
doSsl(https), fillKernelBuffer(fillBuffer), transferRate(-1),
|
||||||
dataToTransmit(data), dataIndex(0)
|
dataToTransmit(data), dataIndex(0)
|
||||||
{
|
{
|
||||||
|
if (listener)
|
||||||
|
connect(this, SIGNAL(notEnoughData()), listener, SLOT(notEnoughData()));
|
||||||
start();
|
start();
|
||||||
ready.acquire();
|
ready.acquire();
|
||||||
}
|
}
|
||||||
@ -1058,6 +1062,7 @@ protected:
|
|||||||
do {
|
do {
|
||||||
if (writeNextData(client, BlockSize) < BlockSize) {
|
if (writeNextData(client, BlockSize) < BlockSize) {
|
||||||
qDebug() << "ERROR: FastSender: not enough data to write in order to fill buffers; or client is reading too fast";
|
qDebug() << "ERROR: FastSender: not enough data to write in order to fill buffers; or client is reading too fast";
|
||||||
|
emit notEnoughData();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
while (client->bytesToWrite() > 0) {
|
while (client->bytesToWrite() > 0) {
|
||||||
@ -1118,6 +1123,7 @@ protected:
|
|||||||
}
|
}
|
||||||
signals:
|
signals:
|
||||||
void dataReady();
|
void dataReady();
|
||||||
|
void notEnoughData();
|
||||||
};
|
};
|
||||||
|
|
||||||
class RateControlledReader: public QObject
|
class RateControlledReader: public QObject
|
||||||
@ -4901,7 +4907,8 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp()
|
|||||||
<< testData.size() << "bytes of data";
|
<< testData.size() << "bytes of data";
|
||||||
|
|
||||||
const bool fillKernelBuffer = bufferSize > 0;
|
const bool fillKernelBuffer = bufferSize > 0;
|
||||||
FastSender server(httpResponse, https, fillKernelBuffer);
|
notEnoughDataForFastSender = false;
|
||||||
|
FastSender server(httpResponse, https, fillKernelBuffer, this);
|
||||||
|
|
||||||
QUrl url(QString("%1://127.0.0.1:%2/qtest/rfc3252.txt")
|
QUrl url(QString("%1://127.0.0.1:%2/qtest/rfc3252.txt")
|
||||||
.arg(https?"https":"http")
|
.arg(https?"https":"http")
|
||||||
@ -4916,7 +4923,13 @@ void tst_QNetworkReply::ioGetFromBuiltinHttp()
|
|||||||
QTime loopTime;
|
QTime loopTime;
|
||||||
loopTime.start();
|
loopTime.start();
|
||||||
|
|
||||||
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
|
const int result = waitForFinish(reply);
|
||||||
|
if (notEnoughDataForFastSender) {
|
||||||
|
server.wait();
|
||||||
|
QSKIP("kernel socket buffers are too big for this test to work");
|
||||||
|
}
|
||||||
|
|
||||||
|
QVERIFY2(result == Success, msgWaitForFinished(reply));
|
||||||
|
|
||||||
const int elapsedTime = loopTime.elapsed();
|
const int elapsedTime = loopTime.elapsed();
|
||||||
server.wait();
|
server.wait();
|
||||||
@ -5589,6 +5602,11 @@ void tst_QNetworkReply::nestedEventLoops_slot()
|
|||||||
QTestEventLoop::instance().exitLoop();
|
QTestEventLoop::instance().exitLoop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_QNetworkReply::notEnoughData()
|
||||||
|
{
|
||||||
|
notEnoughDataForFastSender = true;
|
||||||
|
}
|
||||||
|
|
||||||
void tst_QNetworkReply::nestedEventLoops()
|
void tst_QNetworkReply::nestedEventLoops()
|
||||||
{
|
{
|
||||||
// Slightly fragile test, it may not be testing anything
|
// Slightly fragile test, it may not be testing anything
|
||||||
|
Loading…
x
Reference in New Issue
Block a user