This is an automated email from the ASF dual-hosted git repository.
tenthe pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git
The following commit(s) were added to refs/heads/dev by this push:
new b976584561 1262 align e2e tests (#4423)
b976584561 is described below
commit b976584561d0b96ea2b9fdfff0a6d90520c9044c
Author: Jacqueline Höllig <[email protected]>
AuthorDate: Mon May 4 08:58:46 2026 +0200
1262 align e2e tests (#4423)
---
docker-compose.yml | 3 +-
.../deploy/standalone/opcua/docker-compose.dev.yml | 2 +-
.../cli/deploy/standalone/opcua/docker-compose.yml | 5 +-
ui/cypress/support/utils/connect/OpcUaUtils.ts | 63 ++++++++++++++--------
.../opcua/opcAdapterConfiguration.smoke.spec.ts | 60 ++++++++-------------
.../opcua/startAndEditOpcAdapters.smoke.spec.ts | 21 +++++---
6 files changed, 80 insertions(+), 74 deletions(-)
diff --git a/docker-compose.yml b/docker-compose.yml
index 80966ec5d4..843dad0235 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -114,9 +114,8 @@ services:
spnet:
opcua:
- image: mcr.microsoft.com/iotedge/opc-plc:2.12.37
+ image: digitalpetri/opc-ua-demo-server:latest
logging: *default-logging
- command: --ut=true
networks:
spnet:
diff --git a/installer/cli/deploy/standalone/opcua/docker-compose.dev.yml
b/installer/cli/deploy/standalone/opcua/docker-compose.dev.yml
index a29984f6cd..9a428abff9 100644
--- a/installer/cli/deploy/standalone/opcua/docker-compose.dev.yml
+++ b/installer/cli/deploy/standalone/opcua/docker-compose.dev.yml
@@ -16,4 +16,4 @@
services:
opcua:
ports:
- - 50000:50000
+ - 4840:4840
diff --git a/installer/cli/deploy/standalone/opcua/docker-compose.yml
b/installer/cli/deploy/standalone/opcua/docker-compose.yml
index 3b284bd171..931ea80184 100644
--- a/installer/cli/deploy/standalone/opcua/docker-compose.yml
+++ b/installer/cli/deploy/standalone/opcua/docker-compose.yml
@@ -15,10 +15,9 @@
services:
opcua:
- image: mcr.microsoft.com/iotedge/opc-plc:2.12.37
+ image: digitalpetri/opc-ua-demo-server:latest
ports:
- - 50000:50000
- command: --ut=true
+ - 4840:4840
logging:
driver: "json-file"
options:
diff --git a/ui/cypress/support/utils/connect/OpcUaUtils.ts
b/ui/cypress/support/utils/connect/OpcUaUtils.ts
index 9c4dd4f8a1..8faf1e2d47 100644
--- a/ui/cypress/support/utils/connect/OpcUaUtils.ts
+++ b/ui/cypress/support/utils/connect/OpcUaUtils.ts
@@ -20,11 +20,17 @@ import { AdapterInput } from '../../model/AdapterInput';
import { ConnectUtils } from './ConnectUtils';
import { ErrorMessageUtils } from '../ErrorMessageUtils';
import { StaticPropertyUtils } from '../userInput/StaticPropertyUtils';
+import { TreeStaticPropertyUtils } from '../userInput/TreeStaticPropertyUtils';
import { TreeNodeUserInputBuilder } from
'../../builder/TreeNodeUserInputBuilder';
import { AdapterBuilder } from '../../builder/AdapterBuilder';
import { ParameterUtils } from '../ParameterUtils';
export class OpcUaUtils {
+ public static readonly BOOLEAN_NODE = 'Boolean';
+ public static readonly INT32_NODE = 'Int32';
+ public static readonly STRING_NODE = 'String';
+ public static readonly UINT32_NODE = 'UInt32';
+
public static setUpInitialConfiguration(adapterInput: AdapterInput) {
ConnectUtils.goToConnect();
ConnectUtils.goToNewAdapterPage();
@@ -63,31 +69,46 @@ export class OpcUaUtils {
cy.dataCy('reloading-nodes', { timeout: 10000 }).should('not.exist');
}
- public static getAdapterBuilderWithTreeNodes(pullMode: boolean) {
- const builder = OpcUaUtils.getBaseAdapterConfigBuilder(pullMode);
- builder.addTreeNode(
+ public static createNodeSelection(...leafNodes: string[]) {
+ return TreeNodeUserInputBuilder.create(
+ 'Objects',
TreeNodeUserInputBuilder.create(
- 'Objects',
+ 'Demo',
TreeNodeUserInputBuilder.create(
- 'OpcPlc',
- TreeNodeUserInputBuilder.create(
- 'Telemetry',
- TreeNodeUserInputBuilder.create('Basic').addChildren(
- TreeNodeUserInputBuilder.create(
- 'AlternatingBoolean',
- ),
- TreeNodeUserInputBuilder.create('StepUp'),
- TreeNodeUserInputBuilder.create(
- 'RandomSignedInt32',
- ),
- TreeNodeUserInputBuilder.create(
- 'RandomUnsignedInt32',
- ),
- ),
+ 'Dynamic',
+ ...leafNodes.map(node =>
+ TreeNodeUserInputBuilder.create(node),
),
),
),
);
+ }
+
+ public static expandNodeSelectionPath() {
+ ['Objects', 'Demo', 'Dynamic'].forEach(node =>
+ TreeStaticPropertyUtils.expandNode(node),
+ );
+ }
+
+ public static getEndpointUrl() {
+ const host: string = ParameterUtils.get('localhost', 'opcua');
+ return 'opc.tcp://' + host + ':4840/milo';
+ }
+
+ public static getNodeId(nodeName: string) {
+ return `ns=2;s=Demo.Dynamic.${nodeName}`;
+ }
+
+ public static getAdapterBuilderWithTreeNodes(pullMode: boolean) {
+ const builder = OpcUaUtils.getBaseAdapterConfigBuilder(pullMode);
+ builder.addTreeNode(
+ OpcUaUtils.createNodeSelection(
+ OpcUaUtils.BOOLEAN_NODE,
+ OpcUaUtils.INT32_NODE,
+ OpcUaUtils.STRING_NODE,
+ OpcUaUtils.UINT32_NODE,
+ ),
+ );
return builder.build();
}
@@ -95,8 +116,6 @@ export class OpcUaUtils {
public static getBaseAdapterConfigBuilder(
pullMode: boolean,
): AdapterBuilder {
- const host: string = ParameterUtils.get('localhost', 'opcua');
-
const builder = AdapterBuilder.create('OPC_UA').setName('OPC UA Test');
if (pullMode) {
@@ -117,7 +136,7 @@ export class OpcUaUtils {
.addInput(
'input',
'OPC_HOST_OR_URL-OPC_SERVER_URL-0',
- 'opc.tcp://' + host + ':50000',
+ OpcUaUtils.getEndpointUrl(),
);
builder.setAutoAddTimestampPropery();
diff --git
a/ui/cypress/tests/connect/opcua/opcAdapterConfiguration.smoke.spec.ts
b/ui/cypress/tests/connect/opcua/opcAdapterConfiguration.smoke.spec.ts
index 35d46b1c1e..e11cbc0331 100644
--- a/ui/cypress/tests/connect/opcua/opcAdapterConfiguration.smoke.spec.ts
+++ b/ui/cypress/tests/connect/opcua/opcAdapterConfiguration.smoke.spec.ts
@@ -17,9 +17,7 @@
*/
import { ConnectUtils } from '../../../support/utils/connect/ConnectUtils';
-import { ParameterUtils } from '../../../support/utils/ParameterUtils';
import { AdapterBuilder } from '../../../support/builder/AdapterBuilder';
-import { TreeNodeUserInputBuilder } from
'../../../support/builder/TreeNodeUserInputBuilder';
import { TreeStaticPropertyUtils } from
'../../../support/utils/userInput/TreeStaticPropertyUtils';
import { ErrorMessageUtils } from '../../../support/utils/ErrorMessageUtils';
import { OpcUaUtils } from '../../../support/utils/connect/OpcUaUtils';
@@ -32,20 +30,9 @@ describe('Test OPC-UA Adapter Configuration', () => {
it('Test OPC-UA Tree Node Configuration', () => {
const adapterBuilder = getAdapterBuilder();
adapterBuilder.addTreeNode(
- TreeNodeUserInputBuilder.create(
- 'Objects',
- TreeNodeUserInputBuilder.create(
- 'OpcPlc',
- TreeNodeUserInputBuilder.create(
- 'Telemetry',
- TreeNodeUserInputBuilder.create('Basic').addChildren(
- TreeNodeUserInputBuilder.create(
- 'AlternatingBoolean',
- ),
- TreeNodeUserInputBuilder.create('StepUp'),
- ),
- ),
- ),
+ OpcUaUtils.createNodeSelection(
+ OpcUaUtils.BOOLEAN_NODE,
+ OpcUaUtils.INT32_NODE,
),
);
@@ -54,22 +41,20 @@ describe('Test OPC-UA Adapter Configuration', () => {
TreeStaticPropertyUtils.validateAmountOfSelectedNodes(2);
- TreeStaticPropertyUtils.checkThatNodeIsSelectedInTree(
- 'AlternatingBoolean',
- );
+ TreeStaticPropertyUtils.checkThatNodeIsSelectedInTree('Boolean');
// Test if node details view works
TreeStaticPropertyUtils.validateAmountOfShownNodeDetailsMetaDataRows(0);
- TreeStaticPropertyUtils.showNodeDetails('StepUp');
+ TreeStaticPropertyUtils.showNodeDetails('Int32');
TreeStaticPropertyUtils.validateAmountOfShownNodeDetailsMetaDataRows(
20,
);
- TreeStaticPropertyUtils.hideNodeDetails('StepUp');
+ TreeStaticPropertyUtils.hideNodeDetails('Int32');
TreeStaticPropertyUtils.validateAmountOfShownNodeDetailsMetaDataRows(0);
// Test if delete node works
TreeStaticPropertyUtils.removeSelectedNode(
- 'ns=3\\;s=AlternatingBoolean',
+ 'ns=2\\;s=Demo.Dynamic.Boolean',
);
TreeStaticPropertyUtils.validateAmountOfSelectedNodes(1);
@@ -92,35 +77,34 @@ describe('Test OPC-UA Adapter Configuration', () => {
TreeStaticPropertyUtils.treeEditor().should('not.exist');
TreeStaticPropertyUtils.textEditor().should('be.visible');
- TreeStaticPropertyUtils.typeInTextEditor('ns=3;s=StepUp');
+ TreeStaticPropertyUtils.typeInTextEditor(
+ OpcUaUtils.getNodeId(OpcUaUtils.INT32_NODE),
+ );
// Go back to tree editor and validate nodes are selected and browse
editor works
TreeStaticPropertyUtils.switchToTreeEditor();
TreeStaticPropertyUtils.validateAmountOfSelectedNodes(1);
- TreeStaticPropertyUtils.validateAmountOfShownBrowseNodes(3);
// Check if node is selected
- TreeStaticPropertyUtils.expandNode('Objects');
- TreeStaticPropertyUtils.expandNode('OpcPlc');
- TreeStaticPropertyUtils.expandNode('Telemetry');
- TreeStaticPropertyUtils.expandNode('Basic');
- TreeStaticPropertyUtils.checkThatNodeIsSelectedInTree('StepUp');
- TreeStaticPropertyUtils.selectNode('AlternatingBoolean');
+ OpcUaUtils.expandNodeSelectionPath();
+ TreeStaticPropertyUtils.checkThatNodeIsSelectedInTree(
+ OpcUaUtils.INT32_NODE,
+ );
+ TreeStaticPropertyUtils.selectNode(OpcUaUtils.BOOLEAN_NODE);
// Go back tree view and validate that the node is still selected
TreeStaticPropertyUtils.switchToTextEditor();
TreeStaticPropertyUtils.getTextInTextEditor().should(
'contain',
- 's=AlternatingBoolean',
+ OpcUaUtils.getNodeId(OpcUaUtils.BOOLEAN_NODE),
);
TreeStaticPropertyUtils.getTextInTextEditor().should(
'contain',
- 'ns=3;s=StepUpns=3;',
+ OpcUaUtils.getNodeId(OpcUaUtils.INT32_NODE),
);
TreeStaticPropertyUtils.switchToTreeEditor();
- TreeStaticPropertyUtils.validateAmountOfShownBrowseNodes(3);
});
it('Test OPC-UA Node does not exist', () => {
@@ -129,12 +113,14 @@ describe('Test OPC-UA Adapter Configuration', () => {
// Switch to text editor
TreeStaticPropertyUtils.switchToTextEditor();
- TreeStaticPropertyUtils.typeInTextEditor('ns=3;s=NodeDoesNotExist');
+ TreeStaticPropertyUtils.typeInTextEditor(
+ 'ns=2;s=CTT.Static.AllProfiles.Scalar.DoesNotExist',
+ );
ConnectUtils.finishAdapterSettings();
// validate that an error is shown with node id
- ErrorMessageUtils.containsMessage('NodeDoesNotExist');
+ ErrorMessageUtils.containsMessage('DoesNotExist');
});
it('Test OPC-UA Wrong Node Id Format', () => {
@@ -153,8 +139,6 @@ describe('Test OPC-UA Adapter Configuration', () => {
});
const getAdapterBuilder = () => {
- const host: string = ParameterUtils.get('localhost', 'opcua');
-
return AdapterBuilder.create('OPC_UA')
.setName('OPC UA Configuration Test')
.addInput('radio', 'adapter_type-pull_mode', '')
@@ -169,7 +153,7 @@ const getAdapterBuilder = () => {
.addInput(
'input',
'OPC_HOST_OR_URL-OPC_SERVER_URL-0',
- 'opc.tcp://' + host + ':50000',
+ OpcUaUtils.getEndpointUrl(),
)
.setAutoAddTimestampPropery();
};
diff --git
a/ui/cypress/tests/connect/opcua/startAndEditOpcAdapters.smoke.spec.ts
b/ui/cypress/tests/connect/opcua/startAndEditOpcAdapters.smoke.spec.ts
index bbb5615343..c24d5a5495 100644
--- a/ui/cypress/tests/connect/opcua/startAndEditOpcAdapters.smoke.spec.ts
+++ b/ui/cypress/tests/connect/opcua/startAndEditOpcAdapters.smoke.spec.ts
@@ -81,11 +81,16 @@ const editAdapterTest = (adapterInput: AdapterInput) => {
GeneralUtils.openMenuForRow(adapterInput.adapterName);
ConnectBtns.editAdapter().click();
- // Validate that browse nodes are shown
- TreeStaticPropertyUtils.validateAmountOfShownBrowseNodes(3);
+ // Validate that the selected node hierarchy can still be browsed after
editing
+ OpcUaUtils.expandNodeSelectionPath();
+ TreeStaticPropertyUtils.checkThatNodeIsSelectedInTree(
+ OpcUaUtils.BOOLEAN_NODE,
+ );
// Remove a node and validate that resulting events do not contain the
property
- TreeStaticPropertyUtils.removeSelectedNode('ns=3;s=RandomUnsignedInt32');
+ TreeStaticPropertyUtils.removeSelectedNode(
+ OpcUaUtils.getNodeId(OpcUaUtils.UINT32_NODE),
+ );
ConnectUtils.finishAdapterSettings();
SharedUtils.confirmDialogVisible();
SharedBtns.confirmDialogConfirmBtn().click();
@@ -110,11 +115,11 @@ const getAdapterBuilderWithTextNodes = (pullMode:
boolean) => {
builder.addTreeNode(
TreeNodeUserInputBuilder.create(
[
- 'ns=3;s=AlternatingBoolean\n',
- 'ns=3;s=StepUp\n',
- 'ns=3;s=RandomSignedInt32\n',
- 'ns=3;s=RandomUnsignedInt32\n',
- ].join('\n'),
+ `${OpcUaUtils.getNodeId(OpcUaUtils.BOOLEAN_NODE)}\n`,
+ `${OpcUaUtils.getNodeId(OpcUaUtils.INT32_NODE)}\n`,
+ `${OpcUaUtils.getNodeId(OpcUaUtils.STRING_NODE)}\n\n`,
+ `${OpcUaUtils.getNodeId(OpcUaUtils.UINT32_NODE)}\n`,
+ ].join(''),
).isTextConfig(),
);