/** | |
* 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 org.apache.camel.CamelContext; | |
import org.apache.camel.Component; | |
import org.junit.Before; | |
import org.junit.Test; | |
import org.springframework.beans.factory.annotation.Autowired; | |
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.ExecEndpoint.NO_TIMEOUT; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertNotNull; | |
import static org.junit.Assert.assertNull; | |
import static org.junit.Assert.assertSame; | |
import static org.junit.Assert.assertTrue; | |
/** | |
* Test the configuration of {@link ExecEndpoint} | |
*/ | |
@ContextConfiguration | |
public class ExecEndpointTest extends AbstractJUnit4SpringContextTests { | |
@Autowired | |
private CamelContext camelContext; | |
@Autowired | |
private ExecBinding customBinding; | |
@Autowired | |
private ExecCommandExecutor customExecutor; | |
private Component component; | |
@Before | |
public void setUp() throws Exception { | |
component = camelContext.getComponent("exec"); | |
} | |
@Test | |
@DirtiesContext | |
public void testValidComponentDescriptor() { | |
assertNotNull("The Camel Exec component can not be resolved", component); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointDefaultConf() throws Exception { | |
ExecEndpoint e = createExecEndpoint("exec:test"); | |
assertTrue("The Camel Exec component must create instances of " + ExecEndpoint.class.getSimpleName(), e instanceof ExecEndpoint); | |
assertNull(e.getArgs()); | |
assertNull(e.getWorkingDir()); | |
assertNull(e.getOutFile()); | |
assertEquals(NO_TIMEOUT, e.getTimeout()); | |
assertEquals("test", e.getExecutable()); | |
assertNotNull(e.getCommandExecutor()); | |
assertNotNull(e.getBinding()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointDefaultNoTimeout() throws Exception { | |
ExecEndpoint e = createExecEndpoint("exec:test"); | |
assertEquals(ExecEndpoint.NO_TIMEOUT, e.getTimeout()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointCustomBinding() throws Exception { | |
ExecEndpoint e = createExecEndpoint("exec:test?binding=#customBinding"); | |
assertSame("Expected is the custom customBinding reference from the application context", customBinding, e.getBinding()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointCustomCommandExecutor() throws Exception { | |
ExecEndpoint e = createExecEndpoint("exec:test?commandExecutor=#customExecutor"); | |
assertSame("Expected is the custom customExecutor reference from the application context", customExecutor, e.getCommandExecutor()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointWithArgs() throws Exception { | |
String args = "arg1 arg2 arg3"; | |
ExecEndpoint e = createExecEndpoint("exec:test?args=" + args); | |
assertEquals(args, e.getArgs()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointWithArgs2() throws Exception { | |
String args = "arg1 \"arg2 \" arg3"; | |
ExecEndpoint e = createExecEndpoint("exec:test?args=" + args); | |
assertEquals(args, e.getArgs()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointWithTimeout() throws Exception { | |
long timeout = 1999999L; | |
ExecEndpoint e = createExecEndpoint("exec:test?timeout=" + timeout); | |
assertEquals(timeout, e.getTimeout()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointWithOutFile() throws Exception { | |
String outFile = "output.txt"; | |
ExecEndpoint e = createExecEndpoint("exec:test?outFile=" + outFile); | |
assertEquals(outFile, e.getOutFile()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointWithWorkingDir() throws Exception { | |
String workingDir = "/workingdir"; | |
ExecEndpoint e = createExecEndpoint("exec:test?workingDir=" + workingDir); | |
assertEquals(workingDir, e.getWorkingDir()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointEscapedWorkingDir() throws Exception { | |
String cmd = "temp.exe"; | |
String dir = "\"c:/program files/wokr/temp\""; | |
String uri = "exec:" + cmd + "?workingDir=" + dir; | |
ExecEndpoint endpoint = createExecEndpoint(uri); | |
assertEquals(cmd, endpoint.getExecutable()); | |
assertNull(endpoint.getArgs()); | |
assertNotNull(endpoint.getCommandExecutor()); | |
assertEquals(dir, endpoint.getWorkingDir()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointEscapedCommand() throws Exception { | |
String executable = "C:/Program Files/test/text.exe"; | |
String uri = "exec:" + executable; | |
ExecEndpoint endpoint = createExecEndpoint(uri); | |
assertNull(endpoint.getArgs()); | |
assertNull(endpoint.getWorkingDir()); | |
assertNotNull(endpoint.getCommandExecutor()); | |
assertEquals(executable, endpoint.getExecutable()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointComposite() throws Exception { | |
String workingDir = "/workingdir"; | |
String argsEscaped = "arg1 arg2 \"arg 3\""; | |
long timeout = 10000L; | |
ExecEndpoint e = createExecEndpoint("exec:executable.exe?workingDir=" + workingDir + "&timeout=" + timeout + "&args=" + argsEscaped); | |
assertEquals(workingDir, e.getWorkingDir()); | |
assertEquals(argsEscaped, e.getArgs()); | |
assertEquals(timeout, e.getTimeout()); | |
} | |
@Test | |
@DirtiesContext | |
public void testCreateEndpointComposite2() throws Exception { | |
String workingDir = "/workingdir"; | |
String outFile = "target/outfile.xml"; | |
long timeout = 10000; | |
StringBuilder builder = new StringBuilder(); | |
builder.append("exec:executable.exe").append("?workingDir=" + workingDir).append("&timeout=" + timeout); | |
builder.append("&outFile=" + outFile); | |
builder.append("&commandExecutor=#customExecutor&binding=#customBinding"); | |
ExecEndpoint e = createExecEndpoint(builder.toString()); | |
assertEquals(workingDir, e.getWorkingDir()); | |
assertEquals(timeout, e.getTimeout()); | |
assertEquals(outFile, e.getOutFile()); | |
assertSame(customBinding, e.getBinding()); | |
assertSame(customExecutor, e.getCommandExecutor()); | |
} | |
private ExecEndpoint createExecEndpoint(String uri) throws Exception { | |
logger.debug("Using Exec endpoint URI " + uri); | |
return (ExecEndpoint)component.createEndpoint(uri); | |
} | |
} |