Revision control

Copy as Markdown

// Copyright (C) 2019 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtTest
import QtOpcUa as QtOpcUa
Item {
property string backendName
property int completedTestCases: 0
property int availableTestCases: 0
property bool completed: completedTestCases == availableTestCases
property bool shouldRun: false
onShouldRunChanged: {
if (shouldRun)
console.log("Running", parent.testName, "with", backendName);
}
QtOpcUa.Connection {
id: connection
backend: backendName
defaultConnection: true
}
QtOpcUa.ServerDiscovery {
id: serverDiscovery
onServersChanged: {
if (!count)
return;
endpointDiscovery.serverUrl = at(0).discoveryUrls[0];
}
}
QtOpcUa.EndpointDiscovery {
id: endpointDiscovery
onEndpointsChanged: {
if (!count)
return;
connection.connectToEndpoint(at(0));
}
}
Component.onCompleted: {
for (var i in children) {
if (children[i].objectName == "TestCase")
availableTestCases += 1;
}
serverDiscovery.discoveryUrl = OPCUA_DISCOVERY_URL;
}
CompletionLoggingTestCase {
name: parent.parent.testName + ": " + backendName + ": Reading multiple items"
when: (connection.connected && shouldRun) || SKIP_TESTS
SignalSpy {
id: readNodeAttributesFinishedSpy
target: connection
signalName: "readNodeAttributesFinished"
}
function test_nodeTest() {
var readItemList = [];
var readItem;
// Item #0
readItem = QtOpcUa.ReadItem.create();
readItem.ns = "http://qt-project.org";
readItem.nodeId = "s=Demo.Static.Scalar.Double";
readItem.attribute = QtOpcUa.Constants.NodeAttribute.DisplayName;
readItemList.push(readItem);
// Item #1
readItem = QtOpcUa.ReadItem.create();
readItem.ns = "http://qt-project.org";
readItem.nodeId = "s=Demo.Static.Scalar.Double";
// Value is the default attribute to read
readItemList.push(readItem);
// Item #2
readItem = QtOpcUa.ReadItem.create();
readItem.ns = "http://qt-project.org";
readItem.nodeId = "s=Demo.Static.Arrays.UInt32";
// Value is the default attribute to read
readItem.indexRange = "0:2";
readItemList.push(readItem);
verify(connection.readNodeAttributes(readItemList))
readNodeAttributesFinishedSpy.wait();
compare(readNodeAttributesFinishedSpy.count, 1);
compare(readNodeAttributesFinishedSpy.signalArguments[0].length, 1);
var results = readNodeAttributesFinishedSpy.signalArguments[0][0];
var now = new Date();
compare(results.length, readItemList.length);
for (var i = 0; i < results.length; i++) {
console.log("Comparing result item #" + i);
verify(results[i].status.isGood);
compare(results[i].nodeId, readItemList[i].nodeId);
compare(results[i].namespaceName, readItemList[i].ns);
compare(results[i].attribute, readItemList[i].attribute);
verify((now - results[i].serverTimestamp) < 30000);
}
compare(results[0].value.text, "DoubleScalarTest");
compare(results[1].value, 1.0);
compare(results[2].value, [1, 2]);
}
}
CompletionLoggingTestCase {
name: parent.parent.testName + ": " + backendName + ": Writing multiple items"
when: (connection.connected && shouldRun) || SKIP_TESTS
SignalSpy {
id: writeNodeAttributesFinishedSpy
target: connection
signalName: "writeNodeAttributesFinished"
}
function test_nodeTest() {
var writeItemList = [];
var writeItem;
// Item #0
writeItem = QtOpcUa.WriteItem.create();
writeItem.ns = "http://qt-project.org";
writeItem.nodeId = "s=Demo.Static.Scalar.String";
writeItem.attribute = QtOpcUa.Constants.NodeAttribute.Value;
writeItem.value = "Writing multiple items";
writeItemList.push(writeItem);
// Item #1
writeItem = QtOpcUa.WriteItem.create();
writeItem.ns = "http://qt-project.org";
writeItem.nodeId = "s=Demo.Static.Scalar.Double";
writeItem.value = 15.6;
writeItemList.push(writeItem);
// Item #2
writeItem = QtOpcUa.WriteItem.create();
writeItem.ns = "http://qt-project.org";
writeItem.nodeId = "s=Demo.Static.Arrays.UInt32";
writeItem.indexRange = "0:1";
writeItem.value = [42, 43];
writeItem.valueType = QtOpcUa.Constants.UInt32;
writeItemList.push(writeItem);
verify(connection.writeNodeAttributes(writeItemList))
writeNodeAttributesFinishedSpy.wait();
compare(writeNodeAttributesFinishedSpy.count, 1);
compare(writeNodeAttributesFinishedSpy.signalArguments[0].length, 1);
var results = writeNodeAttributesFinishedSpy.signalArguments[0][0];
compare(results.length, writeItemList.length);
for (var i = 0; i < results.length; i++) {
console.log("Comparing result item #" + i);
verify(results[i].status.isGood);
compare(results[i].nodeId, writeItemList[i].nodeId);
compare(results[i].namespaceName, writeItemList[i].ns);
compare(results[i].attribute, writeItemList[i].attribute);
}
// Reset to default values
//
writeItemList = [];
// Item #0
writeItem = QtOpcUa.WriteItem.create();
writeItem.ns = "http://qt-project.org";
writeItem.nodeId = "s=Demo.Static.Scalar.String";
writeItem.attribute = QtOpcUa.Constants.NodeAttribute.Value;
writeItem.value = "Value";
writeItemList.push(writeItem);
// Item #1
writeItem = QtOpcUa.WriteItem.create();
writeItem.ns = "http://qt-project.org";
writeItem.nodeId = "s=Demo.Static.Scalar.Double";
writeItem.value = 1.0;
writeItem.valueType = QtOpcUa.Constants.Double;
writeItemList.push(writeItem);
// Item #2
writeItem = QtOpcUa.WriteItem.create();
writeItem.ns = "http://qt-project.org";
writeItem.nodeId = "s=Demo.Static.Arrays.UInt32";
writeItem.indexRange = "0:1";
writeItem.value = [1, 2];
writeItem.valueType = QtOpcUa.Constants.UInt32;
writeItemList.push(writeItem);
writeNodeAttributesFinishedSpy.clear();
verify(connection.writeNodeAttributes(writeItemList))
writeNodeAttributesFinishedSpy.wait();
var results = writeNodeAttributesFinishedSpy.signalArguments[0][0];
compare(results.length, writeItemList.length);
for (var i = 0; i < results.length; i++) {
console.log("Comparing result item #" + i);
verify(results[i].status.isGood);
compare(results[i].nodeId, writeItemList[i].nodeId);
compare(results[i].namespaceName, writeItemList[i].ns);
compare(results[i].attribute, writeItemList[i].attribute);
}
}
}
}