You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by GitBox <gi...@apache.org> on 2022/06/22 19:20:55 UTC

[GitHub] [nifi] bejancsaba commented on a diff in pull request #6146: NIFI-10153 Refactor DocGeneratorTest and remove binary test files

bejancsaba commented on code in PR #6146:
URL: https://github.com/apache/nifi/pull/6146#discussion_r904144871


##########
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java:
##########
@@ -19,100 +19,87 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.nifi.bundle.Bundle;
 import org.apache.nifi.bundle.BundleCoordinate;
-import org.apache.nifi.nar.ExtensionDiscoveringManager;
+import org.apache.nifi.bundle.BundleDetails;
+import org.apache.nifi.documentation.example.ProcessorWithLogger;
+import org.apache.nifi.nar.ExtensionDefinition;
+import org.apache.nifi.nar.ExtensionManager;
 import org.apache.nifi.nar.ExtensionMapping;
-import org.apache.nifi.nar.NarClassLoadersHolder;
-import org.apache.nifi.nar.NarUnpacker;
-import org.apache.nifi.nar.StandardExtensionDiscoveringManager;
-import org.apache.nifi.nar.SystemBundle;
+import org.apache.nifi.processor.Processor;
 import org.apache.nifi.util.NiFiProperties;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.io.TempDir;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Properties;
 import java.util.Set;
 
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
 public class DocGeneratorTest {
+    private static final Class<ProcessorWithLogger> PROCESSOR_CLASS = ProcessorWithLogger.class;
+
+    private static final String[] HTML_EXTENSIONS = new String[]{"html"};
+
+    private static final boolean RECURSIVE_ENABLED = true;
+
+    @Mock
+    ExtensionManager extensionManager;
 
     @Test
-    public void testProcessorLoadsNarResources() throws IOException, ClassNotFoundException {
-        TemporaryFolder temporaryFolder = new TemporaryFolder();
-        temporaryFolder.create();
-
-        NiFiProperties properties = loadSpecifiedProperties("/conf/nifi.properties",
-                NiFiProperties.COMPONENT_DOCS_DIRECTORY,
-                temporaryFolder.getRoot().getAbsolutePath());
-
-        final Bundle systemBundle = SystemBundle.create(properties);
-        final ExtensionMapping mapping = NarUnpacker.unpackNars(properties, systemBundle);
-
-        NarClassLoadersHolder.getInstance().init(properties.getFrameworkWorkingDirectory(), properties.getExtensionsWorkingDirectory());
-
-        final ExtensionDiscoveringManager extensionManager = new StandardExtensionDiscoveringManager();
-        extensionManager.discoverExtensions(systemBundle, NarClassLoadersHolder.getInstance().getBundles());
-
-        DocGenerator.generate(properties, extensionManager, mapping);
-
-        final String extensionClassName = "org.apache.nifi.processors.WriteResourceToStream";
-        final BundleCoordinate coordinate = mapping.getProcessorNames().get(extensionClassName).stream().findFirst().get();
-        final String path = coordinate.getGroup() + "/" + coordinate.getId() + "/" + coordinate.getVersion() + "/" + extensionClassName;
-        File processorDirectory = new File(temporaryFolder.getRoot(), path);
-        File indexHtml = new File(processorDirectory, "index.html");
-        Assert.assertTrue(indexHtml + " should have been generated", indexHtml.exists());
-        String generatedHtml = FileUtils.readFileToString(indexHtml, Charset.defaultCharset());
-        Assert.assertNotNull(generatedHtml);
-        Assert.assertTrue(generatedHtml.contains("This example processor loads a resource from the nar and writes it to the FlowFile content"));
-        Assert.assertTrue(generatedHtml.contains("files that were successfully processed"));
-        Assert.assertTrue(generatedHtml.contains("files that were not successfully processed"));
-        Assert.assertTrue(generatedHtml.contains("resources"));
+    void testGenerateExtensionsNotFound(@TempDir final File workingDirectory) {
+        final NiFiProperties properties = getProperties(workingDirectory);
+        final ExtensionMapping extensionMapping = new ExtensionMapping();
+
+        DocGenerator.generate(properties, extensionManager, extensionMapping);
+
+        final Collection<File> files = FileUtils.listFiles(workingDirectory, HTML_EXTENSIONS, RECURSIVE_ENABLED);
+        assertTrue(files.isEmpty());
+    }
+
+    @Test
+    void testGenerateProcessor(@TempDir final File workingDirectory) throws IOException {
+        final NiFiProperties properties = getProperties(workingDirectory);
+        final ExtensionMapping extensionMapping = new ExtensionMapping();
+
+        final BundleCoordinate bundleCoordinate = BundleCoordinate.UNKNOWN_COORDINATE;
+        final BundleDetails bundleDetails = new BundleDetails.Builder().workingDir(workingDirectory).coordinate(bundleCoordinate).build();
+        final Bundle bundle = new Bundle(bundleDetails, getClass().getClassLoader());
+        final ExtensionDefinition definition = new ExtensionDefinition(PROCESSOR_CLASS.getName(), bundle, Processor.class);
+        final Set<ExtensionDefinition> extensions = Collections.singleton(definition);
+        when(extensionManager.getExtensions(eq(Processor.class))).thenReturn(extensions);
+        doReturn(PROCESSOR_CLASS).when(extensionManager).getClass(eq(definition));
+
+        final Processor processor = new ProcessorWithLogger();
+        when(extensionManager.getTempComponent(eq(PROCESSOR_CLASS.getName()), eq(bundleCoordinate))).thenReturn(processor);

Review Comment:
   As you don't really need the processor you could just simply do Mockito.mock(ProcessorWithLogger.class) at return.



##########
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-documentation/src/test/java/org/apache/nifi/documentation/DocGeneratorTest.java:
##########
@@ -19,100 +19,87 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.nifi.bundle.Bundle;
 import org.apache.nifi.bundle.BundleCoordinate;
-import org.apache.nifi.nar.ExtensionDiscoveringManager;
+import org.apache.nifi.bundle.BundleDetails;
+import org.apache.nifi.documentation.example.ProcessorWithLogger;
+import org.apache.nifi.nar.ExtensionDefinition;
+import org.apache.nifi.nar.ExtensionManager;
 import org.apache.nifi.nar.ExtensionMapping;
-import org.apache.nifi.nar.NarClassLoadersHolder;
-import org.apache.nifi.nar.NarUnpacker;
-import org.apache.nifi.nar.StandardExtensionDiscoveringManager;
-import org.apache.nifi.nar.SystemBundle;
+import org.apache.nifi.processor.Processor;
 import org.apache.nifi.util.NiFiProperties;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.io.TempDir;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Properties;
 import java.util.Set;
 
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
 public class DocGeneratorTest {
+    private static final Class<ProcessorWithLogger> PROCESSOR_CLASS = ProcessorWithLogger.class;
+
+    private static final String[] HTML_EXTENSIONS = new String[]{"html"};
+
+    private static final boolean RECURSIVE_ENABLED = true;
+
+    @Mock
+    ExtensionManager extensionManager;
 
     @Test
-    public void testProcessorLoadsNarResources() throws IOException, ClassNotFoundException {
-        TemporaryFolder temporaryFolder = new TemporaryFolder();
-        temporaryFolder.create();
-
-        NiFiProperties properties = loadSpecifiedProperties("/conf/nifi.properties",
-                NiFiProperties.COMPONENT_DOCS_DIRECTORY,
-                temporaryFolder.getRoot().getAbsolutePath());
-
-        final Bundle systemBundle = SystemBundle.create(properties);
-        final ExtensionMapping mapping = NarUnpacker.unpackNars(properties, systemBundle);
-
-        NarClassLoadersHolder.getInstance().init(properties.getFrameworkWorkingDirectory(), properties.getExtensionsWorkingDirectory());
-
-        final ExtensionDiscoveringManager extensionManager = new StandardExtensionDiscoveringManager();
-        extensionManager.discoverExtensions(systemBundle, NarClassLoadersHolder.getInstance().getBundles());
-
-        DocGenerator.generate(properties, extensionManager, mapping);
-
-        final String extensionClassName = "org.apache.nifi.processors.WriteResourceToStream";
-        final BundleCoordinate coordinate = mapping.getProcessorNames().get(extensionClassName).stream().findFirst().get();
-        final String path = coordinate.getGroup() + "/" + coordinate.getId() + "/" + coordinate.getVersion() + "/" + extensionClassName;
-        File processorDirectory = new File(temporaryFolder.getRoot(), path);
-        File indexHtml = new File(processorDirectory, "index.html");
-        Assert.assertTrue(indexHtml + " should have been generated", indexHtml.exists());
-        String generatedHtml = FileUtils.readFileToString(indexHtml, Charset.defaultCharset());
-        Assert.assertNotNull(generatedHtml);
-        Assert.assertTrue(generatedHtml.contains("This example processor loads a resource from the nar and writes it to the FlowFile content"));
-        Assert.assertTrue(generatedHtml.contains("files that were successfully processed"));
-        Assert.assertTrue(generatedHtml.contains("files that were not successfully processed"));
-        Assert.assertTrue(generatedHtml.contains("resources"));
+    void testGenerateExtensionsNotFound(@TempDir final File workingDirectory) {
+        final NiFiProperties properties = getProperties(workingDirectory);
+        final ExtensionMapping extensionMapping = new ExtensionMapping();
+
+        DocGenerator.generate(properties, extensionManager, extensionMapping);
+
+        final Collection<File> files = FileUtils.listFiles(workingDirectory, HTML_EXTENSIONS, RECURSIVE_ENABLED);
+        assertTrue(files.isEmpty());
+    }
+
+    @Test
+    void testGenerateProcessor(@TempDir final File workingDirectory) throws IOException {
+        final NiFiProperties properties = getProperties(workingDirectory);
+        final ExtensionMapping extensionMapping = new ExtensionMapping();
+
+        final BundleCoordinate bundleCoordinate = BundleCoordinate.UNKNOWN_COORDINATE;
+        final BundleDetails bundleDetails = new BundleDetails.Builder().workingDir(workingDirectory).coordinate(bundleCoordinate).build();
+        final Bundle bundle = new Bundle(bundleDetails, getClass().getClassLoader());
+        final ExtensionDefinition definition = new ExtensionDefinition(PROCESSOR_CLASS.getName(), bundle, Processor.class);
+        final Set<ExtensionDefinition> extensions = Collections.singleton(definition);
+        when(extensionManager.getExtensions(eq(Processor.class))).thenReturn(extensions);
+        doReturn(PROCESSOR_CLASS).when(extensionManager).getClass(eq(definition));
+
+        final Processor processor = new ProcessorWithLogger();
+        when(extensionManager.getTempComponent(eq(PROCESSOR_CLASS.getName()), eq(bundleCoordinate))).thenReturn(processor);
+
+        DocGenerator.generate(properties, extensionManager, extensionMapping);
+
+        final Collection<File> files = FileUtils.listFiles(workingDirectory, HTML_EXTENSIONS, RECURSIVE_ENABLED);
+        assertFalse(files.isEmpty());
+
+        final File file = files.iterator().next();
+        final byte[] bytes = Files.readAllBytes(file.toPath());

Review Comment:
   Can you use Files.readString? It is basically the same you can save a few lines :)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@nifi.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org