summaryrefslogtreecommitdiffstats
path: root/tests/auto/restart/client/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/restart/client/main.cpp')
-rw-r--r--tests/auto/restart/client/main.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/auto/restart/client/main.cpp b/tests/auto/restart/client/main.cpp
new file mode 100644
index 0000000..aa2cdd9
--- /dev/null
+++ b/tests/auto/restart/client/main.cpp
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2019 Ford Motor Company
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtRemoteObjects 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 "rep_subclass_replica.h"
+
+#include <QCoreApplication>
+#include <QtRemoteObjects/qremoteobjectnode.h>
+#include <QtTest/QtTest>
+
+class tst_Client_Process : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase()
+ {
+ QLoggingCategory::setFilterRules("qt.remoteobjects.warning=true");
+ m_repNode.reset(new QRemoteObjectNode);
+ m_repNode->connectToNode(QUrl(QStringLiteral("tcp://127.0.0.1:65217")));
+ m_rep.reset(m_repNode->acquire<ParentClassReplica>());
+ connect(m_rep.data(), &QRemoteObjectReplica::stateChanged, [this](QRemoteObjectReplica::State state, QRemoteObjectReplica::State previousState) {
+ qDebug() << "**** stateChanged" << state << previousState;
+ if (state == QRemoteObjectReplica::Suspect) {
+ qWarning() << "Replica suspect";
+ this->serverRestarted = true;
+ } else if (state == QRemoteObjectReplica::Valid) {
+ if (this->serverRestarted) {
+ qWarning() << "Replica valid again";
+ auto reply = m_rep->start();
+ }
+ }
+ });
+ QVERIFY(m_rep->waitForSource());
+ }
+
+ void testRun()
+ {
+ const auto objectMode = qEnvironmentVariable("ObjectMode");
+
+ qWarning() << "From client";
+ const MyPOD initialValue(42, 3.14f, QStringLiteral("SubClass"));
+ if (objectMode == QLatin1Literal("ObjectPointer")) {
+ QSignalSpy tracksSpy(m_rep->tracks(), &QAbstractItemModelReplica::initialized);
+ QVERIFY(m_rep->subClass() != nullptr);
+ QCOMPARE(m_rep->subClass()->myPOD(), initialValue);
+ QVERIFY(m_rep->tracks() != nullptr);
+ QVERIFY(tracksSpy.count() || tracksSpy.wait());
+ } else {
+ QVERIFY(m_rep->subClass() == nullptr);
+ QVERIFY(m_rep->tracks() == nullptr);
+ }
+ auto reply = m_rep->start();
+ QVERIFY(reply.waitForFinished());
+
+ QSignalSpy advanceSpy(m_rep.data(), SIGNAL(advance()));
+ QVERIFY(advanceSpy.wait());
+ if (objectMode == QLatin1Literal("ObjectPointer")) {
+ QVERIFY(m_rep->subClass() != nullptr);
+ QCOMPARE(m_rep->subClass()->myPOD(), initialValue);
+ QVERIFY(m_rep->tracks() != nullptr);
+ } else {
+ QVERIFY(m_rep->subClass() == nullptr);
+ QVERIFY(m_rep->tracks() == nullptr);
+ }
+ }
+
+ void cleanupTestCase()
+ {
+ auto reply = m_rep->quit();
+ QVERIFY(reply.waitForFinished());
+ }
+
+private:
+ QScopedPointer<QRemoteObjectNode> m_repNode;
+ QScopedPointer<ParentClassReplica> m_rep;
+ bool serverRestarted = false;
+};
+
+QTEST_MAIN(tst_Client_Process)
+
+#include "main.moc"