+void tst_QNetworkReply::backgroundRequest_data()
+{
+ QTest::addColumn<bool>("background");
+ QTest::addColumn<int>("policy");
+ QTest::addColumn<QNetworkReply::NetworkError>("error");
+
+ QTest::newRow("fg, normal") << false << 0 << QNetworkReply::NoError;
+ QTest::newRow("bg, normal") << true << 0 << QNetworkReply::NoError;
+ QTest::newRow("fg, nobg") << false << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::NoError;
+ QTest::newRow("bg, nobg") << true << (int)QNetworkSession::NoBackgroundTrafficPolicy << QNetworkReply::BackgroundRequestNotAllowedError;
+
+}
+
+void tst_QNetworkReply::backgroundRequest()
+{
+#ifdef QT_BUILD_INTERNAL
+ QFETCH(bool, background);
+ QFETCH(int, policy);
+ QFETCH(QNetworkReply::NetworkError, error);
+
+ QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName()));
+
+ if (background)
+ request.setAttribute(QNetworkRequest::BackgroundRequestAttribute, QVariant::fromValue(true));
+
+ //this preconstructs the session so we can change policies in advance
+ manager.setConfiguration(networkConfiguration);
+
+ const QWeakPointer<const QNetworkSession> session = QNetworkAccessManagerPrivate::getNetworkSession(&manager);
+ QVERIFY(session);
+ QNetworkSession::UsagePolicies original = session.data()->usagePolicies();
+ QNetworkSessionPrivate::setUsagePolicies(*const_cast<QNetworkSession *>(session.data()), QNetworkSession::UsagePolicies(policy));
+
+ QNetworkReplyPtr reply(manager.get(request));
+
+ QVERIFY(waitForFinish(reply) != Timeout);
+ if (session)
+ QNetworkSessionPrivate::setUsagePolicies(*const_cast<QNetworkSession *>(session.data()), original);
+
+ QVERIFY(reply->isFinished());
+ QCOMPARE(reply->error(), error);
+#endif
+}