/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.exec; import java.io.File; import java.io.IOException; import java.io.InputStream; import org.w3c.dom.Document; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.Produce; import org.apache.camel.ProducerTemplate; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import static org.apache.camel.component.exec.ExecBinding.EXEC_COMMAND_OUT_FILE; import static org.apache.commons.io.IOUtils.LINE_SEPARATOR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @ContextConfiguration(locations = {"exec-mock-executor-context.xml"}) public class ExecOutFileTest extends AbstractJUnit4SpringContextTests { private static final String FILE_CONTENT = buildFileContent(); private static final File FILE = new File("target/outfiletest.xml"); @Produce(uri = "direct:input") private ProducerTemplate producerTemplate; @Before public void setUp() throws IOException { FILE.createNewFile(); FileUtils.writeStringToFile(FILE, FILE_CONTENT); } @After public void tearDown() { FileUtils.deleteQuietly(FILE); } @Test @DirtiesContext public void testOutFile() throws Exception { Exchange e = sendWithMockedExecutor(); ExecResult result = e.getIn().getBody(ExecResult.class); assertNotNull(result); File outFile = result.getCommand().getOutFile(); assertNotNull(outFile); assertEquals(FILE_CONTENT, FileUtils.readFileToString(outFile)); } @Test @DirtiesContext public void testOutFileConvertToInputStream() throws Exception { Exchange e = sendWithMockedExecutor(); InputStream body = e.getIn().getBody(InputStream.class); assertNotNull(body); assertEquals(FILE_CONTENT, IOUtils.toString(body)); } @Test @DirtiesContext public void testOutFileConvertToDocument() throws Exception { Exchange e = sendWithMockedExecutor(); Document body = e.getIn().getBody(Document.class); assertNotNull(body); // do not parse it } @Test @DirtiesContext public void testOutFileConvertToString() throws Exception { Exchange e = sendWithMockedExecutor(); assertEquals(FILE_CONTENT, e.getIn().getBody(String.class)); } @Test @DirtiesContext public void testOutFileConvertToByteArray() throws Exception { Exchange e = sendWithMockedExecutor(); byte[] body = e.getIn().getBody(byte[].class); assertEquals(FILE_CONTENT, new String(body)); } private Exchange sendWithMockedExecutor() { Exchange e = producerTemplate.send(new Processor() { public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(EXEC_COMMAND_OUT_FILE, FILE.getPath()); exchange.getIn().setBody(FILE_CONTENT); } }); return e; } private static String buildFileContent() { StringBuilder builder = new StringBuilder(); builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append(LINE_SEPARATOR); builder.append("<data>").append(LINE_SEPARATOR); builder.append("<element>data1</element>").append(LINE_SEPARATOR); builder.append("<element>data2</element>").append(LINE_SEPARATOR); builder.append("</data>").append(LINE_SEPARATOR); builder.append(LINE_SEPARATOR); return builder.toString(); } }