diff --git a/commons/ihe/hl7v2/pom.xml b/commons/ihe/hl7v2/pom.xml
index 336d374d64..04acfaf68b 100644
--- a/commons/ihe/hl7v2/pom.xml
+++ b/commons/ihe/hl7v2/pom.xml
@@ -58,10 +58,15 @@
true
- io.zipkin.brave
- brave
+ io.micrometer
+ micrometer-tracing
true
+
+ io.micrometer
+ micrometer-tracing-bridge-brave
+ test
+
io.netty
netty-handler
diff --git a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Handler.groovy b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Handler.groovy
index 513d4e84f4..944b655b24 100644
--- a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Handler.groovy
+++ b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Handler.groovy
@@ -16,8 +16,8 @@
package org.openehealth.ipf.commons.ihe.hl7v2.tracing
-import brave.SpanCustomizer
import ca.uhn.hl7v2.model.Message
+import io.micrometer.tracing.SpanCustomizer
/**
* @author Christian Ohr
diff --git a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageGetter.groovy b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageGetter.groovy
index 6e288591c6..9ed53146b8 100644
--- a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageGetter.groovy
+++ b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageGetter.groovy
@@ -16,8 +16,9 @@
package org.openehealth.ipf.commons.ihe.hl7v2.tracing
-import brave.propagation.Propagation
+
import ca.uhn.hl7v2.model.AbstractMessage
+import io.micrometer.tracing.propagation.Propagator
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory
*
* @author Christian Ohr
*/
-class Hl7MessageGetter implements Propagation.Getter {
+class Hl7MessageGetter implements Propagator.Getter {
private static final Logger LOG = LoggerFactory.getLogger(Hl7MessageGetter)
private final String segmentName
diff --git a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetter.groovy b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetter.groovy
index 644d924403..ae7ada6bcf 100644
--- a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetter.groovy
+++ b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetter.groovy
@@ -16,9 +16,10 @@
package org.openehealth.ipf.commons.ihe.hl7v2.tracing
-import brave.propagation.Propagation
+
import ca.uhn.hl7v2.model.Composite
import ca.uhn.hl7v2.model.Message
+import io.micrometer.tracing.propagation.Propagator
import org.openehealth.ipf.modules.hl7.dsl.Repeatable
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@@ -28,7 +29,7 @@ import org.slf4j.LoggerFactory
*
* @author Christian Ohr
*/
-class Hl7MessageSetter implements Propagation.Setter {
+class Hl7MessageSetter implements Propagator.Setter {
private static final Logger LOG = LoggerFactory.getLogger(Hl7MessageSetter)
@@ -43,12 +44,13 @@ class Hl7MessageSetter implements Propagation.Setter {
}
@Override
- void put(Message msg, String key, String value) {
+ void set(Message msg, String key, String value) {
if (msg && key) {
def qip = Composite.QIP(msg) //, [segmentFieldName: key, values: value ?: ''])
qip[1] = key
qip[2] = value ?: ''
- def varies = nextRepetition(msg.get(segmentName)[1])
+ def seg = msg.get(segmentName)
+ def varies = nextRepetition(seg[1])
varies.data = qip
if (LOG.isDebugEnabled()) {
diff --git a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracer.groovy b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracer.groovy
index 92b639790c..6dd15c762e 100644
--- a/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracer.groovy
+++ b/commons/ihe/hl7v2/src/main/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracer.groovy
@@ -16,15 +16,12 @@
package org.openehealth.ipf.commons.ihe.hl7v2.tracing
-import brave.Span
-import brave.Tracer
-import brave.Tracing
-import brave.propagation.Propagation
import ca.uhn.hl7v2.HL7Exception
import ca.uhn.hl7v2.model.AbstractMessage
import ca.uhn.hl7v2.model.Message
-import org.slf4j.Logger
-import org.slf4j.LoggerFactory
+import io.micrometer.tracing.Span
+import io.micrometer.tracing.Tracer
+import io.micrometer.tracing.propagation.Propagator
/**
* Helper class that injects and extracts tracing information from HL7 messages
@@ -34,66 +31,55 @@ import org.slf4j.LoggerFactory
*/
class MessageTracer {
- private static final Logger LOG = LoggerFactory.getLogger(MessageTracer.class)
-
private static final String HL7_SENDING_APPLICATION = "MSH-3"
private static final String HL7_SENDING_FACILITY = "MSH-4"
private static final String HL7_MESSAGE_TYPE = "MSH-9-1"
private static final String HL7_TRIGGER_EVENT = "MSH-9-2"
private static final String HL7_PROCESSING_ID = "MSH-11"
- private final Tracing tracing
+ private final Tracer tracer
private final boolean removeSegment
private final String segmentName
- private final Propagation.Setter setter
- private final Propagation.Getter getter
+ private final Propagator propagator;
+ private final Propagator.Setter setter
+ private final Propagator.Getter getter
/**
- * @param tracing Tracing instance
+ * @param tracer Tracer instance, e.g. BraveTracer
+ * @param propagator Propagator instance, e.g. BravePropagator
* @param segmentName name of the segment with the propagated tracing information (default: ZTR)
* @param removeSegment whether the segment with the propagated tracing information is removed (default: true)
*/
- MessageTracer(Tracing tracing, String segmentName = 'ZTR', boolean removeSegment = true) {
- this.tracing = tracing
+ MessageTracer(Tracer tracer, Propagator propagator, String segmentName = 'ZTR', boolean removeSegment = true) {
+ this.tracer = tracer
this.removeSegment = removeSegment
this.segmentName = segmentName
this.setter = new Hl7MessageSetter(segmentName)
this.getter = new Hl7MessageGetter(segmentName)
+ this.propagator = propagator;
}
void sendMessage(Message msg, String name, Handler sender) {
- Tracer tracer = tracing.tracer()
- Span span = startSpan(tracer.nextSpan(), Span.Kind.CLIENT, name, msg)
+ def span = startSpan(tracer.spanBuilder(), Span.Kind.CLIENT, name, msg)
msg.addNonstandardSegment(segmentName)
- tracing.propagation()
- .injector(setter)
- .inject(span.context(), msg)
- Tracer.SpanInScope ws = tracer.withSpanInScope(span)
- try {
+ try (def ws = this.tracer.withSpan(span)) {
+ propagator.inject(span.context(), msg, setter)
sender.accept(msg, span)
} catch (Throwable t) {
span.error(t)
throw t
} finally {
- ws?.close()
- span?.finish()
+ span.end()
}
}
void receiveMessage(Message msg, String name, Handler receiver) {
- Tracer tracer = tracing.tracer()
- Span span = startSpan(tracer.nextSpan(
- tracing.propagation()
- .extractor(getter)
- .extract(msg)),
- Span.Kind.SERVER, name, msg)
- Tracer.SpanInScope ws = tracer.withSpanInScope(span)
- try {
+ def span = startSpan(propagator.extract(msg, getter), Span.Kind.SERVER, name, msg)
+ try (def ws = tracer.withSpan(span)) {
if (removeSegment && msg instanceof AbstractMessage) {
try {
msg.removeRepetition(segmentName, 0)
} catch (HL7Exception ignored) {
- // TODO LOG something?
}
}
receiver.accept(msg, span)
@@ -101,21 +87,20 @@ class MessageTracer {
span.error(t)
throw t
} finally {
- ws?.close()
- span?.finish()
+ span.end()
}
}
- private static Span startSpan(Span span, Span.Kind kind, String name, Message msg) {
- span.kind(kind)
- .name(name)
- .tag(HL7_SENDING_APPLICATION, msg.MSH[3]?.value ?: '')
- .tag(HL7_SENDING_FACILITY, msg.MSH[4]?.value ?: '')
- .tag(HL7_MESSAGE_TYPE, msg.MSH[9][1]?.value ?: '')
- .tag(HL7_TRIGGER_EVENT, msg.MSH[9][2]?.value ?: '')
- .tag(HL7_PROCESSING_ID, msg.MSH[11]?.value ?: '')
- // ExtraFieldPropagation.set(span.context(), 'messageId', msg.MSH[11]?.value ?: '')
- span.start()
+ private static Span startSpan(Span.Builder spanBuilder, Span.Kind kind, String name, Message msg) {
+ spanBuilder
+ .name(name)
+ .kind(kind)
+ .tag(HL7_SENDING_APPLICATION, msg.MSH[3]?.value ?: '')
+ .tag(HL7_SENDING_FACILITY, msg.MSH[4]?.value ?: '')
+ .tag(HL7_MESSAGE_TYPE, msg.MSH[9][1]?.value ?: '')
+ .tag(HL7_TRIGGER_EVENT, msg.MSH[9][2]?.value ?: '')
+ .tag(HL7_PROCESSING_ID, msg.MSH[11]?.value ?: '')
+ .start()
}
}
diff --git a/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetterGetterTest.groovy b/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetterGetterTest.groovy
index 860545afea..1c42f76376 100644
--- a/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetterGetterTest.groovy
+++ b/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/Hl7MessageSetterGetterTest.groovy
@@ -36,9 +36,9 @@ class Hl7MessageSetterGetterTest {
Message r01 = MessageUtils.makeMessage(CONTEXT, 'ORU', 'R01','2.5')
r01.addNonstandardSegment('ZTR')
Hl7MessageSetter setter = new Hl7MessageSetter()
- setter.put(r01, 'key1', 'value1')
- setter.put(r01, 'key2', 'value2')
- setter.put(r01, 'key3', 'value~with^reserved|characters')
+ setter.set(r01, 'key1', 'value1')
+ setter.set(r01, 'key2', 'value2')
+ setter.set(r01, 'key3', 'value~with^reserved|characters')
assertNotNull(r01.get('ZTR'))
diff --git a/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracerTest.groovy b/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracerTest.groovy
index a12fdcf9b8..7a48a3872c 100644
--- a/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracerTest.groovy
+++ b/commons/ihe/hl7v2/src/test/groovy/org/openehealth/ipf/commons/ihe/hl7v2/tracing/MessageTracerTest.groovy
@@ -16,20 +16,24 @@
package org.openehealth.ipf.commons.ihe.hl7v2.tracing
-import brave.SpanCustomizer
+import brave.Span
import brave.Tracing
+import brave.context.slf4j.MDCScopeDecorator
+import brave.handler.MutableSpan
+import brave.handler.SpanHandler
+import brave.propagation.ThreadLocalCurrentTraceContext
+import brave.propagation.TraceContext
import ca.uhn.hl7v2.HapiContext
import ca.uhn.hl7v2.model.Message
+import io.micrometer.tracing.SpanCustomizer
+import io.micrometer.tracing.brave.bridge.BraveCurrentTraceContext
+import io.micrometer.tracing.brave.bridge.BravePropagator
+import io.micrometer.tracing.brave.bridge.BraveTracer
import org.junit.jupiter.api.Test
import org.openehealth.ipf.commons.ihe.hl7v2.definitions.HapiContextFactory
import org.openehealth.ipf.modules.hl7.message.MessageUtils
-import zipkin2.Span
-import zipkin2.reporter.Reporter
-import static org.junit.jupiter.api.Assertions.assertEquals
-import static org.junit.jupiter.api.Assertions.assertNotEquals
-import static org.junit.jupiter.api.Assertions.assertFalse
-import static org.junit.jupiter.api.Assertions.assertTrue
+import static org.junit.jupiter.api.Assertions.*
/**
* @author Christian Ohr
@@ -41,12 +45,24 @@ class MessageTracerTest {
@Test
void traceMessage() {
MockReporter reporter = new MockReporter()
- Tracing tracing = Tracing.newBuilder()
+
+ // Brave setup
+ def braveCurrentTraceContext = ThreadLocalCurrentTraceContext.newBuilder()
+ .addScopeDecorator(MDCScopeDecorator.get()) // Example of Brave's automatic MDC setup
+ .build();
+ def tracing = Tracing.newBuilder()
.localServiceName('MessageTracerTest')
- .spanReporter(reporter)
+ .addSpanHandler(reporter)
.build()
- MessageTracer messageTracer = new MessageTracer(tracing)
- Message sending = MessageUtils.makeMessage(CONTEXT, 'ORU', 'R01', '2.5')
+ def braveTracer = tracing.tracer();
+
+ // Micrometer Brave Bridge
+ def propagator = new BravePropagator(tracing)
+ def bridgeContext = new BraveCurrentTraceContext(braveCurrentTraceContext);
+ def tracer = new BraveTracer(braveTracer, bridgeContext);
+
+ def messageTracer = new MessageTracer(tracer, propagator)
+ def sending = MessageUtils.makeMessage(CONTEXT, 'ORU', 'R01', '2.5')
messageTracer.sendMessage(sending, "producer", new Handler() {
@Override
@@ -62,29 +78,30 @@ class MessageTracerTest {
})
// Check a few things
- List spans = reporter.getSpans()
+ def spans = reporter.getSpans()
assertEquals(2, spans.size())
- Span clientSpan = reporter.spans.find { span -> span.kind() == Span.Kind.CLIENT}
- Span serverSpan = reporter.spans.find { span -> span.kind() == Span.Kind.SERVER}
+ def clientSpan = reporter.spans.find { span -> span.kind() == Span.Kind.CLIENT}
+ def serverSpan = reporter.spans.find { span -> span.kind() == Span.Kind.SERVER}
assertFalse(clientSpan.tags().isEmpty())
- assertEquals(clientSpan.tags(), serverSpan.tags())
+ assertEquals(new HashMap<>(clientSpan.tags()), new HashMap<>(serverSpan.tags()))
assertNotEquals(clientSpan.id(), serverSpan.id())
assertEquals(clientSpan.id(), serverSpan.parentId())
- assertTrue(clientSpan.durationAsLong() > serverSpan.durationAsLong())
}
- private static final class MockReporter implements Reporter {
+ class MockReporter extends SpanHandler {
- private List spans = new ArrayList<>()
+ private List spans = new ArrayList<>();
@Override
- void report(zipkin2.Span span) {
- spans.add(span)
+ boolean end(TraceContext context, MutableSpan span, Cause cause) {
+ spans.add(span);
+ return super.end(context, span, cause)
}
- List getSpans() {
+ List getSpans() {
return spans
}
}
+
}
diff --git a/dependencies/pom.xml b/dependencies/pom.xml
index 754d2b4cf4..9ac3e8e8de 100644
--- a/dependencies/pom.xml
+++ b/dependencies/pom.xml
@@ -10,30 +10,29 @@
1.6
1.78
- 5.18.1
4.4.3
3.19.0
4.0.4
2.16.1
1.26.1
- 1.3.200-v20130910-1609
- 3.6.200-v20130402-1505
- 4.0.21
+ 1.3.200-v20130910-1609
+ 3.6.200-v20130402-1505
+ 4.0.22
2.5.1
7.2.1
3.0.2
3.0.0
5.3.1
1.2.0.201212201425
-
- 2.16.2
+ 2.17.1
4.0.5
3.0.0
2.0.6.1
- 1.9.20
- 1.9.24
- 3.0.5
+ 1.9.20
+ 1.9.24
+ 3.0.5
+ 1.3.2
1.7.0
9.37.3
7.1.2
@@ -43,7 +42,7 @@
3.3.1
2.3
25.0
- 6.6.2
+ 7.0.0
4.0.2
@@ -56,6 +55,13 @@
+
+ io.micrometer
+ micrometer-tracing-bom
+ ${micrometer-version}
+ import
+ pom
+
com.fasterxml.jackson
jackson-bom
@@ -324,31 +330,6 @@
-
- io.zipkin.brave
- brave
- ${brave-version}
-
-
- io.zipkin.brave
- brave-spring-beans
- ${brave-version}
-
-
- io.zipkin.brave
- brave-context-slf4j
- ${brave-version}
-
-
- io.zipkin.brave
- brave-instrumentation-httpclient
- ${brave-version}
-
-
- io.zipkin.brave
- brave-instrumentation-servlet
- ${brave-version}
-
com.github.mizosoft.methanol
methanol
@@ -366,7 +347,7 @@
org.apache.cxf
- cxf-integration-tracing-brave
+ cxf-integration-tracing-micrometer
${cxf.version}
@@ -413,7 +394,7 @@
org.eclipse.equinox
app
- ${equinox-app.version}
+ ${equinox-app-version}
org.eclipse.equinox
@@ -424,7 +405,7 @@
org.eclipse.equinox
common
- ${equinox-common.version}
+ ${equinox-common-version}
org.openehealth.ipf.oht.mdht
diff --git a/modules/hl7-kotlin/pom.xml b/modules/hl7-kotlin/pom.xml
index 20910bbc8c..50b1686649 100644
--- a/modules/hl7-kotlin/pom.xml
+++ b/modules/hl7-kotlin/pom.xml
@@ -58,7 +58,7 @@
io.github.microutils
kotlin-logging-jvm
- ${kotlin.logging.version}
+ ${kotlin-logging-version}
org.jetbrains.kotlin
@@ -132,7 +132,7 @@
org.jetbrains.kotlin
kotlin-maven-plugin
- ${kotlin.version}
+ ${kotlin-version}
compile
@@ -164,7 +164,7 @@
org.jetbrains.dokka
dokka-maven-plugin
- ${kotlin.dokka.version}
+ ${kotlin-dokka-version}
package
diff --git a/platform-camel/ihe/hl7v2/pom.xml b/platform-camel/ihe/hl7v2/pom.xml
index 0ed8a798f7..83c8c54b1f 100644
--- a/platform-camel/ihe/hl7v2/pom.xml
+++ b/platform-camel/ihe/hl7v2/pom.xml
@@ -45,8 +45,8 @@
- io.zipkin.brave
- brave
+ io.micrometer
+ micrometer-tracing-bridge-brave
true
diff --git a/platform-camel/ihe/mllp/pom.xml b/platform-camel/ihe/mllp/pom.xml
index 1366bccee2..88328ac374 100644
--- a/platform-camel/ihe/mllp/pom.xml
+++ b/platform-camel/ihe/mllp/pom.xml
@@ -117,8 +117,13 @@
test
- io.zipkin.brave
- brave
+ io.micrometer
+ micrometer-tracing
+ test
+
+
+ io.micrometer
+ micrometer-tracing-bridge-brave
test
diff --git a/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/BraveTracerFactoryBean.java b/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/BraveTracerFactoryBean.java
new file mode 100644
index 0000000000..a9e7ec9560
--- /dev/null
+++ b/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/BraveTracerFactoryBean.java
@@ -0,0 +1,31 @@
+package org.openehealth.ipf.platform.camel.ihe.mllp.iti8;
+
+import brave.Tracing;
+import brave.context.slf4j.MDCScopeDecorator;
+import brave.propagation.ThreadLocalCurrentTraceContext;
+import io.micrometer.tracing.brave.bridge.BraveCurrentTraceContext;
+import io.micrometer.tracing.brave.bridge.BraveTracer;
+import org.springframework.beans.factory.FactoryBean;
+
+public class BraveTracerFactoryBean implements FactoryBean {
+
+ private final Tracing tracing;
+
+ public BraveTracerFactoryBean(Tracing tracing) {
+ this.tracing = tracing;
+ }
+
+ @Override
+ public BraveTracer getObject() throws Exception {
+ var braveCurrentTraceContext = ThreadLocalCurrentTraceContext.newBuilder()
+ .addScopeDecorator(MDCScopeDecorator.get()) // Example of Brave's automatic MDC setup
+ .build();
+ var bridgeContext = new BraveCurrentTraceContext(braveCurrentTraceContext);
+ return new BraveTracer(tracing.tracer(), bridgeContext);
+ }
+
+ @Override
+ public Class> getObjectType() {
+ return BraveTracer.class;
+ }
+}
diff --git a/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/MockReporter.groovy b/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/MockReporter.groovy
index 6c8aa8ba65..cac054fa17 100644
--- a/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/MockReporter.groovy
+++ b/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/MockReporter.groovy
@@ -16,21 +16,20 @@
package org.openehealth.ipf.platform.camel.ihe.mllp.iti8
-import zipkin2.reporter.Reporter
+import brave.handler.MutableSpan
+import brave.handler.SpanHandler
+import brave.propagation.TraceContext
/**
* @author Christian Ohr
*/
-class MockReporter implements Reporter {
+class MockReporter extends SpanHandler {
- private List spans = new ArrayList<>();
+ List spans = new ArrayList<>();
@Override
- void report(zipkin2.Span span) {
+ boolean end(TraceContext context, MutableSpan span, Cause cause) {
spans.add(span);
- }
-
- List getSpans() {
- return spans
+ return super.end(context, span, cause)
}
}
\ No newline at end of file
diff --git a/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/TestIti8.groovy b/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/TestIti8.groovy
index 33e993d47e..45459f51d8 100644
--- a/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/TestIti8.groovy
+++ b/platform-camel/ihe/mllp/src/test/groovy/org/openehealth/ipf/platform/camel/ihe/mllp/iti8/TestIti8.groovy
@@ -15,6 +15,7 @@
*/
package org.openehealth.ipf.platform.camel.ihe.mllp.iti8
+import brave.Span
import ca.uhn.hl7v2.HL7Exception
import ca.uhn.hl7v2.parser.PipeParser
import org.apache.camel.Exchange
@@ -28,7 +29,6 @@ import org.openehealth.ipf.commons.ihe.core.payload.PayloadLoggerBase
import org.openehealth.ipf.platform.camel.ihe.mllp.core.AbstractMllpTest
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.test.context.ContextConfiguration
-import zipkin2.Span
import static org.junit.jupiter.api.Assertions.*
@@ -52,7 +52,7 @@ class TestIti8 extends AbstractMllpTest {
static void tearDownAfterClass() {
System.clearProperty(PayloadLoggerBase.PROPERTY_DISABLED)
}
-
+
/**
* Happy case, audit either enabled or disabled.
* Expected result: ACK response, two or zero audit items.
@@ -61,37 +61,38 @@ class TestIti8 extends AbstractMllpTest {
void testHappyCaseAndAudit1() {
doTestHappyCaseAndAudit("xds-iti8://localhost:18082?timeout=${TIMEOUT}&interceptorFactories=#clientInLogger,#clientOutLogger", 2)
}
+
@Test
void testHappyCaseAndAudit2() {
doTestHappyCaseAndAudit("pix-iti8://localhost:18082?audit=true&timeout=${TIMEOUT}&interceptorFactories=#clientInLogger,#clientOutLogger", 2)
}
+
@Test
void testHappyCaseAndAudit3() {
doTestHappyCaseAndAudit("xds-iti8://localhost:18081?audit=false&timeout=${TIMEOUT}&interceptorFactories=#clientInLogger,#clientOutLogger", 0)
}
+
@Test
void testHappyCaseAndTrace() {
doTestHappyCaseAndAudit("pix-iti8://localhost:18083?interceptorFactories=#producerTracingInterceptor,#clientInLogger,#clientOutLogger&timeout=${TIMEOUT}", 2)
assertEquals(2, reporter.spans.size())
- Span clientSpan = reporter.spans.find { span -> span.kind() == Span.Kind.CLIENT}
- Span serverSpan = reporter.spans.find { span -> span.kind() == Span.Kind.SERVER}
+ def clientSpan = reporter.spans.find { span -> span.kind() == Span.Kind.CLIENT }
+ def serverSpan = reporter.spans.find { span -> span.kind() == Span.Kind.SERVER }
assertFalse(clientSpan.tags().isEmpty())
- assertEquals(clientSpan.tags(), serverSpan.tags())
+ assertEquals(new HashMap<>(clientSpan.tags()), new HashMap<>(serverSpan.tags()))
assertNotEquals(clientSpan.id(), serverSpan.id())
assertEquals(clientSpan.id(), serverSpan.parentId())
- assertTrue(clientSpan.durationAsLong() > serverSpan.durationAsLong())
-
}
-
+
def doTestHappyCaseAndAudit(String endpointUri, int expectedAuditItemsCount) {
final String body = getMessageString('ADT^A01', '2.3.1')
def msg = send(endpointUri, body)
assertACK(msg)
assertAuditEvents { it.messages.size() == expectedAuditItemsCount }
}
-
+
/**
* Inacceptable messages (wrong message type, wrong trigger event, wrong version),
* on consumer side, audit enabled.
@@ -105,43 +106,47 @@ class TestIti8 extends AbstractMllpTest {
void testInacceptanceOnConsumer1() {
doTestInacceptanceOnConsumer('MDM^T01', '2.3.1')
}
+
@Test
void testInacceptanceOnConsumer2() {
doTestInacceptanceOnConsumer('ADT^A02', '2.3.1')
}
+
@Test
void testInacceptanceOnConsumer3() {
doTestInacceptanceOnConsumer('ADT^A01', '2.5')
}
+
@Test
void testInacceptanceOnConsumer4() {
doTestInacceptanceOnConsumer('ADT^A01', '3.1415926')
}
+
@Test
void testInacceptanceOnConsumer5() {
doTestInacceptanceOnConsumer('ADT^A01^ADT_A02', '2.3.1')
}
-
+
def doTestInacceptanceOnConsumer(String msh9, String msh12) {
def endpointUri = 'pix-iti8://localhost:18084'
def endpoint = camelContext.getEndpoint(endpointUri)
def consumer = endpoint.createConsumer(
- [process : { Exchange e -> /* nop */ }] as Processor
- )
+ [process: { Exchange e -> /* nop */ }] as Processor
+ )
def processor = consumer.processor
-
+
def body = getMessageString(msh9, msh12)
def exchange = new DefaultExchange(camelContext)
exchange.in.body = body
-
+
processor.process(exchange)
def response = exchange.message.body
def msg = new PipeParser().parse(response)
assertNAK(msg)
assertAuditEvents { it.messages.empty }
}
-
-
+
+
/**
* Inacceptable messages (wrong message type, wrong trigger event, wrong version),
* on producer side, audit enabled.
@@ -151,41 +156,44 @@ class TestIti8 extends AbstractMllpTest {
void testInacceptanceOnProducer1() {
doTestInacceptanceOnProducer('MDM^T01', '2.3.1')
}
+
@Test
void testInacceptanceOnProducer2() {
doTestInacceptanceOnProducer('ADT^A02', '2.3.1')
}
+
@Test
void testInacceptanceOnProducer3() {
doTestInacceptanceOnProducer('ADT^A01', '2.4')
}
+
@Test
void testInacceptanceOnProducer4() {
doTestInacceptanceOnProducer('ADT^A01', '3.1415926')
}
+
@Test
void testInacceptanceOnProducer5() {
doTestInacceptanceOnProducer('ADT^A01^ADT_A02', '2.3.1')
}
-
+
def doTestInacceptanceOnProducer(String msh9, String msh12) {
def endpointUri = "xds-iti8://localhost:18084?timeout=${TIMEOUT}&interceptorFactories=#clientInLogger,#clientOutLogger"
def body = getMessageString(msh9, msh12)
def failed = true
-
+
try {
send(endpointUri, body)
} catch (Exception e) {
def cause = e.getCause()
- if((e instanceof HL7Exception) || (cause instanceof HL7Exception))
- {
+ if ((e instanceof HL7Exception) || (cause instanceof HL7Exception)) {
failed = false
}
}
assertFalse(failed)
assertAuditEvents { it.messages.empty }
}
-
+
/**
* Tests how the exceptions in tte route are handled.
@@ -202,14 +210,14 @@ class TestIti8 extends AbstractMllpTest {
String isoMessage = this.getClass().classLoader.getResource('./iti8/iti8-a40-iso-8859-1.hl7')?.getText('iso-8859-1')
doTestException("pix-iti8://localhost:18089?timeout=${TIMEOUT}", isoMessage, "java.nio.charset.MalformedInputException")
}
-
+
def doTestException(String endpointUri, String body, String wantedOutputContent) {
def msg = send(endpointUri, body)
assertNAK(msg)
assertTrue(msg.toString().contains(wantedOutputContent))
}
-
-
+
+
/**
* Checks whether alternative HL7 codec factories can be used.
*/
diff --git a/platform-camel/ihe/mllp/src/test/resources/iti8/iti-8.xml b/platform-camel/ihe/mllp/src/test/resources/iti8/iti-8.xml
index 7cc1b830da..4a154dd8c8 100644
--- a/platform-camel/ihe/mllp/src/test/resources/iti8/iti-8.xml
+++ b/platform-camel/ihe/mllp/src/test/resources/iti8/iti-8.xml
@@ -33,21 +33,30 @@ http://camel.apache.org/schema/spring/camel-spring.xsd
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 5dd53e3ead..953ce132f5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,12 +54,13 @@
3.12.1
- 5.2.0
+ 6.0.0
+ 5.3.0
33.0.0-jre
- 1.18.32
+ 1.18.34
5.15.0
0.6
- 10.1.25
+ 10.1.26
4.25
@@ -212,7 +213,24 @@
test
-
+
+ io.zipkin.brave
+ brave
+ ${brave-version}
+ test
+
+
+ io.zipkin.brave
+ brave-spring-beans
+ ${brave-version}
+ test
+
+
+ io.zipkin.brave
+ brave-context-slf4j
+ ${brave-version}
+ test
+
net.java.quickcheck
quickcheck