Skip to content

Commit 270741d

Browse files
committed
[BACKLOG-6461] more tests
1 parent 2580955 commit 270741d

2 files changed

Lines changed: 215 additions & 1 deletion

File tree

test-src/org/pentaho/platform/dataaccess/datasource/wizard/service/agile/CsvTransformGeneratorIT.java

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,15 @@ public void testGoodTransform() throws Exception {
214214

215215
}
216216

217+
public void testInit_DefaultDb() throws Exception {
218+
IPentahoSession session = new StandaloneSession( "test" );
219+
KettleSystemListener.environmentInit( session );
220+
221+
ModelInfo info = createModel();
222+
CsvTransformGenerator gen = new CsvTransformGenerator( info );
223+
assertEquals( getDatabaseMeta(), gen.getTargetDatabaseMeta() );
224+
}
225+
217226
public void testCreateTable() throws Exception {
218227

219228
IPentahoSession session = new StandaloneSession( "test" );
@@ -237,6 +246,67 @@ public void testCreateTable() throws Exception {
237246
assertEquals( (long) 0, rowCount );
238247
}
239248

249+
public void testCreateTable_noIgnoredColumns() throws Exception {
250+
251+
IPentahoSession session = new StandaloneSession( "test" );
252+
KettleSystemListener.environmentInit( session );
253+
254+
DatabaseMeta dbMeta = getDatabaseMeta();
255+
ModelInfo info = createModel();
256+
ColumnInfo[] columns = info.getColumns();
257+
columns[ 4 ].setIgnore( false );
258+
info.setColumns( columns );
259+
CsvTransformGenerator gen = new CsvTransformGenerator( info, dbMeta );
260+
261+
String tableName = info.getStageTableName();
262+
263+
try {
264+
gen.execSqlStatement( getDropTableStatement( tableName ), dbMeta, null );
265+
} catch ( CsvTransformGeneratorException e ) {
266+
// it is OK if the table doesn't exist previously
267+
}
268+
gen.createOrModifyTable( session );
269+
270+
// check the results
271+
long rowCount = this.getRowCount( tableName );
272+
assertEquals( (long) 0, rowCount );
273+
274+
275+
DatabaseMeta databaseMeta = getDatabaseMeta();
276+
assertNotNull( databaseMeta );
277+
Database database = new Database( databaseMeta );
278+
assertNotNull( database );
279+
database.connect();
280+
281+
Connection connection = null;
282+
Statement stmt = null;
283+
ResultSet sqlResult = null;
284+
285+
try {
286+
connection = database.getConnection();
287+
assertNotNull( connection );
288+
stmt = database.getConnection().createStatement();
289+
290+
boolean ok = stmt.execute( "select * from " + tableName );
291+
assertTrue( ok );
292+
sqlResult = stmt.getResultSet();
293+
assertNotNull( sqlResult );
294+
assertEquals( 1, sqlResult.findColumn( "PC_0" ) );
295+
assertEquals( 2, sqlResult.findColumn( "PC_1" ) );
296+
assertEquals( 3, sqlResult.findColumn( "PC_2" ) );
297+
assertEquals( 4, sqlResult.findColumn( "PC_3" ) );
298+
assertEquals( 5, sqlResult.findColumn( "PC_4" ) );
299+
assertEquals( 6, sqlResult.findColumn( "PC_5" ) );
300+
assertEquals( 7, sqlResult.findColumn( "PC_6" ) );
301+
assertEquals( 8, sqlResult.findColumn( "PC_7" ) );
302+
assertEquals( 9, sqlResult.findColumn( "PC_8" ) );
303+
} finally {
304+
sqlResult.close();
305+
stmt.close();
306+
connection.close();
307+
}
308+
}
309+
240310
public void testCreateTable_longColumnNames() throws Exception {
241311

242312
IPentahoSession session = new StandaloneSession( "test" );
@@ -264,6 +334,43 @@ public void testCreateTable_longColumnNames() throws Exception {
264334
assertEquals( 0, gen.getTransformStats().getErrorCount() );
265335
}
266336

337+
public void testCreateTable_CannotCreateCutLongNamesStep() throws Exception {
338+
339+
IPentahoSession session = new StandaloneSession( "test" );
340+
KettleSystemListener.environmentInit( session );
341+
342+
DatabaseMeta dbMeta = getDatabaseMeta();
343+
ModelInfo info = createModel();
344+
CsvTransformGenerator gen = spy( new CsvTransformGenerator( info, dbMeta ) );
345+
final int maxColumnNameLength = 3;
346+
doReturn( maxColumnNameLength ).when( gen ).getMaxColumnNameLength();
347+
348+
String tableName = info.getStageTableName();
349+
350+
try {
351+
gen.execSqlStatement( getDropTableStatement( tableName ), dbMeta, null );
352+
} catch ( CsvTransformGeneratorException e ) {
353+
// it is OK if the table doesn't exist previously
354+
}
355+
try {
356+
this.getRowCount( tableName );
357+
fail( "Test table must not exist now" );
358+
} catch ( SQLException e ) {
359+
// ok
360+
}
361+
362+
doThrow( new RuntimeException() ).when( gen ).createCutLongNamesStep( any( RowMetaInterface.class ), eq( maxColumnNameLength ), anyString() );
363+
// This error is not critical. It's supposed to be skipped.
364+
365+
gen.createOrModifyTable( session );
366+
verify( gen, atLeastOnce() ).createCutLongNamesStep( any( TransMeta.class ), any( List.class ), eq( maxColumnNameLength ), anyString() );
367+
368+
// check the results.
369+
long rowCount = this.getRowCount( tableName );
370+
assertEquals( (long) 0, rowCount );
371+
assertEquals( 0, gen.getTransformStats().getErrorCount() );
372+
}
373+
267374
public void testCreateTable_littleMaxColumnNameLength() throws Exception {
268375

269376
IPentahoSession session = new StandaloneSession( "test" );

test-src/org/pentaho/platform/dataaccess/datasource/wizard/service/agile/CsvTransformGeneratorTest.java

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,29 @@
1616
*/
1717
package org.pentaho.platform.dataaccess.datasource.wizard.service.agile;
1818

19+
import static org.junit.Assert.assertArrayEquals;
20+
import static org.junit.Assert.assertEquals;
21+
import static org.junit.Assert.assertNotNull;
22+
import static org.junit.Assert.assertTrue;
1923
import static org.junit.Assert.fail;
24+
import static org.mockito.Matchers.any;
25+
import static org.mockito.Mockito.doReturn;
26+
import static org.mockito.Mockito.doThrow;
27+
import static org.mockito.Mockito.mock;
28+
import static org.mockito.Mockito.spy;
29+
30+
import java.sql.DatabaseMetaData;
31+
import java.sql.SQLException;
32+
import java.util.ArrayList;
33+
import java.util.List;
2034

2135
import org.junit.Assert;
2236
import org.junit.Test;
37+
import org.pentaho.di.core.database.Database;
38+
import org.pentaho.di.core.database.DatabaseMeta;
39+
import org.pentaho.di.core.exception.KettleDatabaseException;
40+
import org.pentaho.di.core.row.RowMetaInterface;
41+
import org.pentaho.di.core.row.ValueMetaInterface;
2342
import org.pentaho.di.trans.step.StepMeta;
2443
import org.pentaho.di.trans.step.StepMetaInterface;
2544
import org.pentaho.di.trans.steps.selectvalues.SelectValuesMeta;
@@ -28,6 +47,63 @@
2847

2948
public class CsvTransformGeneratorTest {
3049

50+
@Test
51+
public void testGetMaxColumnNameLength() throws Exception {
52+
53+
CsvTransformGenerator ctgNoDatabase10 = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
54+
Database db10 = mock( Database.class );
55+
doReturn( db10 ).when( ctgNoDatabase10 ).getDatabase( any( DatabaseMeta.class ) );
56+
DatabaseMetaData dbmd10 = mock( DatabaseMetaData.class );
57+
doReturn( dbmd10 ).when( db10 ).getDatabaseMetaData();
58+
doReturn( 10 ).when( dbmd10 ).getMaxColumnNameLength();
59+
assertEquals( 10, ctgNoDatabase10.getMaxColumnNameLength() );
60+
61+
CsvTransformGenerator ctgNoDatabase0 = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
62+
Database db0 = mock( Database.class );
63+
doReturn( db0 ).when( ctgNoDatabase0 ).getDatabase( any( DatabaseMeta.class ) );
64+
DatabaseMetaData dbmd0 = mock( DatabaseMetaData.class );
65+
doReturn( dbmd0 ).when( db0 ).getDatabaseMetaData();
66+
doReturn( 0 ).when( dbmd0 ).getMaxColumnNameLength();
67+
assertEquals( 0, ctgNoDatabase0.getMaxColumnNameLength() );
68+
69+
// As for the case of doReturn( <less then 0> ).when( dbmd0 ).getMaxColumnNameLength();
70+
// It's impossible according to java.sql.DatabaseMetaData.
71+
// @see java.sql.DatabaseMetaData.getMaxColumnNameLength()
72+
//
73+
74+
CsvTransformGenerator ctgDbmdE1 = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
75+
Database dbDbmdE1 = mock( Database.class );
76+
DatabaseMetaData dbmdE1 = mock( DatabaseMetaData.class );
77+
doReturn( dbmdE1 ).when( dbDbmdE1 ).getDatabaseMetaData();
78+
doThrow( new SQLException() ).when( dbmdE1 ).getMaxColumnNameLength();
79+
assertEquals( 0, ctgDbmdE1.getMaxColumnNameLength() );
80+
81+
CsvTransformGenerator ctgDbmdE2 = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
82+
Database dbDbmdE2 = mock( Database.class );
83+
DatabaseMetaData dbmdE2 = mock( DatabaseMetaData.class );
84+
doReturn( dbmdE2 ).when( dbDbmdE2 ).getDatabaseMetaData();
85+
doThrow( new RuntimeException() ).when( dbmdE2 ).getMaxColumnNameLength();
86+
assertEquals( 0, ctgDbmdE2.getMaxColumnNameLength() );
87+
88+
CsvTransformGenerator ctgDbmdE3 = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
89+
Database dbDbmdE3 = mock( Database.class );
90+
doThrow( new KettleDatabaseException() ).when( dbDbmdE3 ).getDatabaseMetaData();
91+
assertEquals( 0, ctgDbmdE3.getMaxColumnNameLength() );
92+
93+
CsvTransformGenerator ctgDbmdE4 = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
94+
Database dbDbmdE4 = mock( Database.class );
95+
doThrow( new RuntimeException() ).when( dbDbmdE4 ).getDatabaseMetaData();
96+
assertEquals( 0, ctgDbmdE4.getMaxColumnNameLength() );
97+
98+
CsvTransformGenerator ctgNoDatabase = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
99+
doReturn( null ).when( ctgNoDatabase ).getDatabase( any( DatabaseMeta.class ) );
100+
assertEquals( 0, ctgNoDatabase.getMaxColumnNameLength() );
101+
102+
CsvTransformGenerator ctgDatabaseErr = spy( new CsvTransformGenerator( new ModelInfo(), null ) );
103+
doThrow( new RuntimeException() ).when( ctgDatabaseErr ).getDatabase( any( DatabaseMeta.class ) );
104+
assertEquals( 0, ctgDatabaseErr.getMaxColumnNameLength() );
105+
}
106+
31107
@Test
32108
public void testCreateCutLongNamesStep_shortColumnNames() throws Exception {
33109
CsvTransformGenerator ctg = new CsvTransformGenerator( new ModelInfo(), null );
@@ -38,6 +114,38 @@ public void testCreateCutLongNamesStep_shortColumnNames() throws Exception {
38114
Assert.assertNull( "step", step );
39115
}
40116

117+
@Test
118+
/**
119+
* Very artificial case.
120+
* <code>org.pentaho.di.core.row.RowMeta</code> provides unique names,
121+
* though it's not required in <code>org.pentaho.di.core.row.RowMetaInterface</code>
122+
*/
123+
public void testCreateCutLongNamesStep_dupColumnNames() throws Exception {
124+
CsvTransformGenerator ctg = new CsvTransformGenerator( new ModelInfo(), null );
125+
int maxColumnNameLength = 18;
126+
String stepName = "TEST_STEP_DupLongNames";
127+
CutLongNamesStepContext testData = new CutLongNamesStepContext();
128+
RowMetaInterface fields = spy( testData.fields );
129+
List<ValueMetaInterface> vmList = new ArrayList<ValueMetaInterface>( testData.fields.getValueMetaList() );
130+
vmList.set( 1, vmList.get( 0 ) );
131+
doReturn( vmList ).when( fields ).getValueMetaList();
132+
133+
String[] fieldNamesDups = new String[] {"a", "a", "A_1", "b_1", "LONGlonglong", "longlonglong_again", "a_2", "lonGlo_1"};
134+
String[] fieldRenames = new String[] {"a", "a_1", "A_1_1", "b_1", "LONGlonglong", "longlonglong_again", "a_2", "lonGlo_1"};
135+
136+
StepMeta step = ctg.createCutLongNamesStep( fields, maxColumnNameLength, stepName );
137+
assertNotNull( "step", step );
138+
assertEquals( "step name", stepName, step.getName() );
139+
StepMetaInterface stepMetaIntegrface = step.getStepMetaInterface();
140+
assertNotNull( "stepMetaIntegrface", stepMetaIntegrface );
141+
assertTrue( "stepMetaIntegrface instanceof SelectValuesMeta", stepMetaIntegrface instanceof SelectValuesMeta );
142+
SelectValuesMeta svm = (SelectValuesMeta) stepMetaIntegrface;
143+
String[] selectName = svm.getSelectName();
144+
assertArrayEquals( "selectName", fieldNamesDups, selectName );
145+
String[] selectRename = svm.getSelectRename();
146+
assertArrayEquals( "selectName", fieldRenames, selectRename );
147+
}
148+
41149
@Test
42150
public void testCreateCutLongNamesStep_longColumnNames() throws Exception {
43151
CsvTransformGenerator ctg = new CsvTransformGenerator( new ModelInfo(), null );
@@ -74,5 +182,4 @@ public void testCreateCutLongNamesStep_littleMaxColumnNameLength() throws Except
74182
}
75183
}
76184

77-
78185
}

0 commit comments

Comments
 (0)