You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2015/01/26 15:16:20 UTC
[04/47] incubator-nifi git commit: NIFI-268: Fail any unit test that
uses a Processor that uses deprecated annotations
NIFI-268: Fail any unit test that uses a Processor that uses deprecated annotations
Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/29b3ad89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/29b3ad89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/29b3ad89
Branch: refs/heads/develop
Commit: 29b3ad89a46b6301e28e158e37edfe0bee808978
Parents: 1c0eb6c
Author: Mark Payne <ma...@hotmail.com>
Authored: Thu Jan 15 15:15:24 2015 -0500
Committer: Mark Payne <ma...@hotmail.com>
Committed: Fri Jan 16 12:05:32 2015 -0500
----------------------------------------------------------------------
.../util/TestStandardProcessorTestRunner.java | 86 ++++++++++++++++++++
.../apache/nifi/util/MockProcessSession.java | 1 -
.../nifi/util/StandardProcessorTestRunner.java | 63 ++++++++++++--
3 files changed, 142 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/29b3ad89/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
----------------------------------------------------------------------
diff --git a/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java b/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
new file mode 100644
index 0000000..37bcf23
--- /dev/null
+++ b/nifi-mock/src/test/java/org/apache/nifi/util/TestStandardProcessorTestRunner.java
@@ -0,0 +1,86 @@
+/*
+ * 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.
+ */
+package org.apache.nifi.util;
+
+import org.apache.nifi.processor.AbstractProcessor;
+import org.apache.nifi.processor.ProcessContext;
+import org.apache.nifi.processor.ProcessSession;
+import org.apache.nifi.processor.exception.ProcessException;
+import org.junit.Test;
+
+public class TestStandardProcessorTestRunner {
+
+ @Test(expected=AssertionError.class)
+ public void testFailOnDeprecatedTypeAnnotation() {
+ new StandardProcessorTestRunner(new DeprecatedAnnotation());
+ }
+
+ @Test
+ public void testDoesNotFailOnNonDeprecatedTypeAnnotation() {
+ new StandardProcessorTestRunner(new NewAnnotation());
+ }
+
+ @Test(expected=AssertionError.class)
+ public void testFailOnDeprecatedMethodAnnotation() {
+ new StandardProcessorTestRunner(new DeprecatedMethodAnnotation());
+ }
+
+ @Test
+ public void testDoesNotFailOnNonDeprecatedMethodAnnotation() {
+ new StandardProcessorTestRunner(new NewMethodAnnotation());
+ }
+
+
+
+ @SuppressWarnings("deprecation")
+ @org.apache.nifi.processor.annotation.Tags({"deprecated"})
+ private static class DeprecatedAnnotation extends AbstractProcessor {
+ @Override
+ public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+ }
+ }
+
+ @org.apache.nifi.annotation.documentation.Tags({"deprecated"})
+ private static class NewAnnotation extends AbstractProcessor {
+ @Override
+ public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+ }
+ }
+
+ private static class NewMethodAnnotation extends AbstractProcessor {
+ @org.apache.nifi.annotation.lifecycle.OnScheduled
+ public void dummy() {
+
+ }
+
+ @Override
+ public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+ }
+ }
+
+ private static class DeprecatedMethodAnnotation extends AbstractProcessor {
+ @SuppressWarnings("deprecation")
+ @org.apache.nifi.processor.annotation.OnScheduled
+ public void dummy() {
+
+ }
+
+ @Override
+ public void onTrigger(ProcessContext context, ProcessSession session) throws ProcessException {
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/29b3ad89/nifi/nifi-mock/src/main/java/org/apache/nifi/util/MockProcessSession.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-mock/src/main/java/org/apache/nifi/util/MockProcessSession.java b/nifi/nifi-mock/src/main/java/org/apache/nifi/util/MockProcessSession.java
index ea55b34..83c75c6 100644
--- a/nifi/nifi-mock/src/main/java/org/apache/nifi/util/MockProcessSession.java
+++ b/nifi/nifi-mock/src/main/java/org/apache/nifi/util/MockProcessSession.java
@@ -786,7 +786,6 @@ public class MockProcessSession implements ProcessSession {
* @param sources
*/
private FlowFile inheritAttributes(final Collection<FlowFile> sources, final FlowFile destination) {
- final String uuid = destination.getAttribute(CoreAttributes.UUID.key());
final StringBuilder parentUuidBuilder = new StringBuilder();
int uuidsCaptured = 0;
for (final FlowFile source : sources) {
http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/29b3ad89/nifi/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java b/nifi/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
index 40d5035..d0ecd52 100644
--- a/nifi/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
+++ b/nifi/nifi-mock/src/main/java/org/apache/nifi/util/StandardProcessorTestRunner.java
@@ -21,7 +21,9 @@ import static java.util.Objects.requireNonNull;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -39,6 +41,12 @@ import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import org.apache.nifi.annotation.behavior.TriggerSerially;
+import org.apache.nifi.annotation.lifecycle.OnAdded;
+import org.apache.nifi.annotation.lifecycle.OnScheduled;
+import org.apache.nifi.annotation.lifecycle.OnShutdown;
+import org.apache.nifi.annotation.lifecycle.OnStopped;
+import org.apache.nifi.annotation.lifecycle.OnUnscheduled;
import org.apache.nifi.components.AllowableValue;
import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.components.ValidationResult;
@@ -50,15 +58,8 @@ import org.apache.nifi.processor.ProcessSessionFactory;
import org.apache.nifi.processor.Processor;
import org.apache.nifi.processor.QueueSize;
import org.apache.nifi.processor.Relationship;
-import org.apache.nifi.processor.annotation.OnAdded;
-import org.apache.nifi.processor.annotation.OnScheduled;
-import org.apache.nifi.processor.annotation.OnShutdown;
-import org.apache.nifi.processor.annotation.OnStopped;
-import org.apache.nifi.processor.annotation.OnUnscheduled;
-import org.apache.nifi.processor.annotation.TriggerSerially;
import org.apache.nifi.provenance.ProvenanceReporter;
import org.apache.nifi.reporting.InitializationException;
-
import org.junit.Assert;
public class StandardProcessorTestRunner implements TestRunner {
@@ -74,6 +75,16 @@ public class StandardProcessorTestRunner implements TestRunner {
private int numThreads = 1;
private final AtomicInteger invocations = new AtomicInteger(0);
+ private static final Set<Class<? extends Annotation>> deprecatedTypeAnnotations = new HashSet<>();
+ private static final Set<Class<? extends Annotation>> deprecatedMethodAnnotations = new HashSet<>();
+
+ static {
+ // do this in a separate method, just so that we can add a @SuppressWarnings annotation
+ // because we want to indicate explicitly that we know that we are using deprecated
+ // classes here.
+ populateDeprecatedMethods();
+ }
+
StandardProcessorTestRunner(final Processor processor) {
this.processor = processor;
this.idGenerator = new AtomicLong(0L);
@@ -82,6 +93,8 @@ public class StandardProcessorTestRunner implements TestRunner {
this.sessionFactory = new MockSessionFactory(sharedState);
this.context = new MockProcessContext(processor);
+ detectDeprecatedAnnotations(processor);
+
final MockProcessorInitializationContext mockInitContext = new MockProcessorInitializationContext(processor, context);
processor.initialize(mockInitContext);
@@ -94,6 +107,42 @@ public class StandardProcessorTestRunner implements TestRunner {
triggerSerially = null != processor.getClass().getAnnotation(TriggerSerially.class);
}
+ @SuppressWarnings("deprecation")
+ private static void populateDeprecatedMethods() {
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.CapabilityDescription.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.EventDriven.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.SideEffectFree.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.SupportsBatching.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.Tags.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.TriggerWhenEmpty.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.TriggerWhenAnyDestinationAvailable.class);
+ deprecatedTypeAnnotations.add(org.apache.nifi.processor.annotation.TriggerSerially.class);
+
+ deprecatedMethodAnnotations.add(org.apache.nifi.processor.annotation.OnRemoved.class);
+ deprecatedMethodAnnotations.add(org.apache.nifi.processor.annotation.OnAdded.class);
+ deprecatedMethodAnnotations.add(org.apache.nifi.processor.annotation.OnScheduled.class);
+ deprecatedMethodAnnotations.add(org.apache.nifi.processor.annotation.OnShutdown.class);
+ deprecatedMethodAnnotations.add(org.apache.nifi.processor.annotation.OnStopped.class);
+ deprecatedMethodAnnotations.add(org.apache.nifi.processor.annotation.OnUnscheduled.class);
+ }
+
+ private static void detectDeprecatedAnnotations(final Processor processor) {
+ for ( final Class<? extends Annotation> annotationClass : deprecatedTypeAnnotations ) {
+ if ( processor.getClass().isAnnotationPresent(annotationClass) ) {
+ Assert.fail("Processor is using deprecated Annotation " + annotationClass.getCanonicalName());
+ }
+ }
+
+ for ( final Class<? extends Annotation> annotationClass : deprecatedMethodAnnotations ) {
+ for ( final Method method : processor.getClass().getMethods() ) {
+ if ( method.isAnnotationPresent(annotationClass) ) {
+ Assert.fail("Processor is using deprecated Annotation " + annotationClass.getCanonicalName() + " for method " + method);
+ }
+ }
+ }
+
+ }
+
@Override
public void setValidateExpressionUsage(final boolean validate) {
context.setValidateExpressionUsage(validate);