diff options
author | Juha Vuolle <juha.vuolle@qt.io> | 2024-01-10 10:33:37 +0200 |
---|---|---|
committer | Juha Vuolle <juha.vuolle@qt.io> | 2024-01-15 10:29:07 +0200 |
commit | 2d9afc8501879a0ef39bc169cdf8d0b7fa9616f8 (patch) | |
tree | 371aa5cdf9e097141eef79528eab21ac9f6ab7a3 /tests/auto/network | |
parent | 819a8f30f4cf2efe3b8e1f3f6356ff0afed0ae65 (diff) |
Add autotest support for QRestReply json parsing errors
Pick-to: 6.7
Change-Id: Iffabdcafa49f16e24f182991c527b3d3217ca955
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Diffstat (limited to 'tests/auto/network')
-rw-r--r-- | tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp index f2dce16c1f..b619f3fcd5 100644 --- a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp +++ b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp @@ -740,6 +740,7 @@ void tst_QRestAccessManager::json() QNetworkRequest request(server.url()); QRestReply *replyFromServer = nullptr; QJsonDocument responseJsonDocument; + QJsonParseError parseError; HttpData serverSideRequest; // The request data the server received HttpData serverSideResponse; // The response data the server responds with @@ -751,10 +752,19 @@ void tst_QRestAccessManager::json() // Test receiving valid json object serverSideResponse.body = "{\"key1\":\"value1\",""\"key2\":\"value2\"}\n"_ba; - manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; }); - QTRY_VERIFY(replyFromServer); - std::optional json = replyFromServer->json(); + replyFromServer = manager.get(request); + // Read unfinished reply + QVERIFY(!replyFromServer->isFinished()); + QTest::ignoreMessage(QtWarningMsg, "Attempt to read json() of an unfinished reply, ignoring."); + parseError.error = QJsonParseError::ParseError::DocumentTooLarge; // Reset to impossible value + QVERIFY(!replyFromServer->json(&parseError)); + QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError); + // Read finished reply + QTRY_VERIFY(replyFromServer->isFinished()); + parseError.error = QJsonParseError::ParseError::DocumentTooLarge; + std::optional json = replyFromServer->json(&parseError); QVERIFY(json); + QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError); responseJsonDocument = *json; QVERIFY(responseJsonDocument.isObject()); QCOMPARE(responseJsonDocument["key1"], "value1"); @@ -766,7 +776,11 @@ void tst_QRestAccessManager::json() serverSideResponse.body = "foobar"_ba; manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; }); QTRY_VERIFY(replyFromServer); - QVERIFY(!replyFromServer->json().has_value()); // std::nullopt returned + parseError.error = QJsonParseError::ParseError::DocumentTooLarge; + QVERIFY(!replyFromServer->json(&parseError).has_value()); // std::nullopt returned + QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::NoError); + QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::DocumentTooLarge); + QCOMPARE_GT(parseError.offset, 0); replyFromServer->deleteLater(); replyFromServer = nullptr; @@ -774,7 +788,9 @@ void tst_QRestAccessManager::json() serverSideResponse.body = "[\"foo\", \"bar\"]\n"_ba; manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; }); QTRY_VERIFY(replyFromServer); - json = replyFromServer->json(); + parseError.error = QJsonParseError::ParseError::DocumentTooLarge; + json = replyFromServer->json(&parseError); + QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError); QVERIFY(json); responseJsonDocument = *json; QVERIFY(responseJsonDocument.isArray()); @@ -788,7 +804,11 @@ void tst_QRestAccessManager::json() serverSideResponse.body = "foobar"_ba; manager.get(request, this, [&](QRestReply *reply) { replyFromServer = reply; }); QTRY_VERIFY(replyFromServer); - QVERIFY(!replyFromServer->json().has_value()); // std::nullopt returned + parseError.error = QJsonParseError::ParseError::DocumentTooLarge; + QVERIFY(!replyFromServer->json(&parseError).has_value()); // std::nullopt returned + QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::NoError); + QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::DocumentTooLarge); + QCOMPARE_GT(parseError.offset, 0); replyFromServer->deleteLater(); replyFromServer = nullptr; } |