Skip to content

Commit f354df6

Browse files
Dry run mode in LM task nhl#125
1 parent 7d77a21 commit f354df6

File tree

3 files changed

+148
-0
lines changed

3 files changed

+148
-0
lines changed

link-move/src/main/java/com/nhl/link/move/LmTask.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ public interface LmTask {
4949
* the caller to analyze the results. Currently all task implementations are
5050
* synchronous, so this method returns only on task completion.
5151
*
52+
* Any changes will not be committed to the target datasource.
53+
*
5254
* @since 2.3
5355
*/
5456
Execution dryRun();
@@ -59,6 +61,8 @@ public interface LmTask {
5961
* all task implementations are synchronous, so this method returns only on
6062
* task completion.
6163
*
64+
* Any changes will not be committed to the target datasource.
65+
*
6266
* @since 2.3
6367
*/
6468
Execution dryRun(Map<String, ?> params);
@@ -69,6 +73,8 @@ public interface LmTask {
6973
* all task implementations are synchronous, so this method returns only on
7074
* task completion.
7175
*
76+
* Any changes will not be committed to the target datasource.
77+
*
7278
* @since 2.3
7379
*/
7480
Execution dryRun(SyncToken token);
@@ -79,6 +85,8 @@ public interface LmTask {
7985
* all task implementations are synchronous, so this method returns only on
8086
* task completion.
8187
*
88+
* Any changes will not be committed to the target datasource.
89+
*
8290
* @since 2.3
8391
*/
8492
Execution dryRun(SyncToken token, Map<String, ?> params);
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.nhl.link.move.itest;
2+
3+
import com.nhl.link.move.Execution;
4+
import com.nhl.link.move.LmTask;
5+
import com.nhl.link.move.TimestampToken;
6+
import com.nhl.link.move.runtime.task.ITaskService;
7+
import com.nhl.link.move.unit.LmIntegrationTest;
8+
import com.nhl.link.move.unit.cayenne.t.Etl1t;
9+
import org.junit.Test;
10+
11+
import java.util.Collections;
12+
13+
import static org.junit.Assert.assertEquals;
14+
15+
public class CreateOrUpdate_DryRunIT extends LmIntegrationTest {
16+
17+
@Test
18+
public void test_WithoutParameters() {
19+
LmTask task = etl.service(ITaskService.class).createOrUpdate(Etl1t.class)
20+
.sourceExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
21+
22+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('a', 3)");
23+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('b', NULL)");
24+
25+
Execution e1 = task.dryRun();
26+
assertExec(2, 2, 0, 0, e1);
27+
assertEquals(0, targetScalar("SELECT count(1) from utest.etl1t"));
28+
}
29+
30+
@Test
31+
public void test_WithParameters() {
32+
LmTask task = etl.service(ITaskService.class).createOrUpdate(Etl1t.class)
33+
.sourceExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
34+
35+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('a', 3)");
36+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('b', NULL)");
37+
38+
Execution e1 = task.dryRun(Collections.singletonMap("x", "y"));
39+
assertExec(2, 2, 0, 0, e1);
40+
assertEquals(0, targetScalar("SELECT count(1) from utest.etl1t"));
41+
}
42+
43+
@Test
44+
public void test_SyncToken_WithoutParameters() {
45+
LmTask task = etl.service(ITaskService.class).createOrUpdate(Etl1t.class)
46+
.sourceExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
47+
48+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('a', 3)");
49+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('b', NULL)");
50+
51+
Execution e1 = task.dryRun(new TimestampToken("token"));
52+
assertExec(2, 2, 0, 0, e1);
53+
assertEquals(0, targetScalar("SELECT count(1) from utest.etl1t"));
54+
}
55+
56+
@Test
57+
public void test_SyncToken_WithParameters() {
58+
LmTask task = etl.service(ITaskService.class).createOrUpdate(Etl1t.class)
59+
.sourceExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
60+
61+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('a', 3)");
62+
srcRunSql("INSERT INTO utest.etl1 (NAME, AGE) VALUES ('b', NULL)");
63+
64+
Execution e1 = task.dryRun(new TimestampToken("token"), Collections.singletonMap("x", "y"));
65+
assertExec(2, 2, 0, 0, e1);
66+
assertEquals(0, targetScalar("SELECT count(1) from utest.etl1t"));
67+
}
68+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.nhl.link.move.itest;
2+
3+
import com.nhl.link.move.Execution;
4+
import com.nhl.link.move.LmTask;
5+
import com.nhl.link.move.TimestampToken;
6+
import com.nhl.link.move.runtime.task.ITaskService;
7+
import com.nhl.link.move.unit.LmIntegrationTest;
8+
import com.nhl.link.move.unit.cayenne.t.Etl1t;
9+
import org.junit.Test;
10+
11+
import java.util.Collections;
12+
13+
import static org.junit.Assert.assertEquals;
14+
15+
public class Delete_DryRunIT extends LmIntegrationTest {
16+
17+
@Test
18+
public void test_WithoutParameters() {
19+
LmTask task = etl.service(ITaskService.class).delete(Etl1t.class)
20+
.sourceMatchExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
21+
22+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('a', 3)");
23+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('b', NULL)");
24+
25+
Execution e1 = task.dryRun();
26+
assertExec(0, 0, 0, 2, e1);
27+
28+
assertEquals(2, targetScalar("SELECT count(1) from utest.etl1t"));
29+
}
30+
31+
@Test
32+
public void test_WithParameters() {
33+
LmTask task = etl.service(ITaskService.class).delete(Etl1t.class)
34+
.sourceMatchExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
35+
36+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('a', 3)");
37+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('b', NULL)");
38+
39+
Execution e1 = task.dryRun(Collections.singletonMap("x", "y"));
40+
assertExec(0, 0, 0, 2, e1);
41+
42+
assertEquals(2, targetScalar("SELECT count(1) from utest.etl1t"));
43+
}
44+
45+
@Test
46+
public void test_SyncToken_WithoutParameters() {
47+
LmTask task = etl.service(ITaskService.class).delete(Etl1t.class)
48+
.sourceMatchExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
49+
50+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('a', 3)");
51+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('b', NULL)");
52+
53+
Execution e1 = task.dryRun(new TimestampToken("token"));
54+
assertExec(0, 0, 0, 2, e1);
55+
56+
assertEquals(2, targetScalar("SELECT count(1) from utest.etl1t"));
57+
}
58+
59+
@Test
60+
public void test_SyncToken_WithParameters() {
61+
LmTask task = etl.service(ITaskService.class).delete(Etl1t.class)
62+
.sourceMatchExtractor("com/nhl/link/move/itest/etl1_to_etl1t").matchBy(Etl1t.NAME).task();
63+
64+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('a', 3)");
65+
targetRunSql("INSERT INTO utest.etl1t (NAME, AGE) VALUES ('b', NULL)");
66+
67+
Execution e1 = task.dryRun(new TimestampToken("token"), Collections.singletonMap("x", "y"));
68+
assertExec(0, 0, 0, 2, e1);
69+
70+
assertEquals(2, targetScalar("SELECT count(1) from utest.etl1t"));
71+
}
72+
}

0 commit comments

Comments
 (0)