blob: a1b3b24490f2af5b03ceabb81bc37182dbf836bd [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.shardingsphere.elasticjob.cloud.event.rdb;
import org.apache.shardingsphere.elasticjob.cloud.context.ExecutionType;
import org.apache.shardingsphere.elasticjob.cloud.event.type.JobExecutionEvent;
import org.apache.shardingsphere.elasticjob.cloud.event.type.JobStatusTraceEvent;
import org.apache.commons.dbcp.BasicDataSource;
import org.junit.BeforeClass;
import org.junit.Test;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class JobEventRdbSearchTest {
private static JobEventRdbStorage storage;
private static JobEventRdbSearch repository;
@BeforeClass
public static void setUpClass() throws SQLException {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(org.h2.Driver.class.getName());
dataSource.setUrl("jdbc:h2:mem:");
dataSource.setUsername("sa");
dataSource.setPassword("");
storage = new JobEventRdbStorage(dataSource);
repository = new JobEventRdbSearch(dataSource);
initStorage();
}
private static void initStorage() {
for (int i = 1; i <= 500; i++) {
JobExecutionEvent startEvent = new JobExecutionEvent("fake_task_id", "test_job_" + i, JobExecutionEvent.ExecutionSource.NORMAL_TRIGGER, 0);
storage.addJobExecutionEvent(startEvent);
if (i % 2 == 0) {
JobExecutionEvent successEvent = startEvent.executionSuccess();
storage.addJobExecutionEvent(successEvent);
}
storage.addJobStatusTraceEvent(
new JobStatusTraceEvent("test_job_" + i, "fake_failed_failover_task_id", "fake_slave_id",
JobStatusTraceEvent.Source.LITE_EXECUTOR, ExecutionType.FAILOVER, "0", JobStatusTraceEvent.State.TASK_FAILED, "message is empty."));
}
}
@Test
public void assertFindJobExecutionEventsWithPageSizeAndNumber() {
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(50, 1, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(50));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(100, 5, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(100));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(100, 6, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(0));
}
@Test
public void assertFindJobExecutionEventsWithErrorPageSizeAndNumber() {
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(-1, -1, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobExecutionEventsWithSort() {
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, "jobName", "ASC", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
assertThat(result.getRows().get(0).getJobName(), is("test_job_1"));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, "jobName", "DESC", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
assertThat(result.getRows().get(0).getJobName(), is("test_job_99"));
}
@Test
public void assertFindJobExecutionEventsWithErrorSort() {
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, "jobName", "ERROR_SORT", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
assertThat(result.getRows().get(0).getJobName(), is("test_job_1"));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, "notExistField", "ASC", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobExecutionEventsWithTime() {
Date now = new Date();
Date tenMinutesBefore = new Date(now.getTime() - 10 * 60 * 1000);
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, tenMinutesBefore, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, now, null, null));
assertThat(result.getTotal(), is(0));
assertThat(result.getRows().size(), is(0));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, tenMinutesBefore, null));
assertThat(result.getTotal(), is(0));
assertThat(result.getRows().size(), is(0));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, now, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, tenMinutesBefore, now, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobExecutionEventsWithFields() {
Map<String, Object> fields = new HashMap<>();
fields.put("isSuccess", "1");
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, fields));
assertThat(result.getTotal(), is(250));
assertThat(result.getRows().size(), is(10));
fields.put("isSuccess", null);
fields.put("jobName", "test_job_1");
result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, fields));
assertThat(result.getTotal(), is(1));
assertThat(result.getRows().size(), is(1));
}
@Test
public void assertFindJobExecutionEventsWithErrorFields() {
Map<String, Object> fields = new HashMap<>();
fields.put("notExistField", "some value");
JobEventRdbSearch.Result<JobExecutionEvent> result = repository.findJobExecutionEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, fields));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobStatusTraceEventsWithPageSizeAndNumber() {
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(50, 1, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(50));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(100, 5, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(100));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(100, 6, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(0));
}
@Test
public void assertFindJobStatusTraceEventsWithErrorPageSizeAndNumber() {
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(-1, -1, null, null, null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobStatusTraceEventsWithSort() {
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, "jobName", "ASC", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
assertThat(result.getRows().get(0).getJobName(), is("test_job_1"));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, "jobName", "DESC", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
assertThat(result.getRows().get(0).getJobName(), is("test_job_99"));
}
@Test
public void assertFindJobStatusTraceEventsWithErrorSort() {
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, "jobName", "ERROR_SORT", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
assertThat(result.getRows().get(0).getJobName(), is("test_job_1"));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, "notExistField", "ASC", null, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobStatusTraceEventsWithTime() {
Date now = new Date();
Date tenMinutesBefore = new Date(now.getTime() - 10 * 60 * 1000);
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, tenMinutesBefore, null, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, now, null, null));
assertThat(result.getTotal(), is(0));
assertThat(result.getRows().size(), is(0));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, tenMinutesBefore, null));
assertThat(result.getTotal(), is(0));
assertThat(result.getRows().size(), is(0));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, now, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, tenMinutesBefore, now, null));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
@Test
public void assertFindJobStatusTraceEventsWithFields() {
Map<String, Object> fields = new HashMap<>();
fields.put("jobName", "test_job_1");
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, fields));
assertThat(result.getTotal(), is(1));
assertThat(result.getRows().size(), is(1));
}
@Test
public void assertFindJobStatusTraceEventsWithErrorFields() {
Map<String, Object> fields = new HashMap<>();
fields.put("notExistField", "some value");
JobEventRdbSearch.Result<JobStatusTraceEvent> result = repository.findJobStatusTraceEvents(new JobEventRdbSearch.Condition(10, 1, null, null, null, null, fields));
assertThat(result.getTotal(), is(500));
assertThat(result.getRows().size(), is(10));
}
}