This is an automated email from the ASF dual-hosted git repository.
joewitt pushed a commit to branch support/nifi-1.9.x
in repository https://gitbox.apache.org/repos/asf/nifi.git
commit 3ab55b6dce6c2a533ab27b47ce171305c408fe11
Author: Bryan Bende <bbende@apache.org>
AuthorDate: Thu Feb 21 16:58:03 2019 -0500
NIFI-6069 Fixing fingerprinting of connection relationships to be properly sorted
This closes #3325.
Signed-off-by: Mark Payne <markap14@hotmail.com>
---
.../nifi/fingerprint/FingerprintFactory.java | 33 +---------------
.../nifi/fingerprint/FingerprintFactoryTest.java | 44 +++++++++++++---------
.../flow-connection-with-multiple-rels.xml | 40 ++++++++++++++++++++
3 files changed, 68 insertions(+), 49 deletions(-)
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
index 999a42d..e873af8 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/fingerprint/FingerprintFactory.java
@@ -614,7 +614,7 @@ public class FingerprintFactory {
// relationships
final NodeList relationshipElems = DomUtils.getChildNodesByTagName(connectionElem,
"relationship");
- final List<Element> sortedRelationshipElems = sortElements(relationshipElems,
getConnectionRelationshipsComparator());
+ final List<Element> sortedRelationshipElems = sortElements(relationshipElems,
getElementTextComparator());
for (final Element relationshipElem : sortedRelationshipElems) {
builder.append(getValue(relationshipElem, NO_VALUE));
}
@@ -766,36 +766,7 @@ public class FingerprintFactory {
}
};
}
-
- private Comparator<Element> getConnectionRelationshipsComparator() {
- return getSingleChildComparator("relationship");
- }
-
- private Comparator<Element> getSingleChildComparator(final String childElementName)
{
- return new Comparator<Element>() {
- @Override
- public int compare(final Element e1, final Element e2) {
- if (e2 == null) {
- return -1;
- } else if (e1 == null) {
- return 1;
- }
-
- // compare using processor ids
- final String e1Id = getFirstValue(DomUtils.getChildNodesByTagName(e1, childElementName));
- if (e1Id == null) {
- return 1;
- }
- final String e2Id = getFirstValue(DomUtils.getChildNodesByTagName(e2, childElementName));
- if (e2Id == null) {
- return -1;
- }
-
- return e1Id.compareTo(e2Id);
- }
- };
- }
-
+
private Comparator<Element> getElementTextComparator() {
return new Comparator<Element>() {
@Override
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/fingerprint/FingerprintFactoryTest.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/fingerprint/FingerprintFactoryTest.java
index 09acbc9..befe332 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/fingerprint/FingerprintFactoryTest.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/fingerprint/FingerprintFactoryTest.java
@@ -16,24 +16,6 @@
*/
package org.apache.nifi.fingerprint;
-import static org.apache.nifi.controller.serialization.ScheduledStateLookup.IDENTITY_LOOKUP;
-import static org.apache.nifi.fingerprint.FingerprintFactory.FLOW_CONFIG_XSD;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import java.util.Optional;
-
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.nifi.connectable.Position;
@@ -55,6 +37,25 @@ import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.Optional;
+
+import static org.apache.nifi.controller.serialization.ScheduledStateLookup.IDENTITY_LOOKUP;
+import static org.apache.nifi.fingerprint.FingerprintFactory.FLOW_CONFIG_XSD;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
/**
*/
public class FingerprintFactoryTest {
@@ -125,6 +126,13 @@ public class FingerprintFactoryTest {
}
@Test
+ public void testConnectionWithMultipleRelationshipsSortedInFingerprint() throws IOException
{
+ final String fingerprint = fingerprinter.createFingerprint(getResourceBytes("/nifi/fingerprint/flow-connection-with-multiple-rels.xml"),
null);
+ assertNotNull(fingerprint);
+ assertTrue(fingerprint.contains("AAABBBCCCDDD"));
+ }
+
+ @Test
public void testSchemaValidation() throws IOException {
FingerprintFactory fp = new FingerprintFactory(null, getValidatingDocumentBuilder(),
extensionManager);
final String fingerprint = fp.createFingerprint(getResourceBytes("/nifi/fingerprint/validating-flow.xml"),
null);
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/nifi/fingerprint/flow-connection-with-multiple-rels.xml
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/nifi/fingerprint/flow-connection-with-multiple-rels.xml
new file mode 100644
index 0000000..45bc5e7
--- /dev/null
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/nifi/fingerprint/flow-connection-with-multiple-rels.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<flowController>
+ <maxThreadCount>15</maxThreadCount>
+ <rootGroup>
+ <connection>
+ <id>5bd05300-f03d-4511-a13f-6a36afe2bcc5</id>
+ <name/>
+ <bendPoints/>
+ <labelIndex>1</labelIndex>
+ <zIndex>0</zIndex>
+ <style/>
+ <sourceId>a65695bb-a938-4d3d-bf5d-f70a335268ec</sourceId>
+ <sourceGroupId>efeece05-3934-4298-a725-658eec116470</sourceGroupId>
+ <sourceType>OUTPUT_PORT</sourceType>
+ <destinationId>e520797a-dddb-4930-9034-2092d3e816a6</destinationId>
+ <destinationGroupId>e3909250-331d-420b-a9b3-cc54ad459401</destinationGroupId>
+ <destinationType>PROCESSOR</destinationType>
+ <relationship>CCC</relationship>
+ <relationship>BBB</relationship>
+ <relationship>DDD</relationship>
+ <relationship>AAA</relationship>
+ <maxWorkQueueSize>0</maxWorkQueueSize>
+ <flowFileExpiration>0 s</flowFileExpiration>
+ </connection>
+ </rootGroup>
+</flowController>
|