2525import io .cdap .cdap .etl .api .batch .BatchSink ;
2626import io .cdap .cdap .etl .mock .batch .MockSource ;
2727import io .cdap .cdap .etl .proto .v2 .ETLPlugin ;
28+ import io .cdap .cdap .test .ApplicationManager ;
2829import io .cdap .cdap .test .DataSetManager ;
2930import io .cdap .plugin .common .Constants ;
3031import io .cdap .plugin .db .batch .sink .AbstractDBSink ;
5152 * Test for ETL using databases.
5253 */
5354public class Db2SinkTestRun extends Db2PluginTestBase {
55+ private static final Schema SCHEMA = Schema .recordOf (
56+ "dbRecord" ,
57+ Schema .Field .of ("SMALLINT_COL" , Schema .of (Schema .Type .INT )),
58+ Schema .Field .of ("INTEGER_COL" , Schema .of (Schema .Type .INT )),
59+ Schema .Field .of ("BIGINT_COL" , Schema .of (Schema .Type .LONG )),
60+ Schema .Field .of ("DECIMAL_COL" , Schema .decimalOf (10 , 6 )),
61+ Schema .Field .of ("NUMERIC_COL" , Schema .decimalOf (10 , 6 )),
62+ Schema .Field .of ("DECFLOAT_COL" , Schema .of (Schema .Type .DOUBLE )),
63+ Schema .Field .of ("REAL_COL" , Schema .of (Schema .Type .FLOAT )),
64+ Schema .Field .of ("DOUBLE_COL" , Schema .of (Schema .Type .DOUBLE )),
65+ Schema .Field .of ("CHAR_COL" , Schema .of (Schema .Type .STRING )),
66+ Schema .Field .of ("VARCHAR_COL" , Schema .of (Schema .Type .STRING )),
67+ Schema .Field .of ("CHAR_BIT_COL" , Schema .of (Schema .Type .BYTES )),
68+ Schema .Field .of ("VARCHAR_BIT_COL" , Schema .of (Schema .Type .BYTES )),
69+ Schema .Field .of ("GRAPHIC_COL" , Schema .of (Schema .Type .STRING )),
70+ Schema .Field .of ("CLOB_COL" , Schema .of (Schema .Type .STRING )),
71+ Schema .Field .of ("BLOB_COL" , Schema .of (Schema .Type .BYTES )),
72+ Schema .Field .of ("DATE_COL" , Schema .of (Schema .LogicalType .DATE )),
73+ Schema .Field .of ("TIME_COL" , Schema .of (Schema .LogicalType .TIME_MICROS )),
74+ Schema .Field .of ("TIMESTAMP_COL" , Schema .of (Schema .LogicalType .TIMESTAMP_MICROS )),
75+ Schema .Field .of ("BINARY_COL" , Schema .of (Schema .Type .BYTES )),
76+ Schema .Field .of ("VARBINARY_COL" , Schema .of (Schema .Type .BYTES )),
77+ Schema .Field .of ("VARGRAPHIC_COL" , Schema .of (Schema .Type .STRING )),
78+ Schema .Field .of ("DBCLOB_COL" , Schema .of (Schema .Type .STRING ))
79+ );
5480
5581 @ Before
5682 public void setup () throws Exception {
@@ -81,28 +107,46 @@ public void testDBSinkWithDBSchemaAndInvalidData() throws Exception {
81107 }
82108 }
83109
84- @ Test
85- public void testDBSink () throws Exception {
86-
87- String inputDatasetName = "input-dbsinktest" ;
110+ public void testDBSink ( String appName , String inputDatasetName , boolean setInputSchema ) throws Exception {
111+ ETLPlugin sourceConfig = ( setInputSchema )
112+ ? MockSource . getPlugin ( inputDatasetName , SCHEMA )
113+ : MockSource . getPlugin ( inputDatasetName ) ;
88114
89- ETLPlugin sourceConfig = MockSource .getPlugin (inputDatasetName );
90115 ETLPlugin sinkConfig = getSinkConfig ();
91116
92- deployETL (sourceConfig , sinkConfig , DATAPIPELINE_ARTIFACT , "testDBSink" );
117+ ApplicationManager appManager = deployETL (sourceConfig , sinkConfig , DATAPIPELINE_ARTIFACT , appName );
93118 createInputData (inputDatasetName );
94-
119+ runETLOnce ( appManager , ImmutableMap . of ( "logical.start.time" , String . valueOf ( CURRENT_TS )));
95120
96121 try (Connection conn = createConnection ();
97122 Statement stmt = conn .createStatement ();
98- ResultSet resultSet = stmt .executeQuery ("SELECT * FROM my_table " )) {
123+ ResultSet resultSet = stmt .executeQuery ("SELECT * FROM MY_DEST_TABLE ORDER BY SMALLINT_COL " )) {
99124 Set <String > users = new HashSet <>();
125+
100126 Assert .assertTrue (resultSet .next ());
101127 users .add (resultSet .getString ("VARCHAR_COL" ));
128+ Assert .assertEquals (1 , resultSet .getInt ("SMALLINT_COL" ));
129+ Assert .assertEquals (1 , resultSet .getInt ("INTEGER_COL" ));
130+ Assert .assertEquals (1L , resultSet .getLong ("BIGINT_COL" ));
131+ Assert .assertEquals (3.458 , resultSet .getBigDecimal ("NUMERIC_COL" ).doubleValue (), 0.00001 );
132+ Assert .assertEquals (3.459 , resultSet .getBigDecimal ("DECIMAL_COL" ).doubleValue (), 0.00001 );
133+ Assert .assertEquals (1.42 , resultSet .getDouble ("DECFLOAT_COL" ), 0.00001 );
134+ Assert .assertEquals (25.123f , resultSet .getFloat ("REAL_COL" ), 0.00001f );
135+ Assert .assertEquals (3.456 , resultSet .getDouble ("DOUBLE_COL" ), 0.00001 );
136+ Assert .assertEquals ("user1" , resultSet .getString ("CHAR_COL" ).trim ());
137+ Assert .assertEquals ("user1" , resultSet .getString ("VARCHAR_COL" ));
138+ Assert .assertEquals ("user1" , Bytes .toString (resultSet .getBytes ("CHAR_BIT_COL" ), 0 , 5 ));
139+ Assert .assertEquals ("user1" , Bytes .toString (resultSet .getBytes ("VARCHAR_BIT_COL" )));
140+ Assert .assertEquals ("user1" , resultSet .getString ("GRAPHIC_COL" ).trim ());
102141 Assert .assertEquals (new Date (CURRENT_TS ).toString (), resultSet .getDate ("DATE_COL" ).toString ());
103142 Assert .assertEquals (new Time (CURRENT_TS ).toString (), resultSet .getTime ("TIME_COL" ).toString ());
104143 Assert .assertEquals (new Timestamp (CURRENT_TS ), resultSet .getTimestamp ("TIMESTAMP_COL" ));
144+ Assert .assertEquals ("user1" , Bytes .toString (resultSet .getBytes ("BINARY_COL" ), 0 , 5 ));
145+ Assert .assertEquals ("user1" , Bytes .toString (resultSet .getBytes ("VARBINARY_COL" )));
146+ Assert .assertEquals ("user1" , resultSet .getString ("VARGRAPHIC_COL" ).trim ());
147+ Assert .assertEquals ("user1" , resultSet .getString ("DBCLOB_COL" ));
105148 Assert .assertTrue (resultSet .next ());
149+ users .add (resultSet .getString ("VARCHAR_COL" ));
106150 Assert .assertEquals ("user2" , Bytes .toString (resultSet .getBytes ("BLOB_COL" ), 0 , 5 ));
107151 Assert .assertEquals ("user2" , resultSet .getString ("CLOB_COL" ));
108152 Assert .assertEquals (new BigDecimal (3.458 , new MathContext (PRECISION )).setScale (SCALE ),
@@ -111,7 +155,6 @@ public void testDBSink() throws Exception {
111155 resultSet .getBigDecimal ("DECIMAL_COL" ));
112156 users .add (resultSet .getString ("VARCHAR_COL" ));
113157 Assert .assertEquals (ImmutableSet .of ("user1" , "user2" ), users );
114-
115158 }
116159 }
117160
@@ -146,50 +189,33 @@ protected void writeDataForInvalidDataWriteTest(String inputDatasetName, String
146189 private void createInputData (String inputDatasetName ) throws Exception {
147190 // add some data to the input table
148191 DataSetManager <Table > inputManager = getDataset (inputDatasetName );
149- Schema schema = Schema .recordOf (
150- "dbRecord" ,
151- Schema .Field .of ("SMALLINT_COL" , Schema .of (Schema .Type .INT )),
152- Schema .Field .of ("INTEGER_COL" , Schema .of (Schema .Type .INT )),
153- Schema .Field .of ("BIGINT_COL" , Schema .of (Schema .Type .LONG )),
154- Schema .Field .of ("DECIMAL_COL" , Schema .decimalOf (PRECISION , SCALE )),
155- Schema .Field .of ("NUMERIC_COL" , Schema .decimalOf (PRECISION , SCALE )),
156- Schema .Field .of ("DECFLOAT_COL" , Schema .of (Schema .Type .DOUBLE )),
157- Schema .Field .of ("REAL_COL" , Schema .of (Schema .Type .FLOAT )),
158- Schema .Field .of ("DOUBLE_COL" , Schema .of (Schema .Type .DOUBLE )),
159- Schema .Field .of ("CHAR_COL" , Schema .of (Schema .Type .STRING )),
160- Schema .Field .of ("VARCHAR_COL" , Schema .of (Schema .Type .STRING )),
161- Schema .Field .of ("CHAR_BIT_COL" , Schema .of (Schema .Type .STRING )),
162- Schema .Field .of ("VARCHAR_BIT_COL" , Schema .of (Schema .Type .STRING )),
163- Schema .Field .of ("GRAPHIC_COL" , Schema .of (Schema .Type .STRING )),
164- Schema .Field .of ("CLOB_COL" , Schema .of (Schema .Type .BYTES )),
165- Schema .Field .of ("BLOB_COL" , Schema .of (Schema .Type .BYTES )),
166- Schema .Field .of ("DATE_COL" , Schema .of (Schema .LogicalType .DATE )),
167- Schema .Field .of ("TIME_COL" , Schema .of (Schema .LogicalType .TIME_MICROS )),
168- Schema .Field .of ("TIMESTAMP_COL" , Schema .of (Schema .LogicalType .TIMESTAMP_MICROS ))
169- );
170192 List <StructuredRecord > inputRecords = new ArrayList <>();
171193 LocalDateTime localDateTime = new Timestamp (CURRENT_TS ).toLocalDateTime ();
172194 for (int i = 1 ; i <= 2 ; i ++) {
173195 String name = "user" + i ;
174- inputRecords .add (StructuredRecord .builder (schema )
196+ inputRecords .add (StructuredRecord .builder (SCHEMA )
175197 .set ("SMALLINT_COL" , i )
176198 .set ("INTEGER_COL" , i )
177199 .set ("BIGINT_COL" , (long ) i )
178200 .setDecimal ("NUMERIC_COL" , new BigDecimal (3.458d , new MathContext (PRECISION )).setScale (SCALE ))
179201 .setDecimal ("DECIMAL_COL" , new BigDecimal (3.459d , new MathContext (PRECISION )).setScale (SCALE ))
180202 .set ("DECFLOAT_COL" , .42 + i )
181- .set ("REAL_COL" , 24f + i )
203+ .set ("REAL_COL" , 24.123f + i )
182204 .set ("DOUBLE_COL" , 3.456 )
183205 .set ("CHAR_COL" , name )
184206 .set ("VARCHAR_COL" , name )
185- .set ("CHAR_BIT_COL" , name )
186- .set ("VARCHAR_BIT_COL" , name )
207+ .set ("CHAR_BIT_COL" , name . getBytes () )
208+ .set ("VARCHAR_BIT_COL" , name . getBytes () )
187209 .set ("GRAPHIC_COL" , name )
188- .set ("CLOB_COL" , name . getBytes () )
210+ .set ("CLOB_COL" , name )
189211 .set ("BLOB_COL" , name .getBytes ())
190212 .setDate ("DATE_COL" , localDateTime .toLocalDate ())
191213 .setTime ("TIME_COL" , localDateTime .toLocalTime ())
192214 .setTimestamp ("TIMESTAMP_COL" , localDateTime .atZone (ZoneId .systemDefault ()))
215+ .set ("BINARY_COL" , name .getBytes ())
216+ .set ("VARBINARY_COL" , name .getBytes ())
217+ .set ("VARGRAPHIC_COL" , name )
218+ .set ("DBCLOB_COL" , name )
193219 .build ());
194220 }
195221 MockSource .writeInput (inputManager , inputRecords );
0 commit comments