summaryrefslogtreecommitdiffstats
path: root/tests/auto/qopcuaclient/tst_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qopcuaclient/tst_client.cpp')
-rw-r--r--tests/auto/qopcuaclient/tst_client.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/auto/qopcuaclient/tst_client.cpp b/tests/auto/qopcuaclient/tst_client.cpp
index 3f36d9f..4fc9b42 100644
--- a/tests/auto/qopcuaclient/tst_client.cpp
+++ b/tests/auto/qopcuaclient/tst_client.cpp
@@ -238,6 +238,8 @@ private slots:
defineDataMethod(dateTimeConversion_data)
void dateTimeConversion();
+ defineDataMethod(timeStamps_data)
+ void timeStamps();
// This test case restarts the server. It must be run last to avoid
// destroying state required by other test cases.
@@ -1948,6 +1950,58 @@ void Tst_QOpcUaClient::dateTimeConversion()
QVERIFY(dt == result);
}
+void Tst_QOpcUaClient::timeStamps()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> stringScalarNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.String"));
+
+ QVERIFY(stringScalarNode != 0);
+
+ QCOMPARE(stringScalarNode->sourceTimestamp(QOpcUa::NodeAttribute::Value).isValid(), false);
+ QCOMPARE(stringScalarNode->serverTimestamp(QOpcUa::NodeAttribute::Value).isValid(), false);
+
+ READ_MANDATORY_VARIABLE_NODE(stringScalarNode);
+
+ const QDateTime sourceRead = stringScalarNode->sourceTimestamp(QOpcUa::NodeAttribute::Value);
+ const QDateTime serverRead = stringScalarNode->serverTimestamp(QOpcUa::NodeAttribute::Value);
+
+ QVERIFY(sourceRead.isValid());
+ QVERIFY(serverRead.isValid());
+
+ QOpcUaMonitoringParameters p(100);
+ QSignalSpy monitoringEnabledSpy(stringScalarNode.data(), &QOpcUaNode::enableMonitoringFinished);
+ QSignalSpy monitoringDisabledSpy(stringScalarNode.data(), &QOpcUaNode::disableMonitoringFinished);
+ QSignalSpy dataChangeSpy(stringScalarNode.data(), &QOpcUaNode::attributeUpdated);
+
+ QTest::qWait(10); // Make sure the timestamp has a chance to change
+
+ WRITE_VALUE_ATTRIBUTE(stringScalarNode, "Reset", QOpcUa::Types::String);
+
+ stringScalarNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+
+ monitoringEnabledSpy.wait();
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ dataChangeSpy.wait();
+ const QDateTime sourceDataChange = stringScalarNode->sourceTimestamp(QOpcUa::NodeAttribute::Value);
+ const QDateTime serverDataChange = stringScalarNode->serverTimestamp(QOpcUa::NodeAttribute::Value);
+
+ QVERIFY(sourceDataChange.isValid());
+ QVERIFY(serverDataChange.isValid());
+ QVERIFY(sourceRead < sourceDataChange);
+ QVERIFY(serverRead < serverDataChange);
+
+ stringScalarNode->disableMonitoring(QOpcUa::NodeAttribute::Value);
+ monitoringDisabledSpy.wait();
+ QCOMPARE(monitoringDisabledSpy.size(), 1);
+ QCOMPARE(monitoringDisabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(monitoringDisabledSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+}
+
void Tst_QOpcUaClient::connectionLost()
{
// Restart the test server if necessary