diff options
Diffstat (limited to 'tests/auto/qopcuaclient/tst_client.cpp')
-rw-r--r-- | tests/auto/qopcuaclient/tst_client.cpp | 54 |
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 |