@Test public void testIdempotent() throws Exception { String uri = "file:target/test-classes/idempotent?idempotent=true&delay=10"; context .getRouteDefinitions() .get(1) .adviceWith( context, new AdviceWithRouteBuilder() { @Override public void configure() throws Exception { replaceFromWith(uri); weaveByType(ToDefinition.class).selectFirst().replace().to("mock:endpoint"); } }); MockEndpoint end = context.getEndpoint("mock:endpoint", MockEndpoint.class); end.expectedMessageCount(1); producer.sendBodyAndHeader( "file://target/test-classes/idempotent", Exchange.FILE_NAME, "FCOO1.nc"); end.assertIsSatisfied(); String fileName = (String) end.getReceivedExchanges().get(0).getIn().getHeader(Exchange.FILE_NAME_ONLY); assertEquals(fileName, "FCOO1.nc"); // reset the mock end.reset(); end.expectedMessageCount(0); // move file back File file = new File("target/test-classes/idempotent/.camel/FCOO1.nc"); File renamed = new File("target/test-classes/idempotent/FCOO1.nc"); file.renameTo(renamed); producer.sendBodyAndHeader( "file://target/test-classes/idempotent", Exchange.FILE_NAME, "FCOO1.nc"); // let some time pass to let the consumer try to consume even though it cannot Thread.sleep(100); end.assertIsSatisfied(); FileEndpoint fe = context.getEndpoint(uri, FileEndpoint.class); assertNotNull(fe); // Make sure that there are no incoming messages MemoryIdempotentRepository repo = (MemoryIdempotentRepository) fe.getInProgressRepository(); assertEquals("Should be no in-progress files", 0, repo.getCacheSize()); }
public Exchange createExchange() { // create the file String uri = "file://target/filelanguage?fileExist=Override"; template.sendBodyAndHeader(uri, "Hello World", Exchange.FILE_NAME, "test/hello.txt"); // get the file handle file = new File("target/filelanguage/test/hello.txt"); GenericFile<File> gf = FileConsumer.asGenericFile("target/filelanguage", file, null); FileEndpoint endpoint = getMandatoryEndpoint(uri, FileEndpoint.class); Exchange answer = endpoint.createExchange(gf); endpoint.configureMessage(gf, answer.getIn()); Calendar cal = Calendar.getInstance(); cal.set(1974, Calendar.APRIL, 20); answer.getIn().setHeader("birthday", cal.getTime()); cal.set(2008, Calendar.AUGUST, 8); answer.getOut().setHeader("special", cal.getTime()); return answer; }