blob: b65aa467fd1c1f1ea90dbf4b51598fa653a5faac [file] [log] [blame]
/**
* 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.falcon.cli;
import org.apache.falcon.entity.v0.SchemaHelper;
import org.apache.falcon.resource.TestContext;
import org.apache.falcon.util.OozieTestUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.util.Date;
import java.util.Map;
/**
* Test for Falcon CLI.
*
* todo: Refactor both the classes to move this methods to helper;
*/
@Test(groups = {"exhaustive"})
public class FalconCLIIT {
private InMemoryWriter stream = new InMemoryWriter(System.out);
@BeforeClass
public void prepare() throws Exception {
TestContext.prepare();
}
public void testSubmitEntityValidCommands() throws Exception {
FalconCLI.OUT.set(stream);
String filePath;
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
filePath = TestContext.overlayParametersOverTemplate(TestContext.CLUSTER_TEMPLATE, overlay);
Assert.assertEquals(
0,
executeWithURL("entity -submit -type cluster -file " + filePath));
context.setCluster(overlay.get("cluster"));
Assert.assertEquals(stream.buffer.toString().trim(),
"falcon/default/Submit successful (cluster) " + context.getClusterName());
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
Assert.assertEquals(
stream.buffer.toString().trim(),
"falcon/default/Submit successful (feed) "
+ overlay.get("inputFeedName"));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
Assert.assertEquals(
stream.buffer.toString().trim(),
"falcon/default/Submit successful (feed) "
+ overlay.get("outputFeedName"));
filePath = TestContext.overlayParametersOverTemplate(TestContext.PROCESS_TEMPLATE, overlay);
Assert.assertEquals(
0,
executeWithURL("entity -submit -type process -file " + filePath));
Assert.assertEquals(
stream.buffer.toString().trim(),
"falcon/default/Submit successful (process) "
+ overlay.get("processName"));
}
public void testListWithEmptyConfigStore() throws Exception {
Assert.assertEquals(
0,
executeWithURL("entity -list -type process "));
}
public void testSubmitAndScheduleEntityValidCommands() throws Exception {
String filePath;
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
filePath = TestContext.overlayParametersOverTemplate(context.getClusterFileTemplate(), overlay);
Assert.assertEquals(-1,
executeWithURL("entity -submitAndSchedule -type cluster -file "
+ filePath));
context.setCluster(overlay.get("cluster"));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submitAndSchedule -type feed -file "
+ filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submitAndSchedule -type feed -file "
+ filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.PROCESS_TEMPLATE, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submitAndSchedule -type process -file "
+ filePath));
Assert.assertEquals(0,
executeWithURL("entity -update -name " + overlay.get("processName") + " -type process -file "
+ filePath + " -effective 2025-04-20T00:00Z"));
}
public void testValidateValidCommands() throws Exception {
String filePath;
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
filePath = TestContext.overlayParametersOverTemplate(context.getClusterFileTemplate(), overlay);
Assert.assertEquals(0,
executeWithURL("entity -validate -type cluster -file "
+ filePath));
context.setCluster(overlay.get("cluster"));
Assert.assertEquals(
0,
executeWithURL("entity -submit -type cluster -file " + filePath));
context.setCluster(overlay.get("cluster"));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -validate -type feed -file " + filePath));
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -validate -type feed -file " + filePath));
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.PROCESS_TEMPLATE, overlay);
Assert.assertEquals(0,
executeWithURL("entity -validate -type process -file "
+ filePath));
Assert.assertEquals(
0,
executeWithURL("entity -submit -type process -file " + filePath));
}
public void testDefinitionEntityValidCommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -definition -type cluster -name "
+ overlay.get("cluster")));
Assert.assertEquals(
0,
executeWithURL("entity -definition -type feed -name "
+ overlay.get("inputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -definition -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(0,
executeWithURL("entity -definition -type process -name "
+ overlay.get("processName")));
}
public void testScheduleEntityValidCommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(-1,
executeWithURL("entity -schedule -type cluster -name "
+ overlay.get("cluster")));
Assert.assertEquals(
0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
}
public void testSuspendResumeStatusEntityValidCommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(
0,
executeWithURL("entity -status -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -status -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(
0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
OozieTestUtils.waitForProcessWFtoStart(context);
Assert.assertEquals(
0,
executeWithURL("entity -suspend -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -suspend -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(
0,
executeWithURL("entity -status -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -status -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(
0,
executeWithURL("entity -resume -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -resume -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(
0,
executeWithURL("entity -status -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -status -type process -name "
+ overlay.get("processName")));
}
public void testSubCommandPresence() throws Exception {
Assert.assertEquals(-1, executeWithURL("entity -type cluster "));
}
public void testDeleteEntityValidCommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(
-1,
executeWithURL("entity -delete -type cluster -name "
+ overlay.get("cluster")));
Assert.assertEquals(
-1,
executeWithURL("entity -delete -type feed -name "
+ overlay.get("inputFeedName")));
Assert.assertEquals(
-1,
executeWithURL("entity -delete -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -delete -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(
0,
executeWithURL("entity -delete -type feed -name "
+ overlay.get("inputFeedName")));
Assert.assertEquals(
0,
executeWithURL("entity -delete -type feed -name "
+ overlay.get("outputFeedName")));
}
public void testInvalidCLIEntitycommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(-1,
executeWithURL("entity -submit -type feed -name " + "name"));
Assert.assertEquals(-1,
executeWithURL("entity -schedule -type feed -file " + "name"));
}
public void testInstanceRunningAndStatusCommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
OozieTestUtils.waitForProcessWFtoStart(context);
Assert.assertEquals(0,
executeWithURL("instance -status -type feed -name "
+ overlay.get("outputFeedName")
+ " -start " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -running -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("instance -running -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start " + SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(0,
executeWithURL("instance -status -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -status -type feed -lifecycle eviction,replication -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(0,
executeWithURL("instance -status -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(0,
executeWithURL("instance -params -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE));
// test filterBy, orderBy, offset, numResults
String startTimeString = SchemaHelper.getDateFormat().format(new Date());
Assert.assertEquals(0,
executeWithURL("instance -running -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start " + startTimeString
+ " -orderBy startTime -offset 0 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("instance -running -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start " + SchemaHelper.getDateFormat().format(new Date())
+ " -orderBy INVALID -offset 0 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("instance -running -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start " + SchemaHelper.getDateFormat().format(new Date())
+ " -filterBy INVALID:FILTER -offset 0 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("instance -status -type process -name "
+ overlay.get("processName")
+ " -start "+ START_INSTANCE
+ " -filterBy STATUS:SUCCEEDED,STARTEDAFTER:"+START_INSTANCE
+ " -orderBy startTime -offset 0 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("instance -list -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())
+" -filterBy STATUS:SUCCEEDED -orderBy startTime -offset 0 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("instance -status -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())
+" -filterBy INVALID:FILTER -orderBy startTime -offset 0 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("instance -list -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())
+" -filterBy STATUS:SUCCEEDED -orderBy INVALID -offset 0 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("instance -status -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())
+" -filterBy STATUS:SUCCEEDED -orderBy startTime -offset 1 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("instance -list -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())
+" -filterBy STATUS:SUCCEEDED -offset 0 -numResults 1"));
}
public void testInstanceRunningAndSummaryCommands() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
OozieTestUtils.waitForProcessWFtoStart(context);
Assert.assertEquals(0,
executeWithURL("instance -status -type feed -name "
+ overlay.get("outputFeedName")
+ " -start " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -running -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("instance -summary -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -summary -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(0,
executeWithURL("instance -params -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE));
}
public void testInstanceSuspendAndResume() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
Assert.assertEquals(0,
executeWithURL("instance -suspend -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -suspend -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(0,
executeWithURL("instance -resume -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -resume -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
}
private static final String START_INSTANCE = "2012-04-20T00:00Z";
public void testInstanceKillAndRerun() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
OozieTestUtils.waitForProcessWFtoStart(context);
Assert.assertEquals(
0,
executeWithURL("instance -kill -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -kill -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(
0,
executeWithURL("instance -rerun -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -file "
+ createTempJobPropertiesFile()));
Assert.assertEquals(0,
executeWithURL("instance -rerun -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())
+ " -file "+ createTempJobPropertiesFile()));
}
@Test
public void testEntityPaginationFilterByCommands() throws Exception {
String filePath;
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
filePath = TestContext.overlayParametersOverTemplate(context.getClusterFileTemplate(), overlay);
Assert.assertEquals(-1,
executeWithURL("entity -submitAndSchedule -type cluster -file " + filePath));
context.setCluster(overlay.get("cluster"));
// this is necessary for lineage
Assert.assertEquals(0, executeWithURL("entity -submit -type cluster -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submitAndSchedule -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submitAndSchedule -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.PROCESS_TEMPLATE, overlay);
Assert.assertEquals(0,
executeWithURL("entity -validate -type process -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.PROCESS_TEMPLATE, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submitAndSchedule -type process -file "
+ filePath));
OozieTestUtils.waitForProcessWFtoStart(context);
// test entity List cli
Assert.assertEquals(0,
executeWithURL("entity -list -type cluster"
+ " -offset 0 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("entity -list -type process -fields status "
+ " -filterBy STATUS:SUBMITTED,TYPE:process -orderBy name -offset 1 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("entity -list -type process -fields status,pipelines "
+ " -filterBy STATUS:SUBMITTED,type:process -orderBy name -offset 1 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("entity -list -type process -fields status,pipelines "
+ " -filterBy STATUS:SUBMITTED,pipelines:testPipeline "
+ " -orderBy name -offset 1 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("entity -list -type process -fields status,tags "
+ " -tags owner=producer@xyz.com,department=forecasting "
+ " -filterBy STATUS:SUBMITTED,type:process -orderBy name -offset 1 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("entity -list -type process -fields status "
+ " -filterBy STATUS:SUCCEEDED,TYPE:process -orderBy INVALID -offset 0 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("entity -list -type process -fields INVALID "
+ " -filterBy STATUS:SUCCEEDED,TYPE:process -orderBy name -offset 1 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("entity -list -type process -fields status "
+ " -filterBy INVALID:FILTER,TYPE:process -orderBy name -offset 1 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("entity -definition -type cluster -name " + overlay.get("cluster")));
Assert.assertEquals(0,
executeWithURL("instance -status -type feed -name "
+ overlay.get("outputFeedName") + " -start " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -running -type process -name " + overlay.get("processName")));
}
public void testContinue() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
OozieTestUtils.waitForProcessWFtoStart(context);
Assert.assertEquals(
0,
executeWithURL("instance -kill -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -kill -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
Assert.assertEquals(
0,
executeWithURL("instance -continue -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -continue -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
}
public void testInvalidCLIInstanceCommands() throws Exception {
// no command
Assert.assertEquals(-1, executeWithURL(" -kill -type process -name "
+ "name" + " -start 2010-01-01T01:00Z -end 2010-01-01T03:00Z"));
Assert.assertEquals(-1, executeWithURL("instance -kill " + "name"
+ " -start 2010-01-01T01:00Z -end 2010-01-01T01:00Z"));
Assert.assertEquals(-1,
executeWithURL("instance -kill -type process -name " + "name"
+ " -end 2010-01-01T03:00Z"));
Assert.assertEquals(-1,
executeWithURL("instance -kill -type process -name "
+ " -start 2010-01-01T01:00Z -end 2010-01-01T03:00Z"));
}
public void testFalconURL() throws Exception {
Assert.assertEquals(-1, new FalconCLI()
.run(("instance -status -type process -name " + "processName"
+ " -start 2010-01-01T01:00Z -end 2010-01-01T03:00Z")
.split("\\s")));
Assert.assertEquals(-1, new FalconCLI()
.run(("instance -status -type process -name "
+ "processName -url http://unknownhost:1234/"
+ " -start 2010-01-01T01:00Z -end 2010-01-01T03:00Z")
.split("\\s")));
}
public void testClientProperties() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
new FalconCLI().run(("entity -schedule -type feed -name "
+ overlay.get("outputFeedName") + " -url "
+ TestContext.BASE_URL).split("\\s+")));
Assert.assertEquals(0,
new FalconCLI().run(("entity -schedule -type process -name "
+ overlay.get("processName")+ " -url "
+ TestContext.BASE_URL).split("\\s+")));
}
public void testGetVersion() throws Exception {
Assert.assertEquals(0,
new FalconCLI().run(("admin -version -url " + TestContext.BASE_URL).split("\\s")));
}
public void testGetStatus() throws Exception {
Assert.assertEquals(0,
new FalconCLI().run(("admin -status -url " + TestContext.BASE_URL).split("\\s")));
}
public void testGetThreadStackDump() throws Exception {
Assert.assertEquals(0,
new FalconCLI().run(("admin -stack -url " + TestContext.BASE_URL).split("\\s")));
}
public void testInstanceGetLogs() throws Exception {
TestContext context = new TestContext();
Map<String, String> overlay = context.getUniqueOverlay();
submitTestFiles(context, overlay);
Assert.assertEquals(0,
executeWithURL("entity -schedule -type process -name "
+ overlay.get("processName")));
Assert.assertEquals(0,
executeWithURL("entity -schedule -type feed -name "
+ overlay.get("outputFeedName")));
Thread.sleep(500);
Assert.assertEquals(0,
executeWithURL("instance -logs -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE));
Assert.assertEquals(0,
executeWithURL("instance -logs -type feed -lifecycle eviction -name "
+ overlay.get("outputFeedName")
+ " -start "+ SchemaHelper.getDateFormat().format(new Date())));
// test filterBy, orderBy, offset, numResults
Assert.assertEquals(0,
executeWithURL("instance -logs -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE
+ " -filterBy STATUS:SUCCEEDED -orderBy startTime -offset 0 -numResults 1"));
Assert.assertEquals(0,
executeWithURL("instance -logs -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE
+ " -filterBy STATUS:SUCCEEDED,STARTEDAFTER:"+START_INSTANCE+" -offset 1 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("instance -logs -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE
+ " -filterBy INVALID:FILTER -orderBy startTime -offset 0 -numResults 1"));
Assert.assertEquals(-1,
executeWithURL("instance -logs -type process -name "
+ overlay.get("processName")
+ " -start " + START_INSTANCE + " -end " + START_INSTANCE
+ " -filterBy STATUS:SUCCEEDED -orderBy wrongOrder -offset 0 -numResults 1"));
}
private int executeWithURL(String command) throws Exception {
//System.out.println("COMMAND IS "+command + " -url " + TestContext.BASE_URL);
return new FalconCLI()
.run((command + " -url " + TestContext.BASE_URL).split("\\s+"));
}
private String createTempJobPropertiesFile() throws IOException {
File target = new File("webapp/target");
if (!target.exists()) {
target = new File("target");
}
File tmpFile = File.createTempFile("job", ".properties", target);
OutputStream out = new FileOutputStream(tmpFile);
out.write("oozie.wf.rerun.failnodes=true\n".getBytes());
out.close();
return tmpFile.getAbsolutePath();
}
private void submitTestFiles(TestContext context, Map<String, String> overlay) throws Exception {
String filePath = TestContext.overlayParametersOverTemplate(context.getClusterFileTemplate(),
overlay);
Assert.assertEquals(
0,
executeWithURL("entity -submit -type cluster -file " + filePath));
context.setCluster(overlay.get("cluster"));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE1, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.FEED_TEMPLATE2, overlay);
Assert.assertEquals(0,
executeWithURL("entity -submit -type feed -file " + filePath));
filePath = TestContext.overlayParametersOverTemplate(TestContext.PROCESS_TEMPLATE, overlay);
Assert.assertEquals(
0,
executeWithURL("entity -submit -type process -file " + filePath));
}
private static class InMemoryWriter extends PrintStream {
private StringBuffer buffer = new StringBuffer();
public InMemoryWriter(OutputStream out) {
super(out);
}
@Override
public void println(String x) {
clear();
buffer.append(x);
super.println(x);
}
@SuppressWarnings("UnusedDeclaration")
public String getBuffer() {
return buffer.toString();
}
public void clear() {
buffer.delete(0, buffer.length());
}
}
}