Hi,

I noticed a bug where the body (StreamCache) was already removed before the
exchange reached the end (in the Wiretap route).

I found the following ticket
https://issues.apache.org/jira/browse/CAMEL-8386 and code
https://fisheye6.atlassian.com/changelog/camel-git?cs=4661cbb94513d6047e58581b23dcd4a6fad166f7
but I think it still doesn't fix the Wiretap problem.

Here you can find my test (executed on 2.15.1). If you disable the
StreamCaching or remove the delay it works, enabling it again will break
the test.

============
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.DefaultStreamCachingStrategy;
import org.apache.camel.spi.StreamCachingStrategy;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Before;
import org.junit.Test;

public class WireTapTest extends CamelTestSupport {

private MockEndpoint y;
private MockEndpoint z;

@Before
public void prepareEndpoints() {
y = getMockEndpoint("mock:file:y");
z = getMockEndpoint("mock:file:z");
}

@Test
public void
testSendingAMessageUsingWiretapShouldNotDeleteStreamBeforeWiretappedExcangeIsComplete()
throws InterruptedException {
y.expectedMessageCount(1);
z.expectedMessageCount(1);

// test.txt should contain more than one character
template.sendBody("direct:start",
this.getClass().getResourceAsStream("/test.txt"));

assertMockEndpointsSatisfied();
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
StreamCachingStrategy streamCachingStrategy = new
DefaultStreamCachingStrategy();
streamCachingStrategy.setSpoolThreshold(1);
context.setStreamCachingStrategy(streamCachingStrategy);
context.setStreamCaching(true);

from("direct:start")
.wireTap("direct:x")
.to("file:y");

from("direct:x")
.delay(2000)
.to("file:z");
}
};
}

@Override
public String isMockEndpoints() {
return "(file:z|file:y)";
}
}
=============

If you run the test you can clearly see the temp file deletion followed by
the closed stream exception:

Tried 1 to delete file:
/var/folders/db/brq60fqj4vb8mnx_5nlz36nw0000gn/T/camel/camel-tmp-00cd1ce2-7d44-47fe-b357-008e8146f770/cos8797132745923044996.tmp
with result: true

Cannot reset stream from file
/var/folders/db/brq60fqj4vb8mnx_5nlz36nw0000gn/T/camel/camel-tmp-00cd1ce2-7d44-47fe-b357-008e8146f770/cos8797132745923044996.tmp

I encountered the same issue during a more complex route that does some
splitting (zip file) and multicasting. This occurred on Camel 2.14.1 so it
could be fixed by https://issues.apache.org/jira/browse/CAMEL-8284 but I
need to test this.

Kind regards,

Geert

Reply via email to