You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by "Xinyu Wu (Jira)" <ji...@apache.org> on 2022/04/25 17:22:00 UTC

[jira] [Updated] (NIFI-9964) TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess failing due to indeterminate map ordering

     [ https://issues.apache.org/jira/browse/NIFI-9964?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Xinyu Wu updated NIFI-9964:
---------------------------
    Description: 
The test `org.apache.nifi.processors.standard.TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess` can fail based on the order of iteration in `HashMap`. 
In line 437 to 441:
```
        final List<RecordField> fields = new ArrayList<>();
        fields.add(new RecordField("favorite", RecordFieldType.STRING.getDataType(), false));
        fields.add(new RecordField("least", RecordFieldType.STRING.getDataType(), true));
        final RecordSchema schema = new SimpleRecordSchema(fields);
        final Record sports = new MapRecord(schema, new HashMap<>());
```
It creates two `RecordField` `favorite` and `least` and adds them into `Record` `sports`. Since `sports` is created by a HashMap, the order of `favorite` and `least` are indeterminate in `sports`. Therefore, in the actual `MockFlowFile` content, the order of "soccer" and "basketball" is also indeterminate.
I found the issue using [NonDex](https://github.com/TestingResearchIllinois/NonDex):
```
mvn install -DskipTests -pl nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors -am
mvn -pl nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors edu.illinois:nondex-maven-plugin:1.1.2:nondex -Dtest=org.apache.nifi.processors.standard.TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess
```
The proposed fix changes the assertion to endure the indeterminacy.


  was:
The test `org.apache.nifi.processors.standard.TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess` can fail based on the order of iteration in `HashMap`. 
In line 437 to 441:
```
        final List<RecordField> fields = new ArrayList<>();
        fields.add(new RecordField("favorite", RecordFieldType.STRING.getDataType(), false));
        fields.add(new RecordField("least", RecordFieldType.STRING.getDataType(), true));
        final RecordSchema schema = new SimpleRecordSchema(fields);
        final Record sports = new MapRecord(schema, new HashMap<>());
```
It creates two ```RecordField``` ```favorite``` and ```least``` and adds them into ```Record``` ```sports```. Since ```sports``` is created by a HashMap, the order of ```favorite``` and ```least``` are indeterminate in ```sports```. Therefore, in the actual ```MockFlowFile``` content, the order of "soccer" and "basketball" is also indeterminate.
I found the issue using [NonDex](https://github.com/TestingResearchIllinois/NonDex):
```
mvn install -DskipTests -pl nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors -am
mvn -pl nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors edu.illinois:nondex-maven-plugin:1.1.2:nondex -Dtest=org.apache.nifi.processors.standard.TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess
```
The proposed fix changes the assertion to endure the indeterminacy.



> TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess failing due to indeterminate map ordering
> ------------------------------------------------------------------------------------------------------
>
>                 Key: NIFI-9964
>                 URL: https://issues.apache.org/jira/browse/NIFI-9964
>             Project: Apache NiFi
>          Issue Type: Bug
>            Reporter: Xinyu Wu
>            Priority: Minor
>
> The test `org.apache.nifi.processors.standard.TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess` can fail based on the order of iteration in `HashMap`. 
> In line 437 to 441:
> ```
>         final List<RecordField> fields = new ArrayList<>();
>         fields.add(new RecordField("favorite", RecordFieldType.STRING.getDataType(), false));
>         fields.add(new RecordField("least", RecordFieldType.STRING.getDataType(), true));
>         final RecordSchema schema = new SimpleRecordSchema(fields);
>         final Record sports = new MapRecord(schema, new HashMap<>());
> ```
> It creates two `RecordField` `favorite` and `least` and adds them into `Record` `sports`. Since `sports` is created by a HashMap, the order of `favorite` and `least` are indeterminate in `sports`. Therefore, in the actual `MockFlowFile` content, the order of "soccer" and "basketball" is also indeterminate.
> I found the issue using [NonDex](https://github.com/TestingResearchIllinois/NonDex):
> ```
> mvn install -DskipTests -pl nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors -am
> mvn -pl nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors edu.illinois:nondex-maven-plugin:1.1.2:nondex -Dtest=org.apache.nifi.processors.standard.TestLookupRecord#testAddFieldsToExistingRecordRouteToSuccess
> ```
> The proposed fix changes the assertion to endure the indeterminacy.



--
This message was sent by Atlassian Jira
(v8.20.7#820007)