[
https://issues.apache.org/jira/browse/NIFI-210?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15117439#comment-15117439
]
ASF GitHub Bot commented on NIFI-210:
-------------------------------------
Github user markap14 commented on a diff in the pull request:
https://github.com/apache/nifi/pull/185#discussion_r50853235
--- Diff:
nifi-nar-bundles/nifi-scripting-bundle/nifi-scripting-processors/src/test/java/org/apache/nifi/processors/script/TestInvokeGroovy.java
---
@@ -0,0 +1,280 @@
+/*
+ * 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.processors.script;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.processor.Relationship;
+import org.apache.nifi.util.MockFlowFile;
+import org.apache.nifi.util.MockProcessContext;
+import org.apache.nifi.util.MockProcessorInitializationContext;
+import org.apache.nifi.util.TestRunner;
+import org.apache.nifi.util.TestRunners;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class TestInvokeGroovy {
+
+ private TestRunner runner;
+
+ /**
+ * Copies all scripts to the target directory because when they are
compiled they can leave unwanted .class files.
+ *
+ * @throws Exception Any error encountered while testing
+ */
+ @BeforeClass
+ public static void setupBeforeClass() throws Exception {
+ FileUtils.copyDirectory(new File("src/test/resources"), new
File("target/test/resources"));
+ }
+
+ @Before
+ public void setup() throws Exception {
+ final InvokeScriptProcessor invokeScriptProcessor = new
InvokeScriptProcessor();
+ // Need to do something to initialize the properties, like
retrieve the list of properties
+
assertNotNull(invokeScriptProcessor.getSupportedPropertyDescriptors());
+ runner = TestRunners.newTestRunner(invokeScriptProcessor);
+ }
+
+ /**
+ * Tests a script that has a Groovy Processor that that reads the
first line of text from the flowfiles content and stores the value in an
attribute of the outgoing flowfile.
+ *
+ * @throws Exception Any error encountered while testing
+ */
+ @Test
+ public void testReadFlowFileContentAndStoreInFlowFileAttribute()
throws Exception {
+ runner.setValidateExpressionUsage(false);
+ runner.setProperty(InvokeScriptProcessor.SCRIPT_ENGINE, "Groovy");
+ runner.setProperty(InvokeScriptProcessor.SCRIPT_FILE,
"target/test/resources/groovy/test_reader.groovy");
+ runner.setProperty(InvokeScriptProcessor.MODULES,
"target/test/resources/groovy");
+
+ runner.assertValid();
+ runner.enqueue("test content".getBytes(StandardCharsets.UTF_8));
+ runner.run();
+
+ runner.assertAllFlowFilesTransferred("success", 1);
+ final List<MockFlowFile> result =
runner.getFlowFilesForRelationship("success");
+ result.get(0).assertAttributeEquals("from-content", "test
content");
+ }
+
+ /**
+ * Tests a script that has a Groovy Processor that that reads the
first line of text from the flowfiles content and
+ * stores the value in an attribute of the outgoing flowfile.
+ *
+ * @throws Exception Any error encountered while testing
+ */
+ @Test
+ public void testScriptDefinedAttribute() throws Exception {
+ InvokeScriptProcessor processor = new InvokeScriptProcessor();
+ MockProcessContext context = new MockProcessContext(processor);
+ MockProcessorInitializationContext initContext = new
MockProcessorInitializationContext(processor, context);
+
+ processor.initialize(initContext);
+
+ context.setProperty(InvokeScriptProcessor.SCRIPT_ENGINE, "Groovy");
+ context.setProperty(InvokeScriptProcessor.SCRIPT_FILE,
"target/test/resources/groovy/test_reader.groovy");
+ context.setProperty(InvokeScriptProcessor.MODULES,
"target/test/resources/groovy");
+
+ processor.setup(context);
+
+ List<PropertyDescriptor> descriptors =
processor.getSupportedPropertyDescriptors();
+ assertNotNull(descriptors);
+ assertTrue(descriptors.size() > 0);
+ boolean found = false;
+ for (PropertyDescriptor descriptor : descriptors) {
+ if (descriptor.getName().equals("test-attribute")) {
+ found = true;
+ break;
+ }
+ }
+ assertTrue(found);
+ }
+
+ /**
+ * Tests a script that has a Groovy Processor that that reads the
first line of text from the flowfiles content and
+ * stores the value in an attribute of the outgoing flowfile.
+ *
+ * @throws Exception Any error encountered while testing
+ */
+ @Test
+ public void testScriptDefinedRelationship() throws Exception {
+ InvokeScriptProcessor processor = new InvokeScriptProcessor();
+ MockProcessContext context = new MockProcessContext(processor);
+ MockProcessorInitializationContext initContext = new
MockProcessorInitializationContext(processor, context);
+
+ processor.initialize(initContext);
+
+ context.setProperty(InvokeScriptProcessor.SCRIPT_ENGINE, "Groovy");
+ context.setProperty(InvokeScriptProcessor.SCRIPT_FILE,
"target/test/resources/groovy/test_reader.groovy");
+
+ processor.setup(context);
+
+ Set<Relationship> relationships = processor.getRelationships();
+ assertNotNull(relationships);
+ assertTrue(relationships.size() > 0);
+ boolean found = false;
+ for (Relationship relationship : relationships) {
+ if (relationship.getName().equals("test")) {
+ found = true;
+ break;
+ }
+ }
+ assertTrue(found);
+ }
+
+ /**
+ * Tests a script that throws a ProcessException within. The expected
result is that the exception will be
+ * propagated
+ *
+ * @throws Exception Any error encountered while testing
+ */
+ @Test(expected = AssertionError.class)
+ public void testScriptException() throws Exception {
+ String scriptBody = "class GroovyProcessor implements Processor
{\n" +
--- End diff --
I think we should probably move all of this into a file under
src/test/resources and then read it in, in the unit test. I think it keeps the
code a lot cleaner this way.
> Provide an ExecuteScript processor
> ----------------------------------
>
> Key: NIFI-210
> URL: https://issues.apache.org/jira/browse/NIFI-210
> Project: Apache NiFi
> Issue Type: Improvement
> Components: Core Framework
> Affects Versions: 0.0.1
> Reporter: A. Steven Anderson
> Assignee: Matt Burgess
> Labels: processor, scala
> Fix For: 0.5.0
>
> Attachments:
> 0001-NIFI-210-few-tweaks-to-drop-static-reference-and-fix.patch
>
>
> Add latest Scala version support for ExcecuteScript processor.
> Should also support Clojure as per discussion and request on mailing list
> http://mail-archives.apache.org/mod_mbox/nifi-dev/201506.mbox/%3CCAMpSqch4GK1gnw6M1u8tH6AN8e_miXZN5SNkAeMjBujXYGqJiw%40mail.gmail.com%3E
> UPDATE: The ScriptEngine for Clojure is not being maintained and is not
> currently available via Maven Central or a public repository. Recommend
> adding Clojure as a separate Improvement Jira case.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)