/* * Copyright 2014 LinkedIn Corp. * * Licensed 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 azkaban.jobExecutor; import azkaban.flow.CommonJobProperties; import azkaban.utils.Props; import java.io.File; import java.io.IOException; import org.apache.log4j.Logger; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; public class ProcessJobTest { @Rule public TemporaryFolder temp = new TemporaryFolder(); private ProcessJob job = null; private Props props = null; private Logger log = Logger.getLogger(ProcessJob.class); @BeforeClass public static void classInit() throws Exception { azkaban.test.Utils.initServiceProvider(); } @Before public void setUp() throws IOException { File workingDir = temp.newFolder("TestProcess"); // Initialize job props = AllJobExecutorTests.setUpCommonProps(); props.put(AbstractProcessJob.WORKING_DIR, workingDir.getCanonicalPath()); props.put("type", "command"); job = new ProcessJob("TestProcess", props, props, log); } @After public void tearDown() { temp.delete(); } @Test public void testOneUnixCommand() throws Exception { // Initialize the Props props.put(ProcessJob.COMMAND, "ls -al"); job.run(); } /** * this job should run fine if the props contain user.to.proxy * @throws Exception */ @Test public void testOneUnixCommandWithProxyUserInsteadOfSubmitUser() throws Exception { // Initialize the Props props.removeLocal(CommonJobProperties.SUBMIT_USER); props.put("user.to.proxy", "test_user"); props.put(ProcessJob.COMMAND, "ls -al"); job.run(); } /** * this job should fail because there is no user.to.proxy and no CommonJobProperties.SUBMIT_USER * @throws Exception */ @Test (expected=RuntimeException.class) public void testOneUnixCommandWithNoUser() throws Exception { // Initialize the Props props.removeLocal(CommonJobProperties.SUBMIT_USER); props.put(ProcessJob.COMMAND, "ls -al"); job.run(); } @Test public void testFailedUnixCommand() throws Exception { // Initialize the Props props.put(ProcessJob.COMMAND, "xls -al"); try { job.run(); } catch (RuntimeException e) { Assert.assertTrue(true); e.printStackTrace(); } } @Test public void testMultipleUnixCommands() throws Exception { // Initialize the Props props.put(ProcessJob.COMMAND, "pwd"); props.put("command.1", "date"); props.put("command.2", "whoami"); job.run(); } @Test public void testPartitionCommand() throws Exception { String test1 = "a b c"; Assert.assertArrayEquals(new String[] { "a", "b", "c" }, ProcessJob.partitionCommandLine(test1)); String test2 = "a 'b c'"; Assert.assertArrayEquals(new String[] { "a", "b c" }, ProcessJob.partitionCommandLine(test2)); String test3 = "a e='b c'"; Assert.assertArrayEquals(new String[] { "a", "e=b c" }, ProcessJob.partitionCommandLine(test3)); } }