summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJulien Brianceau <jbrianceau@nds.com>2012-09-03 13:56:09 +0200
committerQt by Nokia <qt-info@nokia.com>2012-09-07 15:44:31 +0200
commit5b1bc864a91c3bdb02e36e7546dadebabb42fdec (patch)
treed0152be037386301af2a78dbba409bc98857e480 /tests
parent89a962c3a0e119a1faf351f5d3dc4c5c7bccccf3 (diff)
QtNetwork: bypass proxy for local connections
According to Qt doc, "Network proxy is not used if the address used in connectToHost(), bind() or listen() is equivalent to QHostAddress::LocalHost or QHostAddress::LocalHostIPv6. This is not the case in current implementation. Change-Id: I6b8a40c1e8bd8aad9504d8f939b87eda6e93337c Reviewed-by: Richard J. Moore <rich@kde.org> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
index 265c0fecbb..98fd60190d 100644
--- a/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
+++ b/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
@@ -80,6 +80,7 @@ private slots:
void systemProxyForQueryCalledFromThread();
void systemProxyForQuery_data();
void systemProxyForQuery() const;
+ void systemProxyForQuery_local();
#ifndef QT_NO_BEARERMANAGEMENT
void fromConfigurations();
void inNetworkAccessManager_data();
@@ -196,6 +197,66 @@ void tst_QNetworkProxyFactory::systemProxyForQuery() const
}
}
+void tst_QNetworkProxyFactory::systemProxyForQuery_local()
+{
+ QList<QNetworkProxy> list;
+ const QString proxyHost("myproxy.test.com");
+
+ // set an arbitrary proxy
+ QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::HttpProxy, proxyHost, 80));
+
+ // localhost
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://localhost/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("localhost"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+
+ // 127.0.0.1
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://127.0.0.1/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("127.0.0.1"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+
+ // [::1]
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://[::1]/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("[::1]"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+
+ // an arbitrary host
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://another.host.com/")));
+ QVERIFY((!list.isEmpty()) && (list[0].hostName() == proxyHost));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("another.host.com"), 80));
+ QVERIFY((!list.isEmpty()) && (list[0].hostName() == proxyHost));
+
+ // disable proxy
+ QNetworkProxy::setApplicationProxy(QNetworkProxy(QNetworkProxy::NoProxy));
+
+ // localhost
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://localhost/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("localhost"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+
+ // 127.0.0.1
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://127.0.0.1/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("127.0.0.1"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+
+ // [::1]
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://[::1]/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("[::1]"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+
+ // an arbitrary host
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QUrl("http://another.host.com/")));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+ list = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(QString("another.host.com"), 80));
+ QVERIFY(list.isEmpty() || (list[0].type() == QNetworkProxy::NoProxy));
+}
+
#ifndef QT_NO_BEARERMANAGEMENT
//Purpose of this test is just to check systemProxyForQuery doesn't hang or crash