You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/05/26 10:12:47 UTC

[camel] 01/02: Milo 0.6.6

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 71f4773eca00e7d25b565e3a508610efc9bb11bd
Author: Klug Andreas (CI/XDM1) <kg...@bosch.com>
AuthorDate: Wed May 25 15:54:26 2022 +0200

    Milo 0.6.6
---
 camel-dependencies/pom.xml                         |  2 +-
 components/camel-milo/pom.xml                      | 12 +++++
 .../component/milo/client/MiloClientConsumer.java  |  9 +++-
 .../component/milo/client/MiloClientEndpoint.java  | 16 ++++++-
 .../milo/client/internal/SubscriptionManager.java  |  4 +-
 .../component/milo/server/MiloServerComponent.java | 17 +++----
 .../milo/server/internal/CamelNamespace.java       | 38 ++++++++++-----
 .../milo/server/internal/CamelServerItem.java      | 55 +++++++++++++---------
 .../component/milo/AbstractMiloServerTest.java     |  2 +-
 .../MiloClientCachingConnectionManagerTest.java    | 11 ++++-
 .../milo/MonitorItemMultiConnectionsCertTest.java  | 16 ++++++-
 .../milo/MonitorItemMultiConnectionsTest.java      | 16 ++++++-
 .../camel/component/milo/MonitorItemTest.java      | 38 +++++++++++----
 .../camel/component/milo/ReadValuesClientTest.java | 16 ++++++-
 .../camel/component/milo/WriteClientTest.java      | 18 ++++++-
 .../component/milo/browse/BrowseServerTest.java    | 16 ++++++-
 .../camel/component/milo/call/CallClientTest.java  | 33 ++++++++++++-
 .../component/milo/call/MockCamelNamespace.java    | 30 ++++++++----
 .../camel/component/milo/client/NodeIdTest.java    | 16 ++++++-
 .../component/milo/converter/ConverterTest.java    | 16 ++++++-
 .../component/milo/server/ServerLocalTest.java     | 14 +++++-
 .../server/ServerSetCertificateManagerTest.java    | 16 ++++++-
 .../milo/server/ServerSetSecurityPoliciesTest.java | 16 ++++++-
 23 files changed, 348 insertions(+), 79 deletions(-)

diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index 78b2c318694..2674df36cc0 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -404,7 +404,7 @@
     <microprofile-fault-tolerance-version>3.0</microprofile-fault-tolerance-version>
     <microprofile-metrics-version>3.0.1</microprofile-metrics-version>
     <milo-guava-version>26.0-jre</milo-guava-version>
-    <milo-version>0.3.7</milo-version>
+    <milo-version>0.6.6</milo-version>
     <mina-version>2.1.5</mina-version>
     <minidns-version>0.3.4</minidns-version>
     <minimal-json-version>0.9.5</minimal-json-version>
diff --git a/components/camel-milo/pom.xml b/components/camel-milo/pom.xml
index bc45a3c79c4..3a705ff7442 100644
--- a/components/camel-milo/pom.xml
+++ b/components/camel-milo/pom.xml
@@ -56,6 +56,18 @@
             <version>${milo-version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>stack-core</artifactId>
+            <version>${milo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>dictionary-manager</artifactId>
+            <version>${milo-version}</version>
+        </dependency>
+
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
index 60689104638..15572a0cdd2 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
@@ -35,11 +35,13 @@ public class MiloClientConsumer extends DefaultConsumer {
     private MonitorHandle handle;
     private ExpandedNodeId node;
     private Double samplingInterval;
+    private boolean omitNullValues;
 
     public MiloClientConsumer(final MiloClientEndpoint endpoint, final Processor processor) {
         super(endpoint, processor);
         this.node = endpoint.getNodeId();
         this.samplingInterval = endpoint.getSamplingInterval();
+        this.omitNullValues = endpoint.isOmitNullValues();
     }
 
     @Override
@@ -68,7 +70,12 @@ public class MiloClientConsumer extends DefaultConsumer {
 
     private void handleValueUpdate(final DataValue value) {
         LOG.debug("Handle item update - {} = {}", node, value);
-
+        
+        if(omitNullValues && (value == null || value.getValue() == null || value.getValue().getValue() == null)){
+            LOG.debug("Handle item update omitted due to null values (see omitNullValues parameter)");
+            return;
+        }
+        
         final Exchange exchange = createExchange(true);
         try {
             mapToMessage(value, exchange.getMessage());
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
index a1b25db531c..e7a6de742f1 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
@@ -77,7 +77,13 @@ public class MiloClientEndpoint extends DefaultEndpoint {
      */
     @UriParam
     private boolean defaultAwaitWrites;
-
+    
+    /**
+     * Omit notifications in case of null values
+     */
+    @UriParam(defaultValue = "true")
+    private boolean omitNullValues = true;
+    
     @UriParam
     private MonitorFilterConfiguration monitorFilterConfiguration;
 
@@ -189,4 +195,12 @@ public class MiloClientEndpoint extends DefaultEndpoint {
     public void setMonitorFilterType(MonitorFilterType monitorFilterType) {
         this.monitorFilterType = monitorFilterType;
     }
+    
+    public boolean isOmitNullValues() {
+        return omitNullValues;
+    }
+    
+    public void setOmitNullValues(boolean omitNullValues) {
+        this.omitNullValues = omitNullValues;
+    }
 }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
index 0627485da42..d0748eda832 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
@@ -162,7 +162,7 @@ public class SubscriptionManager {
                 return null;
             }
             final MonitoringFilter monitorFilter = this.monitorFilterConfiguration.createMonitoringFilter();
-            return ExtensionObject.encode(client.getSerializationContext(), monitorFilter);
+            return ExtensionObject.encode(client.getStaticSerializationContext(), monitorFilter);
         }
     }
 
@@ -203,7 +203,7 @@ public class SubscriptionManager {
                     Double samplingInterval = s.getSamplingInterval();
 
                     final MonitoringParameters parameters = new MonitoringParameters(
-                            entry.getKey(), samplingInterval, s.createMonitoringFilter(client), null, null);
+                            entry.getKey(), samplingInterval, s.createMonitoringFilter(client), null, true);
                     items.add(new MonitoredItemCreateRequest(itemId, MonitoringMode.Reporting, parameters));
                 }
             }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
index d8c3b072ad0..f4013d5d2a7 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
@@ -54,7 +54,6 @@ import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.security.CertificateManager;
 import org.eclipse.milo.opcua.stack.core.security.CertificateValidator;
 import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateManager;
-import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateValidator;
 import org.eclipse.milo.opcua.stack.core.security.DefaultTrustListManager;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.eclipse.milo.opcua.stack.core.transport.TransportProfile;
@@ -64,6 +63,8 @@ import org.eclipse.milo.opcua.stack.core.types.enumerated.UserTokenType;
 import org.eclipse.milo.opcua.stack.core.types.structured.BuildInfo;
 import org.eclipse.milo.opcua.stack.core.types.structured.UserTokenPolicy;
 import org.eclipse.milo.opcua.stack.server.EndpointConfiguration;
+import org.eclipse.milo.opcua.stack.server.security.DefaultServerCertificateValidator;
+import org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,7 +120,7 @@ public class MiloServerComponent extends DefaultComponent {
     @Metadata(label = "security")
     private String defaultCertificateValidator;
     @Metadata(label = "security")
-    private CertificateValidator certificateValidator;
+    private ServerCertificateValidator certificateValidator;
     @Metadata(label = "security")
     private X509Certificate certificate;
 
@@ -324,19 +325,19 @@ public class MiloServerComponent extends DefaultComponent {
                 .build();
     }
 
-    private static final class DenyAllCertificateValidator implements CertificateValidator {
-        public static final CertificateValidator INSTANCE = new DenyAllCertificateValidator();
+    private static final class DenyAllCertificateValidator implements ServerCertificateValidator {
+        public static final ServerCertificateValidator INSTANCE = new DenyAllCertificateValidator();
 
         private DenyAllCertificateValidator() {
         }
 
         @Override
-        public void validate(final X509Certificate certificate) throws UaException {
+        public void validateCertificateChain(List<X509Certificate> list, String s) throws UaException {
             throw new UaException(StatusCodes.Bad_CertificateUseNotAllowed);
         }
 
         @Override
-        public void verifyTrustChain(List<X509Certificate> certificateChain) throws UaException {
+        public void validateCertificateChain(List<X509Certificate> list) throws UaException {
             throw new UaException(StatusCodes.Bad_CertificateUseNotAllowed);
         }
     }
@@ -581,7 +582,7 @@ public class MiloServerComponent extends DefaultComponent {
     /**
      * Validator for client certificates
      */
-    public void setCertificateValidator(final CertificateValidator certificateValidator) {
+    public void setCertificateValidator(final ServerCertificateValidator certificateValidator) {
         this.certificateValidator = certificateValidator;
     }
 
@@ -592,7 +593,7 @@ public class MiloServerComponent extends DefaultComponent {
         this.defaultCertificateValidator = defaultCertificateValidator;
         try {
             DefaultTrustListManager trustListManager = new DefaultTrustListManager(new File(defaultCertificateValidator));
-            this.certificateValidator = new DefaultCertificateValidator(trustListManager);
+            this.certificateValidator = new DefaultServerCertificateValidator(trustListManager);
         } catch (IOException e) {
             throw new RuntimeCamelException(e);
         }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
index 924f2da7a95..2c7720501a6 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
@@ -23,8 +23,9 @@ import java.util.Map;
 import org.eclipse.milo.opcua.sdk.core.Reference;
 import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.DataItem;
-import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespace;
+import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespaceWithLifecycle;
 import org.eclipse.milo.opcua.sdk.server.api.MonitoredItem;
+import org.eclipse.milo.opcua.sdk.server.dtd.DataTypeDictionaryManager;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaObjectNode;
 import org.eclipse.milo.opcua.sdk.server.util.SubscriptionModel;
@@ -32,8 +33,10 @@ import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-public class CamelNamespace extends ManagedNamespace {
+public class CamelNamespace extends ManagedNamespaceWithLifecycle {
 
     private final SubscriptionModel subscriptionModel;
 
@@ -41,16 +44,24 @@ public class CamelNamespace extends ManagedNamespace {
     private UaFolderNode folder;
 
     private final Map<String, CamelServerItem> itemMap = new HashMap<>();
-
+    
+    private final DataTypeDictionaryManager dictionaryManager;
+    
+    private final Logger log = LoggerFactory.getLogger(CamelNamespace.class);
+    
     public CamelNamespace(final String namespaceUri, final OpcUaServer server) {
         super(server, namespaceUri);
-
+    
         this.subscriptionModel = new SubscriptionModel(server, this);
+        this.dictionaryManager = new DataTypeDictionaryManager(getNodeContext(), namespaceUri);
+    
+        getLifecycleManager().addLifecycle(dictionaryManager);
+        getLifecycleManager().addLifecycle(subscriptionModel);
+    
+        getLifecycleManager().addStartupTask(this::createNodes);
     }
-
-    @Override
-    protected void onStartup() {
-        super.onStartup();
+    
+    protected void createNodes() {
         // create structure
 
         final NodeId nodeId = newNodeId("camel");
@@ -63,13 +74,13 @@ public class CamelNamespace extends ManagedNamespace {
         final NodeId nodeId2 = newNodeId("items");
         final QualifiedName name2 = newQualifiedName("items");
         final LocalizedText displayName2 = LocalizedText.english("Items");
-
-        this.itemsObject = UaObjectNode.builder(getNodeContext())
+        
+        this.itemsObject = UaObjectNode.build(getNodeContext(), builder -> builder
                 .setNodeId(nodeId2)
                 .setBrowseName(name2)
                 .setDisplayName(displayName2)
                 .setTypeDefinition(Identifiers.FolderType)
-                .build();
+                .buildAndAdd());
         this.folder.addComponent(this.itemsObject);
         this.getNodeManager().addNode(this.itemsObject);
 
@@ -90,21 +101,25 @@ public class CamelNamespace extends ManagedNamespace {
 
     @Override
     public void onDataItemsCreated(final List<DataItem> dataItems) {
+        log.trace("onDataItemsCreated");
         this.subscriptionModel.onDataItemsCreated(dataItems);
     }
 
     @Override
     public void onDataItemsModified(final List<DataItem> dataItems) {
+        log.trace("onDataItemsModified");
         this.subscriptionModel.onDataItemsModified(dataItems);
     }
 
     @Override
     public void onDataItemsDeleted(final List<DataItem> dataItems) {
+        log.trace("onDataItemsDeleted");
         this.subscriptionModel.onDataItemsDeleted(dataItems);
     }
 
     @Override
     public void onMonitoringModeChanged(final List<MonitoredItem> monitoredItems) {
+        log.trace("onMonitoringModeChanged");
         this.subscriptionModel.onMonitoringModeChanged(monitoredItems);
     }
 
@@ -114,5 +129,4 @@ public class CamelNamespace extends ManagedNamespace {
                     k -> new CamelServerItem(itemId, getNodeContext(), getNamespaceIndex(), this.itemsObject));
         }
     }
-
 }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
index a19a0bcc936..b19791f3dfd 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
@@ -21,12 +21,16 @@ import java.util.LinkedList;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.function.Consumer;
+import java.util.function.Predicate;
 
 import org.apache.camel.RuntimeCamelException;
 import org.eclipse.milo.opcua.sdk.core.AccessLevel;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaNodeContext;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaObjectNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaVariableNode;
+import org.eclipse.milo.opcua.sdk.server.nodes.filters.AttributeFilter;
+import org.eclipse.milo.opcua.sdk.server.nodes.filters.AttributeFilterContext;
+import org.eclipse.milo.opcua.stack.core.AttributeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DateTime;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
@@ -38,8 +42,6 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ubyte;
-
 public class CamelServerItem {
     private static final Logger LOG = LoggerFactory.getLogger(CamelServerItem.class);
 
@@ -59,28 +61,37 @@ public class CamelServerItem {
         final NodeId nodeId = new NodeId(namespaceIndex, itemId);
         final QualifiedName qname = new QualifiedName(namespaceIndex, itemId);
         final LocalizedText displayName = LocalizedText.english(itemId);
-
+        
         // create variable node
-
-        this.item = new UaVariableNode(nodeContext, nodeId, qname, displayName) {
-
-            @Override
-            public synchronized DataValue getValue() {
-                return getDataValue();
-            }
-
-            @Override
-            public synchronized void setValue(final DataValue value) {
-                setDataValue(value);
-            }
-
-        };
-
-        this.item.setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)));
-        this.item.setUserAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)));
-
+    
+        final Predicate<AttributeId> filter = AttributeId.Value::equals;
+        this.item = UaVariableNode.build(nodeContext, builder->
+            builder
+                .setNodeId(nodeId)
+                .setBrowseName(qname)
+                .setDisplayName(displayName)
+                .setAccessLevel(AccessLevel.toValue(AccessLevel.READ_WRITE))
+                .setUserAccessLevel(AccessLevel.toValue(AccessLevel.READ_WRITE))
+                .addAttributeFilter(new AttributeFilter(){
+    
+                    @Override
+                    public Object getAttribute(AttributeFilterContext.GetAttributeContext ctx, AttributeId attributeId){
+                        if(filter.test(attributeId) && ctx.getSession().isPresent()) {
+                            return getDataValue();
+                        }
+                        return ctx.getAttribute(attributeId);
+                    }
+    
+                    @Override
+                    public void setAttribute(AttributeFilterContext.SetAttributeContext ctx, AttributeId attributeId, Object value){
+                        if(filter.test(attributeId) && ctx.getSession().isPresent()) {
+                            setDataValue((DataValue)value);
+                        }
+                        ctx.setAttribute(attributeId, value);
+                    }})
+                .buildAndAdd());
+        
         baseNode.addComponent(this.item);
-        nodeContext.getNodeManager().addNode(this.item);
     }
 
     public void dispose() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
index c4677ba8642..15629de341b 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
@@ -83,7 +83,7 @@ public abstract class AbstractMiloServerTest extends CamelTestSupport {
             final AssertionClause clause, final Class<T> bodyClass,
             final Consumer<T> valueConsumer) {
         clause.predicate(exchange -> {
-            final T body = exchange.getIn().getBody(bodyClass);
+            final T body = exchange.getMessage().getBody(bodyClass);
             valueConsumer.accept(body);
             return true;
         });
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
index 8822bd98ab4..3e11f89b733 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
@@ -23,13 +23,22 @@ import org.apache.camel.component.milo.client.MonitorFilterConfiguration;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class MiloClientCachingConnectionManagerTest {
 
+    private static final Logger LOG = LoggerFactory.getLogger(MiloClientCachingConnectionManagerTest.class);
+    
     private MiloClientCachingConnectionManager instance;
 
     @BeforeEach
-    public void setup() {
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
         instance = new MiloClientCachingConnectionManager();
     }
 
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
index 303a38e95c1..89d5cae692b 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
@@ -29,7 +29,11 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
@@ -65,6 +69,8 @@ public class MonitorItemMultiConnectionsCertTest extends AbstractMiloServerTest
     private static final String MOCK_TEST_2 = "mock:test2";
     private static final String MOCK_TEST_3 = "mock:test3";
 
+    private static final Logger LOG = LoggerFactory.getLogger(MonitorItemMultiConnectionsCertTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -76,7 +82,15 @@ public class MonitorItemMultiConnectionsCertTest extends AbstractMiloServerTest
 
     @Produce(DIRECT_START_1)
     protected ProducerTemplate producer1;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected void configureMiloServer(final MiloServerComponent server) throws Exception {
         super.configureMiloServer(server);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
index 50ae33acb0c..a4a16818d54 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
@@ -23,7 +23,11 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Testing monitoring items over multiple connections
@@ -53,6 +57,8 @@ public class MonitorItemMultiConnectionsTest extends AbstractMiloServerTest {
     private static final String MOCK_TEST_2 = "mock:test2";
     private static final String MOCK_TEST_3 = "mock:test3";
 
+    private static final Logger LOG = LoggerFactory.getLogger(MonitorItemMultiConnectionsTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -64,7 +70,15 @@ public class MonitorItemMultiConnectionsTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_1)
     protected ProducerTemplate producer1;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
index 36fe995023b..228fd9b9c0e 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.milo;
 
+import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
@@ -23,7 +25,13 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.LoggingLevel.INFO;
 
 /**
  * Testing the monitor functionality for item
@@ -41,6 +49,8 @@ public class MonitorItemTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
 
+    private static final Logger LOG = LoggerFactory.getLogger(MonitorItemTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -58,7 +68,15 @@ public class MonitorItemTest extends AbstractMiloServerTest {
             }
         };
     }
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     /**
      * Monitor multiple events
      */
@@ -68,17 +86,19 @@ public class MonitorItemTest extends AbstractMiloServerTest {
          * we will wait 2 * 1_000 milliseconds between server updates since the
          * default server update rate is 1_000 milliseconds
          */
-
+        final var time=2 * 1_000;
+        
+        // item 1 ... only this one receives
+        test1Endpoint.reset();
+        test1Endpoint.setExpectedCount(3);
+        
         // set server values
         this.producer1.sendBody("Foo");
-        Thread.sleep(2_000);
+        Thread.sleep(time);
         this.producer1.sendBody("Bar");
-        Thread.sleep(2_000);
+        Thread.sleep(time);
         this.producer1.sendBody("Baz");
-        Thread.sleep(2_000);
-
-        // item 1 ... only this one receives
-        this.test1Endpoint.setExpectedCount(3);
+        Thread.sleep(time);
 
         // tests
         testBody(this.test1Endpoint.message(0), assertGoodValue("Foo"));
@@ -86,6 +106,6 @@ public class MonitorItemTest extends AbstractMiloServerTest {
         testBody(this.test1Endpoint.message(2), assertGoodValue("Baz"));
 
         // assert
-        assertMockEndpointsSatisfied();
+        assertMockEndpointsSatisfied(time,TimeUnit.MILLISECONDS);
     }
 }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
index 63cac63e7b1..a2b277ad2e8 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
@@ -26,7 +26,11 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ReadValuesClientTest extends AbstractMiloServerTest {
 
@@ -40,6 +44,8 @@ public class ReadValuesClientTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
 
+    private static final Logger LOG = LoggerFactory.getLogger(ReadValuesClientTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -48,7 +54,15 @@ public class ReadValuesClientTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_2)
     protected ProducerTemplate producer2;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
index 345ccf73575..8158b032984 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
@@ -24,7 +24,11 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.component.milo.NodeIds.nodeValue;
 
@@ -60,7 +64,9 @@ public class WriteClientTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
     private static final String MOCK_TEST_2 = "mock:test2";
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(WriteClientTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -96,7 +102,15 @@ public class WriteClientTest extends AbstractMiloServerTest {
             }
         };
     }
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testWrite1() throws Exception {
         // item 1
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
index 58a7093fb29..1a006c9a4a6 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
@@ -39,7 +39,11 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.structured.BrowseResult;
 import org.eclipse.milo.opcua.stack.core.types.structured.ReferenceDescription;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
@@ -102,6 +106,8 @@ public class BrowseServerTest extends AbstractMiloServerTest {
 
     private static final String MILO_BROWSE_NODE_VIA_ENDPOINT
             = MILO_BROWSE_ROOT + "&node=RAW(ns=0;i=86)";
+    
+    private static final Logger LOG = LoggerFactory.getLogger(BrowseServerTest.class);
 
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint mock1;
@@ -156,7 +162,15 @@ public class BrowseServerTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_9)
     protected ProducerTemplate producer9;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
index 489987f9ef3..846f4140889 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.milo.call;
 
+import java.security.cert.X509Certificate;
 import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.LinkedHashSet;
@@ -32,16 +33,20 @@ import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig;
 import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfigBuilder;
 import org.eclipse.milo.opcua.sdk.server.util.HostnameUtil;
+import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateManager;
-import org.eclipse.milo.opcua.stack.core.security.InsecureCertificateValidator;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.eclipse.milo.opcua.stack.core.transport.TransportProfile;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.enumerated.MessageSecurityMode;
 import org.eclipse.milo.opcua.stack.core.types.structured.UserTokenPolicy;
 import org.eclipse.milo.opcua.stack.server.EndpointConfiguration;
+import org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.component.milo.NodeIds.nodeValue;
 import static org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS;
@@ -61,12 +66,22 @@ public class CallClientTest extends AbstractMiloServerTest {
             = MILO_CLIENT_BASE_C1 + "?node=" + NodeIds.nodeValue(MockCamelNamespace.URI, MockCamelNamespace.FOLDER_ID)
               + "&method=" + nodeValue(MockCamelNamespace.URI, MockCamelNamespace.CALL_ID) + "&overrideHost=true";
 
+    private static final Logger LOG = LoggerFactory.getLogger(CallClientTest.class);
+    
     private OpcUaServer server;
     private MockCamelNamespace namespace;
     private MockCallMethod callMethod;
 
     @Produce(DIRECT_START_1)
     private ProducerTemplate producer1;
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
 
     @Override
     protected RoutesBuilder createRouteBuilder() {
@@ -173,4 +188,20 @@ public class CallClientTest extends AbstractMiloServerTest {
         // we always write synchronously since we do need the message order
         producerTemplate.sendBodyAndHeader(input, "await", true);
     }
+    
+    private static final class InsecureCertificateValidator implements ServerCertificateValidator{
+        
+        public static final ServerCertificateValidator INSTANCE = new CallClientTest.InsecureCertificateValidator();
+        
+        private InsecureCertificateValidator() {
+        }
+        
+        @Override
+        public void validateCertificateChain(List<X509Certificate> list,String s) throws UaException {
+        }
+        
+        @Override
+        public void validateCertificateChain(List<X509Certificate> list) throws UaException{
+        }
+    }
 }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
index 70bbe26cf8d..b8240cf3b4b 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
@@ -24,9 +24,10 @@ import java.util.function.Function;
 import org.apache.camel.component.milo.client.MiloClientConsumer;
 import org.apache.camel.component.milo.server.internal.CamelServerItem;
 import org.eclipse.milo.opcua.sdk.core.Reference;
+import org.eclipse.milo.opcua.sdk.server.Lifecycle;
 import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.DataItem;
-import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespace;
+import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespaceWithLifecycle;
 import org.eclipse.milo.opcua.sdk.server.api.MonitoredItem;
 import org.eclipse.milo.opcua.sdk.server.api.methods.AbstractMethodInvocationHandler;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
@@ -39,7 +40,7 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MockCamelNamespace extends ManagedNamespace {
+public class MockCamelNamespace extends ManagedNamespaceWithLifecycle{
 
     public static final String URI = "urn:org:apache:camel:mock";
     public static final int FOLDER_ID = 1;
@@ -61,11 +62,24 @@ public class MockCamelNamespace extends ManagedNamespace {
 
         this.subscriptionModel = new SubscriptionModel(server, this);
         this.callMethodCreator = callMethodCreator;
+    
+        super.getLifecycleManager().addLifecycle(new Lifecycle() {
+        
+            @Override
+            public void startup() {
+                LOG.trace("CamelNamespace startup");
+                createNodes();
+            }
+        
+            @Override
+            public void shutdown() {
+                LOG.trace("CamelNamespace shutdown");
+            }
+        });
     }
-
-    @Override
-    protected void onStartup() {
-        super.onStartup();
+    
+    private void createNodes() {
+        
         // create structure
 
         final NodeId nodeId = newNodeId(FOLDER_ID);
@@ -96,8 +110,8 @@ public class MockCamelNamespace extends ManagedNamespace {
                 .build();
 
         AbstractMethodInvocationHandler callMethod = callMethodCreator.apply(methodNode);
-        methodNode.setProperty(UaMethodNode.InputArguments, callMethod.getInputArguments());
-        methodNode.setProperty(UaMethodNode.OutputArguments, callMethod.getOutputArguments());
+        methodNode.setInputArguments(callMethod.getInputArguments());
+        methodNode.setOutputArguments(callMethod.getOutputArguments());
         methodNode.setInvocationHandler(callMethod);
 
         getNodeManager().addNode(methodNode);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
index c98c12f344f..f5ad99980b9 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
@@ -21,7 +21,11 @@ import java.io.Serializable;
 import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.component.milo.AbstractMiloServerTest;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static com.google.common.net.UrlEscapers.urlFormParameterEscaper;
 import static org.apache.camel.component.milo.server.MiloServerComponent.DEFAULT_NAMESPACE_URI;
@@ -35,7 +39,17 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
  * Testing different ways to specify node IDs
  */
 public class NodeIdTest extends AbstractMiloServerTest {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(NodeIdTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testFull1() {
         final String s = String.format("nsu=%s;s=%s", DEFAULT_NAMESPACE_URI, "item-1");
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
index 03cdbf280ba..b771fec3043 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
@@ -19,14 +19,28 @@ package org.apache.camel.component.milo.converter;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ConverterTest extends CamelTestSupport {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ConverterTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testDataValueToVariant() {
         final Variant value = testConvertDataValue("Foo", Variant.class);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
index 2d00770477e..e757b707b96 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.milo.server;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.milo.converter.ConverterTest;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
@@ -27,6 +28,9 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Unit tests for milo server component without using an actual connection
@@ -36,12 +40,18 @@ public class ServerLocalTest extends CamelTestSupport {
     private static final String MILO_ITEM_1 = "milo-server:myitem1";
 
     private static final String MOCK_TEST = "mock:test";
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ConverterTest.class);
 
     @EndpointInject(MOCK_TEST)
     protected MockEndpoint testEndpoint;
-
+    
     @BeforeEach
-    public void pickFreePort() {
+    public void pickFreePort(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
         final MiloServerComponent component = context().getComponent("milo-server", MiloServerComponent.class);
         component.setPort(AvailablePortFinder.getNextAvailable());
     }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
index 7a31039ebe8..e9b0840b613 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
@@ -21,7 +21,11 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.apache.camel.component.milo.AbstractMiloServerTest;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
@@ -29,7 +33,17 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * Test setting the certificate manager
  */
 public class ServerSetCertificateManagerTest extends AbstractMiloServerTest {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ServerSetCertificateManagerTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected void configureMiloServer(final MiloServerComponent server) throws Exception {
         super.configureMiloServer(server);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
index c28ca63ae25..3156a7d4806 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
@@ -18,13 +18,27 @@ package org.apache.camel.component.milo.server;
 
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Test setting security policies
  */
 public class ServerSetSecurityPoliciesTest extends CamelTestSupport {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ServerSetSecurityPoliciesTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testSetSecurityPolicies1() {
         final MiloServerComponent component = new MiloServerComponent();