summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2018-10-15 14:50:34 +0200
committerMichal Klocek <michal.klocek@qt.io>2018-10-18 13:30:22 +0000
commit6fffee8bfb270eda4f06fa5dbe3a4b190036e90a (patch)
tree95298dfce104dad817febf220b7d047695ae2641
parent5be48d4238465b4efd36ed4bbb96ec407be9f217 (diff)
Adds proxy pac test
Task-number: QTBUG-71128 Task-number: QTBUG-69281 Task-number: QTBUG-71229 Change-Id: If6b839ce12efb3ccd69c270d99b10b3756014bb2 Reviewed-by: Kai Koehne <kai.koehne@qt.io>
-rw-r--r--tests/auto/widgets/proxypac/proxy.pac7
-rw-r--r--tests/auto/widgets/proxypac/proxypac.pro28
-rw-r--r--tests/auto/widgets/proxypac/proxyserver.cpp84
-rw-r--r--tests/auto/widgets/proxypac/proxyserver.h62
-rw-r--r--tests/auto/widgets/proxypac/tst_proxypac.cpp73
-rw-r--r--tests/auto/widgets/widgets.pro3
6 files changed, 257 insertions, 0 deletions
diff --git a/tests/auto/widgets/proxypac/proxy.pac b/tests/auto/widgets/proxypac/proxy.pac
new file mode 100644
index 000000000..1d29847b9
--- /dev/null
+++ b/tests/auto/widgets/proxypac/proxy.pac
@@ -0,0 +1,7 @@
+function FindProxyForURL(url, host)
+{
+ if (shExpMatch(host, "*.proxy1.com")) return "PROXY localhost:5551";
+ if (shExpMatch(host, "*.proxy2.com")) return "PROXY localhost:5552";
+ return "PROXY proxy.url:8080";
+}
+
diff --git a/tests/auto/widgets/proxypac/proxypac.pro b/tests/auto/widgets/proxypac/proxypac.pro
new file mode 100644
index 000000000..00ae90977
--- /dev/null
+++ b/tests/auto/widgets/proxypac/proxypac.pro
@@ -0,0 +1,28 @@
+include(../tests.pri)
+QT += webengine
+HEADERS += proxyserver.h
+SOURCES += proxyserver.cpp
+
+# QTBUG-71229
+xgd_desktop.name=XDG_CURRENT_DESKTOP
+xgd_desktop.value=KDE
+QT_TOOL_ENV += xgd_desktop
+
+kde_home.name=KDEHOME
+kde_home.value=$$OUT_PWD
+QT_TOOL_ENV += kde_home
+
+PROXY_CONFIG= \
+ "[Proxy Settings]" \
+ "Proxy Config Script=$$PWD/proxy.pac" \
+ "ProxyType=2"
+
+mkpath($$OUT_PWD/share/config)
+KDE_FILE = $$OUT_PWD/share/config/kioslaverc
+
+!build_pass {
+ write_file($$KDE_FILE, PROXY_CONFIG)
+}
+
+QMAKE_DISTCLEAN += $$KDE_FILE
+
diff --git a/tests/auto/widgets/proxypac/proxyserver.cpp b/tests/auto/widgets/proxypac/proxyserver.cpp
new file mode 100644
index 000000000..4d38c87c9
--- /dev/null
+++ b/tests/auto/widgets/proxypac/proxyserver.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "proxyserver.h"
+#include <QDataStream>
+#include <QTcpSocket>
+#include <QDebug>
+
+ProxyServer::ProxyServer(QObject *parent) : QObject(parent),
+ m_port(5555)
+{
+ connect(&m_server, &QTcpServer::newConnection, this, &ProxyServer::handleNewConnection);
+}
+
+void ProxyServer::setPort(int port)
+{
+ m_port = port;
+}
+
+bool ProxyServer::isListening()
+{
+ return m_server.isListening();
+}
+
+void ProxyServer::run()
+{
+ if (!m_server.listen(QHostAddress::LocalHost, m_port))
+ qFatal("Could not start the test server");
+}
+
+void ProxyServer::handleNewConnection()
+{
+ // do one connection at the time
+ Q_ASSERT(m_data.isEmpty());
+ QTcpSocket *socket = m_server.nextPendingConnection();
+ Q_ASSERT(socket);
+ connect(socket, &QAbstractSocket::disconnected, socket, &QObject::deleteLater);
+ connect(socket, &QAbstractSocket::readyRead, this, &ProxyServer::handleReadReady);
+}
+
+void ProxyServer::handleReadReady()
+{
+ QTcpSocket *socket = qobject_cast<QTcpSocket*>(sender());
+ Q_ASSERT(socket);
+
+ m_data.append(socket->readAll());
+
+ //simply wait for whole request
+ if (!m_data.endsWith("\r\n\r\n"))
+ return;
+
+ // add fake proxy authetication
+ socket->write("HTTP/1.1 407 Proxy Auth Required\nProxy-Authenticate: "
+ "Basic realm=\"Proxy requires authentication\"\r\n\r\n");
+
+ m_data.clear();
+ socket->disconnectFromHost();
+ emit requestReceived();
+}
diff --git a/tests/auto/widgets/proxypac/proxyserver.h b/tests/auto/widgets/proxypac/proxyserver.h
new file mode 100644
index 000000000..ea68286a2
--- /dev/null
+++ b/tests/auto/widgets/proxypac/proxyserver.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef PROXY_SERVER_H
+#define PROXY_SERVER_H
+
+#include <QObject>
+#include <QTcpServer>
+
+class ProxyServer : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit ProxyServer(QObject *parent = nullptr);
+
+ void setPort(int port);
+ bool isListening();
+
+signals:
+ void requestReceived();
+
+public slots:
+ void run();
+
+private slots:
+ void handleNewConnection();
+ void handleReadReady();
+
+private:
+ int m_port;
+ QByteArray m_data;
+ QTcpServer m_server;
+
+};
+
+#endif // PROXY_SERVER_H
diff --git a/tests/auto/widgets/proxypac/tst_proxypac.cpp b/tests/auto/widgets/proxypac/tst_proxypac.cpp
new file mode 100644
index 000000000..f9340341b
--- /dev/null
+++ b/tests/auto/widgets/proxypac/tst_proxypac.cpp
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qtwebengineglobal.h"
+#include "proxyserver.h"
+#include <QTest>
+#include <QSignalSpy>
+#include <QWebEngineProfile>
+#include <QWebEnginePage>
+#include <QNetworkProxy>
+
+
+class tst_ProxyPac : public QObject {
+ Q_OBJECT
+public:
+ tst_ProxyPac(){}
+
+private slots:
+ void proxypac();
+};
+
+void tst_ProxyPac::proxypac()
+{
+ ProxyServer proxyServer1;
+ proxyServer1.setPort(5551);
+ proxyServer1.run();
+ QSignalSpy proxySpy1(&proxyServer1, &ProxyServer::requestReceived);
+
+ ProxyServer proxyServer2;
+ proxyServer2.setPort(5552);
+ proxyServer2.run();
+ QSignalSpy proxySpy2(&proxyServer2, &ProxyServer::requestReceived);
+
+ QTRY_VERIFY2(proxyServer1.isListening(), "Could not setup proxy server 1");
+ QTRY_VERIFY2(proxyServer2.isListening(), "Could not setup proxy server 2");
+
+ QWebEngineProfile profile;
+ QWebEnginePage page(&profile);
+ page.load(QUrl("http://test.proxy1.com"));
+ QTRY_COMPARE(proxySpy1.count() >= 1, true);
+ QVERIFY(proxySpy2.count() == 0);
+ page.load(QUrl("http://test.proxy2.com"));
+ QTRY_COMPARE(proxySpy2.count() >= 1 , true);
+}
+
+#include "tst_proxypac.moc"
+QTEST_MAIN(tst_ProxyPac)
+
diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro
index 5a13e8075..ba1644d16 100644
--- a/tests/auto/widgets/widgets.pro
+++ b/tests/auto/widgets/widgets.pro
@@ -21,6 +21,9 @@ qtConfig(accessibility) {
SUBDIRS += qwebengineaccessibility
}
+# QTBUG-71229
+linux:!boot2qt: SUBDIRS += proxypac
+
qtConfig(webengine-spellchecker):!cross_compile {
!qtConfig(webengine-native-spellchecker) {
SUBDIRS += qwebenginespellcheck