| /** |
| * 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(); |
| } |
| } |