1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
// Copyright (C) 2018 Ford Motor Company
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QRemoteObjectNode>
#include <QScopedPointer>
#include "rep_pingpong_replica.h"
#include "../../../shared/testutils.h"
class tst_clientSSL: public QObject
{
Q_OBJECT
public:
tst_clientSSL() = default;
private slots:
void initTestCase()
{
QVERIFY(TestUtils::init("tst_client"));
}
void testRun()
{
// TODO: This a limitation of QProcess on Android, QTBUG-88507 is relevant to this issue.
#ifdef Q_OS_ANDROID
QSKIP("QProcess doesn't support running user bundled binaries on Android");
#endif
QProcess serverProc;
serverProc.setProcessChannelMode(QProcess::ForwardedChannels);
serverProc.start(TestUtils::findExecutable("sslTestServer", "/sslTestServer"),
QStringList());
QVERIFY(serverProc.waitForStarted());
// wait for server start
QTest::qWait(200);
QRemoteObjectNode m_client;
auto config = QSslConfiguration::defaultConfiguration();
config.setCaCertificates(QSslCertificate::fromPath(QStringLiteral(":/sslcert/rootCA.pem")));
QSslConfiguration::setDefaultConfiguration(config);
QScopedPointer<QSslSocket> socketClient{new QSslSocket};
socketClient->setLocalCertificate(QStringLiteral(":/sslcert/client.crt"));
socketClient->setPrivateKey(QStringLiteral(":/sslcert/client.key"));
socketClient->setPeerVerifyMode(QSslSocket::VerifyPeer);
socketClient->connectToHostEncrypted(QStringLiteral("127.0.0.1"), 65111);
QVERIFY(socketClient->waitForEncrypted(-1));
connect(socketClient.data(), &QSslSocket::errorOccurred,
socketClient.data(), [](QAbstractSocket::SocketError error){
QCOMPARE(error, QAbstractSocket::RemoteHostClosedError);
});
m_client.addClientSideConnection(socketClient.data());
QScopedPointer<PingPongReplica> pp{m_client.acquire<PingPongReplica>()};
QVERIFY(pp->waitForSource());
QString pongStr;
connect(pp.data(), &PingPongReplica::pong, this, [&pongStr](const QString &str) {
pongStr = str;
});
pp->ping("yahoo");
QTRY_COMPARE(pongStr, "Pong yahoo");
pp->ping("one more");
QTRY_COMPARE(pongStr, "Pong one more");
pp->ping("last one");
QTRY_COMPARE(pongStr, "Pong last one");
pp->quit();
QTRY_VERIFY(serverProc.state() != QProcess::Running);
QCOMPARE(serverProc.exitCode(), 0);
}
};
QTEST_MAIN(tst_clientSSL)
#include "tst_client.moc"
|