NIFI-424
Processors / Controller Services should not be able to directly call 
ControllerService.initialize and ControllerService.onPropertyModified


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/ac409fd6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/ac409fd6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/ac409fd6

Branch: refs/heads/NIFI-250
Commit: ac409fd69aefedbfa72f90d1647da4309cf46dfc
Parents: 3a27c37
Author: Brandon DeVries <[email protected]>
Authored: Mon Mar 30 12:11:15 2015 -0400
Committer: Brandon DeVries <[email protected]>
Committed: Mon Mar 30 12:11:15 2015 -0400

----------------------------------------------------------------------
 .../StandardControllerServiceProvider.java      |  6 ++
 .../StandardControllerServiceProviderTest.java  | 71 ++++++++++++++++++++
 .../service/util/TestControllerService.java     | 61 +++++++++++++++++
 ...org.apache.nifi.controller.ControllerService | 15 +++++
 4 files changed, 153 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ac409fd6/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/service/StandardControllerServiceProvider.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/service/StandardControllerServiceProvider.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/service/StandardControllerServiceProvider.java
index a40e43e..7a8e22f 100644
--- 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/service/StandardControllerServiceProvider.java
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/service/StandardControllerServiceProvider.java
@@ -117,6 +117,12 @@ public class StandardControllerServiceProvider implements 
ControllerServiceProvi
             final InvocationHandler invocationHandler = new 
InvocationHandler() {
                 @Override
                 public Object invoke(final Object proxy, final Method method, 
final Object[] args) throws Throwable {
+
+                       final String methodName = method.getName();
+                       if("initialize".equals(methodName) || 
"onPropertyModified".equals(methodName)){
+                               throw new UnsupportedOperationException(method 
+ " may only be invoked by the NiFi framework");
+                       }
+                       
                     final ControllerServiceNode node = serviceNodeHolder.get();
                     if (node.isDisabled() && 
!validDisabledMethods.contains(method)) {
                         // Use nar class loader here because we are implicitly 
calling toString() on the original implementation.

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ac409fd6/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/StandardControllerServiceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/StandardControllerServiceProviderTest.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/StandardControllerServiceProviderTest.java
new file mode 100644
index 0000000..b889bc8
--- /dev/null
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/StandardControllerServiceProviderTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.controller.service;
+
+import org.apache.nifi.controller.ControllerService;
+import org.apache.nifi.controller.StandardFlowServiceTest;
+import org.apache.nifi.nar.ExtensionManager;
+import org.apache.nifi.nar.NarClassLoaders;
+import org.apache.nifi.reporting.InitializationException;
+import org.apache.nifi.util.NiFiProperties;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class StandardControllerServiceProviderTest {
+       
+    private ControllerService proxied;
+    private ControllerService implementation;
+    
+    @BeforeClass
+    public static void setupSuite() throws Exception {
+        System.setProperty(NiFiProperties.PROPERTIES_FILE_PATH, 
StandardFlowServiceTest.class.getResource("/conf/nifi.properties").getFile());
+        NiFiProperties properties = NiFiProperties.getInstance();
+        NarClassLoaders.load(properties);
+       ExtensionManager.discoverExtensions();
+    }
+
+    @Before
+    public void setup() throws Exception {
+       String id = "id";
+       String clazz = 
"org.apache.nifi.controller.service.util.TestControllerService";  
+       ControllerServiceProvider provider = new 
StandardControllerServiceProvider();
+       ControllerServiceNode node = 
provider.createControllerService(clazz,id,true);
+       proxied = node.getProxiedControllerService();
+       implementation = node.getControllerServiceImplementation();
+    }
+       
+    @Test (expected=UnsupportedOperationException.class)
+    public void testCallProxiedOnPropertyModified() {  
+               proxied.onPropertyModified(null, "oldValue", "newValue");
+    }
+    
+    @Test
+    public void testCallImplementationOnPropertyModified() {   
+       implementation.onPropertyModified(null, "oldValue", "newValue");
+    }
+    
+    @Test (expected=UnsupportedOperationException.class)
+    public void testCallProxiedInitialized() throws InitializationException {  
+               proxied.initialize(null);
+    }
+    
+    @Test
+    public void testCallImplementationInitialized() throws 
InitializationException {   
+       implementation.initialize(null);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ac409fd6/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/util/TestControllerService.java
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/util/TestControllerService.java
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/util/TestControllerService.java
new file mode 100644
index 0000000..95200a0
--- /dev/null
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/java/org/apache/nifi/controller/service/util/TestControllerService.java
@@ -0,0 +1,61 @@
+/*
+ * 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.controller.service.util;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.components.ValidationContext;
+import org.apache.nifi.components.ValidationResult;
+import org.apache.nifi.controller.ControllerService;
+import org.apache.nifi.controller.ControllerServiceInitializationContext;
+import org.apache.nifi.reporting.InitializationException;
+
+public class TestControllerService implements ControllerService {
+
+       @Override
+       public Collection<ValidationResult> validate(ValidationContext context) 
{
+               return null;
+       }
+
+       @Override
+       public PropertyDescriptor getPropertyDescriptor(String name) {
+               return null;
+       }
+
+       @Override
+       public void onPropertyModified(PropertyDescriptor descriptor,
+                       String oldValue, String newValue) {
+       }
+
+       @Override
+       public List<PropertyDescriptor> getPropertyDescriptors() {
+               return null;
+       }
+
+       @Override
+       public String getIdentifier() {
+               return null;
+       }
+
+       @Override
+       public void initialize(ControllerServiceInitializationContext context)
+                       throws InitializationException {
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ac409fd6/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/META-INF/services/org.apache.nifi.controller.ControllerService
----------------------------------------------------------------------
diff --git 
a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/META-INF/services/org.apache.nifi.controller.ControllerService
 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/META-INF/services/org.apache.nifi.controller.ControllerService
new file mode 100644
index 0000000..bd6a4f3
--- /dev/null
+++ 
b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/test/resources/META-INF/services/org.apache.nifi.controller.ControllerService
@@ -0,0 +1,15 @@
+# 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.
+org.apache.nifi.controller.service.util.TestControllerService

Reply via email to