NIFI-9081 Updated nifi-framework-api tests to JUnit 5

- Updated nifi-external tests to JUnit 5
- Updated nifi-stateless to use JUnit 5
- Updated nifi-api to use JUnit 5

Signed-off-by: David Handermann <exceptionfactory@apache.org>
diff --git a/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java b/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java
index edeab30..bab58f7 100644
--- a/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java
+++ b/nifi-api/src/test/java/org/apache/nifi/components/TestPropertyDescriptor.java
@@ -20,19 +20,18 @@
 import org.apache.nifi.components.resource.ResourceCardinality;
 import org.apache.nifi.components.resource.ResourceType;
 import org.apache.nifi.expression.ExpressionLanguageScope;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
 import java.util.concurrent.atomic.AtomicReference;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.anyString;
 
 /**
@@ -46,10 +45,7 @@
     private static Builder validDescriptorBuilder;
     private static String DEFAULT_VALUE = "Default Value";
 
-    @Rule
-    public ExpectedException thrown = ExpectedException.none();
-
-    @BeforeClass
+    @BeforeAll
     public static void setUp() {
         validDescriptorBuilder = new PropertyDescriptor.Builder().name("").allowableValues("Allowable Value", "Another Allowable Value").defaultValue("Allowable Value");
         invalidDescriptorBuilder = new PropertyDescriptor.Builder().name("").allowableValues("Allowable Value", "Another Allowable Value").defaultValue(DEFAULT_VALUE);
@@ -57,10 +53,8 @@
 
     @Test
     public void testExceptionThrownByDescriptorWithInvalidDefaultValue() {
-        thrown.expect(IllegalStateException.class);
-        thrown.expectMessage("[" + DEFAULT_VALUE + "]");
-
-        invalidDescriptorBuilder.build();
+        IllegalStateException exception = assertThrows(IllegalStateException.class, () -> invalidDescriptorBuilder.build());
+        assertTrue(exception.getMessage().contains("[" + DEFAULT_VALUE + "]") );
     }
 
     @Test
diff --git a/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferences.java b/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferences.java
index 1ce4f0044..cd05565 100644
--- a/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferences.java
+++ b/nifi-api/src/test/java/org/apache/nifi/components/resource/TestStandardResourceReferences.java
@@ -17,7 +17,7 @@
 
 package org.apache.nifi.components.resource;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -31,8 +31,8 @@
 import java.util.List;
 import java.util.Set;
 
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestStandardResourceReferences {
 
diff --git a/nifi-api/src/test/java/org/apache/nifi/processor/TestDataUnit.java b/nifi-api/src/test/java/org/apache/nifi/processor/TestDataUnit.java
index a06afdf..5397bf0 100644
--- a/nifi-api/src/test/java/org/apache/nifi/processor/TestDataUnit.java
+++ b/nifi-api/src/test/java/org/apache/nifi/processor/TestDataUnit.java
@@ -16,9 +16,9 @@
  */
 package org.apache.nifi.processor;
 
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
 
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
diff --git a/nifi-api/src/test/java/org/apache/nifi/registry/TestVariableRegistry.java b/nifi-api/src/test/java/org/apache/nifi/registry/TestVariableRegistry.java
index 6c66323..9a2c31b 100644
--- a/nifi-api/src/test/java/org/apache/nifi/registry/TestVariableRegistry.java
+++ b/nifi-api/src/test/java/org/apache/nifi/registry/TestVariableRegistry.java
@@ -16,10 +16,10 @@
  */
 package org.apache.nifi.registry;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import org.junit.jupiter.api.Test;
 
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 public class TestVariableRegistry {
 
diff --git a/nifi-external/nifi-example-bundle/nifi-nifi-example-processors/src/test/java/org/apache/nifi/processors/WriteResourceToStreamTest.java b/nifi-external/nifi-example-bundle/nifi-nifi-example-processors/src/test/java/org/apache/nifi/processors/WriteResourceToStreamTest.java
index 593e9a6..5ed5468 100644
--- a/nifi-external/nifi-example-bundle/nifi-nifi-example-processors/src/test/java/org/apache/nifi/processors/WriteResourceToStreamTest.java
+++ b/nifi-external/nifi-example-bundle/nifi-nifi-example-processors/src/test/java/org/apache/nifi/processors/WriteResourceToStreamTest.java
@@ -16,18 +16,18 @@
  */
 package org.apache.nifi.processors;
 
-import org.junit.Assert;
-
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class WriteResourceToStreamTest {
 
     private TestRunner testRunner;
 
-    @Before
+    @BeforeEach
     public void init() {
         testRunner = TestRunners.newTestRunner(WriteResourceToStream.class);
     }
@@ -41,7 +41,7 @@
                 .getFlowFilesForRelationship(WriteResourceToStream.REL_SUCCESS).get(0)
                 .toByteArray();
         final String stringData = new String(data);
-        Assert.assertEquals("this came from a resource", stringData);
+        assertEquals("this came from a resource", stringData);
     }
 
 }
diff --git a/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSinkTaskIT.java b/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSinkTaskIT.java
index 184fe60..cd085be 100644
--- a/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSinkTaskIT.java
+++ b/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSinkTaskIT.java
@@ -20,10 +20,8 @@
 import org.apache.kafka.connect.errors.RetriableException;
 import org.apache.kafka.connect.sink.SinkRecord;
 import org.apache.kafka.connect.sink.SinkTaskContext;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 import org.mockito.Mockito;
 
 import java.io.File;
@@ -33,22 +31,20 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class StatelessNiFiSinkTaskIT {
     private final File DEFAULT_OUTPUT_DIRECTORY = new File("target/sink-output");
 
-    @Rule
-    public final TestName testName = new TestName();
-
     @Test
-    public void testSimpleFlow() throws IOException {
+    public void testSimpleFlow(TestInfo testInfo) throws IOException {
         final StatelessNiFiSinkTask sinkTask = new StatelessNiFiSinkTask();
         sinkTask.initialize(Mockito.mock(SinkTaskContext.class));
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         sinkTask.start(properties);
 
         final SinkRecord record = new SinkRecord("topic", 0, null, "key", null, "Hello World", 0L);
@@ -56,7 +52,7 @@
         final File[] files = DEFAULT_OUTPUT_DIRECTORY.listFiles();
         if (files != null) {
             for (final File file : files) {
-                assertTrue("Failed to delete existing file " + file.getAbsolutePath(), file.delete());
+                assertTrue(file.delete(), "Failed to delete existing file " + file.getAbsolutePath());
             }
         }
 
@@ -75,11 +71,11 @@
     }
 
     @Test
-    public void testParameters() throws IOException {
+    public void testParameters(TestInfo testInfo) throws IOException {
         final StatelessNiFiSinkTask sinkTask = new StatelessNiFiSinkTask();
         sinkTask.initialize(Mockito.mock(SinkTaskContext.class));
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put("parameter.Directory", "target/sink-output-2");
         sinkTask.start(properties);
 
@@ -89,7 +85,7 @@
         final File[] files = outputDir.listFiles();
         if (files != null) {
             for (final File file : files) {
-                assertTrue("Failed to delete existing file " + file.getAbsolutePath(), file.delete());
+                assertTrue(file.delete(), "Failed to delete existing file " + file.getAbsolutePath());
             }
         }
 
@@ -108,11 +104,11 @@
     }
 
     @Test
-    public void testWrongOutputPort() {
+    public void testWrongOutputPort(TestInfo testInfo) {
         final StatelessNiFiSinkTask sinkTask = new StatelessNiFiSinkTask();
         sinkTask.initialize(Mockito.mock(SinkTaskContext.class));
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put(StatelessNiFiSinkConnector.FAILURE_PORTS, "Success, Failure");
         sinkTask.start(properties);
 
@@ -121,28 +117,24 @@
         final File[] files = DEFAULT_OUTPUT_DIRECTORY.listFiles();
         if (files != null) {
             for (final File file : files) {
-                assertTrue("Failed to delete existing file " + file.getAbsolutePath(), file.delete());
+                assertTrue(file.delete(), "Failed to delete existing file " + file.getAbsolutePath());
             }
         }
 
-        try {
-            sinkTask.put(Collections.singleton(record));
-            sinkTask.flush(Collections.emptyMap());
-            Assert.fail("Expected RetriableException to be thrown");
-        } catch (final RetriableException re) {
-            // Expected
-        }
+        assertThrows(RetriableException.class, () -> {
+                    sinkTask.put(Collections.singleton(record));
+                    sinkTask.flush(Collections.emptyMap());
+                }, "Expected RetriableException to be thrown");
     }
 
-    private Map<String, String> createDefaultProperties() {
+    private Map<String, String> createDefaultProperties(TestInfo testInfo) {
         final Map<String, String> properties = new HashMap<>();
         properties.put(StatelessKafkaConnectorUtil.DATAFLOW_TIMEOUT, "30 sec");
         properties.put(StatelessNiFiSinkConnector.INPUT_PORT_NAME, "In");
         properties.put(StatelessKafkaConnectorUtil.FLOW_SNAPSHOT, "src/test/resources/flows/Write_To_File.json");
         properties.put(StatelessKafkaConnectorUtil.NAR_DIRECTORY, "target/nifi-kafka-connector-bin/nars");
         properties.put(StatelessKafkaConnectorUtil.WORKING_DIRECTORY, "target/nifi-kafka-connector-bin/working");
-        properties.put(StatelessKafkaConnectorUtil.DATAFLOW_NAME, testName.getMethodName());
+        properties.put(StatelessKafkaConnectorUtil.DATAFLOW_NAME, testInfo.getTestMethod().get().getName());
         return properties;
     }
-
 }
diff --git a/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSourceTaskIT.java b/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSourceTaskIT.java
index 46de50a..79cb343 100644
--- a/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSourceTaskIT.java
+++ b/nifi-external/nifi-kafka-connect/nifi-kafka-connector-tests/src/test/java/org/apache/nifi/kafka/connect/StatelessNiFiSourceTaskIT.java
@@ -25,10 +25,8 @@
 import org.apache.kafka.connect.storage.OffsetStorageReader;
 import org.apache.nifi.components.state.Scope;
 import org.apache.nifi.stateless.flow.StatelessDataflow;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -36,23 +34,21 @@
 import java.util.List;
 import java.util.Map;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class StatelessNiFiSourceTaskIT {
 
-    @Rule
-    public final TestName testName = new TestName();
-
     @Test
-    public void testSimpleFlow() throws InterruptedException {
+    public void testSimpleFlow(TestInfo testInfo) throws InterruptedException {
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext());
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         sourceTask.start(properties);
 
         final List<SourceRecord> sourceRecords = sourceTask.poll();
@@ -67,11 +63,11 @@
     }
 
     @Test
-    public void testKeyAttribute() throws InterruptedException {
+    public void testKeyAttribute(TestInfo testInfo) throws InterruptedException {
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext());
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put(StatelessNiFiSourceConnector.KEY_ATTRIBUTE, "greeting");
         sourceTask.start(properties);
 
@@ -87,11 +83,11 @@
     }
 
     @Test
-    public void testTopicNameAttribute() throws InterruptedException {
+    public void testTopicNameAttribute(TestInfo testInfo) throws InterruptedException {
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext());
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put(StatelessNiFiSourceConnector.TOPIC_NAME_ATTRIBUTE, "greeting");
         sourceTask.start(properties);
 
@@ -105,11 +101,11 @@
     }
 
     @Test
-    public void testHeaders() throws InterruptedException {
+    public void testHeaders(TestInfo testInfo) throws InterruptedException {
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext());
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put(StatelessNiFiSourceConnector.HEADER_REGEX, "uuid|greeting|num.*");
         sourceTask.start(properties);
 
@@ -133,24 +129,19 @@
     }
 
     @Test
-    public void testTransferToWrongPort() throws InterruptedException {
+    public void testTransferToWrongPort(TestInfo testInfo) {
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext());
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put(StatelessNiFiSourceConnector.OUTPUT_PORT_NAME, "Another");
         sourceTask.start(properties);
 
-        try {
-            sourceTask.poll();
-            Assert.fail("Expected RetriableException to be thrown");
-        } catch (final RetriableException re) {
-            // Expected
-        }
+        assertThrows(RetriableException.class, () -> sourceTask.poll(), "Expected RetriableException to be thrown");
     }
 
     @Test
-    public void testStateRecovered() {
+    public void testStateRecovered(TestInfo testInfo) {
         final OffsetStorageReader offsetStorageReader = new OffsetStorageReader() {
             @Override
             public <T> Map<String, Object> offset(final Map<String, T> partition) {
@@ -171,7 +162,7 @@
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext(offsetStorageReader));
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         properties.put(StatelessNiFiSourceConnector.OUTPUT_PORT_NAME, "Another");
         sourceTask.start(properties);
 
@@ -184,11 +175,11 @@
     }
 
     @Test
-    public void testStateProvidedAndRecovered() throws InterruptedException {
+    public void testStateProvidedAndRecovered(TestInfo testInfo) throws InterruptedException {
         final StatelessNiFiSourceTask sourceTask = new StatelessNiFiSourceTask();
         sourceTask.initialize(createContext());
 
-        final Map<String, String> properties = createDefaultProperties();
+        final Map<String, String> properties = createDefaultProperties(testInfo);
         sourceTask.start(properties);
 
         final List<SourceRecord> sourceRecords = sourceTask.poll();
@@ -246,7 +237,7 @@
     }
 
 
-    private Map<String, String> createDefaultProperties() {
+    private Map<String, String> createDefaultProperties(TestInfo testInfo) {
         final Map<String, String> properties = new HashMap<>();
         properties.put(StatelessKafkaConnectorUtil.DATAFLOW_TIMEOUT, "30 sec");
         properties.put(StatelessNiFiSourceConnector.OUTPUT_PORT_NAME, "Out");
@@ -255,7 +246,7 @@
         properties.put(StatelessKafkaConnectorUtil.FLOW_SNAPSHOT, "src/test/resources/flows/Generate_Data.json");
         properties.put(StatelessKafkaConnectorUtil.NAR_DIRECTORY, "target/nifi-kafka-connector-bin/nars");
         properties.put(StatelessKafkaConnectorUtil.WORKING_DIRECTORY, "target/nifi-kafka-connector-bin/working");
-        properties.put(StatelessKafkaConnectorUtil.DATAFLOW_NAME, testName.getMethodName());
+        properties.put(StatelessKafkaConnectorUtil.DATAFLOW_NAME, testInfo.getTestMethod().get().getName());
         properties.put(StatelessNiFiSourceTask.STATE_MAP_KEY, "1");
 
         return properties;
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAbstractPolicyBasedAuthorizer.java b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAbstractPolicyBasedAuthorizer.java
index 08c8bb3..b060688 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAbstractPolicyBasedAuthorizer.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAbstractPolicyBasedAuthorizer.java
@@ -16,8 +16,7 @@
  */
 package org.apache.nifi.authorization;
 
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 import java.util.Collections;
@@ -25,7 +24,9 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.when;
 
 public class TestAbstractPolicyBasedAuthorizer {
@@ -324,8 +325,8 @@
         when(authorizer.getAccessPolicies()).thenReturn(new HashSet<AccessPolicy>());
 
         final String fingerprint = authorizer.getFingerprint();
-        Assert.assertNotNull(fingerprint);
-        Assert.assertTrue(fingerprint.length() > 0);
+        assertNotNull(fingerprint);
+        assertTrue(fingerprint.length() > 0);
     }
 
 }
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAccessPolicy.java b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAccessPolicy.java
index c8a4452..10962f4 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAccessPolicy.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestAccessPolicy.java
@@ -16,14 +16,15 @@
  */
 package org.apache.nifi.authorization;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestAccessPolicy {
 
@@ -58,22 +59,22 @@
         assertEquals(RequestAction.READ, policy.getAction());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingIdentifier() {
-        new AccessPolicy.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new AccessPolicy.Builder()
                 .resource(TEST_RESOURCE)
                 .addUser("user1")
                 .action(RequestAction.READ)
-                .build();
+                .build());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingResource() {
-        new AccessPolicy.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new AccessPolicy.Builder()
                 .identifier("1")
                 .addUser("user1")
                 .action(RequestAction.READ)
-                .build();
+                .build());
     }
 
     @Test
@@ -87,13 +88,13 @@
         assertNotNull(policy);
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingActions() {
-        new AccessPolicy.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new AccessPolicy.Builder()
                 .identifier("1")
                 .resource(TEST_RESOURCE)
                 .addUser("user1")
-                .build();
+                .build());
     }
 
     @Test
@@ -140,7 +141,7 @@
         assertEquals(policy.getAction(), policy2.getAction());
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testFromPolicyAndChangeIdentifier() {
         final AccessPolicy policy = new AccessPolicy.Builder()
                 .identifier("1")
@@ -149,7 +150,7 @@
                 .action(RequestAction.READ)
                 .build();
 
-        new AccessPolicy.Builder(policy).identifier("2").build();
+        assertThrows(IllegalStateException.class, () -> new AccessPolicy.Builder(policy).identifier("2").build());
     }
 
     @Test
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestGroup.java b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestGroup.java
index 8ccdba5..9e2311b 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestGroup.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestGroup.java
@@ -16,14 +16,15 @@
  */
 package org.apache.nifi.authorization;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestGroup {
 
@@ -50,22 +51,22 @@
         assertTrue(group.getUsers().contains(user2));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingId() {
-        new Group.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new Group.Builder()
                 .name("group1")
                 .addUser("user1")
                 .addUser("user2")
-                .build();
+                .build());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingName() {
-        new Group.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new Group.Builder()
                 .identifier("1")
                 .addUser("user1")
                 .addUser("user2")
-                .build();
+                .build());
     }
 
     @Test
@@ -113,7 +114,7 @@
         assertEquals(group1.getUsers(), group2.getUsers());
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testFromGroupAndChangeIdentifier() {
         final Group group1 = new Group.Builder()
                 .identifier("1")
@@ -121,7 +122,7 @@
                 .addUser("user1")
                 .build();
 
-        new Group.Builder(group1).identifier("2").build();
+        assertThrows(IllegalStateException.class, () -> new Group.Builder(group1).identifier("2").build());
     }
 
     @Test
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestUser.java b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestUser.java
index 04b1ab1..45c1c59 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestUser.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/authorization/TestUser.java
@@ -16,9 +16,10 @@
  */
 package org.apache.nifi.authorization;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class TestUser {
 
@@ -38,18 +39,18 @@
         assertEquals(identity, user.getIdentity());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingIdentifier() {
-        new User.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new User.Builder()
                 .identity("user1")
-                .build();
+                .build());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testMissingIdentity() {
-        new User.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new User.Builder()
                 .identifier("1")
-                .build();
+                .build());
     }
 
     @Test
@@ -72,14 +73,14 @@
         assertEquals(user.getIdentity(), user2.getIdentity());
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testFromUserAndChangeIdentifier() {
         final User user = new User.Builder()
                 .identifier("1")
                 .identity("user1")
                 .build();
 
-        new User.Builder(user).identifier("2").build();
+        assertThrows(IllegalStateException.class, () -> new User.Builder(user).identifier("2").build());
     }
 
 }
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleCoordinateTest.java b/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleCoordinateTest.java
index 20e1d75..d90a698 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleCoordinateTest.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleCoordinateTest.java
@@ -16,9 +16,10 @@
  */
 package org.apache.nifi.bundle;
 
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
 
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class BundleCoordinateTest {
 
@@ -38,12 +39,12 @@
         assertEquals(coordinate, coordinate2);
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testIdRequired() {
         final String group = "group1";
         final String id = null;
         final String version = "v1";
-        new BundleCoordinate(group, id, version);
+        assertThrows(IllegalStateException.class, () -> new BundleCoordinate(group, id, version));
     }
 
     @Test
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleDetailsTest.java b/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleDetailsTest.java
index 62765dd..fe9e654 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleDetailsTest.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/bundle/BundleDetailsTest.java
@@ -16,12 +16,13 @@
  */
 package org.apache.nifi.bundle;
 
-import static org.junit.Assert.assertEquals;
-
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.File;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 public class BundleDetailsTest {
 
     @Test
@@ -63,7 +64,7 @@
         assertEquals(builtBy, bundleDetails.getBuiltBy());
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testWorkingDirRequired() {
         final BundleCoordinate coordinate = new BundleCoordinate("org.apache.nifi", "nifi-hadoop-nar", "1.0.0");
         final BundleCoordinate dependencyCoordinate = new BundleCoordinate("org.apache.nifi", "nifi-hadoop-libraries-nar", "1.0.0");
@@ -75,7 +76,7 @@
         final String buildJdk = "JDK8";
         final String builtBy = "bbende";
 
-        new BundleDetails.Builder()
+        assertThrows(IllegalStateException.class, () -> new BundleDetails.Builder()
                 .workingDir(null)
                 .coordinate(coordinate)
                 .dependencyCoordinate(dependencyCoordinate)
@@ -85,10 +86,10 @@
                 .buildTimestamp(buildTimestamp)
                 .buildJdk(buildJdk)
                 .builtBy(builtBy)
-                .build();
+                .build());
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testCoordinateRequired() {
         final File workingDirectory = new File("src/test/resources");
         final BundleCoordinate dependencyCoordinate = new BundleCoordinate("org.apache.nifi", "nifi-hadoop-libraries-nar", "1.0.0");
@@ -100,7 +101,7 @@
         final String buildJdk = "JDK8";
         final String builtBy = "bbende";
 
-        new BundleDetails.Builder()
+        assertThrows(IllegalStateException.class, () -> new BundleDetails.Builder()
                 .workingDir(workingDirectory)
                 .coordinate(null)
                 .dependencyCoordinate(dependencyCoordinate)
@@ -110,7 +111,7 @@
                 .buildTimestamp(buildTimestamp)
                 .buildJdk(buildJdk)
                 .builtBy(builtBy)
-                .build();
+                .build());
     }
 
     @Test
diff --git a/nifi-framework-api/src/test/java/org/apache/nifi/web/TestRevision.java b/nifi-framework-api/src/test/java/org/apache/nifi/web/TestRevision.java
index 6d513fd..512d616 100644
--- a/nifi-framework-api/src/test/java/org/apache/nifi/web/TestRevision.java
+++ b/nifi-framework-api/src/test/java/org/apache/nifi/web/TestRevision.java
@@ -16,27 +16,28 @@
  */
 package org.apache.nifi.web;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 /**
  *
  */
 public class TestRevision {
 
-    @Test(expected = IllegalArgumentException.class)
-    public void testNullVersion() throws Exception {
-        new Revision(null, "client-id", "component-id");
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void testNullComponentId() throws Exception {
-        new Revision(0l, "client-id", null);
+    @Test
+    public void testNullVersion() {
+        assertThrows(IllegalArgumentException.class, () -> new Revision(null, "client-id", "component-id"));
     }
 
     @Test
-    public void testIncrementRevision() throws Exception {
+    public void testNullComponentId() {
+        assertThrows(IllegalArgumentException.class, () -> new Revision(0l, "client-id", null));
+    }
+
+    @Test
+    public void testIncrementRevision() {
         final String clientId = "client-id";
         final String componentId = "component-id";
         final Revision revision = new Revision(0l, clientId, componentId);
@@ -47,7 +48,7 @@
     }
 
     @Test
-    public void testIncrementRevisionNewClient() throws Exception {
+    public void testIncrementRevisionNewClient() {
         final String clientId = "client-id";
         final String newClientId = "new-client-id";
         final String componentId = "component-id";
diff --git a/nifi-stateless/nifi-stateless-bootstrap/src/test/java/org/apache/nifi/stateless/bootstrap/TestBootstrapConfiguration.java b/nifi-stateless/nifi-stateless-bootstrap/src/test/java/org/apache/nifi/stateless/bootstrap/TestBootstrapConfiguration.java
index de33c09..c6260fd 100644
--- a/nifi-stateless/nifi-stateless-bootstrap/src/test/java/org/apache/nifi/stateless/bootstrap/TestBootstrapConfiguration.java
+++ b/nifi-stateless/nifi-stateless-bootstrap/src/test/java/org/apache/nifi/stateless/bootstrap/TestBootstrapConfiguration.java
@@ -18,10 +18,10 @@
 package org.apache.nifi.stateless.bootstrap;
 
 import org.apache.nifi.stateless.config.ParameterOverride;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static junit.framework.TestCase.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class TestBootstrapConfiguration {
 
@@ -55,10 +55,6 @@
     }
 
     private void testParseFailure(final BootstrapConfiguration configuration, final String argument) {
-        try {
-            configuration.parseOverride(argument);
-            Assert.fail("Expected an IllegalArgumentException");
-        } catch (final IllegalArgumentException expected) {
-        }
+        assertThrows(IllegalArgumentException.class, () -> configuration.parseOverride(argument));
     }
 }
diff --git a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/config/TestPropertiesFileFlowDefinitionParser.java b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/config/TestPropertiesFileFlowDefinitionParser.java
index 523487f..695c253 100644
--- a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/config/TestPropertiesFileFlowDefinitionParser.java
+++ b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/config/TestPropertiesFileFlowDefinitionParser.java
@@ -21,7 +21,7 @@
 import org.apache.nifi.stateless.engine.StatelessEngineConfiguration;
 import org.apache.nifi.stateless.flow.DataflowDefinition;
 import org.apache.nifi.stateless.flow.TransactionThresholds;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,8 +33,8 @@
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class TestPropertiesFileFlowDefinitionParser {
 
diff --git a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/queue/TestStatelessFlowFileQueue.java b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/queue/TestStatelessFlowFileQueue.java
index 1f96fba..b631db9 100644
--- a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/queue/TestStatelessFlowFileQueue.java
+++ b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/queue/TestStatelessFlowFileQueue.java
@@ -21,17 +21,17 @@
 import org.apache.nifi.controller.repository.FlowFileRecord;
 import org.apache.nifi.processor.FlowFileFilter;
 import org.apache.nifi.util.MockFlowFile;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestStatelessFlowFileQueue {
 
diff --git a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/repository/TestStatelessFileSystemContentRepository.java b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/repository/TestStatelessFileSystemContentRepository.java
index 6a0f7ab..d7b5d54 100644
--- a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/repository/TestStatelessFileSystemContentRepository.java
+++ b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/repository/TestStatelessFileSystemContentRepository.java
@@ -20,9 +20,9 @@
 import org.apache.nifi.controller.repository.claim.ContentClaim;
 import org.apache.nifi.controller.repository.claim.StandardResourceClaimManager;
 import org.apache.nifi.stream.io.StreamUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -30,21 +30,21 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class TestStatelessFileSystemContentRepository {
     private final File repoDirectory = new File("target/test-stateless-file-system-repository");
     private StatelessFileSystemContentRepository repository;
 
-    @Before
+    @BeforeEach
     public void setup() throws IOException {
         repository = new StatelessFileSystemContentRepository(repoDirectory);
         repository.initialize(new StandardResourceClaimManager());
     }
 
-    @After
+    @AfterEach
     public void cleanup() {
         repository.cleanup();
     }
diff --git a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/session/TestAsynchronousCommitTracker.java b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/session/TestAsynchronousCommitTracker.java
index 3e75225..abdca73 100644
--- a/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/session/TestAsynchronousCommitTracker.java
+++ b/nifi-stateless/nifi-stateless-bundle/nifi-stateless-engine/src/test/java/org/apache/nifi/stateless/session/TestAsynchronousCommitTracker.java
@@ -22,15 +22,15 @@
 import org.apache.nifi.connectable.Connection;
 import org.apache.nifi.controller.queue.FlowFileQueue;
 import org.apache.nifi.groups.ProcessGroup;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
 import java.util.Arrays;
 import java.util.Collections;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class TestAsynchronousCommitTracker {