Skip to content

Commit

Permalink
feat: Add option to display message context (#365)
Browse files Browse the repository at this point in the history
  • Loading branch information
alisihab authored Feb 5, 2025
1 parent ff465de commit 986944d
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 6 deletions.
9 changes: 9 additions & 0 deletions src/main/java/nl/nn/testtool/Checkpoint.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public class Checkpoint implements Serializable, Cloneable {
private String messageClassName;
private String name;
private String message;
private Map<String, Object> messageContext;
private String encoding;
private String streaming;
private boolean waitingForStream = false;
Expand Down Expand Up @@ -311,6 +312,14 @@ public String getMessage() {
return message;
}

public void setMessageContext(Map<String, Object> messageContext) {
this.messageContext = messageContext;
}

public Map<String, Object> getMessageContext() {
return messageContext;
}

public void closeMessageCapturer() {
try {
if (messageCapturerWriter != null) {
Expand Down
11 changes: 6 additions & 5 deletions src/main/java/nl/nn/testtool/Report.java
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ protected void init() {
threadsActiveCount++;
}

protected <T> T checkpoint(String childThreadId, String sourceClassName, String name, T message,
protected <T> T checkpoint(String childThreadId, String sourceClassName, String name, T message, Map<String, Object> messageContext,
StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException,
Set<String> matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) {
if (checkpointType == CheckpointType.THREAD_CREATEPOINT.toInt()) {
Expand Down Expand Up @@ -317,7 +317,7 @@ protected <T> T checkpoint(String childThreadId, String sourceClassName, String
}
}
}
message = addCheckpoint(childThreadId, sourceClassName, name, message, stubableCode, stubableCodeThrowsException,
message = addCheckpoint(childThreadId, sourceClassName, name, message, messageContext, stubableCode, stubableCodeThrowsException,
matchingStubStrategies, checkpointType, levelChangeNextCheckpoint);
return message;
}
Expand Down Expand Up @@ -373,7 +373,7 @@ private void removeThreadCreatepoint(int index, String childThreadId) {
}
}

private <T> T addCheckpoint(String childThreadId, String sourceClassName, String name, T message,
private <T> T addCheckpoint(String childThreadId, String sourceClassName, String name, T message, Map<String, Object> messageContext,
StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException,
Set<String> matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) {
String threadName = Thread.currentThread().getName();
Expand Down Expand Up @@ -440,7 +440,7 @@ private <T> T addCheckpoint(String childThreadId, String sourceClassName, Strin
logMaxMemoryUsage = false;
}
} else {
message = addCheckpoint(threadName, sourceClassName, name, message, stubableCode,
message = addCheckpoint(threadName, sourceClassName, name, message, messageContext, stubableCode,
stubableCodeThrowsException, matchingStubStrategies, checkpointType, index, level);
}
Integer newLevel = level + levelChangeNextCheckpoint;
Expand All @@ -455,10 +455,11 @@ private <T> T addCheckpoint(String childThreadId, String sourceClassName, Strin
}

@SneakyThrows
private <T> T addCheckpoint(String threadName, String sourceClassName, String name, T message,
private <T> T addCheckpoint(String threadName, String sourceClassName, String name, T message, Map<String, Object> messageContext,
StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException,
Set<String> matchingStubStrategies, int checkpointType, Integer index, Integer level) {
Checkpoint checkpoint = new Checkpoint(this, threadName, sourceClassName, name, checkpointType, level);
checkpoint.setMessageContext(messageContext);
if (testTool.getOpenTelemetryTracer() != null) {
SpanBuilder checkpointSpanBuilder = testTool.getOpenTelemetryTracer().spanBuilder("checkpoint - " + name);
for (Checkpoint checkpointInList: checkpoints) {
Expand Down
69 changes: 68 additions & 1 deletion src/main/java/nl/nn/testtool/TestTool.java
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,14 @@ public Tracer getOpenTelemetryTracer() {
private <T> T checkpoint(String correlationId, String childThreadId, String sourceClassName, String name,
T message, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException,
Set<String> matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) {
return checkpoint(correlationId, childThreadId, sourceClassName, name,
message, null, stubableCode, stubableCodeThrowsException,
matchingStubStrategies, checkpointType, levelChangeNextCheckpoint);
}

private <T> T checkpoint(String correlationId, String childThreadId, String sourceClassName, String name,
T message, Map<String, Object> messageContext, StubableCode stubableCode, StubableCodeThrowsException stubableCodeThrowsException,
Set<String> matchingStubStrategies, int checkpointType, int levelChangeNextCheckpoint) {
boolean executeStubableCode = true;
if (reportGeneratorEnabled) {
Report report;
Expand Down Expand Up @@ -353,7 +361,7 @@ private <T> T checkpoint(String correlationId, String childThreadId, String sour
continue;
}
executeStubableCode = false;
message = report.checkpoint(childThreadId, sourceClassName, name, message, stubableCode,
message = report.checkpoint(childThreadId, sourceClassName, name, message, messageContext, stubableCode,
stubableCodeThrowsException, matchingStubStrategies, checkpointType,
levelChangeNextCheckpoint);
closeReportIfFinished(report);
Expand Down Expand Up @@ -500,12 +508,23 @@ public <T> T startpoint(String correlationId, String sourceClassName, String nam
CheckpointType.STARTPOINT.toInt(), 1);
}

public <T> T startpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.STARTPOINT.toInt(), 1);
}

public <T> T startpoint(String correlationId, String sourceClassName, String name, T message,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies,
CheckpointType.STARTPOINT.toInt(), 1);
}

public <T> T startpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies,
CheckpointType.STARTPOINT.toInt(), 1);
}

public <T> T startpoint(String correlationId, String sourceClassName, String name, StubableCode stubableCode,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, null, stubableCode, null, matchingStubStrategies,
Expand Down Expand Up @@ -538,12 +557,22 @@ public <T> T endpoint(String correlationId, String sourceClassName, String name,
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null,
CheckpointType.ENDPOINT.toInt(), -1);
}

public <T> T endpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.ENDPOINT.toInt(), -1);
}

public <T> T endpoint(String correlationId, String sourceClassName, String name, T message,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies,
CheckpointType.ENDPOINT.toInt(), -1);
}
public <T> T endpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies,
CheckpointType.ENDPOINT.toInt(), -1);
}

public <T> T endpoint(String correlationId, String sourceClassName, String name,
StubableCode stubableCode, Set<String> matchingStubStrategies) {
Expand Down Expand Up @@ -615,12 +644,21 @@ public <T> T inputpoint(String correlationId, String sourceClassName, String nam
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null,
CheckpointType.INPUTPOINT.toInt(), 0);
}
public <T> T inputpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.INPUTPOINT.toInt(), 0);
}

public <T> T inputpoint(String correlationId, String sourceClassName, String name, T message,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies,
CheckpointType.INPUTPOINT.toInt(), 0);
}
public <T> T inputpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies,
CheckpointType.INPUTPOINT.toInt(), 0);
}

public <T> T inputpoint(String correlationId, String sourceClassName, String name,
StubableCode stubableCode, Set<String> matchingStubStrategies) {
Expand Down Expand Up @@ -653,12 +691,21 @@ public <T> T outputpoint(String correlationId, String sourceClassName, String na
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null,
CheckpointType.OUTPUTPOINT.toInt(), 0);
}
public <T> T outputpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.OUTPUTPOINT.toInt(), 0);
}

public <T> T outputpoint(String correlationId, String sourceClassName, String name, T message,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, matchingStubStrategies,
CheckpointType.OUTPUTPOINT.toInt(), 0);
}
public <T> T outputpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext,
Set<String> matchingStubStrategies) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, matchingStubStrategies,
CheckpointType.OUTPUTPOINT.toInt(), 0);
}

public <T> T outputpoint(String correlationId, String sourceClassName, String name,
StubableCode stubableCode, Set<String> matchingStubStrategies) {
Expand Down Expand Up @@ -731,6 +778,10 @@ public <T> T infopoint(String correlationId, String sourceClassName, String name
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null,
CheckpointType.INFOPOINT.toInt(), 0);
}
public <T> T infopoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.INFOPOINT.toInt(), 0);
}

/**
* Use abortpoint instead of endpoint in case an exception is thrown after a startpoint. The exception object can
Expand All @@ -747,6 +798,10 @@ public <T> T abortpoint(String correlationId, String sourceClassName, String nam
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null,
CheckpointType.ABORTPOINT.toInt(), -1);
}
public <T> T abortpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.ABORTPOINT.toInt(), -1);
}

/**
* Set a marker in the report for a child thread to appear. This method
Expand Down Expand Up @@ -779,6 +834,11 @@ public <T> T threadStartpoint(String correlationId, String childThreadId, String
return checkpoint(correlationId, childThreadId, sourceClassName, name, message, null, null, null,
CheckpointType.THREAD_STARTPOINT.toInt(), 1);
}
public <T> T threadStartpoint(String correlationId, String childThreadId, String sourceClassName,
String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, childThreadId, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.THREAD_STARTPOINT.toInt(), 1);
}

/**
* Startpoint for a child thread. This method can be used when the name of
Expand All @@ -794,11 +854,18 @@ public <T> T threadStartpoint(String correlationId, String childThreadId, String
public <T> T threadStartpoint(String correlationId, String sourceClassName, String name, T message) {
return threadStartpoint(correlationId, Thread.currentThread().getName(), sourceClassName, name, message);
}
public <T> T threadStartpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return threadStartpoint(correlationId, Thread.currentThread().getName(), sourceClassName, name, message, messageContext);
}

public <T> T threadEndpoint(String correlationId, String sourceClassName, String name, T message) {
return checkpoint(correlationId, null, sourceClassName, name, message, null, null, null,
CheckpointType.THREAD_ENDPOINT.toInt(), -1);
}
public <T> T threadEndpoint(String correlationId, String sourceClassName, String name, T message, Map<String, Object> messageContext) {
return checkpoint(correlationId, null, sourceClassName, name, message, messageContext, null, null, null,
CheckpointType.THREAD_ENDPOINT.toInt(), -1);
}

/**
* Mark all threads and message capturers as finished and close the report, hence write the report to storage. When
Expand Down

0 comments on commit 986944d

Please sign in to comment.