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(),
     );
 

Reply via email to