You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by ab...@apache.org on 2017/12/12 22:00:28 UTC
incubator-gobblin git commit: [GOBBLIN-336] Parse cmd options to the
single task runner process
Repository: incubator-gobblin
Updated Branches:
refs/heads/master f7a89fb12 -> a35a10f7e
[GOBBLIN-336] Parse cmd options to the single task runner process
Closes #2201 from HappyRay/parse-option-run-helix-
task-in-a-separate-process
Project: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/commit/a35a10f7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/tree/a35a10f7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/diff/a35a10f7
Branch: refs/heads/master
Commit: a35a10f7edf0bfb671e548be5832c995324504ff
Parents: f7a89fb
Author: Ray Yang <ru...@gmail.com>
Authored: Tue Dec 12 14:00:19 2017 -0800
Committer: Abhishek Tiwari <ab...@gmail.com>
Committed: Tue Dec 12 14:00:19 2017 -0800
----------------------------------------------------------------------
gobblin-cluster/build.gradle | 1 +
.../GobblinClusterConfigurationKeys.java | 7 ++
.../cluster/GobblinClusterException.java | 24 +++++
.../gobblin/cluster/SingleTaskRunner.java | 39 +++++++++
.../cluster/SingleTaskRunnerBuilder.java | 43 +++++++++
.../gobblin/cluster/SingleTaskRunnerMain.java | 62 +++++++++++++
.../cluster/SingleTaskRunnerMainOptions.java | 92 ++++++++++++++++++++
...ngleTaskRunnerMainArgumentsDataProvider.java | 29 ++++++
.../SingleTaskRunnerMainOptionsTest.java | 66 ++++++++++++++
.../cluster/SingleTaskRunnerMainTest.java | 47 ++++++++++
gradle/scripts/dependencyDefinitions.gradle | 3 +-
11 files changed, 412 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/build.gradle
----------------------------------------------------------------------
diff --git a/gobblin-cluster/build.gradle b/gobblin-cluster/build.gradle
index 0cd8eb8..e52854d 100644
--- a/gobblin-cluster/build.gradle
+++ b/gobblin-cluster/build.gradle
@@ -57,6 +57,7 @@ dependencies {
testCompile externalDependency.testng
testCompile externalDependency.curatorFramework
testCompile externalDependency.curatorTest
+ testCompile externalDependency.assertj
}
task testJar(type: Jar, dependsOn: testClasses) {
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterConfigurationKeys.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterConfigurationKeys.java b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterConfigurationKeys.java
index 653babf..46a7311 100644
--- a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterConfigurationKeys.java
+++ b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterConfigurationKeys.java
@@ -80,4 +80,11 @@ public class GobblinClusterConfigurationKeys {
public static final String STOP_TIMEOUT_SECONDS = GOBBLIN_CLUSTER_PREFIX + "stopTimeoutSeconds";
public static final long DEFAULT_STOP_TIMEOUT_SECONDS = 60;
+ // Arguments to the single task runner process
+ public static class SingleTaskRunnerCmdOption {
+ public static final String JOB_ID = "job_id";
+ public static final String WORK_UNIT_FILE_PATH = "work_unit_file_path";
+ public static final String JOB_STATE_FILE_PATH = "job_state_file_path";
+ public static final String CLUSTER_CONFIG_FILE_PATH = "cluster_config_file_path";
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterException.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterException.java b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterException.java
new file mode 100644
index 0000000..06161a3
--- /dev/null
+++ b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/GobblinClusterException.java
@@ -0,0 +1,24 @@
+/*
+ * 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.gobblin.cluster;
+
+public class GobblinClusterException extends RuntimeException {
+ public GobblinClusterException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunner.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunner.java b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunner.java
new file mode 100644
index 0000000..6541c1d
--- /dev/null
+++ b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunner.java
@@ -0,0 +1,39 @@
+/*
+ * 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.gobblin.cluster;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+
+class SingleTaskRunner {
+ private final Path clusterConfigFilePath;
+ private final String jobId;
+ private final Path workUnitFilePath;
+
+ SingleTaskRunner(final String clusterConfigFilePath, final String jobId,
+ final String workUnitFilePath) {
+ this.clusterConfigFilePath = Paths.get(clusterConfigFilePath);
+ this.jobId = jobId;
+ this.workUnitFilePath = Paths.get(workUnitFilePath);
+ }
+
+ void run() {
+ // tbd
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerBuilder.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerBuilder.java b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerBuilder.java
new file mode 100644
index 0000000..6a1ed32
--- /dev/null
+++ b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerBuilder.java
@@ -0,0 +1,43 @@
+/*
+ * 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.gobblin.cluster;
+
+class SingleTaskRunnerBuilder {
+ private String clusterConfigFilePath;
+ private String jobId;
+ private String workUnitFilePath;
+
+ SingleTaskRunnerBuilder setClusterConfigFilePath(final String clusterConfigFilePath) {
+ this.clusterConfigFilePath = clusterConfigFilePath;
+ return this;
+ }
+
+ SingleTaskRunnerBuilder setJobId(final String jobId) {
+ this.jobId = jobId;
+ return this;
+ }
+
+ SingleTaskRunnerBuilder setWorkUnitFilePath(final String workUnitFilePath) {
+ this.workUnitFilePath = workUnitFilePath;
+ return this;
+ }
+
+ SingleTaskRunner createSingleTaskRunner() {
+ return new SingleTaskRunner(this.clusterConfigFilePath, this.jobId, this.workUnitFilePath);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMain.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMain.java b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMain.java
new file mode 100644
index 0000000..1c9dac0
--- /dev/null
+++ b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMain.java
@@ -0,0 +1,62 @@
+/*
+ * 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.gobblin.cluster;
+
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Charsets;
+
+import org.apache.gobblin.util.JvmUtils;
+
+
+class SingleTaskRunnerMain {
+ private static final Logger logger = LoggerFactory.getLogger(SingleTaskRunnerMain.class);
+
+ private final SingleTaskRunnerBuilder builder;
+
+ SingleTaskRunnerMain(final SingleTaskRunnerBuilder builder) {
+ this.builder = builder;
+ }
+
+ public static void main(final String[] args)
+ throws Exception {
+ logger.info(JvmUtils.getJvmInputArguments());
+ final SingleTaskRunnerMain runnerMain = new SingleTaskRunnerMain(new SingleTaskRunnerBuilder());
+ try {
+ runnerMain.run(args);
+ } catch (final Exception e) {
+ logger.error("Got an exception running a single task.", e);
+ System.exit(1);
+ }
+ }
+
+ void run(final String[] args) {
+ final OutputStreamWriter streamWriter = new OutputStreamWriter(System.out, Charsets.UTF_8);
+ final PrintWriter writer = new PrintWriter(streamWriter, true);
+ final SingleTaskRunnerMainOptions options = new SingleTaskRunnerMainOptions(args, writer);
+ final SingleTaskRunner runner =
+ this.builder.setClusterConfigFilePath(options.getClusterConfigFilePath()).setJobId(options.getJobId())
+ .setWorkUnitFilePath(options.getWorkUnitFilePath())
+ .createSingleTaskRunner();
+ runner.run();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptions.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptions.java b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptions.java
new file mode 100644
index 0000000..60ac61f
--- /dev/null
+++ b/gobblin-cluster/src/main/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptions.java
@@ -0,0 +1,92 @@
+/*
+ * 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.gobblin.cluster;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.ImmutableMap;
+
+import static org.apache.gobblin.cluster.GobblinClusterConfigurationKeys.SingleTaskRunnerCmdOption.CLUSTER_CONFIG_FILE_PATH;
+import static org.apache.gobblin.cluster.GobblinClusterConfigurationKeys.SingleTaskRunnerCmdOption.JOB_ID;
+import static org.apache.gobblin.cluster.GobblinClusterConfigurationKeys.SingleTaskRunnerCmdOption.WORK_UNIT_FILE_PATH;
+
+
+class SingleTaskRunnerMainOptions {
+ private static final Logger logger = LoggerFactory.getLogger(SingleTaskRunnerMainOptions.class);
+ private static final ImmutableMap<String, String> OPTIONS_MAP = ImmutableMap
+ .of(JOB_ID, "job id", WORK_UNIT_FILE_PATH, "work unit file path", CLUSTER_CONFIG_FILE_PATH,
+ "cluster configuration file path");
+ private static final int CHARACTERS_PER_LINE = 80;
+
+ private final PrintWriter writer;
+ private CommandLine cmd;
+ private Options options;
+
+ SingleTaskRunnerMainOptions(final String[] args, final PrintWriter writer) {
+ this.writer = writer;
+ initCmdLineOptions(args);
+ }
+
+ private void initCmdLineOptions(final String[] args) {
+ this.options = buildExpectedOptions();
+ try {
+ this.cmd = new DefaultParser().parse(this.options, args);
+ } catch (final ParseException e) {
+ logger.error("failed to parse command options.", e);
+ printUsage(this.options);
+ throw new GobblinClusterException("Failed to parse command line options", e);
+ }
+ }
+
+ private Options buildExpectedOptions() {
+ final Options options = new Options();
+ for (final Map.Entry<String, String> entry : OPTIONS_MAP.entrySet()) {
+ final Option option =
+ Option.builder(null).required(true).longOpt(entry.getKey()).desc(entry.getValue()).hasArg().build();
+ options.addOption(option);
+ }
+ return options;
+ }
+
+ private void printUsage(final Options options) {
+ final HelpFormatter formatter = new HelpFormatter();
+ formatter.printUsage(this.writer, CHARACTERS_PER_LINE, SingleTaskRunnerMain.class.getSimpleName(), options);
+ }
+
+ String getJobId() {
+ return this.cmd.getOptionValue(JOB_ID);
+ }
+
+ String getWorkUnitFilePath() {
+ return this.cmd.getOptionValue(WORK_UNIT_FILE_PATH);
+ }
+
+ String getClusterConfigFilePath() {
+ return this.cmd.getOptionValue(CLUSTER_CONFIG_FILE_PATH);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainArgumentsDataProvider.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainArgumentsDataProvider.java b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainArgumentsDataProvider.java
new file mode 100644
index 0000000..a535151
--- /dev/null
+++ b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainArgumentsDataProvider.java
@@ -0,0 +1,29 @@
+/*
+ * 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.gobblin.cluster;
+
+class SingleTaskRunnerMainArgumentsDataProvider {
+ static final String TEST_JOB_ID = "1";
+ static final String TEST_WORKUNIT = "/workunit.wu";
+ static final String TEST_CLUSTER_CONF = "/cluster.conf";
+
+ static String[] getArgs() {
+ return new String[]{"--job_id", TEST_JOB_ID, "--work_unit_file_path", TEST_WORKUNIT,
+ "--cluster_config_file_path", TEST_CLUSTER_CONF};
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptionsTest.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptionsTest.java b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptionsTest.java
new file mode 100644
index 0000000..c601d56
--- /dev/null
+++ b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainOptionsTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.gobblin.cluster;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import static org.apache.gobblin.cluster.SingleTaskRunnerMainArgumentsDataProvider.TEST_CLUSTER_CONF;
+import static org.apache.gobblin.cluster.SingleTaskRunnerMainArgumentsDataProvider.TEST_JOB_ID;
+import static org.apache.gobblin.cluster.SingleTaskRunnerMainArgumentsDataProvider.TEST_WORKUNIT;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+public class SingleTaskRunnerMainOptionsTest {
+
+ private PrintWriter writer;
+ private StringWriter stringWriter;
+
+ @BeforeMethod
+ public void setUp() {
+ this.stringWriter = new StringWriter();
+ this.writer = new PrintWriter(this.stringWriter, true);
+ }
+
+ @Test
+ public void correctCmdLineShouldReturnAllValues() {
+ final String[] args = SingleTaskRunnerMainArgumentsDataProvider.getArgs();
+ final SingleTaskRunnerMainOptions options = new SingleTaskRunnerMainOptions(args, this.writer);
+ final String jobId = options.getJobId();
+ final String workUnitFilePath = options.getWorkUnitFilePath();
+ final String clusterConfigFilePath = options.getClusterConfigFilePath();
+
+ assertThat(jobId).isEqualTo(TEST_JOB_ID);
+ assertThat(workUnitFilePath).isEqualTo(TEST_WORKUNIT);
+ assertThat(clusterConfigFilePath).isEqualTo(TEST_CLUSTER_CONF);
+ }
+
+ @Test
+ public void missingOptionShouldThrow() {
+ final String[] args = {};
+
+ assertThatThrownBy(() -> new SingleTaskRunnerMainOptions(args, this.writer))
+ .isInstanceOf(GobblinClusterException.class);
+
+ final String output = this.stringWriter.toString();
+ assertThat(output).contains("usage: SingleTaskRunnerMain");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainTest.java
----------------------------------------------------------------------
diff --git a/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainTest.java b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainTest.java
new file mode 100644
index 0000000..f10b2a5
--- /dev/null
+++ b/gobblin-cluster/src/test/java/org/apache/gobblin/cluster/SingleTaskRunnerMainTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.gobblin.cluster;
+
+import org.testng.annotations.Test;
+
+import static org.apache.gobblin.cluster.SingleTaskRunnerMainArgumentsDataProvider.TEST_CLUSTER_CONF;
+import static org.apache.gobblin.cluster.SingleTaskRunnerMainArgumentsDataProvider.TEST_JOB_ID;
+import static org.apache.gobblin.cluster.SingleTaskRunnerMainArgumentsDataProvider.TEST_WORKUNIT;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+
+public class SingleTaskRunnerMainTest {
+
+ @Test
+ public void testRun() {
+ final SingleTaskRunnerBuilder builder = spy(SingleTaskRunnerBuilder.class);
+ final SingleTaskRunner taskRunner = mock(SingleTaskRunner.class);
+ doReturn(taskRunner).when(builder).createSingleTaskRunner();
+
+ final SingleTaskRunnerMain runnerMain = new SingleTaskRunnerMain(builder);
+ runnerMain.run(SingleTaskRunnerMainArgumentsDataProvider.getArgs());
+
+ verify(builder).setClusterConfigFilePath(TEST_CLUSTER_CONF);
+ verify(builder).setJobId(TEST_JOB_ID);
+ verify(builder).setWorkUnitFilePath(TEST_WORKUNIT);
+ verify(taskRunner).run();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/a35a10f7/gradle/scripts/dependencyDefinitions.gradle
----------------------------------------------------------------------
diff --git a/gradle/scripts/dependencyDefinitions.gradle b/gradle/scripts/dependencyDefinitions.gradle
index 096d107..d138a55 100644
--- a/gradle/scripts/dependencyDefinitions.gradle
+++ b/gradle/scripts/dependencyDefinitions.gradle
@@ -177,7 +177,8 @@ ext.externalDependency = [
"log4j:log4j:" + log4jVersion,
"log4j:apache-log4j-extras:" + log4jVersion
],
- "postgresConnector": "org.postgresql:postgresql:42.1.4"
+ "postgresConnector": "org.postgresql:postgresql:42.1.4",
+ "assertj": 'org.assertj:assertj-core:3.8.0',
]
if (!isDefaultEnvironment)