pgyori commented on a change in pull request #5388:
URL: https://github.com/apache/nifi/pull/5388#discussion_r714812331
##########
File path:
nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/ResultSetRecordSetTest.java
##########
@@ -283,41 +544,235 @@ private ResultSet
givenResultSetForArrayThrowsException(boolean featureSupported
return resultSet;
}
- private ResultSet givenResultSetForOther() throws SQLException {
+ private ResultSet givenResultSetForOther(List<RecordField> fields) throws
SQLException {
final ResultSet resultSet = Mockito.mock(ResultSet.class);
final ResultSetMetaData resultSetMetaData =
Mockito.mock(ResultSetMetaData.class);
when(resultSet.getMetaData()).thenReturn(resultSetMetaData);
- when(resultSetMetaData.getColumnCount()).thenReturn(1);
- when(resultSetMetaData.getColumnLabel(1)).thenReturn("column");
- when(resultSetMetaData.getColumnName(1)).thenReturn("column");
- when(resultSetMetaData.getColumnType(1)).thenReturn(Types.OTHER);
+ when(resultSetMetaData.getColumnCount()).thenReturn(fields.size());
+ for (int i = 0; i < fields.size(); ++i) {
+ int columnIndex = i + 1;
+
when(resultSetMetaData.getColumnLabel(columnIndex)).thenReturn(fields.get(i).getFieldName());
+
when(resultSetMetaData.getColumnName(columnIndex)).thenReturn(fields.get(i).getFieldName());
+
when(resultSetMetaData.getColumnType(columnIndex)).thenReturn(Types.OTHER);
+ }
return resultSet;
}
- private RecordSchema givenRecordSchema() {
- final List<RecordField> fields = new ArrayList<>();
+ private Record givenInputRecord() {
+ List<RecordField> inputRecordFields = new ArrayList<>(2);
+ inputRecordFields.add(new RecordField("id",
RecordFieldType.INT.getDataType()));
+ inputRecordFields.add(new RecordField("name",
RecordFieldType.STRING.getDataType()));
+ RecordSchema inputRecordSchema = new
SimpleRecordSchema(inputRecordFields);
+
+ Map<String, Object> inputRecordData = new HashMap<>(2);
+ inputRecordData.put("id", 1);
+ inputRecordData.put("name", "John");
+
+ return new MapRecord(inputRecordSchema, inputRecordData);
+ }
- for (final Object[] column : COLUMNS) {
- fields.add(new RecordField((String) column[1], (DataType)
column[3]));
+ private List<RecordField> givenFieldsThatAreOfTypeRecord(List<Record>
concreteRecords) {
+ List<RecordField> fields = new ArrayList<>(concreteRecords.size());
+ int i = 1;
+ for (Record record : concreteRecords) {
+ fields.add(new RecordField("record" + String.valueOf(i),
RecordFieldType.RECORD.getRecordDataType(record.getSchema())));
+ ++i;
}
+ return fields;
+ }
- return new SimpleRecordSchema(fields);
+ private List<RecordField> whenSchemaFieldsAreSetupForArrayType(final
List<ArrayTestData> testData,
+ final
ResultSet resultSet,
+ final
ResultSetMetaData resultSetMetaData)
+ throws SQLException {
+ List<RecordField> fields = new ArrayList<>();
+ for (int i = 0; i < testData.size(); ++i) {
+ ArrayTestData testDatum = testData.get(i);
+ int columnIndex = i + 1;
+ SqlArrayDummy arrayDummy = Mockito.mock(SqlArrayDummy.class);
+ when(arrayDummy.getArray()).thenReturn(testDatum.getTestArray());
+ when(resultSet.getArray(columnIndex)).thenReturn(arrayDummy);
+
when(resultSetMetaData.getColumnLabel(columnIndex)).thenReturn(testDatum.getFieldName());
+
when(resultSetMetaData.getColumnType(columnIndex)).thenReturn(Types.ARRAY);
+ fields.add(new RecordField(testDatum.getFieldName(),
RecordFieldType.ARRAY.getDataType()));
+ }
+ return fields;
+ }
+
+ private void thenAllDataTypesMatchInputFieldType(final List<RecordField>
inputFields, final RecordSchema resultSchema) {
+ assertEquals("The number of input fields does not match the number of
fields in the result schema.", inputFields.size(),
resultSchema.getFieldCount());
+ for (int i = 0; i < inputFields.size(); ++i) {
+ assertEquals(inputFields.get(i).getDataType(),
resultSchema.getField(i).getDataType());
+ }
+ }
+
+ private void thenAllDataTypesAreString(final RecordSchema resultSchema) {
+ for (int i = 0; i < resultSchema.getFieldCount(); ++i) {
+ assertEquals(RecordFieldType.STRING.getDataType(),
resultSchema.getField(i).getDataType());
+ }
}
- private void thenAllColumnDataTypesAreCorrect(final RecordSchema
resultSchema) {
- assertNotNull(resultSchema);
+ private void thenAllColumnDataTypesAreCorrect(TestColumn[] columns,
RecordSchema expectedSchema, RecordSchema actualSchema) {
+ assertNotNull(actualSchema);
- for (final Object[] column : COLUMNS) {
+ for (TestColumn column : columns) {
+ int fieldIndex = column.getIndex() - 1;
// The DECIMAL column with scale larger than precision will not
match so verify that instead
- DataType actualDataType = resultSchema.getField((Integer)
column[0] - 1).getDataType();
- DataType expectedDataType = (DataType) column[3];
+ DataType actualDataType =
actualSchema.getField(fieldIndex).getDataType();
+ DataType expectedDataType =
expectedSchema.getField(fieldIndex).getDataType();
if
(expectedDataType.equals(RecordFieldType.DECIMAL.getDecimalDataType(3, 10))) {
DecimalDataType decimalDataType = (DecimalDataType)
expectedDataType;
if (decimalDataType.getScale() >
decimalDataType.getPrecision()) {
expectedDataType =
RecordFieldType.DECIMAL.getDecimalDataType(decimalDataType.getScale(),
decimalDataType.getScale());
}
}
- assertEquals("For column " + column[0] + " the converted type is
not matching", expectedDataType, actualDataType);
+ assertEquals("For column " + column.getIndex() + " the converted
type is not matching", expectedDataType, actualDataType);
+ }
+ }
+
+ private void thenActualArrayElementTypesMatchExpected(Map<String,
DataType> expectedTypes, RecordSchema actualSchema) {
+ for (RecordField recordField : actualSchema.getFields()) {
+ if (recordField.getDataType() instanceof ArrayDataType) {
+ ArrayDataType arrayType = (ArrayDataType)
recordField.getDataType();
+ if
(!arrayType.getElementType().equals(expectedTypes.get(recordField.getFieldName())))
{
+ throw new AssertionError("Array element type for " +
recordField.getFieldName()
+ + " is not of expected type " +
expectedTypes.get(recordField.getFieldName()).toString());
+ }
Review comment:
Actually, a simple `assertEquals` does the job. I overcomplicated it,
but now it is fixed. Thanks!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]