/*
* Copyright 1999-2015 dangdang.com.
* <p>
* 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.
* </p>
*/
package com.dangdang.ddframe.job.lite.internal.config;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.executor.handler.JobProperties;
import com.dangdang.ddframe.job.executor.handler.impl.DefaultExecutorServiceHandler;
import com.dangdang.ddframe.job.executor.handler.impl.DefaultJobExceptionHandler;
import com.dangdang.ddframe.job.api.JobType;
import com.dangdang.ddframe.job.config.dataflow.DataflowJobConfiguration;
import com.dangdang.ddframe.job.api.script.ScriptJob;
import com.dangdang.ddframe.job.config.script.ScriptJobConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.fixture.TestDataflowJob;
import com.dangdang.ddframe.job.lite.fixture.TestSimpleJob;
import org.junit.Test;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public final class LiteJobConfigurationGsonFactoryTest {
private static final String JOB_PROPS_JSON = "{\"job_exception_handler\":\"" + DefaultJobExceptionHandler.class.getCanonicalName() + "\","
+ "\"executor_service_handler\":\"" + DefaultExecutorServiceHandler.class.getCanonicalName() + "\"}";
private String simpleJobJson = "{\"jobName\":\"test_job\",\"jobClass\":\"com.dangdang.ddframe.job.lite.fixture.TestSimpleJob\",\"jobType\":\"SIMPLE\",\"cron\":\"0/1 * * * * ?\","
+ "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":true,\"misfire\":false,\"description\":\"\","
+ "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":false,\"maxTimeDiffSeconds\":1000,\"monitorPort\":8888,"
+ "\"jobShardingStrategyClass\":\"testClass\",\"reconcileIntervalMinutes\":15,\"disabled\":true,\"overwrite\":true}";
private String dataflowJobJson = "{\"jobName\":\"test_job\",\"jobClass\":\"com.dangdang.ddframe.job.lite.fixture.TestDataflowJob\",\"jobType\":\"DATAFLOW\",\"cron\":\"0/1 * * * * ?\","
+ "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":false,\"misfire\":true,\"description\":\"\","
+ "\"jobProperties\":" + JOB_PROPS_JSON + ",\"streamingProcess\":true,"
+ "\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":-1,\"jobShardingStrategyClass\":\"\",\"reconcileIntervalMinutes\":10,\"disabled\":false,\"overwrite\":false}";
private String scriptJobJson = "{\"jobName\":\"test_job\",\"jobClass\":\"com.dangdang.ddframe.job.api.script.ScriptJob\",\"jobType\":\"SCRIPT\",\"cron\":\"0/1 * * * * ?\","
+ "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":false,\"misfire\":true,\"description\":\"\","
+ "\"jobProperties\":" + JOB_PROPS_JSON + ",\"scriptCommandLine\":\"test.sh\",\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":-1,"
+ "\"jobShardingStrategyClass\":\"\",\"reconcileIntervalMinutes\":10,\"disabled\":false,\"overwrite\":false}";
@Test
public void assertToJsonForSimpleJob() {
LiteJobConfiguration actual = LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder("test_job", "0/1 * * * * ?", 3).failover(true).misfire(false).build(),
TestSimpleJob.class.getCanonicalName()))
.monitorExecution(false).maxTimeDiffSeconds(1000).monitorPort(8888).jobShardingStrategyClass("testClass").disabled(true).overwrite(true).reconcileIntervalMinutes(15).build();
assertThat(LiteJobConfigurationGsonFactory.toJson(actual), is(simpleJobJson));
}
@Test
public void assertToJsonForDataflowJob() {
LiteJobConfiguration actual = LiteJobConfiguration.newBuilder(new DataflowJobConfiguration(JobCoreConfiguration.newBuilder("test_job", "0/1 * * * * ?", 3).build(),
TestDataflowJob.class.getCanonicalName(), true)).build();
assertThat(LiteJobConfigurationGsonFactory.toJson(actual), is(dataflowJobJson));
}
@Test
public void assertToJsonForScriptJob() {
LiteJobConfiguration actual = LiteJobConfiguration.newBuilder(new ScriptJobConfiguration(JobCoreConfiguration.newBuilder("test_job", "0/1 * * * * ?", 3).build(), "test.sh")).build();
assertThat(LiteJobConfigurationGsonFactory.toJson(actual), is(scriptJobJson));
}
@Test
public void assertFromJsonForSimpleJob() {
LiteJobConfiguration actual = LiteJobConfigurationGsonFactory.fromJson(simpleJobJson);
assertThat(actual.getJobName(), is("test_job"));
assertThat(actual.getTypeConfig().getJobClass(), is(TestSimpleJob.class.getCanonicalName()));
assertThat(actual.getTypeConfig().getJobType(), is(JobType.SIMPLE));
assertThat(actual.getTypeConfig().getCoreConfig().getCron(), is("0/1 * * * * ?"));
assertThat(actual.getTypeConfig().getCoreConfig().getShardingTotalCount(), is(3));
assertThat(actual.getTypeConfig().getCoreConfig().getShardingItemParameters(), is(""));
assertThat(actual.getTypeConfig().getCoreConfig().getJobParameter(), is(""));
assertTrue(actual.getTypeConfig().getCoreConfig().isFailover());
assertFalse(actual.getTypeConfig().getCoreConfig().isMisfire());
assertThat(actual.getTypeConfig().getCoreConfig().getDescription(), is(""));
assertThat(actual.getTypeConfig().getCoreConfig().getJobProperties().get(JobProperties.JobPropertiesEnum.JOB_EXCEPTION_HANDLER), is(DefaultJobExceptionHandler.class.getCanonicalName()));
assertThat(actual.getTypeConfig().getCoreConfig().getJobProperties().get(JobProperties.JobPropertiesEnum.EXECUTOR_SERVICE_HANDLER),
is(DefaultExecutorServiceHandler.class.getCanonicalName()));
assertFalse(actual.isMonitorExecution());
assertThat(actual.getMaxTimeDiffSeconds(), is(1000));
assertThat(actual.getMonitorPort(), is(8888));
assertThat(actual.getJobShardingStrategyClass(), is("testClass"));
assertThat(actual.getReconcileIntervalMinutes(), is(15));
assertTrue(actual.isDisabled());
assertTrue(actual.isOverwrite());
}
@Test
public void assertFromJsonForDataflowJob() {
LiteJobConfiguration actual = LiteJobConfigurationGsonFactory.fromJson(dataflowJobJson);
assertThat(actual.getJobName(), is("test_job"));
assertThat(actual.getTypeConfig().getJobClass(), is(TestDataflowJob.class.getCanonicalName()));
assertThat(actual.getTypeConfig().getJobType(), is(JobType.DATAFLOW));
assertThat(actual.getTypeConfig().getCoreConfig().getCron(), is("0/1 * * * * ?"));
assertThat(actual.getTypeConfig().getCoreConfig().getShardingTotalCount(), is(3));
assertThat(actual.getTypeConfig().getCoreConfig().getShardingItemParameters(), is(""));
assertThat(actual.getTypeConfig().getCoreConfig().getJobParameter(), is(""));
assertFalse(actual.getTypeConfig().getCoreConfig().isFailover());
assertTrue(actual.getTypeConfig().getCoreConfig().isMisfire());
assertThat(actual.getTypeConfig().getCoreConfig().getDescription(), is(""));
assertThat(actual.getTypeConfig().getCoreConfig().getJobProperties().get(JobProperties.JobPropertiesEnum.JOB_EXCEPTION_HANDLER),
is(DefaultJobExceptionHandler.class.getCanonicalName()));
assertThat(actual.getTypeConfig().getCoreConfig().getJobProperties().get(JobProperties.JobPropertiesEnum.EXECUTOR_SERVICE_HANDLER),
is(DefaultExecutorServiceHandler.class.getCanonicalName()));
assertTrue(actual.isMonitorExecution());
assertThat(actual.getMaxTimeDiffSeconds(), is(-1));
assertThat(actual.getMonitorPort(), is(-1));
assertThat(actual.getJobShardingStrategyClass(), is(""));
assertThat(actual.getReconcileIntervalMinutes(), is(10));
assertFalse(actual.isDisabled());
assertFalse(actual.isOverwrite());
assertTrue(((DataflowJobConfiguration) actual.getTypeConfig()).isStreamingProcess());
}
@Test
public void assertFromJsonForScriptJob() {
LiteJobConfiguration actual = LiteJobConfigurationGsonFactory.fromJson(scriptJobJson);
assertThat(actual.getJobName(), is("test_job"));
assertThat(actual.getTypeConfig().getJobClass(), is(ScriptJob.class.getCanonicalName()));
assertThat(actual.getTypeConfig().getJobType(), is(JobType.SCRIPT));
assertThat(actual.getTypeConfig().getCoreConfig().getCron(), is("0/1 * * * * ?"));
assertThat(actual.getTypeConfig().getCoreConfig().getShardingTotalCount(), is(3));
assertThat(actual.getTypeConfig().getCoreConfig().getShardingItemParameters(), is(""));
assertThat(actual.getTypeConfig().getCoreConfig().getJobParameter(), is(""));
assertFalse(actual.getTypeConfig().getCoreConfig().isFailover());
assertTrue(actual.getTypeConfig().getCoreConfig().isMisfire());
assertThat(actual.getTypeConfig().getCoreConfig().getDescription(), is(""));
assertThat(actual.getTypeConfig().getCoreConfig().getJobProperties().get(JobProperties.JobPropertiesEnum.JOB_EXCEPTION_HANDLER),
is(DefaultJobExceptionHandler.class.getCanonicalName()));
assertThat(actual.getTypeConfig().getCoreConfig().getJobProperties().get(JobProperties.JobPropertiesEnum.EXECUTOR_SERVICE_HANDLER),
is(DefaultExecutorServiceHandler.class.getCanonicalName()));
assertTrue(actual.isMonitorExecution());
assertThat(actual.getMaxTimeDiffSeconds(), is(-1));
assertThat(actual.getMonitorPort(), is(-1));
assertThat(actual.getJobShardingStrategyClass(), is(""));
assertThat(actual.getReconcileIntervalMinutes(), is(10));
assertFalse(actual.isDisabled());
assertFalse(actual.isOverwrite());
assertThat(((ScriptJobConfiguration) actual.getTypeConfig()).getScriptCommandLine(), is("test.sh"));
}
}