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