NIFI-972: Added additional unit test; deleted lines that were commented out

This commit is contained in:
Mark Payne 2015-10-23 09:52:09 -04:00
parent a9e5325047
commit bd506b1e10
3 changed files with 47 additions and 7 deletions

View File

@ -19,6 +19,7 @@ package org.apache.nifi.processors.standard.util;
import static java.sql.Types.ARRAY;
import static java.sql.Types.BIGINT;
import static java.sql.Types.BINARY;
import static java.sql.Types.BIT;
import static java.sql.Types.BLOB;
import static java.sql.Types.BOOLEAN;
import static java.sql.Types.CHAR;
@ -83,7 +84,7 @@ public class JdbcCommon {
if (value == null) {
rec.put(i - 1, null);
} else if (javaSqlType==BINARY || javaSqlType==VARBINARY || javaSqlType==LONGVARBINARY || javaSqlType==ARRAY || javaSqlType==BLOB || javaSqlType==CLOB) {
} else if (javaSqlType == BINARY || javaSqlType == VARBINARY || javaSqlType == LONGVARBINARY || javaSqlType == ARRAY || javaSqlType == BLOB || javaSqlType == CLOB) {
// bytes requires little bit different handling
byte[] bytes = rs.getBytes(i);
ByteBuffer bb = ByteBuffer.wrap(bytes);
@ -104,7 +105,7 @@ public class JdbcCommon {
// The different types that we support are numbers (int, long, double, float),
// as well as boolean values and Strings. Since Avro doesn't provide
// timestamp types, we want to convert those to Strings. So we will cast anything other
// than numbers or booleans to strings by using to toString() method.
// than numbers or booleans to strings by using the toString() method.
rec.put(i - 1, value.toString());
}
}
@ -137,6 +138,7 @@ public class JdbcCommon {
builder.name(meta.getColumnName(i)).type().unionOf().nullBuilder().endNull().and().stringType().endUnion().noDefault();
break;
case BIT:
case BOOLEAN:
builder.name(meta.getColumnName(i)).type().unionOf().nullBuilder().endNull().and().booleanType().endUnion().noDefault();
break;

View File

@ -24,19 +24,26 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.HashSet;
import java.util.Set;
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileStream;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
public class TestJdbcCommon {
@ -138,6 +145,41 @@ public class TestJdbcCommon {
}
}
@Test
public void testCreateSchemaTypes() throws SQLException, IllegalArgumentException, IllegalAccessException {
final Set<Integer> fieldsToIgnore = new HashSet<>();
fieldsToIgnore.add(Types.NULL);
fieldsToIgnore.add(Types.OTHER);
final Field[] fieldTypes = Types.class.getFields();
for (final Field field : fieldTypes) {
final Object fieldObject = field.get(null);
final int type = (int) fieldObject;
if (fieldsToIgnore.contains(Types.NULL)) {
continue;
}
final ResultSetMetaData metadata = Mockito.mock(ResultSetMetaData.class);
Mockito.when(metadata.getColumnCount()).thenReturn(1);
Mockito.when(metadata.getColumnType(1)).thenReturn(type);
Mockito.when(metadata.getColumnName(1)).thenReturn(field.getName());
Mockito.when(metadata.getTableName(1)).thenReturn("table");
final ResultSet rs = Mockito.mock(ResultSet.class);
Mockito.when(rs.getMetaData()).thenReturn(metadata);
try {
JdbcCommon.createSchema(rs);
} catch (final IllegalArgumentException | SQLException sqle) {
sqle.printStackTrace();
Assert.fail("Failed when using type " + field.getName());
}
}
}
// many test use Derby as database, so ensure driver is available
@Test
public void testDriverLoad() throws ClassNotFoundException {

View File

@ -64,10 +64,6 @@ public class TestJdbcTypesDerby {
+ " active tinyint NOT NULL DEFAULT 0, "
+ " home_module_id int DEFAULT NULL, "
+ " PRIMARY KEY (id) ) " ;
// + " UNIQUE email ) " ;
// + " KEY home_module_id (home_module_id) ) " ;
// + " CONSTRAINT users_ibfk_1 FOREIGN KEY (home_module_id) REFERENCES "
// + " modules (id) ON DELETE SET NULL " ;
String dropTable = "drop table users";