Repository: EnMasseProject/enmasse
Pull request #2117 (2018-12-13 13:21:28)

Migrate unit tests to junit5

kornys: @lulf I will rebase on #2107 and resolve conflicts
kornys: @lulf I've rebased on current master with @ctron changes, let's see if travis pass.

Patch:
diff --git a/address-space-controller/pom.xml b/address-space-controller/pom.xml
index a6ee3f680..29df94531 100644
--- a/address-space-controller/pom.xml
+++ b/address-space-controller/pom.xml
@@ -68,24 +68,14 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
-      <artifactId>junit-platform-launcher</artifactId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/agent/npm-shrinkwrap.json b/agent/npm-shrinkwrap.json
index 4dc2ce8c5..505dd09ab 100644
--- a/agent/npm-shrinkwrap.json
+++ b/agent/npm-shrinkwrap.json
@@ -28,17 +28,14 @@
             "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU="
         },
         "acorn": {
-            "version": "5.7.3",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
-            "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+            "version": "6.0.4",
+            "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz",
+            "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg=="
         },
         "acorn-jsx": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
-            "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==",
-            "requires": {
-                "acorn": "5.7.3"
-            }
+            "version": "5.0.1",
+            "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+            "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg=="
         },
         "ajv": {
             "version": "6.5.4",
@@ -326,9 +323,9 @@
             }
         },
         "eslint": {
-            "version": "5.9.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz",
-            "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==",
+            "version": "5.10.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.10.0.tgz",
+            "integrity": "sha512-HpqzC+BHULKlnPwWae9MaVZ5AXJKpkxCVXQHrFaRw3hbDj26V/9ArYM4Rr/SQ8pi6qUPLXSSXC4RBJlyq2Z2OQ==",
             "requires": {
                 "@babel/code-frame": "7.0.0",
                 "ajv": "6.5.4",
@@ -339,7 +336,7 @@
                 "eslint-scope": "4.0.0",
                 "eslint-utils": "1.3.1",
                 "eslint-visitor-keys": "1.0.0",
-                "espree": "4.0.0",
+                "espree": "5.0.0",
                 "esquery": "1.0.1",
                 "esutils": "2.0.2",
                 "file-entry-cache": "2.0.0",
@@ -349,7 +346,6 @@
                 "ignore": "4.0.6",
                 "imurmurhash": "0.1.4",
                 "inquirer": "6.2.0",
-                "is-resolvable": "1.1.0",
                 "js-yaml": "3.12.0",
                 "json-stable-stringify-without-jsonify": "1.0.1",
                 "levn": "0.3.0",
@@ -400,12 +396,13 @@
             "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
         },
         "espree": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz",
-            "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==",
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz",
+            "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==",
             "requires": {
-                "acorn": "5.7.3",
-                "acorn-jsx": "4.1.1"
+                "acorn": "6.0.4",
+                "acorn-jsx": "5.0.1",
+                "eslint-visitor-keys": "1.0.0"
             }
         },
         "esprima": {
@@ -686,11 +683,6 @@
             "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
             "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
         },
-        "is-resolvable": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
-            "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
-        },
         "isexe": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
diff --git a/amqp-utils/pom.xml b/amqp-utils/pom.xml
index 0017a2522..edcd6ff06 100644
--- a/amqp-utils/pom.xml
+++ b/amqp-utils/pom.xml
@@ -19,34 +19,24 @@
       <artifactId>vertx-proton</artifactId>
       <scope>compile</scope>
     </dependency>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-launcher</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.platform</groupId>
-      <artifactId>junit-platform-launcher</artifactId>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-all</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/api-common/pom.xml b/api-common/pom.xml
index 31e20a589..d27c4a7a7 100644
--- a/api-common/pom.xml
+++ b/api-common/pom.xml
@@ -79,16 +79,6 @@
       <artifactId>resteasy-vertx</artifactId>
       <scope>compile</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
@@ -104,5 +94,24 @@
       <artifactId>kubernetes-server-mock</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-launcher</artifactId>
+      <scope>compile</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/api-model/pom.xml b/api-model/pom.xml
index 5094cf841..474f8e724 100644
--- a/api-model/pom.xml
+++ b/api-model/pom.xml
@@ -31,21 +31,11 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
@@ -56,5 +46,10 @@
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-all</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/api-model/src/main/java/io/enmasse/user/model/v1/UserAuthentication.java b/api-model/src/main/java/io/enmasse/user/model/v1/UserAuthentication.java
index c892a4c66..db6ea5caa 100644
--- a/api-model/src/main/java/io/enmasse/user/model/v1/UserAuthentication.java
+++ b/api-model/src/main/java/io/enmasse/user/model/v1/UserAuthentication.java
@@ -71,15 +71,5 @@ public class UserAuthentication {
 
     public void validate() {
         Objects.requireNonNull(type, "'type' must be set");
-        switch (type) {
-            case password:
-                Objects.requireNonNull(password, "'password' must be set for 'password' type");
-                break;
-            case federated:
-                Objects.requireNonNull(provider, "'provider' must be set for 'federated' type");
-                Objects.requireNonNull(federatedUserid, "'federatedUserid' must be set for 'federated' type");
-                Objects.requireNonNull(federatedUsername, "'federatedUsername' must be set for 'federated' type");
-                break;
-        }
     }
 }
diff --git a/api-server/pom.xml b/api-server/pom.xml
index 2f856899d..79e0d5a02 100644
--- a/api-server/pom.xml
+++ b/api-server/pom.xml
@@ -78,21 +78,11 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
@@ -100,7 +90,7 @@
     </dependency>
     <dependency>
       <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
+      <artifactId>vertx-junit5</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/broker-plugin/sasl-delegation/pom.xml b/broker-plugin/sasl-delegation/pom.xml
index 259fb1fdb..ede7438af 100644
--- a/broker-plugin/sasl-delegation/pom.xml
+++ b/broker-plugin/sasl-delegation/pom.xml
@@ -74,31 +74,16 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-common</artifactId>
diff --git a/broker-plugin/shutdown-hook/pom.xml b/broker-plugin/shutdown-hook/pom.xml
index 50e576436..e8df8f437 100644
--- a/broker-plugin/shutdown-hook/pom.xml
+++ b/broker-plugin/shutdown-hook/pom.xml
@@ -21,7 +21,7 @@
     </dependency>
     <dependency>
       <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
+      <artifactId>vertx-junit5</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -50,8 +50,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -59,11 +59,6 @@
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
diff --git a/discovery-lib/pom.xml b/discovery-lib/pom.xml
index 80395e7f5..10e8828c3 100644
--- a/discovery-lib/pom.xml
+++ b/discovery-lib/pom.xml
@@ -44,10 +44,5 @@
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 </project>
diff --git a/k8s-api/pom.xml b/k8s-api/pom.xml
index dba6833c5..68167764e 100644
--- a/k8s-api/pom.xml
+++ b/k8s-api/pom.xml
@@ -29,24 +29,19 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.platform</groupId>
-      <artifactId>junit-platform-launcher</artifactId>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-all</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/keycloak-controller/pom.xml b/keycloak-controller/pom.xml
index a7ae6ee69..d0ce0d6e8 100644
--- a/keycloak-controller/pom.xml
+++ b/keycloak-controller/pom.xml
@@ -46,12 +46,6 @@
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
@@ -59,14 +53,14 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
-      <scope>test</scope>
+      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
@@ -78,7 +72,6 @@
       <artifactId>kubernetes-server-mock</artifactId>
       <scope>test</scope>
     </dependency>
-
   </dependencies>
   <build>
     <plugins>
diff --git a/keycloak-plugin/sasl-plugin/pom.xml b/keycloak-plugin/sasl-plugin/pom.xml
index a29e95c0b..f5ea45603 100644
--- a/keycloak-plugin/sasl-plugin/pom.xml
+++ b/keycloak-plugin/sasl-plugin/pom.xml
@@ -90,21 +90,11 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
diff --git a/keycloak-plugin/sasl-plugin/src/main/java/io/enmasse/keycloak/spi/AmqpServer.java b/keycloak-plugin/sasl-plugin/src/main/java/io/enmasse/keycloak/spi/AmqpServer.java
index aa3b6ceca..1ea855eea 100644
--- a/keycloak-plugin/sasl-plugin/src/main/java/io/enmasse/keycloak/spi/AmqpServer.java
+++ b/keycloak-plugin/sasl-plugin/src/main/java/io/enmasse/keycloak/spi/AmqpServer.java
@@ -22,6 +22,8 @@
 package io.enmasse.keycloak.spi;
 
 import io.vertx.core.AbstractVerticle;
+import io.vertx.core.Context;
+import io.vertx.core.Vertx;
 import io.vertx.core.net.JksOptions;
 import io.vertx.core.net.PemKeyCertOptions;
 import io.vertx.core.net.PfxOptions;
@@ -99,10 +101,21 @@ public class AmqpServer extends AbstractVerticle {
             }
             connection.open();
             connection.close();
+            Context connectionContext = Vertx.currentContext();
+            vertx.setTimer(10000, l -> {
+                connectionContext.runOnContext(x -> {
+                    if(!connection.isDisconnected()) {
+                        LOG.info("Closing connection which has not disconnected after 10s" + userData);
+                        connection.disconnect();
+                    }
+                });
+            });
         }).closeHandler(conn -> {
+            LOG.info("Received close - disconnecting");
             connection.close();
             connection.disconnect();
         }).disconnectHandler(protonConnection -> {
+            LOG.info("Disconnecting");
             connection.disconnect();
         });
 
diff --git a/keycloak-user-api/src/main/java/io/enmasse/user/keycloak/KeycloakUserApi.java b/keycloak-user-api/src/main/java/io/enmasse/user/keycloak/KeycloakUserApi.java
index 0aab607b1..0ed05904b 100644
--- a/keycloak-user-api/src/main/java/io/enmasse/user/keycloak/KeycloakUserApi.java
+++ b/keycloak-user-api/src/main/java/io/enmasse/user/keycloak/KeycloakUserApi.java
@@ -12,14 +12,7 @@ import java.nio.charset.StandardCharsets;
 import java.time.Clock;
 import java.time.Duration;
 import java.time.Instant;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import javax.ws.rs.WebApplicationException;
@@ -37,6 +30,27 @@ import org.keycloak.representations.idm.UserRepresentation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.time.Clock;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import io.enmasse.k8s.util.TimeUtil;
 import io.enmasse.user.api.UserApi;
 import io.enmasse.user.model.v1.Operation;
@@ -171,6 +185,7 @@ public class KeycloakUserApi implements UserApi {
     public void createUser(String realmName, User user) throws Exception {
         log.info("Creating user {} in realm {}", user.getSpec().getUsername(), realmName);
         user.validate();
+        validateForCreation(user);
 
         withRealm(realmName, realm -> {
 
@@ -208,6 +223,24 @@ public class KeycloakUserApi implements UserApi {
         });
     }
 
+    /**
+     * Check if the user is valid for creating a new instance.
+     * @param user The user to check.
+     */
+    private void validateForCreation(final User user) {
+        final UserAuthentication auth = user.getSpec().getAuthentication();
+        switch (auth.getType()) {
+            case password:
+                Objects.requireNonNull(auth.getPassword(), "'password' must be set for 'password' type");
+                break;
+            case federated:
+                Objects.requireNonNull(auth.getProvider(), "'provider' must be set for 'federated' type");
+                Objects.requireNonNull(auth.getFederatedUserid(), "'federatedUserid' must be set for 'federated' type");
+                Objects.requireNonNull(auth.getFederatedUsername(), "'federatedUsername' must be set for 'federated' type");
+                break;
+        }
+    }
+
     private void applyAuthorizationRules(RealmResource realm, User user, UserResource userResource) {
 
         Set<String> desiredGroups = createDesiredGroupsSet(user.getSpec().getAuthorization());
diff --git a/mqtt-gateway/pom.xml b/mqtt-gateway/pom.xml
index a5a53661f..033bfdedf 100644
--- a/mqtt-gateway/pom.xml
+++ b/mqtt-gateway/pom.xml
@@ -33,31 +33,16 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>io.enmasse</groupId>
       <artifactId>amqp-utils</artifactId>
diff --git a/mqtt-lwt/pom.xml b/mqtt-lwt/pom.xml
index fb98a44bc..d63cad389 100644
--- a/mqtt-lwt/pom.xml
+++ b/mqtt-lwt/pom.xml
@@ -31,12 +31,6 @@
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-api</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
@@ -44,18 +38,18 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
-      <scope>test</scope>
+      <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
+      <artifactId>vertx-junit5</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/pom.xml b/pom.xml
index 5ef01be07..2be22a9d6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,6 @@
         <commons-collections.version>3.2.2</commons-collections.version>
         <guava.version>25.0-jre</guava.version>
         <hamcrest.version>1.3</hamcrest.version>
-        <junit.version>4.12</junit.version>
         <junit.jupiter.version>5.1.0</junit.jupiter.version>
         <junit.vintage.version>5.1.0</junit.vintage.version>
         <junit.platform.version>1.1.0</junit.platform.version>
@@ -526,16 +525,10 @@
 
             <dependency>
                 <groupId>io.vertx</groupId>
-                <artifactId>vertx-unit</artifactId>
+                <artifactId>vertx-junit5</artifactId>
                 <version>${vertx.version}</version>
             </dependency>
 
-            <dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <version>${junit.version}</version>
-            </dependency>
-
             <dependency>
                 <groupId>org.junit.jupiter</groupId>
                 <artifactId>junit-jupiter-api</artifactId>
@@ -546,12 +539,6 @@
                 <artifactId>junit-jupiter-engine</artifactId>
                 <version>${junit.jupiter.version}</version>
             </dependency>
-
-            <dependency>
-                <groupId>org.junit.vintage</groupId>
-                <artifactId>junit-vintage-engine</artifactId>
-                <version>${junit.vintage.version}</version>
-            </dependency>
             <dependency>
                 <groupId>org.junit.platform</groupId>
                 <artifactId>junit-platform-launcher</artifactId>
@@ -805,6 +792,13 @@
                         <ENV_VAR_EXISTS_BOOLEAN>true</ENV_VAR_EXISTS_BOOLEAN>
                     </environmentVariables>
                 </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.junit.platform</groupId>
+                        <artifactId>junit-platform-surefire-provider</artifactId>
+                        <version>${junit.platform.version}</version>
+                    </dependency>
+                </dependencies>
             </plugin>
             <plugin>
                 <groupId>com.mycila</groupId>
diff --git a/service-broker/pom.xml b/service-broker/pom.xml
index 06e3a0411..919d8d23e 100644
--- a/service-broker/pom.xml
+++ b/service-broker/pom.xml
@@ -83,14 +83,9 @@
       <artifactId>resteasy-vertx</artifactId>
       <scope>compile</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
+      <artifactId>vertx-junit5</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -108,6 +103,21 @@
       <artifactId>kubernetes-server-mock</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/standard-controller/pom.xml b/standard-controller/pom.xml
index d784b5b4e..eb4026f00 100644
--- a/standard-controller/pom.xml
+++ b/standard-controller/pom.xml
@@ -58,20 +58,14 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.jupiter</groupId>
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-all</artifactId>
     </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
diff --git a/templates/Makefile b/templates/Makefile
index 0ab495d92..67f30ac1e 100644
--- a/templates/Makefile
+++ b/templates/Makefile
@@ -22,6 +22,7 @@ PROMETHEUS_IMAGE ?= "prom/prometheus:v2.4.3"
 ALERTMANAGER_IMAGE ?= "prom/alertmanager:v0.15.2"
 GRAFANA_IMAGE ?= "grafana/grafana:5.3.1"
 KUBE_STATE_METRICS_IMAGE ?= "quay.io/coreos/kube-state-metrics:v1.4.0"
+OAUTH_PROXY_IMAGE ?= "openshift/oauth-proxy:latest"
 DEFAULT_PROJECT ?= "enmasse-infra"
 
 ifeq ($(TAG),latest)
@@ -70,9 +71,10 @@ replace_images: prepare
 			ALERTMANAGER_IMAGE=$(ALERTMANAGER_IMAGE) \
 			GRAFANA_IMAGE=$(GRAFANA_IMAGE) \
 			KUBE_STATE_METRICS_IMAGE=$(KUBE_STATE_METRICS_IMAGE) \
+			OAUTH_PROXY_IMAGE=$(OAUTH_PROXY_IMAGE) \
 			IMAGE_PULL_POLICY=$(IMAGE_PULL_POLICY) \
 			ENMASSE_VERSION=$(VERSION) \
-			envsubst '$${ENMASSE_VERSION},$${IMAGE_PULL_POLICY},$${ADDRESS_SPACE_CONTROLLER_IMAGE},$${STANDARD_CONTROLLER_IMAGE},$${ROUTER_IMAGE},$${NONE_AUTHSERVICE_IMAGE},$${KEYCLOAK_IMAGE},$${KEYCLOAK_CONTROLLER_IMAGE},$${KEYCLOAK_PLUGIN_IMAGE},$${TOPIC_FORWARDER_IMAGE},$${ARTEMIS_IMAGE},$${ARTEMIS_PLUGIN_IMAGE},$${ROUTER_METRICS_IMAGE},$${SUBSERV_IMAGE},$${API_SERVER_IMAGE},$${SERVICE_BROKER_IMAGE},$${AGENT_IMAGE},$${MQTT_GATEWAY_IMAGE},$${MQTT_LWT_IMAGE},$${PROMETHEUS_IMAGE},$${ALERTMANAGER_IMAGE},$${GRAFANA_IMAGE},$${KUBE_STATE_METRICS_IMAGE}' > $$i.tmp; \
+			envsubst '$${ENMASSE_VERSION},$${IMAGE_PULL_POLICY},$${ADDRESS_SPACE_CONTROLLER_IMAGE},$${STANDARD_CONTROLLER_IMAGE},$${ROUTER_IMAGE},$${NONE_AUTHSERVICE_IMAGE},$${KEYCLOAK_IMAGE},$${KEYCLOAK_CONTROLLER_IMAGE},$${KEYCLOAK_PLUGIN_IMAGE},$${TOPIC_FORWARDER_IMAGE},$${ARTEMIS_IMAGE},$${ARTEMIS_PLUGIN_IMAGE},$${ROUTER_METRICS_IMAGE},$${SUBSERV_IMAGE},$${API_SERVER_IMAGE},$${SERVICE_BROKER_IMAGE},$${AGENT_IMAGE},$${MQTT_GATEWAY_IMAGE},$${MQTT_LWT_IMAGE},$${PROMETHEUS_IMAGE},$${ALERTMANAGER_IMAGE},$${GRAFANA_IMAGE},$${KUBE_STATE_METRICS_IMAGE},$${OAUTH_PROXY_IMAGE}' > $$i.tmp; \
 		mv $$i.tmp $$i; \
 	done
 
diff --git a/templates/address-space-controller/020-ConfigMap-address-space-definitions.yaml b/templates/address-space-controller/020-ConfigMap-address-space-definitions.yaml
index 892a39cf8..c2365126f 100644
--- a/templates/address-space-controller/020-ConfigMap-address-space-definitions.yaml
+++ b/templates/address-space-controller/020-ConfigMap-address-space-definitions.yaml
@@ -1133,6 +1133,8 @@ data:
                 requests:
                   memory: ${BROKER_MEMORY_LIMIT}
               volumeMounts:
+              - mountPath: /var/run/artemis
+                name: data
               - mountPath: /etc/prometheus-config
                 name: broker-prometheus-config
                 readOnly: true
@@ -1166,6 +1168,8 @@ data:
               image: ${ARTEMIS_PLUGIN_IMAGE}
               name: broker-plugin
               volumeMounts:
+              - mountPath: /var/run/artemis
+                name: data
               - mountPath: /etc/enmasse-certs
                 name: broker-internal-cert
                 readOnly: true
@@ -1182,11 +1186,11 @@ data:
                 name: broker-custom
                 readOnly: false
             volumes:
-            - emptyDir: {}
-              name: broker-custom
             - name: data
               persistentVolumeClaim:
                 claimName: broker-data.${INFRA_UUID}
+            - emptyDir: {}
+              name: broker-custom
             - name: broker-prometheus-config
               configMap:
                 name: broker-prometheus-config
diff --git a/templates/address-space-controller/020-ConfigMap-standard-broker-definitions.yaml b/templates/address-space-controller/020-ConfigMap-standard-broker-definitions.yaml
index 3b0d2bde1..dc69e2fc0 100644
--- a/templates/address-space-controller/020-ConfigMap-standard-broker-definitions.yaml
+++ b/templates/address-space-controller/020-ConfigMap-standard-broker-definitions.yaml
@@ -146,6 +146,8 @@ data:
                 requests:
                   memory: ${BROKER_MEMORY_LIMIT}
               volumeMounts:
+              - mountPath: /var/run/artemis
+                name: data
               - mountPath: /etc/prometheus-config
                 name: broker-prometheus-config
                 readOnly: true
@@ -418,6 +420,8 @@ data:
                 requests:
                   memory: ${BROKER_MEMORY_LIMIT}
               volumeMounts:
+              - mountPath: /var/run/artemis
+                name: data
               - mountPath: /opt/apache-artemis/custom
                 name: broker-custom
                 readOnly: false
diff --git a/templates/alertmanager/010-Service-alertmanager.yaml b/templates/alertmanager/010-Service-alertmanager.yaml
index 7d083eebd..0df15438b 100644
--- a/templates/alertmanager/010-Service-alertmanager.yaml
+++ b/templates/alertmanager/010-Service-alertmanager.yaml
@@ -1,13 +1,15 @@
 apiVersion: v1
 kind: Service
 metadata:
+  name: alertmanager
+  annotations:
+    service.alpha.openshift.io/serving-cert-secret-name: alertmanager-proxy-cert
   labels:
     app: enmasse
-  name: alertmanager
 spec:
   ports:
-  - name: alertmanager
-    port: 9093
-    targetPort: 9093
+  - name: proxy
+    port: 443
+    targetPort: 8443
   selector:
     name: alertmanager
diff --git a/templates/alertmanager/010-ServiceAccount-alertmanager.yml b/templates/alertmanager/010-ServiceAccount-alertmanager.yml
new file mode 100644
index 000000000..17cdf211c
--- /dev/null
+++ b/templates/alertmanager/010-ServiceAccount-alertmanager.yml
@@ -0,0 +1,8 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  labels:
+    app: enmasse
+  name: alertmanager-server
+  annotations: 
+    serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"alertmanager"}}'
diff --git a/templates/alertmanager/030-Deployment-alertmanager.yaml b/templates/alertmanager/030-Deployment-alertmanager.yaml
index 06a4d588b..4d9c15a13 100644
--- a/templates/alertmanager/030-Deployment-alertmanager.yaml
+++ b/templates/alertmanager/030-Deployment-alertmanager.yaml
@@ -30,14 +30,32 @@ spec:
       - image: ${ALERTMANAGER_IMAGE}
         imagePullPolicy: ${IMAGE_PULL_POLICY}
         name: alertmanager
-        ports:
-        - containerPort: 9093
-          name: alertmanager
         volumeMounts:
         - mountPath: /etc/alertmanager
           name: alertmanager-config
           readOnly: true
+      - image: openshift/oauth-proxy:latest
+        imagePullPolicy: ${IMAGE_PULL_POLICY}
+        name: oauth-proxy
+        ports:
+        - containerPort: 8443
+          name: proxy
+        args:
+        - --https-address=:8443
+        - --provider=openshift
+        - --openshift-service-account=alertmanager-server
+        - --upstream=http://localhost:9093
+        - --tls-cert=/etc/tls/private/tls.crt
+        - --tls-key=/etc/tls/private/tls.key
+        - --cookie-secret=SECRET
+        volumeMounts:
+        - mountPath: /etc/tls/private
+          name: alertmanager-proxy-cert
+      serviceAccountName: alertmanager-server
       volumes:
       - configMap:
           name: alertmanager-config
         name: alertmanager-config
+      - name: alertmanager-proxy-cert
+        secret:
+          secretName: alertmanager-proxy-cert
diff --git a/templates/alertmanager/060-Route-alertmanager.yaml b/templates/alertmanager/060-Route-alertmanager.yaml
index 048cefa74..110cfe586 100644
--- a/templates/alertmanager/060-Route-alertmanager.yaml
+++ b/templates/alertmanager/060-Route-alertmanager.yaml
@@ -6,9 +6,9 @@ metadata:
   name: alertmanager
 spec:
   port:
-    targetPort: alertmanager
+    targetPort: proxy
   tls:
-    termination: edge
+    termination: reencrypt
   to:
     kind: Service
     name: alertmanager
diff --git a/templates/prometheus/010-Service-prometheus.yaml b/templates/prometheus/010-Service-prometheus.yaml
index 519817a8e..a93d3eecc 100644
--- a/templates/prometheus/010-Service-prometheus.yaml
+++ b/templates/prometheus/010-Service-prometheus.yaml
@@ -1,13 +1,15 @@
 apiVersion: v1
 kind: Service
 metadata:
+  name: prometheus
+  annotations:
+    service.alpha.openshift.io/serving-cert-secret-name: prometheus-proxy-cert
   labels:
     app: enmasse
-  name: prometheus
 spec:
   ports:
-  - name: prometheus
-    port: 9090
-    targetPort: 9090
+  - name: proxy
+    port: 443
+    targetPort: 8443
   selector:
-    name: prometheus
+    name: prometheus
\ No newline at end of file
diff --git a/templates/prometheus/010-ServiceAccount-prometheus-server.yaml b/templates/prometheus/010-ServiceAccount-prometheus-server.yaml
index 4f7dd716f..5e2b7885c 100644
--- a/templates/prometheus/010-ServiceAccount-prometheus-server.yaml
+++ b/templates/prometheus/010-ServiceAccount-prometheus-server.yaml
@@ -4,3 +4,5 @@ metadata:
   labels:
     app: enmasse
   name: prometheus-server
+  annotations: 
+    serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"prometheus"}}'
diff --git a/templates/prometheus/030-Deployment-prometheus.yaml b/templates/prometheus/030-Deployment-prometheus.yaml
index dc96788c3..e1a4c1cfb 100644
--- a/templates/prometheus/030-Deployment-prometheus.yaml
+++ b/templates/prometheus/030-Deployment-prometheus.yaml
@@ -30,9 +30,6 @@ spec:
       - image: ${PROMETHEUS_IMAGE}
         imagePullPolicy: ${IMAGE_PULL_POLICY}
         name: prometheus
-        ports:
-        - containerPort: 9090
-          name: prometheus
         volumeMounts:
         - mountPath: /etc/prometheus
           name: prometheus-config
@@ -40,6 +37,23 @@ spec:
         - mountPath: /prometheus
           name: prometheus-data
           readOnly: false
+      - image: ${OAUTH_PROXY_IMAGE}
+        imagePullPolicy: ${IMAGE_PULL_POLICY}
+        name: oauth-proxy
+        ports:
+        - containerPort: 8443
+          name: proxy
+        args:
+        - --https-address=:8443
+        - --provider=openshift
+        - --openshift-service-account=prometheus-server
+        - --upstream=http://localhost:9090
+        - --tls-cert=/etc/tls/private/tls.crt
+        - --tls-key=/etc/tls/private/tls.key
+        - --cookie-secret=SECRET
+        volumeMounts:
+        - mountPath: /etc/tls/private
+          name: prometheus-proxy-cert
       serviceAccountName: prometheus-server
       volumes:
       - configMap:
@@ -48,3 +62,6 @@ spec:
       - name: prometheus-data
         persistentVolumeClaim:
           claimName: prometheus-data
+      - name: prometheus-proxy-cert
+        secret:
+          secretName: prometheus-proxy-cert
diff --git a/templates/prometheus/060-Route-prometheus.yaml b/templates/prometheus/060-Route-prometheus.yaml
index ca9dfc610..a9097ba75 100644
--- a/templates/prometheus/060-Route-prometheus.yaml
+++ b/templates/prometheus/060-Route-prometheus.yaml
@@ -6,9 +6,9 @@ metadata:
   name: prometheus
 spec:
   port:
-    targetPort: prometheus
+    targetPort: proxy
   tls:
-    termination: edge
+    termination: reencrypt
   to:
     kind: Service
     name: prometheus
diff --git a/topic-forwarder/pom.xml b/topic-forwarder/pom.xml
index b6e89eee9..29b32df26 100644
--- a/topic-forwarder/pom.xml
+++ b/topic-forwarder/pom.xml
@@ -35,8 +35,8 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -44,11 +44,6 @@
       <artifactId>junit-jupiter-engine</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.junit.vintage</groupId>
-      <artifactId>junit-vintage-engine</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.junit.platform</groupId>
       <artifactId>junit-platform-launcher</artifactId>
@@ -56,7 +51,7 @@
     </dependency>
     <dependency>
       <groupId>io.vertx</groupId>
-      <artifactId>vertx-unit</artifactId>
+      <artifactId>vertx-junit5</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -64,13 +59,11 @@
       <artifactId>mockito-core</artifactId>
       <scope>test</scope>
     </dependency>
-    <!--
     <dependency>
       <groupId>org.hamcrest</groupId>
       <artifactId>hamcrest-all</artifactId>
-      <version>1.3</version>
       <scope>test</scope>
-    </dependency>-->
+    </dependency>
   </dependencies>
   <build>
     <plugins>


Test patch:
diff --git a/address-model-lib/src/test/java/io/enmasse/address/model/AuthenticationServiceTest.java b/address-model-lib/src/test/java/io/enmasse/address/model/AuthenticationServiceTest.java
index 03214da0b..2e50fbbf1 100644
--- a/address-model-lib/src/test/java/io/enmasse/address/model/AuthenticationServiceTest.java
+++ b/address-model-lib/src/test/java/io/enmasse/address/model/AuthenticationServiceTest.java
@@ -5,13 +5,14 @@
 
 package io.enmasse.address.model;
 
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 
 /**
  * Unit tests for {@link AuthenticationService}
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/ControllerChainTest.java b/address-space-controller/src/test/java/io/enmasse/controller/ControllerChainTest.java
index a8a47a883..bd7fe16c9 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/ControllerChainTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/ControllerChainTest.java
@@ -7,27 +7,27 @@ package io.enmasse.controller;
 import io.enmasse.address.model.AddressSpace;
 import io.enmasse.address.model.AddressSpaceStatus;
 import io.enmasse.controller.common.Kubernetes;
-import io.enmasse.metrics.api.Metric;
-import io.enmasse.metrics.api.Metrics;
 import io.enmasse.k8s.api.EventLogger;
 import io.enmasse.k8s.api.TestAddressSpaceApi;
-import org.junit.Before;
-import org.junit.Test;
+import io.enmasse.metrics.api.Metric;
+import io.enmasse.metrics.api.Metrics;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.time.Duration;
 import java.util.Arrays;
 import java.util.List;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.*;
 
 public class ControllerChainTest {
     private TestAddressSpaceApi testApi;
     private Kubernetes kubernetes;
 
-    @Before
+    @BeforeEach
     public void setup() {
         kubernetes = mock(Kubernetes.class);
         testApi = new TestAddressSpaceApi();
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/CreateControllerTest.java b/address-space-controller/src/test/java/io/enmasse/controller/CreateControllerTest.java
index f2fb162f8..a96e0f77c 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/CreateControllerTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/CreateControllerTest.java
@@ -11,16 +11,14 @@ import io.enmasse.k8s.api.SchemaProvider;
 import io.enmasse.k8s.api.TestAddressSpaceApi;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.api.model.KubernetesList;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
 import java.util.Arrays;
 import java.util.UUID;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.*;
 
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/EndpointControllerTest.java b/address-space-controller/src/test/java/io/enmasse/controller/EndpointControllerTest.java
index e0609ed41..9784d88a0 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/EndpointControllerTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/EndpointControllerTest.java
@@ -13,28 +13,33 @@ import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServiceBuilder;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class EndpointControllerTest {
 
     private OpenShiftClient client;
+    private OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
 
-    @Rule
-    public OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
-
-
-    @Before
-    public void setup() {
+    @BeforeEach
+    void setup() {
+        openShiftServer.before();
         client = openShiftServer.getOpenshiftClient();
     }
 
+    @AfterEach
+    void tearDown() {
+        openShiftServer.after();
+    }
+
     @Test
     public void testRoutesNotCreated() {
         AddressSpace addressSpace = new AddressSpace.Builder()
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/NetworkPolicyControllerTest.java b/address-space-controller/src/test/java/io/enmasse/controller/NetworkPolicyControllerTest.java
index cfffe2e70..a6f3c8fc6 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/NetworkPolicyControllerTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/NetworkPolicyControllerTest.java
@@ -8,7 +8,10 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.enmasse.address.model.AddressSpace;
 import io.enmasse.address.model.KubeUtil;
-import io.enmasse.admin.model.v1.*;
+import io.enmasse.admin.model.v1.InfraConfig;
+import io.enmasse.admin.model.v1.NetworkPolicy;
+import io.enmasse.admin.model.v1.NetworkPolicyBuilder;
+import io.enmasse.admin.model.v1.StandardInfraConfigBuilder;
 import io.enmasse.config.AnnotationKeys;
 import io.enmasse.config.LabelKeys;
 import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
@@ -16,30 +19,35 @@ import io.fabric8.kubernetes.api.model.networking.NetworkPolicyEgressRuleBuilder
 import io.fabric8.kubernetes.api.model.networking.NetworkPolicyIngressRuleBuilder;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
 
+import static junit.framework.TestCase.assertNotNull;
 import static org.hamcrest.CoreMatchers.hasItem;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 public class NetworkPolicyControllerTest {
     private static final ObjectMapper mapper = new ObjectMapper();
     private OpenShiftClient client;
 
-    @Rule
     public OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
 
-    @Before
+    @BeforeEach
     public void setup() {
+        openShiftServer.before();
         client = openShiftServer.getOpenshiftClient();
     }
 
+    @AfterEach
+    void tearDown() {
+        openShiftServer.after();
+    }
+
     @Test
     public void testCreateFromInfraConfig() throws Exception {
         InfraConfig infraConfig = createTestInfra(createTestPolicy("my", "label"));
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/StatusControllerTest.java b/address-space-controller/src/test/java/io/enmasse/controller/StatusControllerTest.java
index f881d6ffa..979c94c46 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/StatusControllerTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/StatusControllerTest.java
@@ -6,18 +6,16 @@ package io.enmasse.controller;
 
 
 import io.enmasse.address.model.AddressSpace;
-import io.enmasse.address.model.AddressSpaceStatus;
 import io.enmasse.controller.common.Kubernetes;
 import io.fabric8.kubernetes.api.model.apps.Deployment;
 import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/TemplateInfraResourceFactoryTest.java b/address-space-controller/src/test/java/io/enmasse/controller/TemplateInfraResourceFactoryTest.java
index 1d4589101..65cfb03e0 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/TemplateInfraResourceFactoryTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/TemplateInfraResourceFactoryTest.java
@@ -16,29 +16,35 @@ import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
 import io.fabric8.openshift.client.NamespacedOpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-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.File;
 import java.util.List;
 import java.util.Optional;
 
-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;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public class TemplateInfraResourceFactoryTest {
-    @Rule
-    public OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
+
+    private OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
 
     private TemplateInfraResourceFactory resourceFactory;
     private NamespacedOpenShiftClient client;
 
-    @Before
+    @AfterEach
+    void tearDown() {
+        openShiftServer.after();
+    }
+
+    @BeforeEach
     public void setup() {
+        openShiftServer.before();
         client = openShiftServer.getOpenshiftClient();
         client.secrets().createNew().editOrNewMetadata().withName("certs").endMetadata().addToData("tls.crt", "cert").done();
         AuthenticationServiceResolver authServiceResolver = mock(AuthenticationServiceResolver.class);
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/auth/CertBundleCertProviderTest.java b/address-space-controller/src/test/java/io/enmasse/controller/auth/CertBundleCertProviderTest.java
index 43cb3d000..47dac1723 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/auth/CertBundleCertProviderTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/auth/CertBundleCertProviderTest.java
@@ -9,25 +9,29 @@ import io.enmasse.address.model.CertSpec;
 import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Base64;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
 
 public class CertBundleCertProviderTest {
-    @Rule
+
     public OpenShiftServer server = new OpenShiftServer(true, true);
 
     private OpenShiftClient client;
     private CertProvider certProvider;
 
-    @Before
+    @AfterEach
+    void tearDown() {
+        server.after();
+    }
+
+    @BeforeEach
     public void setup() {
+        server.before();
         client = server.getOpenshiftClient();
 
         certProvider = new CertBundleCertProvider(client);
@@ -78,25 +82,25 @@ public class CertBundleCertProviderTest {
         assertThat(cert.getData().get("tls.crt"), is(spec.getTlsCert()));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testValidateBadKey() {
-        new CertSpec.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new CertSpec.Builder()
                 .setProvider("certBundle")
                 .setSecretName("mycerts")
                 .setTlsKey("/%^$lkg")
                 .setTlsCert("d29ybGQ=")
                 .build()
-                .validate();
+                .validate());
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testValidateBadCert() {
-        new CertSpec.Builder()
+        assertThrows(IllegalArgumentException.class, () -> new CertSpec.Builder()
                 .setProvider("certBundle")
                 .setSecretName("mycerts")
                 .setTlsKey("d29ybGQ=")
                 .setTlsCert("/%^$lkg")
                 .build()
-                .validate();
+                .validate());
     }
 }
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/auth/OpenShiftCertProviderTest.java b/address-space-controller/src/test/java/io/enmasse/controller/auth/OpenShiftCertProviderTest.java
index dab7596ac..31d6b38da 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/auth/OpenShiftCertProviderTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/auth/OpenShiftCertProviderTest.java
@@ -13,27 +13,32 @@ import io.fabric8.kubernetes.api.model.Service;
 import io.fabric8.kubernetes.api.model.ServiceBuilder;
 import io.fabric8.openshift.client.OpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static junit.framework.TestCase.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 public class OpenShiftCertProviderTest {
-    @Rule
     public OpenShiftServer server = new OpenShiftServer(true, true);
 
     private OpenShiftClient client;
     private CertProvider certProvider;
 
-    @Before
+    @BeforeEach
     public void setup() {
+        server.before();
         client = server.getOpenshiftClient();
 
         certProvider = new OpenshiftCertProvider(client);
     }
 
+    @AfterEach
+    void tearDown() {
+        server.after();
+    }
+
     @Test
     public void testProvideCertNoService() {
 
diff --git a/address-space-controller/src/test/java/io/enmasse/controller/auth/WildcardCertProviderTest.java b/address-space-controller/src/test/java/io/enmasse/controller/auth/WildcardCertProviderTest.java
index 9f6e600fa..5e1136099 100644
--- a/address-space-controller/src/test/java/io/enmasse/controller/auth/WildcardCertProviderTest.java
+++ b/address-space-controller/src/test/java/io/enmasse/controller/auth/WildcardCertProviderTest.java
@@ -10,30 +10,36 @@ import io.fabric8.kubernetes.api.model.Secret;
 import io.fabric8.kubernetes.api.model.SecretBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 
 public class WildcardCertProviderTest {
-    @Rule
     public KubernetesServer server = new KubernetesServer(true, true);
 
     private KubernetesClient client;
     private CertProvider certProvider;
 
-    @Before
+    @BeforeEach
     public void setup() {
+        server.before();
         client = server.getClient();
         String wildcardCert = "wildcardcert";
 
         certProvider = new WildcardCertProvider(client, wildcardCert);
     }
 
-    @Test(expected = IllegalStateException.class)
+    @AfterEach
+    void tearDown() {
+        server.after();
+    }
+
+    @Test
     public void testUnknownWildcardSecret() {
 
         AddressSpace space = new AddressSpace.Builder()
@@ -43,7 +49,7 @@ public class WildcardCertProviderTest {
                 .build();
         CertSpec spec = new CertSpec.Builder().setProvider("wildcard").setSecretName("mycerts").build();
 
-        certProvider.provideCert(space, new EndpointInfo("messaging", spec));
+        assertThrows(IllegalStateException.class, () -> certProvider.provideCert(space, new EndpointInfo("messaging", spec)));
     }
 
     @Test
diff --git a/amqp-utils/src/test/java/io/enmasse/amqp/ArtemisTest.java b/amqp-utils/src/test/java/io/enmasse/amqp/ArtemisTest.java
index 61800c9a0..b77bb121a 100644
--- a/amqp-utils/src/test/java/io/enmasse/amqp/ArtemisTest.java
+++ b/amqp-utils/src/test/java/io/enmasse/amqp/ArtemisTest.java
@@ -9,7 +9,7 @@ import io.vertx.proton.ProtonClientOptions;
 import org.apache.qpid.proton.Proton;
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
diff --git a/amqp-utils/src/test/java/io/enmasse/amqp/BlockingClientTest.java b/amqp-utils/src/test/java/io/enmasse/amqp/BlockingClientTest.java
index e3310cb67..b88f2f4f6 100644
--- a/amqp-utils/src/test/java/io/enmasse/amqp/BlockingClientTest.java
+++ b/amqp-utils/src/test/java/io/enmasse/amqp/BlockingClientTest.java
@@ -9,9 +9,9 @@ import io.vertx.proton.ProtonServer;
 import io.vertx.proton.ProtonSession;
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.message.Message;
-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 org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -23,8 +23,8 @@ import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.TimeUnit;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class BlockingClientTest {
     private static final Logger log = LoggerFactory.getLogger(BlockingClientTest.class);
@@ -35,7 +35,7 @@ public class BlockingClientTest {
     private BlockingQueue<Message> outbox;
     private int actualPort;
 
-    @Before
+    @BeforeEach
     public void setup() throws Exception {
         vertx = Vertx.vertx();
         server = ProtonServer.create(vertx);
@@ -93,7 +93,7 @@ public class BlockingClientTest {
             Message received = inbox.poll(1, TimeUnit.MINUTES);
             assertNotNull(received);
             assertThat(received.getMessageId(), is(m.getMessageId()));
-            assertThat(((AmqpValue)received.getBody()).getValue(), is("hello there"));
+            assertThat(((AmqpValue) received.getBody()).getValue(), is("hello there"));
         }
     }
 
@@ -111,11 +111,11 @@ public class BlockingClientTest {
             Message received = messages.get(0);
             assertNotNull(received);
             assertThat(received.getMessageId(), is(m.getMessageId()));
-            assertThat(((AmqpValue)received.getBody()).getValue(), is("hello there"));
+            assertThat(((AmqpValue) received.getBody()).getValue(), is("hello there"));
         }
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         server.close();
         vertx.close();
diff --git a/amqp-utils/src/test/java/io/enmasse/amqp/ProtonRequestClientTest.java b/amqp-utils/src/test/java/io/enmasse/amqp/ProtonRequestClientTest.java
index 5637d9cb6..c75e96c24 100644
--- a/amqp-utils/src/test/java/io/enmasse/amqp/ProtonRequestClientTest.java
+++ b/amqp-utils/src/test/java/io/enmasse/amqp/ProtonRequestClientTest.java
@@ -11,21 +11,21 @@ import io.vertx.proton.ProtonServer;
 import io.vertx.proton.ProtonSession;
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.message.Message;
-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.util.concurrent.CompletableFuture;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ProtonRequestClientTest {
     private Vertx vertx;
     private ProtonServer server;
 
-    @Before
+    @BeforeEach
     public void setup() throws InterruptedException {
         vertx = Vertx.vertx();
         server = ProtonServer.create(vertx);
@@ -71,7 +71,7 @@ public class ProtonRequestClientTest {
         latch.await();
     }
 
-    @After
+    @AfterEach
     public void teardown() {
         server.close();
         vertx.close();
diff --git a/api-common/src/test/java/io/enmasse/api/auth/AuthInterceptorTest.java b/api-common/src/test/java/io/enmasse/api/auth/AuthInterceptorTest.java
index c1e310c18..3fec10de1 100644
--- a/api-common/src/test/java/io/enmasse/api/auth/AuthInterceptorTest.java
+++ b/api-common/src/test/java/io/enmasse/api/auth/AuthInterceptorTest.java
@@ -4,26 +4,12 @@
  */
 package io.enmasse.api.auth;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 import io.vertx.core.http.HttpConnection;
 import io.vertx.core.http.HttpServerRequest;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.function.Predicate;
 import javax.net.ssl.SSLPeerUnverifiedException;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.NotAuthorizedException;
@@ -31,6 +17,19 @@ import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.function.Predicate;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.*;
 
 public class AuthInterceptorTest {
 
@@ -40,7 +39,7 @@ public class AuthInterceptorTest {
     private UriInfo mockUriInfo;
     private AuthApi mockAuthApi;
 
-    @Before
+    @BeforeEach
     public void setUp() throws IOException {
         tokenFile = File.createTempFile("token", "");
         mockAuthApi = mock(AuthApi.class);
@@ -82,12 +81,12 @@ public class AuthInterceptorTest {
         assertAuthenticatedAs(mockRequestContext, "system:anonymous");
     }
 
-    @Test(expected = NotAuthorizedException.class)
+    @Test
     public void testInvalidToken() {
         TokenReview returnedTokenReview = new TokenReview(null, null, false);
         when(mockAuthApi.performTokenReview("invalid_token")).thenReturn(returnedTokenReview);
         when(mockRequestContext.getHeaderString(HttpHeaders.AUTHORIZATION)).thenReturn("Bearer invalid_token");
-        handler.filter(mockRequestContext);
+        assertThrows(NotAuthorizedException.class, () -> handler.filter(mockRequestContext));
     }
 
     @Test
diff --git a/api-common/src/test/java/io/enmasse/api/common/DefaultExceptionMapperTest.java b/api-common/src/test/java/io/enmasse/api/common/DefaultExceptionMapperTest.java
index 1bc7fc19f..6a129af47 100644
--- a/api-common/src/test/java/io/enmasse/api/common/DefaultExceptionMapperTest.java
+++ b/api-common/src/test/java/io/enmasse/api/common/DefaultExceptionMapperTest.java
@@ -6,12 +6,14 @@ package io.enmasse.api.common;
 
 import io.fabric8.kubernetes.api.model.StatusBuilder;
 import io.fabric8.kubernetes.client.KubernetesClientException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 
 public class DefaultExceptionMapperTest {
 
@@ -46,5 +48,5 @@ public class DefaultExceptionMapperTest {
         assertEquals("Unprocessable Entity", responseEntity.getReason());
         assertEquals(message, responseEntity.getMessage());
     }
-    
+
 }
\ No newline at end of file
diff --git a/api-model/src/test/java/io/enmasse/address/model/AddressSpaceTest.java b/api-model/src/test/java/io/enmasse/address/model/AddressSpaceTest.java
index 12de1c16d..18f782976 100644
--- a/api-model/src/test/java/io/enmasse/address/model/AddressSpaceTest.java
+++ b/api-model/src/test/java/io/enmasse/address/model/AddressSpaceTest.java
@@ -5,10 +5,12 @@
 package io.enmasse.address.model;
 
 
-import org.junit.Test;
+
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
 
 
 public class AddressSpaceTest {
@@ -44,7 +46,7 @@ public class AddressSpaceTest {
                     .setType("type")
                     .setPlan("plan")
                     .build();
-            fail();
+            fail("");
         } catch (NullPointerException e) {
             // pass
         }
@@ -54,7 +56,7 @@ public class AddressSpaceTest {
                     .setName("name")
                     .setPlan("plan")
                     .build();
-            fail();
+            fail("");
         } catch (NullPointerException e) {
             // pass
         }
@@ -64,7 +66,7 @@ public class AddressSpaceTest {
                     .setName("name")
                     .setType("type")
                     .build();
-            fail();
+            fail("");
         } catch (NullPointerException e) {
             // pass
         }
diff --git a/api-model/src/test/java/io/enmasse/address/model/v1/address/AddressTest.java b/api-model/src/test/java/io/enmasse/address/model/v1/address/AddressTest.java
index 85616ae89..819c44a67 100644
--- a/api-model/src/test/java/io/enmasse/address/model/v1/address/AddressTest.java
+++ b/api-model/src/test/java/io/enmasse/address/model/v1/address/AddressTest.java
@@ -4,14 +4,15 @@
  */
 package io.enmasse.address.model.v1.address;
 
-import io.enmasse.address.model.*;
-import org.junit.Test;
+import io.enmasse.address.model.Address;
+import io.enmasse.address.model.Status;
+import org.junit.jupiter.api.Test;
 
-import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.hasItem;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class AddressTest {
     @Test
@@ -73,7 +74,7 @@ public class AddressTest {
         assertThat(b1.getPlan(), is(b2.getPlan()));
         assertThat(b1.getType(), is(b2.getType()));
     }
-    
+
     @Test
     public void testCopy() {
         Address a = new Address.Builder()
@@ -84,9 +85,9 @@ public class AddressTest {
                 .setAddressSpace("myspace")
                 .setStatus(new Status(true).setPhase(Status.Phase.Active).appendMessage("foo"))
                 .build();
-        
+
         Address b = new Address.Builder(a).build();
-        
+
         assertThat(a, is(b));
         assertTrue(b.getStatus().isReady());
         assertThat(b.getStatus().getPhase(), is(Status.Phase.Active));
diff --git a/api-model/src/test/java/io/enmasse/address/model/v1/address/KubeUtilTest.java b/api-model/src/test/java/io/enmasse/address/model/v1/address/KubeUtilTest.java
index 634c5ec63..0c1925299 100644
--- a/api-model/src/test/java/io/enmasse/address/model/v1/address/KubeUtilTest.java
+++ b/api-model/src/test/java/io/enmasse/address/model/v1/address/KubeUtilTest.java
@@ -5,10 +5,11 @@
 package io.enmasse.address.model.v1.address;
 
 import io.enmasse.address.model.KubeUtil;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+
 
 public class KubeUtilTest {
     @Test
diff --git a/api-model/src/test/java/io/enmasse/address/model/v1/address/SerializationTest.java b/api-model/src/test/java/io/enmasse/address/model/v1/address/SerializationTest.java
index d45dbaa80..d51393e21 100644
--- a/api-model/src/test/java/io/enmasse/address/model/v1/address/SerializationTest.java
+++ b/api-model/src/test/java/io/enmasse/address/model/v1/address/SerializationTest.java
@@ -11,7 +11,7 @@ import io.enmasse.admin.model.v1.AddressPlan;
 import io.enmasse.admin.model.v1.AddressSpacePlan;
 import io.enmasse.admin.model.v1.AddressSpacePlanBuilder;
 import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.mockito.internal.util.collections.Sets;
 
 import java.io.IOException;
@@ -20,7 +20,8 @@ import java.util.*;
 import static io.enmasse.address.model.ExposeSpec.ExposeType.route;
 import static io.enmasse.address.model.ExposeSpec.TlsTermination.passthrough;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
 
 // TODO: Add more tests of invalid input to deserialization
 public class SerializationTest {
@@ -42,7 +43,7 @@ public class SerializationTest {
                 .setCreationTimestamp("my stamp")
                 .build();
 
-        byte [] serialized = CodecV1.getMapper().writeValueAsBytes(address);
+        byte[] serialized = CodecV1.getMapper().writeValueAsBytes(address);
 
         Address deserialized = CodecV1.getMapper().readValue(serialized, Address.class);
 
@@ -95,14 +96,14 @@ public class SerializationTest {
         AddressList list = new AddressList(Collections.emptySet());
 
         String serialized = CodecV1.getMapper().writeValueAsString(list);
-        assertTrue("Serialized form '"+serialized+"' does not include empty items list",
-                   serialized.matches(".*\"items\"\\s*:\\s*\\[\\s*\\].*"));
+        assertTrue(serialized.matches(".*\"items\"\\s*:\\s*\\[\\s*\\].*"),
+                "Serialized form '" + serialized + "' does not include empty items list");
         List<Address> deserialized = CodecV1.getMapper().readValue(serialized, AddressList.class);
 
         assertThat(deserialized, is(list));
     }
 
-    @Test(expected = DeserializeException.class)
+    @Test
     public void testSerializeAddressSpaceWithIllegalName() throws IOException {
         AddressSpace addressSpace = new AddressSpace.Builder()
                 .setName("myspace.bar")
@@ -111,7 +112,7 @@ public class SerializationTest {
                 .build();
 
         String serialized = CodecV1.getMapper().writeValueAsString(addressSpace);
-        CodecV1.getMapper().readValue(serialized, AddressSpace.class);
+        assertThrows(DeserializeException.class, () -> CodecV1.getMapper().readValue(serialized, AddressSpace.class));
     }
 
     @SuppressWarnings("serial")
@@ -127,12 +128,12 @@ public class SerializationTest {
                 .setSelfLink("/my/resource")
                 .setStatus(new AddressSpaceStatus(true).appendMessage("hello").appendEndpointStatus(
                         new EndpointStatus.Builder()
-                        .setName("myendpoint")
-                        .setExternalHost("example.com")
-                        .setExternalPorts(Collections.singletonMap("amqps", 443))
-                        .setServiceHost("messaging.svc")
-                        .setServicePorts(Collections.singletonMap("amqp", 5672))
-                        .build()))
+                                .setName("myendpoint")
+                                .setExternalHost("example.com")
+                                .setExternalPorts(Collections.singletonMap("amqps", 443))
+                                .setServiceHost("messaging.svc")
+                                .setServicePorts(Collections.singletonMap("amqp", 5672))
+                                .build()))
                 .setEndpointList(Arrays.asList(new EndpointSpec.Builder()
                         .setName("myendpoint")
                         .setService("messaging")
@@ -197,7 +198,7 @@ public class SerializationTest {
                 "  \"plan\": \"unlimited-standard\"," +
                 " \"endpoints\":[" +
                 "   {\"name\":\"messaging\",\"service\":\"messaging\",\"servicePort\":\"amqps\"}" +
-                "  ]"+
+                "  ]" +
                 "}}";
         AddressSpace addressSpace = CodecV1.getMapper().readValue(json, AddressSpace.class);
         assertThat(addressSpace.getEndpoints().size(), is(1));
@@ -207,16 +208,16 @@ public class SerializationTest {
         assertThat(addressSpace.getEndpoints().get(0).getExposeSpec().get().getRouteServicePort(), is("amqps"));
     }
 
-    @Test(expected = DeserializeException.class)
+    @Test
     public void testDeserializeAddressSpaceMissingDefaults() throws IOException {
         String serialized = "{\"kind\": \"AddressSpace\", \"apiVersion\": \"v1alpha1\"}";
-        CodecV1.getMapper().readValue(serialized, AddressSpace.class);
+        assertThrows(DeserializeException.class, () -> CodecV1.getMapper().readValue(serialized, AddressSpace.class));
     }
 
-    @Test(expected = DeserializeException.class)
+    @Test
     public void testDeserializeAddressMissingDefaults() throws IOException {
         String serialized = "{\"kind\": \"Address\", \"apiVersion\": \"v1alpha1\"}";
-        CodecV1.getMapper().readValue(serialized, Address.class);
+        assertThrows(DeserializeException.class, () -> CodecV1.getMapper().readValue(serialized, Address.class));
     }
 
     @Test
@@ -251,7 +252,7 @@ public class SerializationTest {
         assertThat(addressSpacePlan.getResources().size(), is(2));
         assertThat(addressSpacePlan.getResources().get(0).getName(), is("router"));
         assertThat(addressSpacePlan.getResources().get(1).getName(), is("broker"));
-        assertThat(addressSpacePlan.getMetadata().getAnnotations().size(), is (1));
+        assertThat(addressSpacePlan.getMetadata().getAnnotations().size(), is(1));
         assertThat(addressSpacePlan.getMetadata().getAnnotations().get("mykey"), is("myvalue"));
     }
 
@@ -389,7 +390,7 @@ public class SerializationTest {
         assertThat(addressPlan.getRequiredResources().get(1).getName(), is("broker"));
     }
 
-    @Test(expected = RuntimeException.class)
+    @Test
     public void testDeserializeAddressSpaceWithMissingAuthServiceValues() throws IOException {
         String json = "{" +
                 "\"apiVersion\":\"enmasse.io/v1alpha1\"," +
@@ -405,10 +406,10 @@ public class SerializationTest {
                 "}" +
                 "}";
 
-        CodecV1.getMapper().readValue(json, AddressSpace.class);
+        assertThrows(RuntimeException.class, () -> CodecV1.getMapper().readValue(json, AddressSpace.class));
     }
 
-    @Test(expected = RuntimeException.class)
+    @Test
     public void testDeserializeAddressSpaceWithExtraAuthServiceValues() throws IOException {
         String json = "{" +
                 "\"apiVersion\":\"enmasse.i/v1alpha1\"," +
@@ -427,7 +428,7 @@ public class SerializationTest {
                 "}" +
                 "}";
 
-        CodecV1.getMapper().readValue(json, AddressSpace.class);
+        assertThrows(DeserializeException.class, () -> CodecV1.getMapper().readValue(json, AddressSpace.class));
     }
 
     @Test
diff --git a/api-model/src/test/java/io/enmasse/admin/model/v1/InfraConfigDeserializerTest.java b/api-model/src/test/java/io/enmasse/admin/model/v1/InfraConfigDeserializerTest.java
index eb2604d8b..027e1e35a 100644
--- a/api-model/src/test/java/io/enmasse/admin/model/v1/InfraConfigDeserializerTest.java
+++ b/api-model/src/test/java/io/enmasse/admin/model/v1/InfraConfigDeserializerTest.java
@@ -6,7 +6,7 @@ package io.enmasse.admin.model.v1;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.enmasse.address.model.InfraConfigDeserializer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
diff --git a/api-model/src/test/java/io/enmasse/user/model/v1/UserModelTest.java b/api-model/src/test/java/io/enmasse/user/model/v1/UserModelTest.java
index 56554a5dc..5857f5cbd 100644
--- a/api-model/src/test/java/io/enmasse/user/model/v1/UserModelTest.java
+++ b/api-model/src/test/java/io/enmasse/user/model/v1/UserModelTest.java
@@ -15,9 +15,7 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
 
 public class UserModelTest {
     @Test
@@ -221,6 +219,6 @@ public class UserModelTest {
                 return;
             }
         }
-        assertFalse(true, "Unable to find matching authorization");
+        fail("Unable to find matching authorization");
     }
 }
diff --git a/api-server/src/test/java/io/enmasse/api/server/HTTPServerTest.java b/api-server/src/test/java/io/enmasse/api/server/HTTPServerTest.java
index df7e71893..d1494403f 100644
--- a/api-server/src/test/java/io/enmasse/api/server/HTTPServerTest.java
+++ b/api-server/src/test/java/io/enmasse/api/server/HTTPServerTest.java
@@ -5,7 +5,9 @@
 
 package io.enmasse.api.server;
 
-import io.enmasse.address.model.*;
+import io.enmasse.address.model.Address;
+import io.enmasse.address.model.AddressSpace;
+import io.enmasse.address.model.EndpointSpec;
 import io.enmasse.api.auth.AuthApi;
 import io.enmasse.api.auth.SubjectAccessReview;
 import io.enmasse.api.auth.TokenReview;
@@ -20,32 +22,32 @@ import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpClientRequest;
 import io.vertx.core.json.JsonArray;
 import io.vertx.core.json.JsonObject;
-import io.vertx.ext.unit.Async;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import io.vertx.junit5.VertxExtension;
+import io.vertx.junit5.VertxTestContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 import java.time.Clock;
 import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
 
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(VertxUnitRunner.class)
+@ExtendWith(VertxExtension.class)
 public class HTTPServerTest {
 
     private Vertx vertx;
     private TestAddressSpaceApi instanceApi;
     private AddressSpace addressSpace;
 
-    @Before
-    public void setup(TestContext context) throws InterruptedException {
+    @BeforeEach
+    public void setup(VertxTestContext context) throws InterruptedException {
         vertx = Vertx.vertx();
         instanceApi = new TestAddressSpaceApi();
         String addressSpaceName = "myinstance";
@@ -82,12 +84,12 @@ public class HTTPServerTest {
         ApiServerOptions options = new ApiServerOptions();
         options.setVersion("1.0");
         options.setCertDir("/doesnotexist");
-        vertx.deployVerticle(new HTTPServer(instanceApi, new TestSchemaProvider(),authApi, userApi, new Metrics(), options, null, null, Clock.systemUTC()), context.asyncAssertSuccess());
+        vertx.deployVerticle(new HTTPServer(instanceApi, new TestSchemaProvider(), authApi, userApi, new Metrics(), options, null, null, Clock.systemUTC()), context.succeeding(arg -> context.completeNow()));
     }
 
-    @After
-    public void teardown(TestContext context) {
-        vertx.close(context.asyncAssertSuccess());
+    @AfterEach
+    public void teardown(VertxTestContext context) {
+        vertx.close(context.succeeding(arg -> context.completeNow()));
     }
 
     private AddressSpace createAddressSpace(String name) {
@@ -105,75 +107,77 @@ public class HTTPServerTest {
     }
 
     @Test
-    public void testAddressingApi(TestContext context) throws InterruptedException {
+    public void testAddressingApi(VertxTestContext context) throws InterruptedException {
         instanceApi.withAddressSpace(addressSpace).createAddress(
-            new Address.Builder()
-                    .setAddressSpace("myinstance")
-                .setName("myinstance.addr1")
-                .setAddress("addR1")
-                .setNamespace("ns")
-                .setType("queue")
-                .setPlan("myplan")
-                .build());
+                new Address.Builder()
+                        .setAddressSpace("myinstance")
+                        .setName("myinstance.addr1")
+                        .setAddress("addR1")
+                        .setNamespace("ns")
+                        .setType("queue")
+                        .setPlan("myplan")
+                        .build());
 
         HttpClient client = vertx.createHttpClient();
         try {
             {
-                Async async = context.async();
                 HttpClientRequest r1 = client.get(8080, "localhost", "/apis/enmasse.io/v1alpha1/namespaces/ns/addressspaces/myinstance/addresses", response -> {
-                    context.assertEquals(200, response.statusCode());
+                    context.verify(() -> assertEquals(200, response.statusCode()));
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
-                        context.assertTrue(data.containsKey("items"));
-                        context.assertEquals("myinstance.addr1", data.getJsonArray("items").getJsonObject(0).getJsonObject("metadata").getString("name"));
-                        async.complete();
+                        context.verify(() -> {
+                            assertTrue(data.containsKey("items"));
+                            assertEquals("myinstance.addr1", data.getJsonArray("items").getJsonObject(0).getJsonObject("metadata").getString("name"));
+                        });
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(r1);
                 r1.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
             {
-                Async async = context.async();
                 HttpClientRequest r2 = client.get(8080, "localhost", "/apis/enmasse.io/v1alpha1/namespaces/ns/addresses/myinstance.addr1", response -> {
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
-                        context.assertTrue(data.containsKey("metadata"));
-                        context.assertEquals("myinstance.addr1", data.getJsonObject("metadata").getString("name"));
-                        async.complete();
+                        context.verify(() -> {
+                            assertTrue(data.containsKey("metadata"));
+                            assertEquals("myinstance.addr1", data.getJsonObject("metadata").getString("name"));
+                        });
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(r2);
                 r2.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
             {
-                Async async = context.async();
                 HttpClientRequest r3 = client.post(8080, "localhost", "/apis/enmasse.io/v1alpha1/namespaces/ns/addressspaces/myinstance/addresses", response -> {
                     response.bodyHandler(buffer -> {
-                        context.assertEquals(201, response.statusCode());
-                        async.complete();
+                        context.verify(() -> assertEquals(201, response.statusCode()));
+                        context.completeNow();
                     });
                 });
                 r3.putHeader("Content-Type", "application/json");
                 putAuthzToken(r3);
                 r3.end("{\"apiVersion\":\"enmasse.io/v1alpha1\",\"kind\":\"AddressList\",\"items\":[{\"metadata\":{\"name\":\"a4\"},\"spec\":{\"address\":\"a4\",\"type\":\"queue\",\"plan\":\"plan1\"}}]}");
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
             {
-                Async async = context.async();
                 HttpClientRequest r4 = client.get(8080, "localhost", "/apis/enmasse.io/v1alpha1/namespaces/ns/addressspaces/myinstance/addresses?address=addR1", response -> {
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
                         System.out.println(data.toString());
-                        context.assertTrue(data.containsKey("metadata"));
-                        context.assertEquals("addR1", data.getJsonObject("spec").getString("address"));
-                        async.complete();
+                        context.verify(() -> {
+                            assertTrue(data.containsKey("metadata"));
+                            assertEquals("addR1", data.getJsonObject("spec").getString("address"));
+                        });
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(r4);
                 r4.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
         } finally {
             client.close();
@@ -186,40 +190,38 @@ public class HTTPServerTest {
     }
 
     @Test
-    public void testApiResources(TestContext context) throws InterruptedException {
+    public void testApiResources(VertxTestContext context) throws InterruptedException {
         HttpClient client = vertx.createHttpClient();
         try {
             {
-                Async async = context.async();
                 HttpClientRequest rootReq = client.get(8080, "localhost", "/apis/enmasse.io/v1alpha1", response -> {
-                    context.assertEquals(200, response.statusCode());
+                    context.verify(() -> assertEquals(200, response.statusCode()));
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
-                        context.assertTrue(data.containsKey("resources"));
+                        context.verify(() -> assertTrue(data.containsKey("resources")));
                         JsonArray resources = data.getJsonArray("resources");
-                        context.assertEquals(3, resources.size());
-                        async.complete();
+                        context.verify(() -> assertEquals(3, resources.size()));
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(rootReq);
                 rootReq.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
             {
-                Async async = context.async();
                 HttpClientRequest rootReq = client.get(8080, "localhost", "/apis/user.enmasse.io/v1alpha1", response -> {
-                    context.assertEquals(200, response.statusCode());
+                    context.verify(() -> assertEquals(200, response.statusCode()));
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
-                        context.assertTrue(data.containsKey("resources"));
+                        context.verify(() -> assertTrue(data.containsKey("resources")));
                         JsonArray resources = data.getJsonArray("resources");
-                        context.assertEquals(1, resources.size());
-                        async.complete();
+                        context.verify(() -> assertEquals(1, resources.size()));
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(rootReq);
                 rootReq.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
         } finally {
             client.close();
@@ -227,24 +229,25 @@ public class HTTPServerTest {
     }
 
     @Test
-    public void testSchemaApi(TestContext context) throws InterruptedException {
+    public void testSchemaApi(VertxTestContext context) throws InterruptedException {
         HttpClient client = vertx.createHttpClient();
         try {
             {
-                Async async = context.async();
                 HttpClientRequest request = client.get(8080, "localhost", "/apis/enmasse.io/v1alpha1/namespaces/myinstance/addressspaceschemas", response -> {
-                    context.assertEquals(200, response.statusCode());
+                    context.verify(() -> assertEquals(200, response.statusCode()));
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
                         System.out.println(data.toString());
-                        context.assertTrue(data.containsKey("items"));
-                        context.assertEquals(1, data.getJsonArray("items").size());
-                        async.complete();
+                        context.verify(() -> {
+                            assertTrue(data.containsKey("items"));
+                            assertEquals(1, data.getJsonArray("items").size());
+                        });
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(request);
                 request.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
         } finally {
             client.close();
@@ -252,23 +255,24 @@ public class HTTPServerTest {
     }
 
     @Test
-    public void testUserApi(TestContext context) {
+    public void testUserApi(VertxTestContext context) throws Exception {
         HttpClient client = vertx.createHttpClient();
         try {
             {
-                Async async = context.async();
                 HttpClientRequest r1 = client.get(8080, "localhost", "/apis/user.enmasse.io/v1alpha1/namespaces/ns/messagingusers", response -> {
-                    context.assertEquals(200, response.statusCode());
+                    context.verify(() -> assertEquals(200, response.statusCode()));
                     response.bodyHandler(buffer -> {
                         JsonObject data = buffer.toJsonObject();
-                        context.assertTrue(data.containsKey("items"));
-                        context.assertEquals("myinstance.user1", data.getJsonArray("items").getJsonObject(0).getJsonObject("metadata").getString("name"));
-                        async.complete();
+                        context.verify(() -> {
+                            assertTrue(data.containsKey("items"));
+                            assertEquals("myinstance.user1", data.getJsonArray("items").getJsonObject(0).getJsonObject("metadata").getString("name"));
+                        });
+                        context.completeNow();
                     });
                 });
                 putAuthzToken(r1);
                 r1.end();
-                async.awaitSuccess(60_000);
+                context.awaitCompletion(60, TimeUnit.SECONDS);
             }
         } finally {
             client.close();
@@ -323,21 +327,20 @@ public class HTTPServerTest {
     */
 
     @Test
-    public void testOpenApiSpec(TestContext context) throws InterruptedException {
+    public void testOpenApiSpec(VertxTestContext context) throws InterruptedException {
         HttpClientOptions options = new HttpClientOptions();
         HttpClient client = vertx.createHttpClient(options);
         try {
-            Async async = context.async();
             HttpClientRequest request = client.get(8080, "localhost", "/swagger.json", response -> {
                 response.bodyHandler(buffer -> {
                     JsonObject data = buffer.toJsonObject();
-                    context.assertTrue(data.containsKey("paths"));
-                    async.complete();
+                    context.verify(() -> assertTrue(data.containsKey("paths")));
+                    context.completeNow();
                 });
             });
             putAuthzToken(request);
             request.end();
-            async.awaitSuccess(60_000);
+            context.awaitCompletion(60, TimeUnit.SECONDS);
         } finally {
             client.close();
         }
diff --git a/api-server/src/test/java/io/enmasse/api/v1/AddressApiHelperTest.java b/api-server/src/test/java/io/enmasse/api/v1/AddressApiHelperTest.java
index 8020517a8..156425dd9 100644
--- a/api-server/src/test/java/io/enmasse/api/v1/AddressApiHelperTest.java
+++ b/api-server/src/test/java/io/enmasse/api/v1/AddressApiHelperTest.java
@@ -5,41 +5,34 @@
 
 package io.enmasse.api.v1;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.*;
-import static org.mockito.ArgumentMatchers.same;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.*;
-
-import java.util.*;
-
 import io.enmasse.address.model.Address;
 import io.enmasse.address.model.AddressSpace;
 import io.enmasse.api.server.TestSchemaProvider;
 import io.enmasse.k8s.api.AddressApi;
 import io.enmasse.k8s.api.AddressSpaceApi;
 import org.apache.http.auth.BasicUserPrincipal;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.internal.util.collections.Sets;
 
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.core.SecurityContext;
+import java.util.*;
 
-public class AddressApiHelperTest {
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
 
-    @Rule
-    public final ExpectedException expectedException = ExpectedException.none();
+public class AddressApiHelperTest {
 
     private AddressApiHelper helper;
     private AddressApi addressApi;
     private SecurityContext securityContext;
 
-    @Before
+    @BeforeEach
     public void setup() {
         AddressSpace addressSpace = mock(AddressSpace.class);
         when(addressSpace.getType()).thenReturn("type1");
@@ -56,11 +49,9 @@ public class AddressApiHelperTest {
     @Test
     public void testCreateAddressResourceNameAlreadyExists() throws Exception {
         when(addressApi.listAddresses(any())).thenReturn(Collections.singleton(createAddress("q1", "q1")));
-        expectedException.expect(BadRequestException.class);
-        expectedException.expectMessage("Address 'q1' already exists with resource name 'q1'");
-
         Address invalidAddress = createAddress("someOtherName", "q1");
-        helper.createAddress("test", invalidAddress);
+        Throwable exception = assertThrows(BadRequestException.class, () -> helper.createAddress("test", invalidAddress));
+        assertEquals("Address 'q1' already exists with resource name 'q1'", exception.getMessage());
         verify(addressApi, never()).createAddress(any(Address.class));
     }
 
@@ -127,11 +118,8 @@ public class AddressApiHelperTest {
     @Test
     public void testReplaceAddressNotFound() throws Exception {
         when(addressApi.replaceAddress(any())).thenReturn(false);
-        expectedException.expect(NotFoundException.class);
-        expectedException.expectMessage("Address q1 not found");
-
-        helper.replaceAddress("test", createAddress("q1"));
-        verify(addressApi, never()).replaceAddress(any(Address.class));
+        Throwable exception = assertThrows(NotFoundException.class, () -> helper.replaceAddress("test", createAddress("q1")));
+        assertEquals("Address q1 not found", exception.getMessage());
     }
 
     @Test
@@ -141,11 +129,9 @@ public class AddressApiHelperTest {
         addresses.add(createAddress("q2", "q2"));
         when(addressApi.listAddresses(any())).thenReturn(addresses);
         when(addressApi.replaceAddress(any())).thenReturn(true);
-        expectedException.expect(BadRequestException.class);
-        expectedException.expectMessage("Address 'q2' already exists with resource name 'q2'");
-
         Address invalidAddress = createAddress("q1", "q2");
-        helper.replaceAddress("test", invalidAddress);
+        Throwable exception = assertThrows(BadRequestException.class, () -> helper.replaceAddress("test", invalidAddress));
+        assertEquals("Address 'q2' already exists with resource name 'q2'", exception.getMessage());
         verify(addressApi, never()).replaceAddress(any(Address.class));
     }
 
@@ -197,13 +183,11 @@ public class AddressApiHelperTest {
         assertThat(labels.get("key3"), is("value3"));
     }
 
-    private Address createAddress(String name, String address)
-    {
+    private Address createAddress(String name, String address) {
         return new Address.Builder().setName(name).setNamespace("ns").setAddress(address).setAddressSpace("test").setType("queue").setPlan("plan1").build();
     }
 
-    private Address createAddress(String address)
-    {
+    private Address createAddress(String address) {
         return createAddress(address, address);
     }
 }
diff --git a/api-server/src/test/java/io/enmasse/api/v1/http/HttpAddressSpaceServiceTest.java b/api-server/src/test/java/io/enmasse/api/v1/http/HttpAddressSpaceServiceTest.java
index cc28687e7..0e2e7453e 100644
--- a/api-server/src/test/java/io/enmasse/api/v1/http/HttpAddressSpaceServiceTest.java
+++ b/api-server/src/test/java/io/enmasse/api/v1/http/HttpAddressSpaceServiceTest.java
@@ -13,9 +13,8 @@ import io.enmasse.api.server.TestSchemaProvider;
 import io.enmasse.k8s.api.TestAddressSpaceApi;
 import io.enmasse.k8s.model.v1beta1.Table;
 import io.enmasse.k8s.util.TimeUtil;
-import org.jboss.resteasy.spi.ResteasyUriInfo;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
@@ -26,10 +25,9 @@ import java.util.Arrays;
 import java.util.concurrent.Callable;
 
 import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -42,7 +40,7 @@ public class HttpAddressSpaceServiceTest {
     private DefaultExceptionMapper exceptionMapper = new DefaultExceptionMapper();
     private SecurityContext securityContext;
 
-    @Before
+    @BeforeEach
     public void setup() {
         addressSpaceApi = new TestAddressSpaceApi();
         addressSpaceService = new HttpAddressSpaceService(addressSpaceApi, new TestSchemaProvider(), Clock.systemUTC());
@@ -56,13 +54,13 @@ public class HttpAddressSpaceServiceTest {
                 .setCreationTimestamp(TimeUtil.formatRfc3339(Instant.ofEpochSecond(123)))
                 .setEndpointList(Arrays.asList(
                         new EndpointSpec.Builder()
-                            .setName("messaging")
-                            .setService("messaging")
-                        .build(),
+                                .setName("messaging")
+                                .setService("messaging")
+                                .build(),
                         new EndpointSpec.Builder()
-                            .setName("mqtt")
-                            .setService("mqtt")
-                        .build()))
+                                .setName("mqtt")
+                                .setService("mqtt")
+                                .build()))
                 .build();
 
         a2 = new AddressSpace.Builder()
@@ -119,7 +117,7 @@ public class HttpAddressSpaceServiceTest {
         addressSpaceApi.createAddressSpace(a1);
         Response response = invoke(() -> addressSpaceService.getAddressSpace(securityContext, null, null, "a1"));
         assertThat(response.getStatus(), is(200));
-        AddressSpace data = ((AddressSpace)response.getEntity());
+        AddressSpace data = ((AddressSpace) response.getEntity());
 
         assertThat(data, is(a1));
         assertThat(data.getEndpoints().size(), is(a1.getEndpoints().size()));
@@ -130,7 +128,7 @@ public class HttpAddressSpaceServiceTest {
         addressSpaceApi.createAddressSpace(a1);
         Response response = invoke(() -> addressSpaceService.getAddressSpace(securityContext, "application/json;as=Table;g=meta.k8s.io;v=v1beta1", null, "a1"));
         assertThat(response.getStatus(), is(200));
-        Table data = ((Table)response.getEntity());
+        Table data = ((Table) response.getEntity());
 
         assertThat(data.getColumnDefinitions().size(), is(6));
         assertThat(data.getRows().get(0).getObject().getMetadata().getName(), is(a1.getName()));
@@ -180,9 +178,9 @@ public class HttpAddressSpaceServiceTest {
         addressSpaceApi.createAddressSpace(a1);
         addressSpaceApi.createAddressSpace(a2);
 
-        Response response = invoke(() -> addressSpaceService.deleteAddressSpace(securityContext, null,"a1"));
+        Response response = invoke(() -> addressSpaceService.deleteAddressSpace(securityContext, null, "a1"));
         assertThat(response.getStatus(), is(200));
-        assertThat(((Status)response.getEntity()).getStatusCode(), is(200));
+        assertThat(((Status) response.getEntity()).getStatusCode(), is(200));
 
         assertThat(addressSpaceApi.listAddressSpaces(null), hasItem(a2));
         assertThat(addressSpaceApi.listAddressSpaces(null).size(), is(1));
@@ -192,14 +190,14 @@ public class HttpAddressSpaceServiceTest {
     public void testDeleteException() {
         addressSpaceApi.createAddressSpace(a1);
         addressSpaceApi.throwException = true;
-        Response response = invoke(() -> addressSpaceService.deleteAddressSpace(securityContext, null,"a1"));
+        Response response = invoke(() -> addressSpaceService.deleteAddressSpace(securityContext, null, "a1"));
         assertThat(response.getStatus(), is(500));
     }
 
     @Test
     public void testDeleteNotFound() {
         addressSpaceApi.createAddressSpace(a1);
-        Response response = invoke(() -> addressSpaceService.deleteAddressSpace(securityContext, null,"doesnotexist"));
+        Response response = invoke(() -> addressSpaceService.deleteAddressSpace(securityContext, null, "doesnotexist"));
         assertThat(response.getStatus(), is(404));
     }
 
@@ -210,6 +208,6 @@ public class HttpAddressSpaceServiceTest {
 
         Response response = invoke(() -> addressSpaceService.deleteAddressSpaces(securityContext, "myspace"));
         assertThat(response.getStatus(), is(200));
-        assertThat(((Status)response.getEntity()).getStatusCode(), is(200));
+        assertThat(((Status) response.getEntity()).getStatusCode(), is(200));
     }
 }
diff --git a/api-server/src/test/java/io/enmasse/api/v1/http/HttpClusterAddressSpaceServiceTest.java b/api-server/src/test/java/io/enmasse/api/v1/http/HttpClusterAddressSpaceServiceTest.java
index 104901dd3..bfde0678d 100644
--- a/api-server/src/test/java/io/enmasse/api/v1/http/HttpClusterAddressSpaceServiceTest.java
+++ b/api-server/src/test/java/io/enmasse/api/v1/http/HttpClusterAddressSpaceServiceTest.java
@@ -8,13 +8,11 @@ import io.enmasse.address.model.AddressSpace;
 import io.enmasse.address.model.AddressSpaceList;
 import io.enmasse.address.model.EndpointSpec;
 import io.enmasse.api.common.DefaultExceptionMapper;
-import io.enmasse.api.common.Status;
-import io.enmasse.api.server.TestSchemaProvider;
 import io.enmasse.k8s.api.TestAddressSpaceApi;
 import io.enmasse.k8s.model.v1beta1.Table;
 import io.enmasse.k8s.util.TimeUtil;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
@@ -26,8 +24,7 @@ import java.util.concurrent.Callable;
 
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -40,7 +37,7 @@ public class HttpClusterAddressSpaceServiceTest {
     private DefaultExceptionMapper exceptionMapper = new DefaultExceptionMapper();
     private SecurityContext securityContext;
 
-    @Before
+    @BeforeEach
     public void setup() {
         addressSpaceApi = new TestAddressSpaceApi();
         addressSpaceService = new HttpClusterAddressSpaceService(addressSpaceApi, Clock.systemUTC());
@@ -54,13 +51,13 @@ public class HttpClusterAddressSpaceServiceTest {
                 .setCreationTimestamp(TimeUtil.formatRfc3339(Instant.ofEpochSecond(123)))
                 .setEndpointList(Arrays.asList(
                         new EndpointSpec.Builder()
-                            .setName("messaging")
-                            .setService("messaging")
-                        .build(),
+                                .setName("messaging")
+                                .setService("messaging")
+                                .build(),
                         new EndpointSpec.Builder()
-                            .setName("mqtt")
-                            .setService("mqtt")
-                        .build()))
+                                .setName("mqtt")
+                                .setService("mqtt")
+                                .build()))
                 .build();
 
         a2 = new AddressSpace.Builder()
@@ -84,7 +81,7 @@ public class HttpClusterAddressSpaceServiceTest {
     public void testList() {
         addressSpaceApi.createAddressSpace(a1);
         addressSpaceApi.createAddressSpace(a2);
-        Response response = invoke(() -> addressSpaceService.getAddressSpaceList(securityContext, MediaType.APPLICATION_JSON,  null));
+        Response response = invoke(() -> addressSpaceService.getAddressSpaceList(securityContext, MediaType.APPLICATION_JSON, null));
         assertThat(response.getStatus(), is(200));
         AddressSpaceList data = (AddressSpaceList) response.getEntity();
 
@@ -97,7 +94,7 @@ public class HttpClusterAddressSpaceServiceTest {
     public void testListTableFormat() {
         addressSpaceApi.createAddressSpace(a1);
         addressSpaceApi.createAddressSpace(a2);
-        Response response = invoke(() -> addressSpaceService.getAddressSpaceList(securityContext, "application/json;as=Table;g=meta.k8s.io;v=v1beta1",  null));
+        Response response = invoke(() -> addressSpaceService.getAddressSpaceList(securityContext, "application/json;as=Table;g=meta.k8s.io;v=v1beta1", null));
         assertThat(response.getStatus(), is(200));
         Table data = (Table) response.getEntity();
 
@@ -108,7 +105,7 @@ public class HttpClusterAddressSpaceServiceTest {
     @Test
     public void testListException() {
         addressSpaceApi.throwException = true;
-        Response response = invoke(() -> addressSpaceService.getAddressSpaceList(securityContext, MediaType.APPLICATION_JSON,  null));
+        Response response = invoke(() -> addressSpaceService.getAddressSpaceList(securityContext, MediaType.APPLICATION_JSON, null));
         assertThat(response.getStatus(), is(500));
     }
 }
diff --git a/api-server/src/test/java/io/enmasse/api/v1/http/HttpNestedAddressServiceTest.java b/api-server/src/test/java/io/enmasse/api/v1/http/HttpNestedAddressServiceTest.java
index 42fc40cdb..0505b4703 100644
--- a/api-server/src/test/java/io/enmasse/api/v1/http/HttpNestedAddressServiceTest.java
+++ b/api-server/src/test/java/io/enmasse/api/v1/http/HttpNestedAddressServiceTest.java
@@ -15,8 +15,8 @@ import io.enmasse.k8s.api.TestAddressApi;
 import io.enmasse.k8s.api.TestAddressSpaceApi;
 import io.enmasse.k8s.model.v1beta1.Table;
 import org.jboss.resteasy.spi.ResteasyUriInfo;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
@@ -28,7 +28,7 @@ import java.util.concurrent.Callable;
 
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -42,7 +42,7 @@ public class HttpNestedAddressServiceTest {
     private DefaultExceptionMapper exceptionMapper = new DefaultExceptionMapper();
     private SecurityContext securityContext;
 
-    @Before
+    @BeforeEach
     public void setup() {
         addressSpaceApi = new TestAddressSpaceApi();
         this.addressService = new HttpNestedAddressService(addressSpaceApi, new TestSchemaProvider(), Clock.fixed(Instant.ofEpochSecond(1234), ZoneId.of("UTC")));
@@ -118,7 +118,7 @@ public class HttpNestedAddressServiceTest {
 
     @Test
     public void testGetByAddressNotFound() {
-        Response response = invoke(() -> addressService.getAddressList(securityContext, null, "ns", "myspace","b1", null));
+        Response response = invoke(() -> addressService.getAddressList(securityContext, null, "ns", "myspace", "b1", null));
 
         assertThat(response.getStatus(), is(404));
     }
@@ -197,7 +197,7 @@ public class HttpNestedAddressServiceTest {
         assertThat(addresses.isEmpty(), is(false));
         Address address = addresses.iterator().next();
         Address a1 = new Address.Builder(address).setPlan("plan1").build();
-        
+
         Response response = invoke(() -> addressService.replaceAddress(securityContext, "ns", "myspace", a1.getName(), a1));
         assertThat(response.getStatus(), is(200));
 
@@ -235,7 +235,7 @@ public class HttpNestedAddressServiceTest {
     public void testDelete() {
         Response response = invoke(() -> addressService.deleteAddress(securityContext, "ns", "myspace", "a1"));
         assertThat(response.getStatus(), is(200));
-        assertThat(((Status)response.getEntity()).getStatusCode(), is(200));
+        assertThat(((Status) response.getEntity()).getStatusCode(), is(200));
 
         assertThat(addressApi.listAddresses("ns"), hasItem(q1));
         assertThat(addressApi.listAddresses("ns").size(), is(1));
@@ -262,7 +262,7 @@ public class HttpNestedAddressServiceTest {
 
         response = invoke(() -> addressService.deleteAddresses(securityContext, "ns"));
         assertThat(response.getStatus(), is(200));
-        assertThat(((Status)response.getEntity()).getStatusCode(), is(200));
+        assertThat(((Status) response.getEntity()).getStatusCode(), is(200));
         assertThat(addressApi.listAddresses("ns").size(), is(0));
     }
 }
diff --git a/api-server/src/test/java/io/enmasse/api/v1/http/HttpUserServiceTest.java b/api-server/src/test/java/io/enmasse/api/v1/http/HttpUserServiceTest.java
index efe07d7ed..78c420cd9 100644
--- a/api-server/src/test/java/io/enmasse/api/v1/http/HttpUserServiceTest.java
+++ b/api-server/src/test/java/io/enmasse/api/v1/http/HttpUserServiceTest.java
@@ -14,8 +14,8 @@ import io.enmasse.user.model.v1.*;
 import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
 
 import org.jboss.resteasy.spi.ResteasyUriInfo;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
@@ -25,9 +25,9 @@ import java.util.concurrent.Callable;
 
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -41,7 +41,7 @@ public class HttpUserServiceTest {
     private DefaultExceptionMapper exceptionMapper = new DefaultExceptionMapper();
     private SecurityContext securityContext;
 
-    @Before
+    @BeforeEach
     public void setup() {
         addressSpaceApi = new TestAddressSpaceApi();
         userApi = new TestUserApi();
@@ -50,7 +50,6 @@ public class HttpUserServiceTest {
         when(securityContext.isUserInRole(any())).thenReturn(true);
 
 
-
         addressSpaceApi.createAddressSpace(new AddressSpace.Builder()
                 .setName("myspace")
                 .setNamespace("ns1")
@@ -335,7 +334,7 @@ public class HttpUserServiceTest {
     public void testDelete() {
         Response response = invoke(() -> userService.deleteUser(securityContext, "ns1", "myspace.user1"));
         assertThat(response.getStatus(), is(200));
-        assertThat(((Status)response.getEntity()).getStatusCode(), is(200));
+        assertThat(((Status) response.getEntity()).getStatusCode(), is(200));
 
         assertTrue(userApi.listUsers("ns1").getItems().isEmpty());
         assertFalse(userApi.listUsers("ns2").getItems().isEmpty());
diff --git a/api-server/src/test/java/io/enmasse/api/v1/http/TestUserApi.java b/api-server/src/test/java/io/enmasse/api/v1/http/TestUserApi.java
index 617955ae2..ce019eb0e 100644
--- a/api-server/src/test/java/io/enmasse/api/v1/http/TestUserApi.java
+++ b/api-server/src/test/java/io/enmasse/api/v1/http/TestUserApi.java
@@ -13,7 +13,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 
-public class TestUserApi implements UserApi  {
+public class TestUserApi implements UserApi {
     private final Map<String, Map<String, User>> userMap = new HashMap<>();
     public boolean throwException = false;
 
diff --git a/broker-plugin/sasl-delegation/src/test/java/io/enmasse/artemis/sasl_delegation/SaslDelegatingLoginTest.java b/broker-plugin/sasl-delegation/src/test/java/io/enmasse/artemis/sasl_delegation/SaslDelegatingLoginTest.java
index af266fb9f..259fe0097 100644
--- a/broker-plugin/sasl-delegation/src/test/java/io/enmasse/artemis/sasl_delegation/SaslDelegatingLoginTest.java
+++ b/broker-plugin/sasl-delegation/src/test/java/io/enmasse/artemis/sasl_delegation/SaslDelegatingLoginTest.java
@@ -23,22 +23,10 @@ import org.apache.activemq.artemis.spi.core.security.jaas.UserPrincipal;
 import org.apache.qpid.proton.amqp.Symbol;
 import org.apache.qpid.proton.engine.Sasl;
 import org.apache.qpid.proton.engine.Transport;
-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.nio.charset.StandardCharsets;
-import java.security.Principal;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.stream.Collectors;
 import javax.security.auth.Subject;
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;
@@ -47,11 +35,14 @@ import javax.security.auth.callback.PasswordCallback;
 import javax.security.auth.login.LoginException;
 import javax.security.cert.CertificateException;
 import javax.security.cert.X509Certificate;
+import java.nio.charset.StandardCharsets;
+import java.security.Principal;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
 
-import static junit.framework.TestCase.assertFalse;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.*;
 
 public class SaslDelegatingLoginTest {
 
@@ -66,7 +57,7 @@ public class SaslDelegatingLoginTest {
     private String mechName;
     private SaslGroupBasedSecuritySettingsPlugin securityPlugin = new SaslGroupBasedSecuritySettingsPlugin();
 
-    @Before
+    @BeforeEach
     public void setup() throws ExecutionException, InterruptedException {
         options.clear();
         loginModule = new SaslDelegatingLogin();
@@ -85,7 +76,7 @@ public class SaslDelegatingLoginTest {
         vertx = Vertx.vertx();
         CompletableFuture<String> idFuture = new CompletableFuture<>();
         vertx.deployVerticle(authServer, result -> {
-            if(result.succeeded()) {
+            if (result.succeeded()) {
                 idFuture.complete(result.result());
             } else {
                 idFuture.completeExceptionally(result.cause());
@@ -99,7 +90,7 @@ public class SaslDelegatingLoginTest {
         options.put("default_roles_authenticated", "all");
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         vertx.close();
     }
@@ -109,13 +100,13 @@ public class SaslDelegatingLoginTest {
     public void testSuccessfulCredentialLogin() throws Exception {
         Subject subject = new Subject();
         validLogins.put("user", "password");
-        groups.put("user", Arrays.asList("send_a","recv_b"));
+        groups.put("user", Arrays.asList("send_a", "recv_b"));
         loginModule.initialize(subject, createCallbackHandler("user", "password".toCharArray()), Collections.emptyMap(), options);
-        assertTrue("Login unexpectedly failed", loginModule.login());
-        assertEquals("No principals should be added until after the commit", 0, subject.getPrincipals().size());
-        assertTrue("Commit unexpectedly failed", loginModule.commit());
-        assertEquals("Unexpected user principal names", Collections.singleton("user"), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
-        assertEquals("Unexpected role principal names", new HashSet<>(Arrays.asList("send_a","recv_b","all")), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
+        assertTrue(loginModule.login(), "Login unexpectedly failed");
+        assertEquals(0, subject.getPrincipals().size(), "No principals should be added until after the commit");
+        assertTrue(loginModule.commit(), "Commit unexpectedly failed");
+        assertEquals(Collections.singleton("user"), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected user principal names");
+        assertEquals(new HashSet<>(Arrays.asList("send_a", "recv_b", "all")), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected role principal names");
     }
 
     // unsuccessful credentials login
@@ -123,13 +114,13 @@ public class SaslDelegatingLoginTest {
     public void testUnsuccessfulCredentialLogin() throws Exception {
         Subject subject = new Subject();
         validLogins.put("user", "password2");
-        groups.put("user", Arrays.asList("a","b"));
+        groups.put("user", Arrays.asList("a", "b"));
         loginModule.initialize(subject, createCallbackHandler("user", "password".toCharArray()), Collections.emptyMap(), options);
-        assertFalse("Login unexpectedly succeeded", loginModule.login());
-        assertEquals("No principals should be added until after the commit", 0, subject.getPrincipals().size());
+        assertFalse(loginModule.login(), "Login unexpectedly succeeded");
+        assertEquals(0, subject.getPrincipals().size(), "No principals should be added until after the commit");
         loginModule.commit();
-        assertEquals("Unexpected user principal names", Collections.emptySet(), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
-        assertEquals("Unexpected role principal names", Collections.emptySet(), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
+        assertEquals(Collections.emptySet(), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected user principal names");
+        assertEquals(Collections.emptySet(), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected role principal names");
 
     }
 
@@ -139,7 +130,7 @@ public class SaslDelegatingLoginTest {
         mechName = "WIBBLE";
         Subject subject = new Subject();
         validLogins.put("user", "password");
-        groups.put("user", Arrays.asList("a","b"));
+        groups.put("user", Arrays.asList("a", "b"));
         loginModule.initialize(subject, createCallbackHandler("user", "password".toCharArray()), Collections.emptyMap(), options);
         try {
             loginModule.login();
@@ -158,20 +149,20 @@ public class SaslDelegatingLoginTest {
         Subject subject = new Subject();
 
         loginModule.initialize(subject, createCallbackHandler(null, null, generateCertificate(CERT_FOO)), Collections.emptyMap(), options);
-        assertTrue("Login unexpectedly failed", loginModule.login());
-        assertEquals("No principals should be added until after the commit", 0, subject.getPrincipals().size());
-        assertTrue("Commit unexpectedly failed", loginModule.commit());
-        assertEquals("Unexpected user principal names", Collections.singleton("foo"), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
-        assertEquals("Unexpected role principal names", new HashSet<>(Arrays.asList("a","b")), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
+        assertTrue(loginModule.login(), "Login unexpectedly failed");
+        assertEquals(0, subject.getPrincipals().size(), "No principals should be added until after the commit");
+        assertTrue(loginModule.commit(), "Commit unexpectedly failed");
+        assertEquals(Collections.singleton("foo"), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected user principal names");
+        assertEquals(new HashSet<>(Arrays.asList("a", "b")), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected role principal names");
 
         subject = new Subject();
 
         loginModule.initialize(subject, createCallbackHandler(null, null, generateCertificate(CERT_BAR)), Collections.emptyMap(), options);
-        assertTrue("Login unexpectedly failed", loginModule.login());
-        assertEquals("No principals should be added until after the commit", 0, subject.getPrincipals().size());
-        assertTrue("Commit unexpectedly failed", loginModule.commit());
-        assertEquals("Unexpected user principal names", Collections.singleton("bar"), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
-        assertEquals("Unexpected role principal names", Collections.singleton("c"), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
+        assertTrue(loginModule.login(), "Login unexpectedly failed");
+        assertEquals(0, subject.getPrincipals().size(), "No principals should be added until after the commit");
+        assertTrue(loginModule.commit(), "Commit unexpectedly failed");
+        assertEquals(Collections.singleton("bar"), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected user principal names");
+        assertEquals(Collections.singleton("c"), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected role principal names");
 
     }
 
@@ -185,24 +176,24 @@ public class SaslDelegatingLoginTest {
         Subject subject = new Subject();
 
         loginModule.initialize(subject, createCallbackHandler(null, null, generateCertificate(CERT_BANANA)), Collections.emptyMap(), options);
-        assertFalse("Login unexpectedly succeeded", loginModule.login());
-        assertEquals("No principals should be added until after the commit", 0, subject.getPrincipals().size());
+        assertFalse(loginModule.login(), "Login unexpectedly succeeded");
+        assertEquals(0, subject.getPrincipals().size(), "No principals should be added until after the commit");
         loginModule.commit();
-        assertEquals("Unexpected user principal names", Collections.emptySet(), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
-        assertEquals("Unexpected role principal names", Collections.emptySet(), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()));
+        assertEquals(Collections.emptySet(), subject.getPrincipals(UserPrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected user principal names");
+        assertEquals(Collections.emptySet(), subject.getPrincipals(RolePrincipal.class).stream().map(Principal::getName).collect(Collectors.toSet()), "Unexpected role principal names");
 
     }
 
 
     private CallbackHandler createCallbackHandler(String user, char[] password, X509Certificate... certificates) {
         return callbacks -> {
-            for(Callback callback : callbacks) {
-                if(callback instanceof NameCallback && user != null) {
-                    ((NameCallback)callback).setName(user);
-                } else if(callback instanceof PasswordCallback && password != null) {
-                    ((PasswordCallback)callback).setPassword(password);
-                } else if(callback instanceof CertificateCallback && (certificates.length != 0)) {
-                    ((CertificateCallback)callback).setCertificates(certificates);
+            for (Callback callback : callbacks) {
+                if (callback instanceof NameCallback && user != null) {
+                    ((NameCallback) callback).setName(user);
+                } else if (callback instanceof PasswordCallback && password != null) {
+                    ((PasswordCallback) callback).setPassword(password);
+                } else if (callback instanceof CertificateCallback && (certificates.length != 0)) {
+                    ((CertificateCallback) callback).setCertificates(certificates);
                 }
             }
         };
@@ -218,7 +209,6 @@ public class SaslDelegatingLoginTest {
     private final class AuthServer extends AbstractVerticle {
 
 
-
         private ProtonServer server;
         private final CompletableFuture<Integer> portFuture;
         private final SaslAuthenticator saslAuthenticator;
@@ -236,15 +226,15 @@ public class SaslDelegatingLoginTest {
                 Map<String, Object> claims = new HashMap<>();
                 claims.put("sub", saslAuthenticator.getUser());
                 claims.put("preferred_username", saslAuthenticator.getUser());
-                props.put(Symbol.valueOf("authenticated-identity"),claims);
-                if(connection.getRemoteDesiredCapabilities() != null && Arrays.asList(connection.getRemoteDesiredCapabilities()).contains(ADDRESS_AUTHZ_CAPABILITY)) {
-                    connection.setOfferedCapabilities(new Symbol[] { ADDRESS_AUTHZ_CAPABILITY });
-                    if(groups.containsKey(saslAuthenticator.getUser())) {
+                props.put(Symbol.valueOf("authenticated-identity"), claims);
+                if (connection.getRemoteDesiredCapabilities() != null && Arrays.asList(connection.getRemoteDesiredCapabilities()).contains(ADDRESS_AUTHZ_CAPABILITY)) {
+                    connection.setOfferedCapabilities(new Symbol[]{ADDRESS_AUTHZ_CAPABILITY});
+                    if (groups.containsKey(saslAuthenticator.getUser())) {
                         props.put(ADDRESS_AUTHZ_PROPERTY, getPermissionsFromGroups(groups.get(saslAuthenticator.getUser())));
                     }
                 }
 
-                if(groups.containsKey(saslAuthenticator.getUser())) {
+                if (groups.containsKey(saslAuthenticator.getUser())) {
                     props.put(Symbol.valueOf("groups"), groups.get(saslAuthenticator.getUser()));
                 }
                 connection.setProperties(props);
@@ -261,9 +251,9 @@ public class SaslDelegatingLoginTest {
 
         Map<String, String[]> getPermissionsFromGroups(List<String> groups) {
             Map<String, Set<String>> authMap = new HashMap<>();
-            for(String group : groups) {
+            for (String group : groups) {
                 String[] parts = group.split("_", 2);
-                if(parts[0] != null) {
+                if (parts[0] != null) {
                     Set<String> permissions = authMap.computeIfAbsent(parts[1], a -> new HashSet<>());
                     permissions.add(parts[0]);
                 }
@@ -281,7 +271,7 @@ public class SaslDelegatingLoginTest {
             server.connectHandler(this::connectHandler);
 
             server.listen(0, "127.0.0.1", event -> {
-                if(event.failed()) {
+                if (event.failed()) {
                     portFuture.completeExceptionally(event.cause());
                 } else {
                     portFuture.complete(server.actualPort());
@@ -299,97 +289,97 @@ public class SaslDelegatingLoginTest {
     }
 
     private static final String CERT_FOO = "-----BEGIN CERTIFICATE-----\n" +
-        "MIIFDjCCAvagAwIBAgIJAJjPI7TtVOCpMA0GCSqGSIb3DQEBBQUAMA4xDDAKBgNV\n" +
-        "BAMTA2ZvbzAeFw0xNzEwMTIwODU4NTNaFw0xODEwMTIwODU4NTNaMA4xDDAKBgNV\n" +
-        "BAMTA2ZvbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALsasR9eE/77\n" +
-        "qmt1Gjz+/wJzu3V9pgde1iBuwoXHKGZyayMHLucnKXVF3o7DEk0R/1m3hKh5QoNV\n" +
-        "BHgiUzfjxKFxk85F00G/B1FkDXGjxqUz84hsSnOZS7917AdVHQ4FNfbUIeWgkRe3\n" +
-        "EqK/C3QiyVPr0Uou9jU+YLxOItB22KXVKO3gtBaZfaj8MpzPi8XOxesfpTB+1Fws\n" +
-        "336aYeeDxH78t05EnwqEd+bX7BPs+0DsReARKVi1v9YNRUX2AAQDBGqLKz39Eg0M\n" +
-        "0BaiRLv7O4i0DEJlGYC05P8L5Nb8JwZ8XQV0jlZrqNiqSqL2Glt+m4LkBLFwDfZz\n" +
-        "Q95FVeSSD4AlUB1eHnv41lT3SDOvLV8e6c222MDuC0V7eKDdCWVNlzQpwMyZKeBR\n" +
-        "HOl5IRjVAi2+JEE7YyzgIn68ZY2YLOBzoUKawPeThak6hJEzDaXzpUVJtKH9LnIW\n" +
-        "Yyt+K+c9/Sm4Cs95tCALA005r4GSypcTIdAdOpO9UcS4ObeKRhdCFHgkNitkw4i0\n" +
-        "X2i80y7lzoEV64ZbzMpqq0jWN2LzkHNU5zl5AoL7s8pFMSoQruOEOhIq3yHlDJ9W\n" +
-        "0cGgzz2XvTQgXtCi4H/pVSXo7ojLffGW5CP4+k8iFAO4uIsqAUKRG2kCSNv3KTMj\n" +
-        "f6d00flOm6S2+zIBCSz8UF8RmUknf6Y/AgMBAAGjbzBtMB0GA1UdDgQWBBTlJ705\n" +
-        "R48NTZMfuQyn9D4TeEeDvjA+BgNVHSMENzA1gBTlJ705R48NTZMfuQyn9D4TeEeD\n" +
-        "vqESpBAwDjEMMAoGA1UEAxMDZm9vggkAmM8jtO1U4KkwDAYDVR0TBAUwAwEB/zAN\n" +
-        "BgkqhkiG9w0BAQUFAAOCAgEAB0Xamx2uhf7kixCyS2RVGubxTjgu0r+jz9fk6iPW\n" +
-        "PzzAAb364NkgtWqOg4yOD88VjtRy1meNhOYs/lZ4Eo7STBpsb+zNF1fB9Yg9cNqy\n" +
-        "A3W6Wjuon7pMWXZDmXFlehPSibbO2tnaiBuBe5j6EL5BWrtHHWlvALUrIG9aB9sI\n" +
-        "oWRg2WK9GJcKQ90huM8z7ZeA8h0tjEhB5UXc9eAtNmsXnIQ1aWq2mb3/Fg9ALrkl\n" +
-        "9cHXkdGRty1INXi0b3NSa2lK7m0Rt1iWRlIv5Q9DNAGADx6azrWdbSm/DppOQCrm\n" +
-        "0KgdzpESIt/ZcibWYVkCOkY3KAl3MmgFc/ezOmYhuBMPzxxi+2omt+B1AFaubsRc\n" +
-        "65FBKjIzLEB+SuNAgfrk1kdttqMNT3JyY7hYLoMM/wryAZ7pxMCJ4ylJ85LTuoFM\n" +
-        "l9EPPXJI7cnplgsifDwAI0VfCu7VNIYKMUSk5UhJdJIQMPajThjg4EyXtoETcOZR\n" +
-        "TIN0PGC2W5n7CFO5WLNsQcWi0Rwq/RVy1y6EDYsZBqwvjUTWw9CkLXtJo1Naizb3\n" +
-        "qS7WskaD+kciXQ/t/aAXCd1zBZU85tjbaiMzAln8LG5jHChGi3lfNR/V24KxmNyY\n" +
-        "9KoXswCfB65shysC8t9FaJ4DFtcZxxY5jj9DNuzTiIYvdkpHZG+MYjesQDrxX/cp\n" +
-        "W0s=\n" +
-        "-----END CERTIFICATE-----\n";
+            "MIIFDjCCAvagAwIBAgIJAJjPI7TtVOCpMA0GCSqGSIb3DQEBBQUAMA4xDDAKBgNV\n" +
+            "BAMTA2ZvbzAeFw0xNzEwMTIwODU4NTNaFw0xODEwMTIwODU4NTNaMA4xDDAKBgNV\n" +
+            "BAMTA2ZvbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALsasR9eE/77\n" +
+            "qmt1Gjz+/wJzu3V9pgde1iBuwoXHKGZyayMHLucnKXVF3o7DEk0R/1m3hKh5QoNV\n" +
+            "BHgiUzfjxKFxk85F00G/B1FkDXGjxqUz84hsSnOZS7917AdVHQ4FNfbUIeWgkRe3\n" +
+            "EqK/C3QiyVPr0Uou9jU+YLxOItB22KXVKO3gtBaZfaj8MpzPi8XOxesfpTB+1Fws\n" +
+            "336aYeeDxH78t05EnwqEd+bX7BPs+0DsReARKVi1v9YNRUX2AAQDBGqLKz39Eg0M\n" +
+            "0BaiRLv7O4i0DEJlGYC05P8L5Nb8JwZ8XQV0jlZrqNiqSqL2Glt+m4LkBLFwDfZz\n" +
+            "Q95FVeSSD4AlUB1eHnv41lT3SDOvLV8e6c222MDuC0V7eKDdCWVNlzQpwMyZKeBR\n" +
+            "HOl5IRjVAi2+JEE7YyzgIn68ZY2YLOBzoUKawPeThak6hJEzDaXzpUVJtKH9LnIW\n" +
+            "Yyt+K+c9/Sm4Cs95tCALA005r4GSypcTIdAdOpO9UcS4ObeKRhdCFHgkNitkw4i0\n" +
+            "X2i80y7lzoEV64ZbzMpqq0jWN2LzkHNU5zl5AoL7s8pFMSoQruOEOhIq3yHlDJ9W\n" +
+            "0cGgzz2XvTQgXtCi4H/pVSXo7ojLffGW5CP4+k8iFAO4uIsqAUKRG2kCSNv3KTMj\n" +
+            "f6d00flOm6S2+zIBCSz8UF8RmUknf6Y/AgMBAAGjbzBtMB0GA1UdDgQWBBTlJ705\n" +
+            "R48NTZMfuQyn9D4TeEeDvjA+BgNVHSMENzA1gBTlJ705R48NTZMfuQyn9D4TeEeD\n" +
+            "vqESpBAwDjEMMAoGA1UEAxMDZm9vggkAmM8jtO1U4KkwDAYDVR0TBAUwAwEB/zAN\n" +
+            "BgkqhkiG9w0BAQUFAAOCAgEAB0Xamx2uhf7kixCyS2RVGubxTjgu0r+jz9fk6iPW\n" +
+            "PzzAAb364NkgtWqOg4yOD88VjtRy1meNhOYs/lZ4Eo7STBpsb+zNF1fB9Yg9cNqy\n" +
+            "A3W6Wjuon7pMWXZDmXFlehPSibbO2tnaiBuBe5j6EL5BWrtHHWlvALUrIG9aB9sI\n" +
+            "oWRg2WK9GJcKQ90huM8z7ZeA8h0tjEhB5UXc9eAtNmsXnIQ1aWq2mb3/Fg9ALrkl\n" +
+            "9cHXkdGRty1INXi0b3NSa2lK7m0Rt1iWRlIv5Q9DNAGADx6azrWdbSm/DppOQCrm\n" +
+            "0KgdzpESIt/ZcibWYVkCOkY3KAl3MmgFc/ezOmYhuBMPzxxi+2omt+B1AFaubsRc\n" +
+            "65FBKjIzLEB+SuNAgfrk1kdttqMNT3JyY7hYLoMM/wryAZ7pxMCJ4ylJ85LTuoFM\n" +
+            "l9EPPXJI7cnplgsifDwAI0VfCu7VNIYKMUSk5UhJdJIQMPajThjg4EyXtoETcOZR\n" +
+            "TIN0PGC2W5n7CFO5WLNsQcWi0Rwq/RVy1y6EDYsZBqwvjUTWw9CkLXtJo1Naizb3\n" +
+            "qS7WskaD+kciXQ/t/aAXCd1zBZU85tjbaiMzAln8LG5jHChGi3lfNR/V24KxmNyY\n" +
+            "9KoXswCfB65shysC8t9FaJ4DFtcZxxY5jj9DNuzTiIYvdkpHZG+MYjesQDrxX/cp\n" +
+            "W0s=\n" +
+            "-----END CERTIFICATE-----\n";
 
     private static final String CERT_BAR = "-----BEGIN CERTIFICATE-----\n" +
-        "MIIFDjCCAvagAwIBAgIJAIoMqv3u2Y9OMA0GCSqGSIb3DQEBBQUAMA4xDDAKBgNV\n" +
-        "BAMTA2JhcjAeFw0xNzEwMTIwODU5MTNaFw0xODEwMTIwODU5MTNaMA4xDDAKBgNV\n" +
-        "BAMTA2JhcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKjew9A5JoJ/\n" +
-        "PC7fQsUokG9jE+PVwpiXIFXF3dR8pARnMyjq8YXIV66wFKmcRQlM0WvOYBbxVfFT\n" +
-        "vjo3ASNsoaAt6HEDeCI6BwfJjXnnw3ko7o5TSPVmgS39G9vjGqZEGmbmM/Elrnc/\n" +
-        "VML5+wGw9g8I6YKFRfs70QxL7BDlO4YSbEki7lppyYSWGMGW7YrByCpgZaO21e5V\n" +
-        "CyTlREAKbcnchqtIheDjra2syna5G3L7OYGI4k/Y1D1VyShooV2FsJFB6M4TYaGO\n" +
-        "/T5ewEStMU+E2O79iHWsVUj/Z2gnlnbzPvk6Sy/wWAUP14B3WUPHyzBynRAwYA7u\n" +
-        "zHodcMLcpcHjBRZGnqEvuSB2muycRrLDtgIlvKxVZ6Da1Y75YGdgRGdxedeuhQky\n" +
-        "TTiGwctq6FVHH9uV4MTdVNe5eE6pzkuuSBX+X8Hv3LsbqKW0wMvyyZZtTlD19tTe\n" +
-        "QhJsacpIbCvm/QP+JMOKZtIMaSRdRCj11EtA5bbHJKvHilt1rpufXL9OHnqSr3lp\n" +
-        "vUiNWq9sKqvxkRvZbKVUVRrjDMA8oOmhMc0llAHunC1m84fwI/SHZ6l6ceqAmWWc\n" +
-        "JlSLT6vsrfzavibJjVJnXwIsr3Jy3itjpudvFbEz7mB30i9YCjr8OXZr7/x1KYU8\n" +
-        "SePtV5ZYF3COFE9PomWHwq76VBgtcrKbAgMBAAGjbzBtMB0GA1UdDgQWBBSHMfZS\n" +
-        "fov+3UCqlB+9oKmDr32SiDA+BgNVHSMENzA1gBSHMfZSfov+3UCqlB+9oKmDr32S\n" +
-        "iKESpBAwDjEMMAoGA1UEAxMDYmFyggkAigyq/e7Zj04wDAYDVR0TBAUwAwEB/zAN\n" +
-        "BgkqhkiG9w0BAQUFAAOCAgEAPBq/1p7l0u3vyBAjnmuBPvMEg7UaaNxcrDbl1gf0\n" +
-        "DpxprCJifZWYp4vsPdCE7zLXyJNfR1Cn0BKJ1hoAGU53Q689KSqRMgRb/lyU1y7s\n" +
-        "m7nphXR39kTN06YPkQpPs4WGKQc79FIeIxxWBYJzi3wkK2nBAyRXswbtDfVS46j1\n" +
-        "+kCYENiXFoIQboE4HjZ0G3Wh0Ct8au4oTFiTZ1XyxeKri7TykOwvJRIh3m6nByQi\n" +
-        "UPYthIWcrcZDk6c0kTOFapS0ufQ7AeynFHiveIT4CL75jdME9Ll/3Re/EgHkOJ/1\n" +
-        "dElESlcnjdkRzHyHCdXWnDs0gfWj1F56GGUFh0HhrIABl0Uzd/ukCHDzUOLTGRQg\n" +
-        "eJ3eFLMgjY3oDpbFgEupBRP266e/XbnmzXhDMdguL7+Pp9gka5tA7a67SL05FG0Z\n" +
-        "nWU5XXLLr+jxh7hIIdpVe+TZxdVMD0znn68MxOz8liJcGmdO+9Gnwg3FLZR0e02L\n" +
-        "iehS0b/oddF5xMUyDdwt/dIyU1gOc1ozLld1U7RTZIKa2Y0M65vD/sMjfsWku1Kf\n" +
-        "xaFEMI94vAWa9WyzveDrvFCyQNfqgmdiyh7t81TTMbFMvaGY+VUUT5UsKZX5FPFS\n" +
-        "AiYa8rwmnlKLVoNC6s9WSrlaPXfpWvucT4YE3L7RJ/WuP8t2oXgLtR/ATjhTnveg\n" +
-        "d4s=\n" +
-        "-----END CERTIFICATE-----\n";
+            "MIIFDjCCAvagAwIBAgIJAIoMqv3u2Y9OMA0GCSqGSIb3DQEBBQUAMA4xDDAKBgNV\n" +
+            "BAMTA2JhcjAeFw0xNzEwMTIwODU5MTNaFw0xODEwMTIwODU5MTNaMA4xDDAKBgNV\n" +
+            "BAMTA2JhcjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKjew9A5JoJ/\n" +
+            "PC7fQsUokG9jE+PVwpiXIFXF3dR8pARnMyjq8YXIV66wFKmcRQlM0WvOYBbxVfFT\n" +
+            "vjo3ASNsoaAt6HEDeCI6BwfJjXnnw3ko7o5TSPVmgS39G9vjGqZEGmbmM/Elrnc/\n" +
+            "VML5+wGw9g8I6YKFRfs70QxL7BDlO4YSbEki7lppyYSWGMGW7YrByCpgZaO21e5V\n" +
+            "CyTlREAKbcnchqtIheDjra2syna5G3L7OYGI4k/Y1D1VyShooV2FsJFB6M4TYaGO\n" +
+            "/T5ewEStMU+E2O79iHWsVUj/Z2gnlnbzPvk6Sy/wWAUP14B3WUPHyzBynRAwYA7u\n" +
+            "zHodcMLcpcHjBRZGnqEvuSB2muycRrLDtgIlvKxVZ6Da1Y75YGdgRGdxedeuhQky\n" +
+            "TTiGwctq6FVHH9uV4MTdVNe5eE6pzkuuSBX+X8Hv3LsbqKW0wMvyyZZtTlD19tTe\n" +
+            "QhJsacpIbCvm/QP+JMOKZtIMaSRdRCj11EtA5bbHJKvHilt1rpufXL9OHnqSr3lp\n" +
+            "vUiNWq9sKqvxkRvZbKVUVRrjDMA8oOmhMc0llAHunC1m84fwI/SHZ6l6ceqAmWWc\n" +
+            "JlSLT6vsrfzavibJjVJnXwIsr3Jy3itjpudvFbEz7mB30i9YCjr8OXZr7/x1KYU8\n" +
+            "SePtV5ZYF3COFE9PomWHwq76VBgtcrKbAgMBAAGjbzBtMB0GA1UdDgQWBBSHMfZS\n" +
+            "fov+3UCqlB+9oKmDr32SiDA+BgNVHSMENzA1gBSHMfZSfov+3UCqlB+9oKmDr32S\n" +
+            "iKESpBAwDjEMMAoGA1UEAxMDYmFyggkAigyq/e7Zj04wDAYDVR0TBAUwAwEB/zAN\n" +
+            "BgkqhkiG9w0BAQUFAAOCAgEAPBq/1p7l0u3vyBAjnmuBPvMEg7UaaNxcrDbl1gf0\n" +
+            "DpxprCJifZWYp4vsPdCE7zLXyJNfR1Cn0BKJ1hoAGU53Q689KSqRMgRb/lyU1y7s\n" +
+            "m7nphXR39kTN06YPkQpPs4WGKQc79FIeIxxWBYJzi3wkK2nBAyRXswbtDfVS46j1\n" +
+            "+kCYENiXFoIQboE4HjZ0G3Wh0Ct8au4oTFiTZ1XyxeKri7TykOwvJRIh3m6nByQi\n" +
+            "UPYthIWcrcZDk6c0kTOFapS0ufQ7AeynFHiveIT4CL75jdME9Ll/3Re/EgHkOJ/1\n" +
+            "dElESlcnjdkRzHyHCdXWnDs0gfWj1F56GGUFh0HhrIABl0Uzd/ukCHDzUOLTGRQg\n" +
+            "eJ3eFLMgjY3oDpbFgEupBRP266e/XbnmzXhDMdguL7+Pp9gka5tA7a67SL05FG0Z\n" +
+            "nWU5XXLLr+jxh7hIIdpVe+TZxdVMD0znn68MxOz8liJcGmdO+9Gnwg3FLZR0e02L\n" +
+            "iehS0b/oddF5xMUyDdwt/dIyU1gOc1ozLld1U7RTZIKa2Y0M65vD/sMjfsWku1Kf\n" +
+            "xaFEMI94vAWa9WyzveDrvFCyQNfqgmdiyh7t81TTMbFMvaGY+VUUT5UsKZX5FPFS\n" +
+            "AiYa8rwmnlKLVoNC6s9WSrlaPXfpWvucT4YE3L7RJ/WuP8t2oXgLtR/ATjhTnveg\n" +
+            "d4s=\n" +
+            "-----END CERTIFICATE-----\n";
 
     private static final String CERT_BANANA = "-----BEGIN CERTIFICATE-----\n" +
-        "MIIFFzCCAv+gAwIBAgIJAOk9W2pKKYDVMA0GCSqGSIb3DQEBBQUAMBExDzANBgNV\n" +
-        "BAMTBmJhbmFuYTAeFw0xNzEwMTIwODU5MzBaFw0xODEwMTIwODU5MzBaMBExDzAN\n" +
-        "BgNVBAMTBmJhbmFuYTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ5L\n" +
-        "SDzBElCjuFf7jXYaOLDPL3ifeuM01k56oHdBjwmRBPLc/c0Tz5609Q9ODn5PglnZ\n" +
-        "zhpGayGh/XfJ5iQtP20xKd5zkP/+RHKI9SU/r682nmkLW7KDWfizKP7pmUuHkXz7\n" +
-        "VxtBTLtQLdEfquKUlPibxKfbGARmRaLv6i1o9nh2z4QotFB++ionlUicmGKbC6aR\n" +
-        "boCaEydDYP/vvftwcKucfRRKrxJqQ4dlBQ3wwTaJ5eqjXTHTHn0d5gg36xAcUxwr\n" +
-        "azc7TMeRd3QYhB7hOaJSh5H24X9khrzWSawho6eKk4QrvlXvzGV9Q2QDpsi4jYv5\n" +
-        "K/+jHgCukLsLW2aRRkFbKbCE4ghuVyOmfedUSj06/obVg+W3XW3dndwRHmc21M5q\n" +
-        "ECpZqBsitNWj7vaunCgIgBzJjL1IdcMA4gaEt8M0sslPyOrZUNMj1LL+izoN7K7G\n" +
-        "aD/RqepNEBU5OKVNmZgFyXgZWADIrpPQxGVgrEY0j9Tagw5GgeHvdJNNIeGcVbci\n" +
-        "/8osHlH4us2/lphUXPrwIAgh4dVIygKhkH6aSRbrq84urqJ57Zghnz9XPDosgdRY\n" +
-        "l0fMvReMX9J9Tjk3mWfTYlmul19I4LTrWRS1kHlS6KjUweQ/QaMqo1kPD4Kae0SA\n" +
-        "lLAeDq4Jntj/b1v29kIkhNdCbm1jMUIKhgLaL9l3AgMBAAGjcjBwMB0GA1UdDgQW\n" +
-        "BBRBDIZnqyn/lKPhosxwYC6eRnSy7DBBBgNVHSMEOjA4gBRBDIZnqyn/lKPhosxw\n" +
-        "YC6eRnSy7KEVpBMwETEPMA0GA1UEAxMGYmFuYW5hggkA6T1bakopgNUwDAYDVR0T\n" +
-        "BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAgEAMABQyp8wXQnO16+2hSFY2EdO0UGi\n" +
-        "A/1O6NwiVTMt9A6Ltjk5nQ5t4cgonaHBiMa25HeQ6BJ2iAKGvmPr9R5S9XIjD2BI\n" +
-        "3ov02bglUCD40EJE1krFJOj3elCBjN6991OOzvWOK38FTlpJTXI9FzTxIqIcjlGJ\n" +
-        "SB4dbpnJH7Nat3T73n0MrHguGx7SQ+3MS5wvy3ZWO5Eg7Pu1pATfHgQHUwf+uv1T\n" +
-        "FDD8Ulct/hAGuNvRlRv1nkzplXCM9nY9aW3316Rg1HV/P5aBKaW23Sa6pJlIDEwa\n" +
-        "whNw8pQlTtahgM36K7AZbGSDBrkIN5+cJd93Orbu4dg2RCVPxLi2/yvNP0t4lBrW\n" +
-        "5e/5Ye/kLt23Z6Tv/d3BhbM3RwgUVmsTbdjUDChed5u7lwWf77LXW7ptEbDC3Vlk\n" +
-        "TOeCRsgFzV7OzXEsSlpqXTsR6+Q8a9ffg5vaaaWcwqUQIBfPdFFLmYvDpcJQXOc6\n" +
-        "rnKe6CnAfpE17tczCQ0TBHp4MkPyuO9WfoCb0+5Lw+O4Ny59NKLKV1zFHSELzaKt\n" +
-        "4msENSPdy+6YxKMJUlWMe+Z26aj8FCGuFoC17kzXlw9QP/aYPBhh2E0diOpgfs1R\n" +
-        "0XZg9N4M+d9oJFjK43wdDjUcPdjpfqbrc5IzBY01j7V/r+zFTn+yuLIc8B4MF6Dn\n" +
-        "DQkhI+BdvtzGTwE=\n" +
-        "-----END CERTIFICATE-----\n";
+            "MIIFFzCCAv+gAwIBAgIJAOk9W2pKKYDVMA0GCSqGSIb3DQEBBQUAMBExDzANBgNV\n" +
+            "BAMTBmJhbmFuYTAeFw0xNzEwMTIwODU5MzBaFw0xODEwMTIwODU5MzBaMBExDzAN\n" +
+            "BgNVBAMTBmJhbmFuYTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ5L\n" +
+            "SDzBElCjuFf7jXYaOLDPL3ifeuM01k56oHdBjwmRBPLc/c0Tz5609Q9ODn5PglnZ\n" +
+            "zhpGayGh/XfJ5iQtP20xKd5zkP/+RHKI9SU/r682nmkLW7KDWfizKP7pmUuHkXz7\n" +
+            "VxtBTLtQLdEfquKUlPibxKfbGARmRaLv6i1o9nh2z4QotFB++ionlUicmGKbC6aR\n" +
+            "boCaEydDYP/vvftwcKucfRRKrxJqQ4dlBQ3wwTaJ5eqjXTHTHn0d5gg36xAcUxwr\n" +
+            "azc7TMeRd3QYhB7hOaJSh5H24X9khrzWSawho6eKk4QrvlXvzGV9Q2QDpsi4jYv5\n" +
+            "K/+jHgCukLsLW2aRRkFbKbCE4ghuVyOmfedUSj06/obVg+W3XW3dndwRHmc21M5q\n" +
+            "ECpZqBsitNWj7vaunCgIgBzJjL1IdcMA4gaEt8M0sslPyOrZUNMj1LL+izoN7K7G\n" +
+            "aD/RqepNEBU5OKVNmZgFyXgZWADIrpPQxGVgrEY0j9Tagw5GgeHvdJNNIeGcVbci\n" +
+            "/8osHlH4us2/lphUXPrwIAgh4dVIygKhkH6aSRbrq84urqJ57Zghnz9XPDosgdRY\n" +
+            "l0fMvReMX9J9Tjk3mWfTYlmul19I4LTrWRS1kHlS6KjUweQ/QaMqo1kPD4Kae0SA\n" +
+            "lLAeDq4Jntj/b1v29kIkhNdCbm1jMUIKhgLaL9l3AgMBAAGjcjBwMB0GA1UdDgQW\n" +
+            "BBRBDIZnqyn/lKPhosxwYC6eRnSy7DBBBgNVHSMEOjA4gBRBDIZnqyn/lKPhosxw\n" +
+            "YC6eRnSy7KEVpBMwETEPMA0GA1UEAxMGYmFuYW5hggkA6T1bakopgNUwDAYDVR0T\n" +
+            "BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAgEAMABQyp8wXQnO16+2hSFY2EdO0UGi\n" +
+            "A/1O6NwiVTMt9A6Ltjk5nQ5t4cgonaHBiMa25HeQ6BJ2iAKGvmPr9R5S9XIjD2BI\n" +
+            "3ov02bglUCD40EJE1krFJOj3elCBjN6991OOzvWOK38FTlpJTXI9FzTxIqIcjlGJ\n" +
+            "SB4dbpnJH7Nat3T73n0MrHguGx7SQ+3MS5wvy3ZWO5Eg7Pu1pATfHgQHUwf+uv1T\n" +
+            "FDD8Ulct/hAGuNvRlRv1nkzplXCM9nY9aW3316Rg1HV/P5aBKaW23Sa6pJlIDEwa\n" +
+            "whNw8pQlTtahgM36K7AZbGSDBrkIN5+cJd93Orbu4dg2RCVPxLi2/yvNP0t4lBrW\n" +
+            "5e/5Ye/kLt23Z6Tv/d3BhbM3RwgUVmsTbdjUDChed5u7lwWf77LXW7ptEbDC3Vlk\n" +
+            "TOeCRsgFzV7OzXEsSlpqXTsR6+Q8a9ffg5vaaaWcwqUQIBfPdFFLmYvDpcJQXOc6\n" +
+            "rnKe6CnAfpE17tczCQ0TBHp4MkPyuO9WfoCb0+5Lw+O4Ny59NKLKV1zFHSELzaKt\n" +
+            "4msENSPdy+6YxKMJUlWMe+Z26aj8FCGuFoC17kzXlw9QP/aYPBhh2E0diOpgfs1R\n" +
+            "0XZg9N4M+d9oJFjK43wdDjUcPdjpfqbrc5IzBY01j7V/r+zFTn+yuLIc8B4MF6Dn\n" +
+            "DQkhI+BdvtzGTwE=\n" +
+            "-----END CERTIFICATE-----\n";
 
     private class SaslAuthenticator implements ProtonSaslAuthenticator {
 
@@ -416,7 +406,7 @@ public class SaslDelegatingLoginTest {
 
             if (remoteMechanisms.length > 0) {
                 byte[] response;
-                if(sasl.pending()>0) {
+                if (sasl.pending() > 0) {
                     response = new byte[sasl.pending()];
                     sasl.recv(response, 0, response.length);
                 } else {
@@ -437,8 +427,8 @@ public class SaslDelegatingLoginTest {
                 int passwordLen = response.length - authcidNullPosition - 1;
                 String password = new String(response, authcidNullPosition + 1, passwordLen, StandardCharsets.UTF_8);
 
-                if(validLogins.containsKey(username)) {
-                    if(password.equals(validLogins.get(username))) {
+                if (validLogins.containsKey(username)) {
+                    if (password.equals(validLogins.get(username))) {
                         this.user = username;
                         succeeded = true;
                         sasl.done(Sasl.SaslOutcome.PN_SASL_OK);
diff --git a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/QueueDrainerTest.java b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/QueueDrainerTest.java
index f77fdd4f7..69bf795d6 100644
--- a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/QueueDrainerTest.java
+++ b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/QueueDrainerTest.java
@@ -9,28 +9,28 @@ import enmasse.discovery.Host;
 import io.enmasse.amqp.Artemis;
 import io.enmasse.amqp.PubSubBroker;
 import io.vertx.core.Vertx;
-import io.vertx.ext.unit.Async;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
+import io.vertx.junit5.VertxExtension;
+import io.vertx.junit5.VertxTestContext;
 import io.vertx.proton.ProtonClientOptions;
 import org.apache.qpid.proton.Proton;
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.message.Message;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(VertxUnitRunner.class)
+@ExtendWith(VertxExtension.class)
 public class QueueDrainerTest {
     private QueueDrainer client;
     private PubSubBroker fromServer;
@@ -41,28 +41,27 @@ public class QueueDrainerTest {
     private Vertx vertx;
 
 
-    @Before
-    public void setup(TestContext context) throws Exception {
+    @BeforeEach
+    public void setup(VertxTestContext context) throws Exception {
         vertx = Vertx.vertx();
         fromServer = new PubSubBroker("fromServer");
         toServer = new PubSubBroker("toServer");
-        Async async = context.async(2);
         vertx.deployVerticle(fromServer, ar -> {
             if (ar.succeeded()) {
-                async.countDown();
+                context.completeNow();
             } else {
-                context.fail(ar.cause());
+                context.failNow(ar.cause());
             }
         });
 
         vertx.deployVerticle(toServer, ar -> {
             if (ar.succeeded()) {
-                async.countDown();
+                context.completeNow();
             } else {
-                context.fail(ar.cause());
+                context.failNow(ar.cause());
             }
         });
-        async.awaitSuccess(30_000);
+        context.awaitCompletion(30, TimeUnit.SECONDS);
         from = TestUtil.createHost("127.0.0.1", fromServer.port());
         to = TestUtil.createHost("127.0.0.1", toServer.port());
         localBroker = new TestManagementServer();
@@ -74,7 +73,7 @@ public class QueueDrainerTest {
     public void testDrain() throws Exception {
         sendMessages(fromServer, "myqueue", "testfrom", 100);
         sendMessages(fromServer, "queue2", "q2from", 10);
-        sendMessages(toServer, "myqueue","testto", 100);
+        sendMessages(toServer, "myqueue", "testto", 100);
         sendMessages(toServer, "queue2", "q2to", 1);
 
         System.out.println("Starting drain");
@@ -84,13 +83,13 @@ public class QueueDrainerTest {
             Message response = Proton.message();
             String resourceName = (String) props.get("_AMQ_ResourceName");
             if ("broker".equals(resourceName) &&
-                "getQueueNames".equals(props.get("_AMQ_OperationName"))) {
+                    "getQueueNames".equals(props.get("_AMQ_OperationName"))) {
                 response.setBody(new AmqpValue("[[\"myqueue\"],[\"queue2\"]]"));
             } else if ("queue.myqueue".equals(resourceName) &&
                     "messageCount".equals(props.get("_AMQ_Attribute"))) {
                 response.setBody(new AmqpValue("[" + fromServer.numMessages("myqueue") + "]"));
             } else if ("queue.queue2".equals(resourceName) &&
-                "messageCount".equals(props.get("_AMQ_Attribute"))) {
+                    "messageCount".equals(props.get("_AMQ_Attribute"))) {
                 response.setBody(new AmqpValue("[" + fromServer.numMessages("queue2") + "]"));
             } else {
                 response.setBody(new AmqpValue("[]"));
diff --git a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestManagementServer.java b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestManagementServer.java
index addc5f34c..12a4fd64b 100644
--- a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestManagementServer.java
+++ b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestManagementServer.java
@@ -8,9 +8,6 @@ import io.enmasse.amqp.SyncRequestClient;
 import io.vertx.proton.ProtonClientOptions;
 import org.apache.qpid.proton.message.Message;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 
diff --git a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestSubscriber.java b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestSubscriber.java
index d7c3b82e5..d09111803 100644
--- a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestSubscriber.java
+++ b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TestSubscriber.java
@@ -16,14 +16,10 @@ import org.apache.qpid.proton.amqp.messaging.Source;
 import org.apache.qpid.proton.amqp.messaging.TerminusDurability;
 import org.apache.qpid.proton.message.Message;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Queue;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
-import java.util.zip.ZipFile;
 
 public class TestSubscriber implements AutoCloseable {
     private final Vertx vertx = Vertx.vertx();
diff --git a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TopicMigratorTest.java b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TopicMigratorTest.java
index ee31d07d3..bf4a226aa 100644
--- a/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TopicMigratorTest.java
+++ b/broker-plugin/shutdown-hook/src/test/java/enmasse/broker/prestop/TopicMigratorTest.java
@@ -10,27 +10,26 @@ import enmasse.discovery.Host;
 import io.enmasse.amqp.Artemis;
 import io.enmasse.amqp.PubSubBroker;
 import io.vertx.core.Vertx;
-import io.vertx.ext.unit.Async;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
+import io.vertx.junit5.VertxExtension;
+import io.vertx.junit5.VertxTestContext;
 import io.vertx.proton.ProtonClientOptions;
 import org.apache.qpid.proton.Proton;
 import org.apache.qpid.proton.amqp.messaging.AmqpValue;
 import org.apache.qpid.proton.message.Message;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 import java.util.Collections;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
-@RunWith(VertxUnitRunner.class)
+@ExtendWith(VertxExtension.class)
 public class TopicMigratorTest {
     private Host from;
     private Host to;
@@ -41,36 +40,35 @@ public class TopicMigratorTest {
     private TestManagementServer localBroker;
     private Vertx vertx;
 
-    @Before
-    public void setup(TestContext context) throws Exception {
+    @BeforeEach
+    public void setup(VertxTestContext context) throws Exception {
         vertx = Vertx.vertx();
         subscriber = new TestSubscriber();
         publisher = new TestPublisher();
         fromServer = new PubSubBroker("fromServer");
         toServer = new PubSubBroker("toServer");
-        Async async = context.async(2);
         vertx.deployVerticle(fromServer, ar -> {
             if (ar.succeeded()) {
-                async.countDown();
+                context.completeNow();
             } else {
-                context.fail(ar.cause());
+                context.failNow(ar.cause());
             }
         });
 
         vertx.deployVerticle(toServer, ar -> {
             if (ar.succeeded()) {
-                async.countDown();
+                context.completeNow();
             } else {
-                context.fail(ar.cause());
+                context.failNow(ar.cause());
             }
         });
-        async.awaitSuccess(30_000);
+        context.awaitCompletion(30, TimeUnit.SECONDS);
         localBroker = new TestManagementServer();
         from = TestUtil.createHost("127.0.0.1", fromServer.port());
         to = TestUtil.createHost("127.0.0.1", toServer.port());
     }
 
-    @After
+    @AfterEach
     public void teardown() throws Exception {
         subscriber.close();
         publisher.close();
@@ -78,7 +76,7 @@ public class TopicMigratorTest {
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testMigrator() throws Exception {
         System.out.println("Attempting to subscribe");
         subscriber.subscribe(from.amqpEndpoint(), "mytopic");
@@ -115,6 +113,6 @@ public class TopicMigratorTest {
 
         subscriber.subscribe(to.amqpEndpoint(), "mytopic");
         Message message = subscriber.receiveMessage(1, TimeUnit.MINUTES);
-        assertThat(((AmqpValue)message.getBody()).getValue(), is("hello, world"));
+        assertThat(((AmqpValue) message.getBody()).getValue(), is("hello, world"));
     }
 }
diff --git a/discovery-lib/src/test/java/enmasse/discovery/DiscoveryTest.java b/discovery-lib/src/test/java/enmasse/discovery/DiscoveryTest.java
index 7a26c899d..fdd8ec0f7 100644
--- a/discovery-lib/src/test/java/enmasse/discovery/DiscoveryTest.java
+++ b/discovery-lib/src/test/java/enmasse/discovery/DiscoveryTest.java
@@ -4,12 +4,18 @@
  */
 package enmasse.discovery;
 
-import io.fabric8.kubernetes.api.model.*;
+import io.fabric8.kubernetes.api.model.ContainerBuilder;
+import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
+import io.fabric8.kubernetes.api.model.PodBuilder;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import org.junit.jupiter.api.Test;
 
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -53,29 +59,29 @@ public class DiscoveryTest {
     }
 
     public enmasse.discovery.Pod createPod(String ready, String phase) {
-       return new enmasse.discovery.Pod(new PodBuilder()
-               .editOrNewMetadata()
-               .withName("mypod")
-               .withLabels(Collections.singletonMap("my", "key"))
-               .withAnnotations(Collections.singletonMap("my", "annotation"))
-               .endMetadata()
-               .editOrNewStatus()
-               .withPhase(phase)
-               .withPodIP("10.0.0.1")
-               .addNewCondition()
-               .withType("Ready")
-               .withStatus(ready)
-               .endCondition()
-               .endStatus()
-               .withNewSpec()
-               .addToContainers(new ContainerBuilder()
-                       .withName("c")
-                       .addToPorts(new ContainerPortBuilder()
-                               .withName("http")
-                               .withContainerPort(1234)
-                               .build())
-                       .build())
-               .endSpec()
-               .build());
+        return new enmasse.discovery.Pod(new PodBuilder()
+                .editOrNewMetadata()
+                .withName("mypod")
+                .withLabels(Collections.singletonMap("my", "key"))
+                .withAnnotations(Collections.singletonMap("my", "annotation"))
+                .endMetadata()
+                .editOrNewStatus()
+                .withPhase(phase)
+                .withPodIP("10.0.0.1")
+                .addNewCondition()
+                .withType("Ready")
+                .withStatus(ready)
+                .endCondition()
+                .endStatus()
+                .withNewSpec()
+                .addToContainers(new ContainerBuilder()
+                        .withName("c")
+                        .addToPorts(new ContainerPortBuilder()
+                                .withName("http")
+                                .withContainerPort(1234)
+                                .build())
+                        .build())
+                .endSpec()
+                .build());
     }
 }
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/AddressSpacePlanApiTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/AddressSpacePlanApiTest.java
index 65c466674..42436baca 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/AddressSpacePlanApiTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/AddressSpacePlanApiTest.java
@@ -12,8 +12,9 @@ import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
 import io.fabric8.kubernetes.api.model.apiextensions.CustomResourceDefinition;
 import io.fabric8.openshift.client.NamespacedOpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.time.Duration;
 import java.util.Arrays;
@@ -21,16 +22,25 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
-public class AddressSpacePlanApiTest {
+class AddressSpacePlanApiTest {
 
-    @Rule
-    public OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
+    private OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
+
+    @BeforeEach
+    void setUp() {
+        openShiftServer.before();
+    }
+
+    @AfterEach
+    void tearDown() {
+        openShiftServer.after();
+    }
 
     @Test
-    public void testNotifiesExisting() throws Exception {
+    void testNotifiesExisting() throws Exception {
         NamespacedOpenShiftClient client = openShiftServer.getOpenshiftClient();
         CustomResourceDefinition crd = AdminCrd.addressSpacePlans();
         AddressSpacePlanApi addressSpacePlanApi = new KubeAddressSpacePlanApi(client, client.getNamespace(), crd);
@@ -58,7 +68,7 @@ public class AddressSpacePlanApiTest {
     }
 
     @Test
-    public void testNotifiesCreated() throws Exception {
+    void testNotifiesCreated() throws Exception {
         NamespacedOpenShiftClient client = openShiftServer.getOpenshiftClient();
         CustomResourceDefinition crd = AdminCrd.addressSpacePlans();
         AddressSpacePlanApi addressSpacePlanApi = new KubeAddressSpacePlanApi(client, client.getNamespace(), crd);
@@ -71,14 +81,14 @@ public class AddressSpacePlanApiTest {
 
         }, Duration.ofSeconds(2))) {
             client.customResources(crd, AddressSpacePlan.class, AddressSpacePlanList.class, DoneableAddressSpacePlan.class)
-                .createNew()
-                .withMetadata(new ObjectMetaBuilder()
-                        .withName("plan1")
-                        .withNamespace(client.getNamespace())
-                        .build())
-                .withAddressSpaceType("standard")
-                .withAddressPlans(Arrays.asList("p1", "p2"))
-                .done();
+                    .createNew()
+                    .withMetadata(new ObjectMetaBuilder()
+                            .withName("plan1")
+                            .withNamespace(client.getNamespace())
+                            .build())
+                    .withAddressSpaceType("standard")
+                    .withAddressPlans(Arrays.asList("p1", "p2"))
+                    .done();
 
             List<AddressSpacePlan> list = promise.get(30, TimeUnit.SECONDS);
             assertEquals(1, list.size());
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressApiTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressApiTest.java
index 42017a257..99b005bc6 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressApiTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressApiTest.java
@@ -7,34 +7,41 @@ package io.enmasse.k8s.api;
 import io.enmasse.address.model.Address;
 import io.fabric8.openshift.client.NamespacedOpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.Optional;
 import java.util.UUID;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-public class ConfigMapAddressApiTest {
+
+class ConfigMapAddressApiTest {
     private static final String ADDRESS = "myaddress";
     private static final String ADDRESS_TYPE = "mytype";
     private static final String ADDRESS_PLAN = "myplan";
     private static final String ADDRESS_SPACE_NAMESPACE = "myproject";
     private static final String ADDRESS_SPACE = "myspace";
     private static final String ADDRESS_NAME = String.format("%s.%s", ADDRESS_SPACE, ADDRESS);
-    @Rule
-    public OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
+
+    private OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
     private AddressApi api;
 
-    @Before
-    public void setUp() {
+    @BeforeEach
+    void setUp() {
+        openShiftServer.before();
         NamespacedOpenShiftClient client = openShiftServer.getOpenshiftClient();
         api = new ConfigMapAddressApi(client, UUID.randomUUID().toString());
     }
 
+    @AfterEach
+    void tearDown() {
+        openShiftServer.after();
+    }
+
     @Test
-    public void create() {
+    void create() {
         Address address = createAddress(ADDRESS_SPACE_NAMESPACE, ADDRESS_NAME);
 
         api.createAddress(address);
@@ -51,7 +58,7 @@ public class ConfigMapAddressApiTest {
     }
 
     @Test
-    public void replace() {
+    void replace() {
         Address adddress = createAddress(ADDRESS_SPACE_NAMESPACE, ADDRESS_NAME);
         final String annotationKey = "myannotation";
         String annotationValue = "value";
@@ -70,7 +77,7 @@ public class ConfigMapAddressApiTest {
     }
 
     @Test
-    public void replaceNotFound() {
+    void replaceNotFound() {
         Address address = createAddress(ADDRESS_SPACE_NAMESPACE, ADDRESS_NAME);
 
         boolean replaced = api.replaceAddress(address);
@@ -78,7 +85,7 @@ public class ConfigMapAddressApiTest {
     }
 
     @Test
-    public void delete() {
+    void delete() {
         Address space = createAddress(ADDRESS_SPACE_NAMESPACE, ADDRESS_NAME);
 
         api.createAddress(space);
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressSpaceApiTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressSpaceApiTest.java
index 990153afd..6c8d4788e 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressSpaceApiTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/ConfigMapAddressSpaceApiTest.java
@@ -7,34 +7,41 @@ package io.enmasse.k8s.api;
 import io.enmasse.address.model.AddressSpace;
 import io.fabric8.openshift.client.NamespacedOpenShiftClient;
 import io.fabric8.openshift.client.server.mock.OpenShiftServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.Optional;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
+
 
 /**
  * The mock server does not emulate behaviour with respect to resourceVersion.
  */
-public class ConfigMapAddressSpaceApiTest {
+class ConfigMapAddressSpaceApiTest {
     private static final String ADDRESS_SPACE_NAME = "myspace";
     private static final String ADDRESS_SPACE_TYPE = "mytype";
     private static final String ADDRESS_SPACE_PLAN = "myplan";
     private static final String ADDRESS_SPACE_NAMESPACE = "myproject";
-    @Rule
-    public OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
+
+    private OpenShiftServer openShiftServer = new OpenShiftServer(false, true);
     private AddressSpaceApi api;
 
-    @Before
-    public void setUp() {
+    @BeforeEach
+    void setUp() {
+        openShiftServer.before();
         NamespacedOpenShiftClient client = openShiftServer.getOpenshiftClient();
         api = new ConfigMapAddressSpaceApi(client);
     }
 
+    @AfterEach
+    void tearDown() {
+        openShiftServer.after();
+    }
+
     @Test
-    public void create() throws Exception {
+    void create() throws Exception {
         AddressSpace space = createAddressSpace(ADDRESS_SPACE_NAMESPACE, ADDRESS_SPACE_NAME);
 
         api.createAddressSpace(space);
@@ -49,7 +56,7 @@ public class ConfigMapAddressSpaceApiTest {
     }
 
     @Test
-    public void replace() throws Exception {
+    void replace() throws Exception {
         AddressSpace space = createAddressSpace(ADDRESS_SPACE_NAMESPACE, ADDRESS_SPACE_NAME);
         final String annotationKey = "myannotation";
         String annotationValue = "value";
@@ -68,7 +75,7 @@ public class ConfigMapAddressSpaceApiTest {
     }
 
     @Test
-    public void replaceNotFound() throws Exception {
+    void replaceNotFound() throws Exception {
         AddressSpace space = createAddressSpace(ADDRESS_SPACE_NAMESPACE, ADDRESS_SPACE_NAME);
 
         boolean replaced = api.replaceAddressSpace(space);
@@ -76,7 +83,7 @@ public class ConfigMapAddressSpaceApiTest {
     }
 
     @Test
-    public void delete() throws Exception {
+    void delete() throws Exception {
         AddressSpace space = createAddressSpace(ADDRESS_SPACE_NAMESPACE, ADDRESS_SPACE_NAME);
 
         api.createAddressSpace(space);
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/KubeEventLoggerTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/KubeEventLoggerTest.java
index aad99358c..2d1e8dcb9 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/KubeEventLoggerTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/KubeEventLoggerTest.java
@@ -10,7 +10,8 @@ import io.fabric8.kubernetes.api.model.EventList;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.dsl.MixedOperation;
 import io.fabric8.kubernetes.client.dsl.Resource;
-import org.junit.Test;
+
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
 import java.time.Clock;
@@ -18,9 +19,9 @@ import java.time.Instant;
 import java.time.ZoneId;
 
 import static io.enmasse.k8s.api.EventLogger.Type.Warning;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.startsWith;
 import static org.mockito.Mockito.mock;
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/KubeSchemaApiTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/KubeSchemaApiTest.java
index cc1bbc692..9b851c4e3 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/KubeSchemaApiTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/KubeSchemaApiTest.java
@@ -9,16 +9,16 @@ import io.enmasse.address.model.Schema;
 import io.enmasse.admin.model.v1.*;
 import io.enmasse.config.AnnotationKeys;
 import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.time.Clock;
 import java.time.Duration;
 import java.util.Arrays;
 import java.util.List;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
@@ -33,7 +33,7 @@ public class KubeSchemaApiTest {
     private StandardInfraConfigApi standardInfraConfigApi;
     private BrokeredInfraConfigApi brokeredInfraConfigApi;
 
-    @Before
+    @BeforeEach
     public void setup() {
         addressSpacePlanApi = mock(AddressSpacePlanApi.class);
         addressPlanApi = mock(AddressPlanApi.class);
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/ResourceCheckerTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/ResourceCheckerTest.java
index 4e3dba231..652939595 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/ResourceCheckerTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/ResourceCheckerTest.java
@@ -4,14 +4,12 @@
  */
 package io.enmasse.k8s.api;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.internal.util.collections.Sets;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.time.Duration;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Set;
 
 import static org.mockito.Mockito.*;
 
@@ -19,7 +17,7 @@ public class ResourceCheckerTest {
     ResourceChecker<String> controller;
     Watcher<String> watcher;
 
-    @Before
+    @BeforeEach
     public void setup() {
         watcher = mock(Watcher.class);
         controller = new ResourceChecker<>(watcher, Duration.ofMillis(1));
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/cache/EventCacheTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/cache/EventCacheTest.java
index 13f94f788..90b857c4a 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/cache/EventCacheTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/cache/EventCacheTest.java
@@ -6,13 +6,13 @@ package io.enmasse.k8s.api.cache;
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+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.*;
 
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/api/cache/ReflectorTest.java b/k8s-api/src/test/java/io/enmasse/k8s/api/cache/ReflectorTest.java
index 84c3c26e0..ad3c58a8a 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/api/cache/ReflectorTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/api/cache/ReflectorTest.java
@@ -8,8 +8,8 @@ import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.api.model.ConfigMapList;
 import io.fabric8.kubernetes.api.model.ConfigMapListBuilder;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
 import java.time.Clock;
@@ -20,8 +20,8 @@ import java.util.Collections;
 import java.util.List;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.*;
 
 public class ReflectorTest {
@@ -30,7 +30,7 @@ public class ReflectorTest {
     WorkQueue<ConfigMap> testStore;
     Processor<ConfigMap> testProc;
 
-    @Before
+    @BeforeEach
     public void setup() {
         testLister = mock(ListerWatcher.class);
         testProc = mock(Processor.class);
diff --git a/k8s-api/src/test/java/io/enmasse/k8s/util/TimeUtilTest.java b/k8s-api/src/test/java/io/enmasse/k8s/util/TimeUtilTest.java
index fac6e19c9..ba73503b4 100644
--- a/k8s-api/src/test/java/io/enmasse/k8s/util/TimeUtilTest.java
+++ b/k8s-api/src/test/java/io/enmasse/k8s/util/TimeUtilTest.java
@@ -4,12 +4,13 @@
  */
 package io.enmasse.k8s.util;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.time.Duration;
 import java.time.Instant;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 
 public class TimeUtilTest {
     @Test
diff --git a/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakManagerTest.java b/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakManagerTest.java
index 483cbfb4a..a4c087b14 100644
--- a/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakManagerTest.java
+++ b/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakManagerTest.java
@@ -9,12 +9,12 @@ import io.enmasse.config.AnnotationKeys;
 import io.enmasse.user.api.UserApi;
 import io.enmasse.user.model.v1.User;
 import io.enmasse.user.model.v1.UserList;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.util.*;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -27,7 +27,7 @@ public class KeycloakManagerTest {
     private Map<String, String> realmAdminUsers;
     private KubeApi mockKubeApi;
 
-    @Before
+    @BeforeEach
     public void setup() {
         realms = new HashSet<>();
         updatedRealms = new LinkedList<>();
diff --git a/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakRealmParamsTest.java b/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakRealmParamsTest.java
index 6192433b2..4a8d25752 100644
--- a/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakRealmParamsTest.java
+++ b/keycloak-controller/src/test/java/io/enmasse/keycloak/controller/KeycloakRealmParamsTest.java
@@ -6,25 +6,31 @@ package io.enmasse.keycloak.controller;
 
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class KeycloakRealmParamsTest {
-    @Rule
-    public KubernetesServer server = new KubernetesServer(true, true);
+class KeycloakRealmParamsTest {
+
+    private KubernetesServer server = new KubernetesServer(true, true);
 
     private KubernetesClient client;
 
-    @Before
-    public void setup() {
+    @BeforeEach
+    void setup() {
+        server.before();
         client = server.getClient();
     }
 
+    @AfterEach
+    void tearDown() {
+        server.after();
+    }
+
     @Test
-    public void testRequiredEnvironment() {
+    void testRequiredEnvironment() {
         client.configMaps().createNew()
                 .editOrNewMetadata()
                 .withName("myconfig")
diff --git a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/AmqpServerTest.java b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/AmqpServerTest.java
index 4d101ef34..baba4373b 100644
--- a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/AmqpServerTest.java
+++ b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/AmqpServerTest.java
@@ -9,9 +9,9 @@
  * 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
- *
+ * <p>
  * http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
  * 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.
@@ -21,16 +21,15 @@
 
 package io.enmasse.keycloak.spi;
 
-import org.junit.Test;
+
+import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 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.*;
 
 public class AmqpServerTest {
 
@@ -68,7 +67,6 @@ public class AmqpServerTest {
     }
 
 
-
     @Test
     public void testMultiplePermissionsWithUrlEncoding() {
         AmqpServer amqpServer = new AmqpServer(null, 0, null, false);
diff --git a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/PlainSaslServerMechanismTest.java b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/PlainSaslServerMechanismTest.java
index 2b3fc2828..a1bfcfe63 100644
--- a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/PlainSaslServerMechanismTest.java
+++ b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/PlainSaslServerMechanismTest.java
@@ -5,24 +5,16 @@
 
 package io.enmasse.keycloak.spi;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.keycloak.Config;
-import org.keycloak.models.KeycloakSession;
-import org.keycloak.models.KeycloakSessionFactory;
-import org.keycloak.models.KeycloakTransactionManager;
-import org.keycloak.models.RealmModel;
-import org.keycloak.models.RealmProvider;
-import org.keycloak.models.UserCredentialManager;
-import org.keycloak.models.UserModel;
-import org.keycloak.models.UserProvider;
+import org.keycloak.models.*;
 import org.keycloak.models.credential.PasswordUserCredentialModel;
 import org.mockito.ArgumentMatcher;
 
 import java.nio.charset.StandardCharsets;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
@@ -33,7 +25,7 @@ public class PlainSaslServerMechanismTest {
     private KeycloakSession keycloakSession;
     private Config.Scope config;
 
-    @Before
+    @BeforeEach
     public void setup() {
         keycloakSessionFactory = mock(KeycloakSessionFactory.class);
         keycloakSession = mock(KeycloakSession.class);
@@ -59,14 +51,13 @@ public class PlainSaslServerMechanismTest {
         byte[] userBytes = user.getBytes(StandardCharsets.UTF_8);
         byte[] passwordBytes = password.getBytes(StandardCharsets.UTF_8);
         byte[] response = new byte[2 + userBytes.length + passwordBytes.length];
-        System.arraycopy(userBytes,0,response, 1, userBytes.length);
-        System.arraycopy(passwordBytes,0,response, 2+userBytes.length, passwordBytes.length);
+        System.arraycopy(userBytes, 0, response, 1, userBytes.length);
+        System.arraycopy(passwordBytes, 0, response, 2 + userBytes.length, passwordBytes.length);
 
         return response;
     }
 
-    private static final class PasswordCredentialMatcher implements ArgumentMatcher<PasswordUserCredentialModel>
-    {
+    private static final class PasswordCredentialMatcher implements ArgumentMatcher<PasswordUserCredentialModel> {
 
         private final String password;
 
@@ -128,11 +119,11 @@ public class PlainSaslServerMechanismTest {
     }
 
     // incorrect sasl format
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testBadInitialResponse() {
         final SaslServerMechanism.Instance instance =
                 (new PlainSaslServerMechanism()).newInstance(keycloakSessionFactory, "realm", config);
-        instance.processResponse("potato".getBytes(StandardCharsets.UTF_8));
+        assertThrows(IllegalArgumentException.class, () -> instance.processResponse("potato".getBytes(StandardCharsets.UTF_8)));
     }
 
 
diff --git a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/ScramPasswordHashProviderTest.java b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/ScramPasswordHashProviderTest.java
index a376cf772..a723874e0 100644
--- a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/ScramPasswordHashProviderTest.java
+++ b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/ScramPasswordHashProviderTest.java
@@ -5,26 +5,22 @@
 
 package io.enmasse.keycloak.spi;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.keycloak.credential.CredentialModel;
+import org.mockito.ArgumentCaptor;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.keycloak.credential.CredentialModel;
-import org.mockito.ArgumentCaptor;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
 
 public class ScramPasswordHashProviderTest {
     private ScramPasswordHashProvider hashprovider;
     private CredentialModel credentialModel;
 
-    @Before
+    @BeforeEach
     public void setup() {
         hashprovider = new ScramPasswordHashProvider("scramsha1", 10000, "HmacSHA1", "SHA-1");
         credentialModel = mock(CredentialModel.class);
@@ -64,13 +60,13 @@ public class ScramPasswordHashProviderTest {
     @Test
     public void testSameValueEncodedDifferently() {
         Set<String> encoded = new HashSet<>();
-        for(int i = 0; i < 100; i++) {
+        for (int i = 0; i < 100; i++) {
             hashprovider.encode("testpassword", 25000, credentialModel);
-            if(!encoded.add(credentialModel.getValue())) {
+            if (!encoded.add(credentialModel.getValue())) {
                 fail("Duplicate encoding of the password");
             }
         }
-        
+
     }
 
 }
diff --git a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/XOAUTH2SaslServerMechanismTest.java b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/XOAUTH2SaslServerMechanismTest.java
index 56b2878dd..49f6696d0 100644
--- a/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/XOAUTH2SaslServerMechanismTest.java
+++ b/keycloak-plugin/sasl-plugin/src/test/java/io/enmasse/keycloak/spi/XOAUTH2SaslServerMechanismTest.java
@@ -5,8 +5,8 @@
 
 package io.enmasse.keycloak.spi;
 
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.keycloak.Config;
 import org.keycloak.common.VerificationException;
 import org.keycloak.common.util.Time;
@@ -16,8 +16,7 @@ import org.keycloak.representations.AccessToken;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -28,7 +27,7 @@ public class XOAUTH2SaslServerMechanismTest implements XOAUTH2SaslServerMechanis
     private boolean verifyToken;
     private KeycloakSessionFactory keycloakSessionFactory;
 
-    @Before
+    @BeforeEach
     public void setup() {
         keycloakSession = mock(KeycloakSession.class);
         keycloakSessionFactory = mock(KeycloakSessionFactory.class);
@@ -107,11 +106,11 @@ public class XOAUTH2SaslServerMechanismTest implements XOAUTH2SaslServerMechanis
     }
 
     // incorrect sasl format
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testBadInitialResponse() {
         final SaslServerMechanism.Instance instance =
                 (new XOAUTH2SaslServerMechanism(this)).newInstance(keycloakSessionFactory, "realm", config);
-        instance.processResponse("potato".getBytes(StandardCharsets.UTF_8));
+        assertThrows(IllegalArgumentException.class, () -> instance.processResponse("potato".getBytes(StandardCharsets.UTF_8)));
     }
 
 
diff --git a/mqtt-gateway/src/test/java/enmasse/mqtt/TopicMatcherTest.java b/mqtt-gateway/src/test/java/enmasse/mqtt/TopicMatcherTest.java
index 65ca7e278..70ab62429 100644
--- a/mqtt-gateway/src/test/java/enmasse/mqtt/TopicMatcherTest.java
+++ b/mqtt-gateway/src/test/java/enmasse/mqtt/TopicMatcherTest.java
@@ -5,8 +5,11 @@
 
 package enmasse.mqtt;
 
-import org.junit.Test;
-import static org.junit.Assert.*;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests related to topic wildcards matches
diff --git a/mqtt-lwt/src/test/java/enmasse/mqtt/InMemoryLwtStorageTest.java b/mqtt-lwt/src/test/java/enmasse/mqtt/InMemoryLwtStorageTest.java
index bf5fc93e8..6826966cd 100644
--- a/mqtt-lwt/src/test/java/enmasse/mqtt/InMemoryLwtStorageTest.java
+++ b/mqtt-lwt/src/test/java/enmasse/mqtt/InMemoryLwtStorageTest.java
@@ -10,185 +10,141 @@ import enmasse.mqtt.storage.LwtStorage;
 import enmasse.mqtt.storage.impl.InMemoryLwtStorage;
 import io.netty.handler.codec.mqtt.MqttQoS;
 import io.vertx.core.buffer.Buffer;
-import io.vertx.ext.unit.Async;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import io.vertx.junit5.VertxExtension;
+import io.vertx.junit5.VertxTestContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.junit.jupiter.api.Assertions.*;
+
 /**
  * Tests related to the LWT storage service only
  */
-@RunWith(VertxUnitRunner.class)
+@ExtendWith(VertxExtension.class)
 public class InMemoryLwtStorageTest {
 
     protected final Logger LOG = LoggerFactory.getLogger(InMemoryLwtStorageTest.class);
-
     private static final AmqpWillMessage WILL_MESSAGE =
             new AmqpWillMessage(true, "will_topic", MqttQoS.AT_MOST_ONCE, Buffer.buffer("Hello"));
-
     private static final String CLIENT_ID = "client_id";
-
     private LwtStorage lwtStorage;
 
-    @Before
-    public void before(TestContext context) {
+    @BeforeEach
+    public void before(VertxTestContext context) {
 
         this.lwtStorage = new InMemoryLwtStorage();
-        this.lwtStorage.open(context.asyncAssertSuccess());
+        this.lwtStorage.open(context.succeeding(id -> context.completeNow()));
     }
 
-    @After
-    public void after(TestContext context) {
+    @AfterEach
+    public void after() {
         this.lwtStorage.close();
     }
 
     @Test
-    public void addNotExistingWill(TestContext context) {
-
-        Async async = context.async();
-
+    public void addNotExistingWill(VertxTestContext context) {
         this.lwtStorage.add(CLIENT_ID, WILL_MESSAGE, done -> {
-
             if (done.succeeded()) {
-
                 this.lwtStorage.get(CLIENT_ID, done1 -> {
-
                     if (done1.succeeded()) {
-
                         AmqpWillMessage willMessage1 = done1.result();
-                        context.assertTrue(willMessage1.equals(WILL_MESSAGE));
+                        context.verify(() -> assertEquals(willMessage1, WILL_MESSAGE));
                         LOG.info("Added a not existing will");
-
                     } else {
-                        context.assertTrue(false);
+                        context.verify(() -> fail(""));
                     }
-                    async.complete();
+                    context.completeNow();
                 });
-
             } else {
-                context.assertTrue(false);
-                async.complete();
+                context.verify(() -> fail(""));
+                context.completeNow();
             }
         });
     }
 
     @Test
-    public void addExistingWill(TestContext context) {
-
-        Async async = context.async();
-
+    public void addExistingWill(VertxTestContext context) {
         this.lwtStorage.add(CLIENT_ID, WILL_MESSAGE, done -> {
-
             if (done.succeeded()) {
-
                 this.lwtStorage.add(CLIENT_ID, WILL_MESSAGE, done1 -> {
-
-                    context.assertTrue(!done1.succeeded());
+                    context.verify(() -> assertTrue(!done1.succeeded()));
                     LOG.info("Will to add already exists");
-                    async.complete();
+                    context.completeNow();
                 });
-
             } else {
-                context.assertTrue(false);
-                async.complete();
+                context.verify(() -> fail(""));
+                context.completeNow();
             }
         });
     }
 
     @Test
-    public void updateExistingWill(TestContext context) {
-
-        Async async = context.async();
-
+    public void updateExistingWill(VertxTestContext context) {
         this.lwtStorage.add(CLIENT_ID, WILL_MESSAGE, done -> {
-
             if (done.succeeded()) {
-
                 AmqpWillMessage willMessage1 = new AmqpWillMessage(false, "will_topic_1", MqttQoS.AT_LEAST_ONCE, Buffer.buffer("Hello_1"));
                 this.lwtStorage.update(CLIENT_ID, willMessage1, done1 -> {
-
                     if (done1.succeeded()) {
-
                         this.lwtStorage.get(CLIENT_ID, done2 -> {
-
                             if (done2.succeeded()) {
-
                                 AmqpWillMessage willMessage2 = done2.result();
                                 // updated message not equals to the original one but to the one got from the storage
-                                context.assertTrue(!willMessage1.equals(WILL_MESSAGE) && willMessage1.equals(willMessage2));
+                                context.verify(() -> assertTrue(!willMessage1.equals(WILL_MESSAGE) && willMessage1.equals(willMessage2)));
                                 LOG.info("Existing will updated");
 
                             } else {
-                                context.assertTrue(false);
+                                context.verify(() -> fail(""));
                             }
-                            async.complete();
+                            context.completeNow();
                         });
 
                     } else {
-                        context.assertTrue(false);
-                        async.complete();
+                        context.verify(() -> fail(""));
+                        context.completeNow();
                     }
-
                 });
-
             } else {
-                context.assertTrue(false);
-                async.complete();
+                context.verify(() -> fail(""));
+                context.completeNow();
             }
         });
     }
 
     @Test
-    public void updateNotExistingWill(TestContext context) {
-
-        Async async = context.async();
-
+    public void updateNotExistingWill(VertxTestContext context) {
         this.lwtStorage.update(CLIENT_ID, WILL_MESSAGE, done -> {
-
-            context.assertTrue(!done.succeeded());
+            context.verify(() -> assertTrue(!done.succeeded()));
             LOG.info("Trying to update a not existing will");
-            async.complete();
+            context.completeNow();
         });
     }
 
     @Test
-    public void deleteExistingWill(TestContext context) {
-
-        Async async = context.async();
-
+    public void deleteExistingWill(VertxTestContext context) {
         this.lwtStorage.add(CLIENT_ID, WILL_MESSAGE, done -> {
-
             if (done.succeeded()) {
-
                 this.lwtStorage.delete(CLIENT_ID, done1 -> {
-
-                    context.assertTrue(done1.succeeded());
+                    context.verify(() -> assertTrue(done1.succeeded()));
                     LOG.info("Existing will deleted");
-                    async.complete();
+                    context.completeNow();
                 });
-
             } else {
-                context.assertTrue(false);
-                async.complete();
+                context.verify(() -> fail(""));
+                context.completeNow();
             }
         });
     }
 
     @Test
-    public void deleteNotExistingWill(TestContext context) {
-
-        Async async = context.async();
-
+    public void deleteNotExistingWill(VertxTestContext context) {
         this.lwtStorage.delete(CLIENT_ID, done -> {
-
-            context.assertTrue(!done.succeeded());
+            context.verify(() -> assertTrue(!done.succeeded()));
             LOG.info("Trying to delete a not existing will");
-            async.complete();
+            context.completeNow();
         });
     }
 
diff --git a/service-broker/src/test/java/io/enmasse/osb/HTTPServerTest.java b/service-broker/src/test/java/io/enmasse/osb/HTTPServerTest.java
index aca96f7ba..9a2dcbb16 100644
--- a/service-broker/src/test/java/io/enmasse/osb/HTTPServerTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/HTTPServerTest.java
@@ -18,21 +18,21 @@ import io.vertx.core.http.HttpClient;
 import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpClientRequest;
 import io.vertx.core.json.JsonObject;
-import io.vertx.ext.unit.Async;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import io.vertx.junit5.VertxExtension;
+import io.vertx.junit5.VertxTestContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-@RunWith(VertxUnitRunner.class)
+@ExtendWith(VertxExtension.class)
 public class HTTPServerTest {
 
     private Vertx vertx;
@@ -40,8 +40,8 @@ public class HTTPServerTest {
     private AddressSpace addressSpace;
     private HTTPServer httpServer;
 
-    @Before
-    public void setup(TestContext context) {
+    @BeforeEach
+    public void setup(VertxTestContext context) {
         vertx = Vertx.vertx();
         instanceApi = new TestAddressSpaceApi();
         String addressSpaceName = "myinstance";
@@ -59,12 +59,12 @@ public class HTTPServerTest {
                 return "http://localhost/console/" + addressSpaceName;
             }
         });
-        vertx.deployVerticle(httpServer, context.asyncAssertSuccess());
+        vertx.deployVerticle(httpServer, context.succeeding(id -> context.completeNow()));
     }
 
-    @After
-    public void teardown(TestContext context) {
-        vertx.close(context.asyncAssertSuccess());
+    @AfterEach
+    public void teardown(VertxTestContext context) {
+        vertx.close(context.succeeding(id -> context.completeNow()));
     }
 
     private AddressSpace createAddressSpace(String name) {
@@ -82,21 +82,20 @@ public class HTTPServerTest {
     }
 
     @Test
-    public void testOpenServiceBrokerAPI(TestContext context) {
+    public void testOpenServiceBrokerAPI(VertxTestContext context) throws InterruptedException {
         HttpClientOptions options = new HttpClientOptions();
         HttpClient client = vertx.createHttpClient(options);
         try {
-            Async async = context.async();
             HttpClientRequest request = client.get(httpServer.getActualPort(), "localhost", "/osbapi/v2/catalog", response -> {
                 response.bodyHandler(buffer -> {
                     JsonObject data = buffer.toJsonObject();
-                    context.assertTrue(data.containsKey("services"));
-                    async.complete();
+                    context.verify(() -> assertTrue(data.containsKey("services")));
+                    context.completeNow();
                 });
             });
             putAuthzToken(request);
             request.end();
-            async.awaitSuccess(60_000);
+            context.awaitCompletion(60, TimeUnit.SECONDS);
         } finally {
             client.close();
         }
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/BindingServiceTest.java b/service-broker/src/test/java/io/enmasse/osb/api/BindingServiceTest.java
index 9882bc49a..c19e25537 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/BindingServiceTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/BindingServiceTest.java
@@ -5,11 +5,6 @@
 
 package io.enmasse.osb.api;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-
 import io.enmasse.api.common.ConflictException;
 import io.enmasse.api.common.GoneException;
 import io.enmasse.api.common.UnprocessableEntityException;
@@ -17,16 +12,22 @@ import io.enmasse.osb.api.bind.BindRequest;
 import io.enmasse.osb.api.bind.BindResponse;
 import io.enmasse.osb.api.provision.ProvisionRequest;
 import org.jboss.resteasy.util.HttpResponseCodes;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-import java.util.UUID;
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
+import java.util.UUID;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
 
-@Ignore
+@Disabled
 public class BindingServiceTest extends OSBTestBase {
 
     public static final String BINDING_ID = UUID.randomUUID().toString();
@@ -37,14 +38,15 @@ public class BindingServiceTest extends OSBTestBase {
         provisionService(SERVICE_INSTANCE_ID);
     }
 
-    @Test(expected = UnprocessableEntityException.class)
+    @Test
     public void testSyncProvisioningRequest() throws Exception {
         UriInfo uriInfo = mock(UriInfo.class);
-        provisioningService.provisionService(getSecurityContext(), null, "123", false, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
+        assertThrows(UnprocessableEntityException.class,
+                () -> provisioningService.provisionService(getSecurityContext(), null, "123", false, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID)));
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testBind() throws Exception {
         Response response = bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
         BindResponse bindResponse = (BindResponse) response.getEntity();
@@ -62,36 +64,42 @@ public class BindingServiceTest extends OSBTestBase {
         bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, "123", new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
     }
 
-    @Test(expected = NotFoundException.class)
-    @Ignore
+    @Test
+    @Disabled
     public void testBindOnNonexistentService() throws Exception {
-        bindingService.bindServiceInstance(getSecurityContext(), UUID.randomUUID().toString(), BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
+        assertThrows(NotFoundException.class,
+                () -> bindingService.bindServiceInstance(getSecurityContext(), UUID.randomUUID().toString(), BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID)));
     }
 
-    @Test(expected = BadRequestException.class)
-    @Ignore
+    @Test
+    @Disabled
     public void testBindWithoutServiceId() throws Exception {
-        bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(null, QUEUE_PLAN_ID));
+        assertThrows(BadRequestException.class,
+                () -> bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(null, QUEUE_PLAN_ID)));
     }
 
-    @Test(expected = BadRequestException.class)
+    @Test
+    @Disabled
     public void testBindWithoutPlanId() throws Exception {
-        bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, null));
+        assertThrows(BadRequestException.class,
+                () -> bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, null)));
     }
 
-    @Ignore("Not implemented yet")
-    @Test(expected = BadRequestException.class)
+    @Disabled("Not implemented yet")
+    @Test
     public void testWrongServiceId() throws Exception {
-        bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(UUID.randomUUID(), QUEUE_PLAN_ID));
+        assertThrows(BadRequestException.class,
+                () -> bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(UUID.randomUUID(), QUEUE_PLAN_ID)));
     }
 
-    @Ignore("Not implemented yet")
-    @Test(expected = BadRequestException.class)
+    @Disabled("Not implemented yet")
+    @Test
     public void testWrongPlanId() throws Exception {
-        bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, UUID.randomUUID()));
+        assertThrows(BadRequestException.class,
+                () -> bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, UUID.randomUUID())));
     }
 
-    @Ignore("bindings aren't persisted yet, so we can't do this yet")
+    @Disabled("bindings aren't persisted yet, so we can't do this yet")
     @Test
     public void testBindTwiceWithDifferentPrameters() throws Exception {
         bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
@@ -99,11 +107,10 @@ public class BindingServiceTest extends OSBTestBase {
         String otherServiceId = UUID.randomUUID().toString();
         provisionService(otherServiceId);
 
-        exceptionGrabber.expect(ConflictException.class);
-        bindingService.bindServiceInstance(getSecurityContext(), otherServiceId, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
+        assertThrows(ConflictException.class, () -> bindingService.bindServiceInstance(getSecurityContext(), otherServiceId, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID)));
     }
 
-    @Ignore("bindings aren't persisted yet, so we can't do this yet")
+    @Disabled("bindings aren't persisted yet, so we can't do this yet")
     @Test
     public void testBindTwiceWithSameParameters() throws Exception {
         bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
@@ -120,20 +127,20 @@ public class BindingServiceTest extends OSBTestBase {
         assertThat(response.getStatus(), is(HttpResponseCodes.SC_OK));
     }
 
-    @Ignore("bindings aren't persisted yet, so we can't do this yet. OSB spec mandates the broker MUST return Gone, when binding doesn't exist")
-    @Test(expected = GoneException.class)
+    @Disabled("bindings aren't persisted yet, so we can't do this yet. OSB spec mandates the broker MUST return Gone, when binding doesn't exist")
+    @Test
     public void testUnbindNonexistingBinding() throws Exception {
-        bindingService.unbindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, UUID.randomUUID().toString());
+        assertThrows(GoneException.class,
+                () -> bindingService.unbindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, UUID.randomUUID().toString()));
     }
 
-    @Ignore("bindings aren't persisted yet, so we can't do this yet. OSB spec mandates the broker MUST return Gone, when binding doesn't exist")
+    @Disabled("bindings aren't persisted yet, so we can't do this yet. OSB spec mandates the broker MUST return Gone, when binding doesn't exist")
     @Test
     public void testUnbindTwice() throws Exception {
         bindingService.bindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID, new BindRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID));
         bindingService.unbindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID);
 
-        exceptionGrabber.expect(GoneException.class);
-        bindingService.unbindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID);
+        assertThrows(GoneException.class, () -> bindingService.unbindServiceInstance(getSecurityContext(), SERVICE_INSTANCE_ID, BINDING_ID));
     }
 
 }
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/CatalogServiceTest.java b/service-broker/src/test/java/io/enmasse/osb/api/CatalogServiceTest.java
index 2c988ae2e..29aa1c3b8 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/CatalogServiceTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/CatalogServiceTest.java
@@ -5,9 +5,9 @@
 
 package io.enmasse.osb.api;
 
-import org.junit.Ignore;
+import org.junit.jupiter.api.Disabled;
 
-@Ignore
+@Disabled
 public class CatalogServiceTest extends OSBTestBase {
 /*
     @Test
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/DeserializationTest.java b/service-broker/src/test/java/io/enmasse/osb/api/DeserializationTest.java
index b69c4eba8..3621ed343 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/DeserializationTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/DeserializationTest.java
@@ -5,12 +5,12 @@
 package io.enmasse.osb.api;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import io.enmasse.osb.api.bind.BindRequest;
 import io.enmasse.osb.api.provision.ProvisionRequest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 import java.util.HashMap;
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/OSBTestBase.java b/service-broker/src/test/java/io/enmasse/osb/api/OSBTestBase.java
index 645d8c5cf..c7a23cfb2 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/OSBTestBase.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/OSBTestBase.java
@@ -5,16 +5,14 @@
 package io.enmasse.osb.api;
 
 import io.enmasse.address.model.AddressSpace;
+import io.enmasse.k8s.api.TestAddressSpaceApi;
 import io.enmasse.osb.api.bind.OSBBindingService;
 import io.enmasse.osb.api.lastoperation.OSBLastOperationService;
 import io.enmasse.osb.api.provision.ConsoleProxy;
 import io.enmasse.osb.api.provision.OSBProvisioningService;
 import io.enmasse.osb.api.provision.ProvisionRequest;
-import io.enmasse.k8s.api.TestAddressSpaceApi;
 import org.apache.http.auth.BasicUserPrincipal;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.rules.ExpectedException;
+import org.junit.jupiter.api.BeforeEach;
 
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.core.UriInfo;
@@ -27,6 +25,7 @@ import static org.mockito.Mockito.when;
 /**
  *
  */
+
 public class OSBTestBase {
     protected static final UUID QUEUE_SERVICE_ID = ServiceType.QUEUE.uuid();
     protected static final UUID TOPIC_SERVICE_ID = ServiceType.TOPIC.uuid();
@@ -36,15 +35,12 @@ public class OSBTestBase {
     protected static final String ORGANIZATION_ID = UUID.randomUUID().toString();
     protected static final String SPACE_ID = UUID.randomUUID().toString();
 
-    @Rule
-    public ExpectedException exceptionGrabber = ExpectedException.none();
-
     protected OSBProvisioningService provisioningService;
     protected TestAddressSpaceApi addressSpaceApi;
     protected OSBBindingService bindingService;
     protected OSBLastOperationService lastOperationService;
 
-    @Before
+    @BeforeEach
     public void setup() throws Exception {
         addressSpaceApi = new TestAddressSpaceApi();
         String brokerId = "myspace";
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/ProvisionServiceTest.java b/service-broker/src/test/java/io/enmasse/osb/api/ProvisionServiceTest.java
index af1ba98e6..9d50644bd 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/ProvisionServiceTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/ProvisionServiceTest.java
@@ -5,11 +5,8 @@
 
 package io.enmasse.osb.api;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.mock;
-
+import io.enmasse.address.model.Address;
+import io.enmasse.address.model.Status;
 import io.enmasse.api.common.ConflictException;
 import io.enmasse.api.common.GoneException;
 import io.enmasse.api.common.UnprocessableEntityException;
@@ -17,18 +14,22 @@ import io.enmasse.osb.api.lastoperation.LastOperationResponse;
 import io.enmasse.osb.api.lastoperation.LastOperationState;
 import io.enmasse.osb.api.provision.ProvisionRequest;
 import io.enmasse.osb.api.provision.ProvisionResponse;
-import io.enmasse.address.model.Address;
-import io.enmasse.address.model.Status;
 import org.jboss.resteasy.util.HttpResponseCodes;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
-import java.util.UUID;
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
+import java.util.UUID;
 
-@Ignore
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
+
+@Disabled
 public class ProvisionServiceTest extends OSBTestBase {
 
     public static final String QUEUE_SERVICE_ID_STRING = QUEUE_SERVICE_ID.toString();
@@ -38,24 +39,28 @@ public class ProvisionServiceTest extends OSBTestBase {
     public static final String TRANSACTIONAL = "transactional";
     private UriInfo uriInfo = mock(UriInfo.class);
 
-    @Test(expected = UnprocessableEntityException.class)
+    @Test
     public void testSyncProvisioningRequest() throws Exception {
-        provisioningService.provisionService(getSecurityContext(), null, "123", false, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
+        assertThrows(UnprocessableEntityException.class,
+                () -> provisioningService.provisionService(getSecurityContext(), null, "123", false, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID)));
     }
 
-    @Test(expected = BadRequestException.class)
+    @Test
     public void testInvalidServiceUuid() throws Exception {
-        provisioningService.provisionService(getSecurityContext(), null,  "123", true, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
+        assertThrows(BadRequestException.class,
+                () -> provisioningService.provisionService(getSecurityContext(), null, "123", true, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID)));
     }
 
-    @Test(expected = BadRequestException.class)
+    @Test
     public void testInvalidPlan() throws Exception {
-        provisioningService.provisionService(getSecurityContext(), null, "123", true, new ProvisionRequest(QUEUE_SERVICE_ID, TOPIC_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
+        assertThrows(BadRequestException.class,
+                () -> provisioningService.provisionService(getSecurityContext(), null, "123", true, new ProvisionRequest(QUEUE_SERVICE_ID, TOPIC_PLAN_ID, ORGANIZATION_ID, SPACE_ID)));
     }
 
-    @Test(expected = BadRequestException.class)
+    @Test
     public void testInvalidServiceInstandeUuid() throws Exception {
-        provisioningService.provisionService(getSecurityContext(), null, "123", true, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
+        assertThrows(BadRequestException.class,
+                () -> provisioningService.provisionService(getSecurityContext(), null, "123", true, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID)));
     }
 
     @Test
@@ -114,8 +119,7 @@ public class ProvisionServiceTest extends OSBTestBase {
     @Test
     public void testProvisionTwiceWithDifferentPrameters() throws Exception {
         provisioningService.provisionService(getSecurityContext(), null, SERVICE_INSTANCE_ID, true, new ProvisionRequest(QUEUE_SERVICE_ID, QUEUE_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
-        exceptionGrabber.expect(ConflictException.class);
-        provisioningService.provisionService(getSecurityContext(), null, SERVICE_INSTANCE_ID, true, new ProvisionRequest(ServiceType.TOPIC.uuid(), TOPIC_PLAN_ID, ORGANIZATION_ID, SPACE_ID));
+        assertThrows(ConflictException.class, () -> provisioningService.provisionService(getSecurityContext(), null, SERVICE_INSTANCE_ID, true, new ProvisionRequest(ServiceType.TOPIC.uuid(), TOPIC_PLAN_ID, ORGANIZATION_ID, SPACE_ID)));
     }
 
     @Test
@@ -126,19 +130,22 @@ public class ProvisionServiceTest extends OSBTestBase {
         assertThat(response.getStatus(), is(HttpResponseCodes.SC_OK));
     }
 
-    @Test(expected = GoneException.class)
+    @Test
     public void testDeprovisionNonexistingServiceInstance() throws Exception {
-        provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, QUEUE_PLAN_ID_STRING);
+        assertThrows(GoneException.class,
+                () -> provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, QUEUE_PLAN_ID_STRING));
     }
 
-    @Test(expected = BadRequestException.class)
+    @Test
     public void testDeprovisionWithoutServiceId() throws Exception {
-        provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, null, QUEUE_PLAN_ID_STRING);
+        assertThrows(BadRequestException.class,
+                () -> provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, null, QUEUE_PLAN_ID_STRING));
     }
 
-    @Test(expected = BadRequestException.class)
+    @Test
     public void testDeprovisionWithoutPlanId() throws Exception {
-        provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, null);
+        assertThrows(BadRequestException.class,
+                () -> provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, null));
     }
 
     @Test
@@ -154,8 +161,7 @@ public class ProvisionServiceTest extends OSBTestBase {
         provisionService(SERVICE_INSTANCE_ID);
         provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, QUEUE_PLAN_ID_STRING);
 
-        exceptionGrabber.expect(GoneException.class);
-        provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, QUEUE_PLAN_ID_STRING);
+        assertThrows(GoneException.class, () -> provisioningService.deprovisionService(getSecurityContext(), SERVICE_INSTANCE_ID, QUEUE_SERVICE_ID_STRING, QUEUE_PLAN_ID_STRING));
     }
 
     @Test
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/SerializationTest.java b/service-broker/src/test/java/io/enmasse/osb/api/SerializationTest.java
index 5eb491384..3532bd860 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/SerializationTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/SerializationTest.java
@@ -4,31 +4,20 @@
  */
 package io.enmasse.osb.api;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.module.jsonSchema.types.ObjectSchema;
 import io.enmasse.osb.api.bind.BindResponse;
-import io.enmasse.osb.api.catalog.CatalogResponse;
-import io.enmasse.osb.api.catalog.InputParameters;
-import io.enmasse.osb.api.catalog.Plan;
-import io.enmasse.osb.api.catalog.Schemas;
-import io.enmasse.osb.api.catalog.Service;
-import io.enmasse.osb.api.catalog.ServiceInstanceSchema;
+import io.enmasse.osb.api.catalog.*;
 import io.enmasse.osb.api.lastoperation.LastOperationResponse;
 import io.enmasse.osb.api.lastoperation.LastOperationState;
 import io.enmasse.osb.api.provision.ProvisionResponse;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  *
@@ -70,7 +59,7 @@ public class SerializationTest {
         List plans = (List) serviceMap.get("plans");
         assertThat(plans.size(), is(1));
 
-        Map planMap = (Map)plans.get(0);
+        Map planMap = (Map) plans.get(0);
         assertThat(planMap.get("id"), is(planId.toString()));
         assertThat(planMap.get("name"), is("test-plan"));
         assertThat(planMap.get("description"), is("test-plan-description"));
diff --git a/service-broker/src/test/java/io/enmasse/osb/api/ServiceMappingTest.java b/service-broker/src/test/java/io/enmasse/osb/api/ServiceMappingTest.java
index fabfa1cc6..4bf75a589 100644
--- a/service-broker/src/test/java/io/enmasse/osb/api/ServiceMappingTest.java
+++ b/service-broker/src/test/java/io/enmasse/osb/api/ServiceMappingTest.java
@@ -4,10 +4,11 @@
  */
 package io.enmasse.osb.api;
 
-import org.junit.Test;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ServiceMappingTest {
     @Test
diff --git a/standard-controller/src/test/java/io/enmasse/controller/standard/AddressControllerTest.java b/standard-controller/src/test/java/io/enmasse/controller/standard/AddressControllerTest.java
index 15b677f02..3534d52a9 100644
--- a/standard-controller/src/test/java/io/enmasse/controller/standard/AddressControllerTest.java
+++ b/standard-controller/src/test/java/io/enmasse/controller/standard/AddressControllerTest.java
@@ -15,8 +15,8 @@ import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 import io.fabric8.kubernetes.api.model.KubernetesList;
 import io.fabric8.kubernetes.api.model.KubernetesListBuilder;
 import io.fabric8.openshift.client.OpenShiftClient;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 import java.time.Duration;
@@ -31,7 +31,7 @@ public class AddressControllerTest {
     private OpenShiftClient mockClient;
     private BrokerSetGenerator mockGenerator;
 
-    @Before
+    @BeforeEach
     public void setUp() throws IOException {
         mockHelper = mock(Kubernetes.class);
         mockGenerator = mock(BrokerSetGenerator.class);
diff --git a/standard-controller/src/test/java/io/enmasse/controller/standard/AddressProvisionerTest.java b/standard-controller/src/test/java/io/enmasse/controller/standard/AddressProvisionerTest.java
index e8f381745..6402e4499 100644
--- a/standard-controller/src/test/java/io/enmasse/controller/standard/AddressProvisionerTest.java
+++ b/standard-controller/src/test/java/io/enmasse/controller/standard/AddressProvisionerTest.java
@@ -4,15 +4,18 @@
  */
 package io.enmasse.controller.standard;
 
-import io.enmasse.address.model.*;
+import io.enmasse.address.model.Address;
+import io.enmasse.address.model.AddressResolver;
+import io.enmasse.address.model.AddressSpaceResolver;
+import io.enmasse.address.model.Status;
 import io.enmasse.admin.model.v1.ResourceAllowance;
 import io.enmasse.config.AnnotationKeys;
 import io.enmasse.k8s.api.EventLogger;
 import io.fabric8.kubernetes.api.model.KubernetesList;
 import io.fabric8.kubernetes.api.model.KubernetesListBuilder;
 import io.fabric8.kubernetes.api.model.apps.StatefulSetBuilder;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.internal.util.collections.Sets;
 
 import java.util.*;
@@ -21,10 +24,10 @@ import java.util.function.Consumer;
 import static io.enmasse.address.model.Status.Phase.Configuring;
 import static io.enmasse.address.model.Status.Phase.Pending;
 import static java.util.Collections.singleton;
-import static junit.framework.TestCase.assertTrue;
 import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.not;
+import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.*;
@@ -33,7 +36,7 @@ public class AddressProvisionerTest {
     private BrokerSetGenerator generator;
     private Kubernetes kubernetes;
 
-    @Before
+    @BeforeEach
     public void setup() {
         generator = mock(BrokerSetGenerator.class);
         kubernetes = mock(Kubernetes.class);
@@ -171,7 +174,7 @@ public class AddressProvisionerTest {
         provisioner.provisionResources(createDeployment(1), clusterList, neededMap, Sets.newSet(queue));
 
         assertThat(clusterList.get(0).getResources().getItems().size(), is(0));
-        assertTrue(queue.getStatus().getMessages().toString(), queue.getStatus().getMessages().isEmpty());
+        assertTrue(queue.getStatus().getMessages().isEmpty(), queue.getStatus().getMessages().toString());
         assertThat(queue.getStatus().getPhase(), is(Status.Phase.Configuring));
         assertThat(queue.getAnnotations().get(AnnotationKeys.BROKER_ID), is("broker-pooled-1234-0"));
     }
@@ -197,7 +200,7 @@ public class AddressProvisionerTest {
         provisioner.provisionResources(createDeployment(1), clusterList, provisionMap, Sets.newSet(queue));
         verify(kubernetes).scaleStatefulSet(eq("broker-pooled-1234"), eq(2));
 
-        assertTrue(queue.getStatus().getMessages().toString(), queue.getStatus().getMessages().isEmpty());
+        assertTrue(queue.getStatus().getMessages().isEmpty(), queue.getStatus().getMessages().toString());
         assertThat(queue.getStatus().getPhase(), is(Status.Phase.Configuring));
         assertThat(queue.getAnnotations().get(AnnotationKeys.BROKER_ID), is("broker-pooled-1234-1"));
     }
@@ -205,8 +208,8 @@ public class AddressProvisionerTest {
     @Test
     public void testProvisionColocated() {
         AddressProvisioner provisioner = createProvisioner(Arrays.asList(
-                new ResourceAllowance("broker",  2),
-                new ResourceAllowance("router",  1),
+                new ResourceAllowance("broker", 2),
+                new ResourceAllowance("router", 1),
                 new ResourceAllowance("aggregate", 2)));
 
         Set<Address> addressSet = Sets.newSet(
@@ -255,16 +258,16 @@ public class AddressProvisionerTest {
     private Address createQueue(String address, String plan) {
         return createQueue(address, plan, null);
     }
-    
-    private Address createQueue(String address, String plan, Consumer<Map<String,String>> customizeAnnotations) {
+
+    private Address createQueue(String address, String plan, Consumer<Map<String, String>> customizeAnnotations) {
         return createAddress(address, "queue", plan, customizeAnnotations);
     }
 
     private static Address createAddress(String address, String type, String plan) {
         return createAddress(address, type, plan, null);
     }
-    
-    private static Address createAddress(String address, String type, String plan, Consumer<Map<String,String>> customizeAnnotations) {
+
+    private static Address createAddress(String address, String type, String plan, Consumer<Map<String, String>> customizeAnnotations) {
         final Address.Builder addressBuilder = new Address.Builder()
                 .setName(address)
                 .setAddress(address)
@@ -273,8 +276,8 @@ public class AddressProvisionerTest {
                 .setPlan(plan)
                 .setType(type);
 
-        if ( customizeAnnotations != null ) {
-            final Map<String,String> annotations = new HashMap<>();
+        if (customizeAnnotations != null) {
+            final Map<String, String> annotations = new HashMap<>();
             customizeAnnotations.accept(annotations);
             addressBuilder.setAnnotations(annotations);
         }
@@ -313,12 +316,12 @@ public class AddressProvisionerTest {
         when(generator.generateCluster(eq(provisioner.getShardedClusterId(q2)), anyInt(), eq(q2), any(), any())).thenReturn(new BrokerCluster(provisioner.getShardedClusterId(q2), new KubernetesList()));
         provisioner.provisionResources(createDeployment(1), new ArrayList<>(), neededMap, Sets.newSet(q1, q2));
 
-        assertTrue(q1.getStatus().getMessages().toString(), q1.getStatus().getMessages().isEmpty());
+        assertTrue(q1.getStatus().getMessages().isEmpty(), q1.getStatus().getMessages().toString());
         assertThat(q1.getStatus().getPhase(), is(Status.Phase.Configuring));
         assertNull(q1.getAnnotations().get(AnnotationKeys.BROKER_ID));
         verify(generator).generateCluster(eq(provisioner.getShardedClusterId(q1)), eq(2), eq(q1), any(), any());
 
-        assertTrue(q2.getStatus().getMessages().toString(), q2.getStatus().getMessages().isEmpty());
+        assertTrue(q2.getStatus().getMessages().isEmpty(), q2.getStatus().getMessages().toString());
         assertThat(q2.getStatus().getPhase(), is(Status.Phase.Configuring));
         assertNull(q2.getAnnotations().get(AnnotationKeys.BROKER_ID));
         verify(generator).generateCluster(eq(provisioner.getShardedClusterId(q2)), eq(1), eq(q2), any(), any());
@@ -344,16 +347,16 @@ public class AddressProvisionerTest {
         final Map<String, Map<String, UsageInfo>> neededMap = provisioner.checkQuota(usageMap, singleton(q), singleton(q));
 
         when(generator.generateCluster(eq(provisioner.getShardedClusterId(q)), anyInt(), eq(q), any(), any()))
-            .thenReturn(new BrokerCluster(provisioner.getShardedClusterId(q), new KubernetesList()));
+                .thenReturn(new BrokerCluster(provisioner.getShardedClusterId(q), new KubernetesList()));
 
         provisioner.provisionResources(createDeployment(1), new ArrayList<>(), neededMap, singleton(q));
 
-        assertTrue(q.getStatus().getMessages().toString(), q.getStatus().getMessages().isEmpty());
+        assertTrue(q.getStatus().getMessages().isEmpty(), q.getStatus().getMessages().toString());
         assertThat(q.getStatus().getPhase(), is(Status.Phase.Configuring));
         assertNull(q.getAnnotations().get(AnnotationKeys.BROKER_ID));
 
         verify(generator)
-            .generateCluster(eq(manualClusterId), eq(2), eq(q), any(), any());
+                .generateCluster(eq(manualClusterId), eq(2), eq(q), any(), any());
     }
 
     @Test
@@ -447,7 +450,7 @@ public class AddressProvisionerTest {
             }
         }
         assertEquals(2, unConfigured.size());
-        assertEquals("contains topic + 10 subscriptions", 11, configured.size());
+        assertEquals(11, configured.size(), "contains topic + 10 subscriptions");
         Iterator<Address> unconfiguredIterator = unConfigured.iterator();
         assertFalse(configured.contains(unconfiguredIterator.next()));
         assertFalse(configured.contains(unconfiguredIterator.next()));
@@ -535,7 +538,7 @@ public class AddressProvisionerTest {
         assertEquals(2, unConfigured.size());
         assertTrue(configured.contains(t1));
         assertTrue(configured.contains(t2));
-        assertEquals("contains 2 topic + 10 subscriptions", 12, configured.size());
+        assertEquals(12, configured.size(), "contains 2 topic + 10 subscriptions");
         Iterator<Address> unconfiguredIterator = unConfigured.iterator();
         assertFalse(configured.contains(unconfiguredIterator.next()));
         assertFalse(configured.contains(unconfiguredIterator.next()));
diff --git a/standard-controller/src/test/java/io/enmasse/controller/standard/TemplateBrokerSetGeneratorTest.java b/standard-controller/src/test/java/io/enmasse/controller/standard/TemplateBrokerSetGeneratorTest.java
index 1e7705ba4..f0353a657 100644
--- a/standard-controller/src/test/java/io/enmasse/controller/standard/TemplateBrokerSetGeneratorTest.java
+++ b/standard-controller/src/test/java/io/enmasse/controller/standard/TemplateBrokerSetGeneratorTest.java
@@ -5,20 +5,22 @@
 
 package io.enmasse.controller.standard;
 
+import io.enmasse.address.model.Address;
 import io.enmasse.admin.model.v1.StandardInfraConfig;
 import io.enmasse.config.AnnotationKeys;
-import io.enmasse.address.model.*;
-import io.fabric8.kubernetes.api.model.*;
+import io.fabric8.kubernetes.api.model.HasMetadata;
+import io.fabric8.kubernetes.api.model.KubernetesListBuilder;
 import io.fabric8.openshift.client.ParameterValue;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 
-import java.util.*;
+import java.util.List;
+import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.mockito.Mockito.*;
 
 public class TemplateBrokerSetGeneratorTest {
@@ -26,11 +28,11 @@ public class TemplateBrokerSetGeneratorTest {
     private StandardControllerSchema standardControllerSchema;
     private BrokerSetGenerator generator;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         kubernetes = mock(Kubernetes.class);
 
-        standardControllerSchema  = new StandardControllerSchema();
+        standardControllerSchema = new StandardControllerSchema();
         generator = new TemplateBrokerSetGenerator(kubernetes, new StandardControllerOptions());
     }
 
@@ -75,7 +77,7 @@ public class TemplateBrokerSetGeneratorTest {
         when(kubernetes.processTemplate(anyString(), captor.capture())).thenReturn(new KubernetesListBuilder().addNewConfigMapItem().withNewMetadata().withName("testmap").endMetadata().endConfigMapItem().build());
 
         return generator.generateCluster(address.getName(), 1, address, null,
-                standardControllerSchema.getSchema().findAddressSpaceType("standard").map(type -> (StandardInfraConfig)type.findInfraConfig("cfg1").orElse(null)).orElse(null));
+                standardControllerSchema.getSchema().findAddressSpaceType("standard").map(type -> (StandardInfraConfig) type.findInfraConfig("cfg1").orElse(null)).orElse(null));
     }
 
 }
diff --git a/systemtests/pom.xml b/systemtests/pom.xml
index e2e5c8659..863613178 100644
--- a/systemtests/pom.xml
+++ b/systemtests/pom.xml
@@ -82,6 +82,11 @@
             <artifactId>junit-platform-runner</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>compile</scope>
+        </dependency>
         <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-java</artifactId>
@@ -94,11 +99,6 @@
             <groupId>org.hamcrest</groupId>
             <artifactId>hamcrest-all</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.junit.platform</groupId>
-            <artifactId>junit-platform-launcher</artifactId>
-            <scope>compile</scope>
-        </dependency>
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
diff --git a/systemtests/src/test/java/io/enmasse/systemtest/standard/mqtt/PublishTest.java b/systemtests/src/test/java/io/enmasse/systemtest/standard/mqtt/PublishTest.java
index e78f4215d..f8b287501 100644
--- a/systemtests/src/test/java/io/enmasse/systemtest/standard/mqtt/PublishTest.java
+++ b/systemtests/src/test/java/io/enmasse/systemtest/standard/mqtt/PublishTest.java
@@ -25,9 +25,9 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static junit.framework.TestCase.assertTrue;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests related to publish messages via MQTT
@@ -100,7 +100,7 @@ public class PublishTest extends TestBaseWithShared implements ITestBaseStandard
         CompletableFuture<MqttMessage> messageFuture = new CompletableFuture<>();
         subscriber.subscribe(topic.getAddress(), (topic1, message) -> messageFuture.complete(message));
         MqttMessage receivedMessage = messageFuture.get(1, TimeUnit.MINUTES);
-        assertTrue("Retained message expected", receivedMessage.isRetained());
+        assertTrue(receivedMessage.isRetained(), "Retained message expected");
 
         subscriber.disconnect();
     }
diff --git a/topic-forwarder/src/test/java/enmasse/broker/forwarder/ForwarderControllerTest.java b/topic-forwarder/src/test/java/enmasse/broker/forwarder/ForwarderControllerTest.java
index 09c9e2e9a..f76d26dc3 100644
--- a/topic-forwarder/src/test/java/enmasse/broker/forwarder/ForwarderControllerTest.java
+++ b/topic-forwarder/src/test/java/enmasse/broker/forwarder/ForwarderControllerTest.java
@@ -8,12 +8,12 @@ package enmasse.broker.forwarder;
 import enmasse.discovery.Host;
 import io.vertx.core.Vertx;
 import io.vertx.core.VertxOptions;
-import io.vertx.ext.unit.TestContext;
-import io.vertx.ext.unit.junit.VertxUnitRunner;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import io.vertx.junit5.VertxExtension;
+import io.vertx.junit5.VertxTestContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -25,10 +25,11 @@ import java.util.concurrent.*;
 
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@RunWith(VertxUnitRunner.class)
+
+@ExtendWith(VertxExtension.class)
 public class ForwarderControllerTest {
     private static final Logger log = LoggerFactory.getLogger(ForwarderControllerTest.class.getName());
     private Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(10));
@@ -38,17 +39,17 @@ public class ForwarderControllerTest {
     private TestBroker serverB;
     private TestBroker serverC;
 
-    @Before
-    public void setup(TestContext testContext) throws Exception {
+    @BeforeEach
+    public void setup(VertxTestContext testContext) throws Exception {
         serverA = new TestBroker(1, address);
         serverB = new TestBroker(2, address);
         serverC = new TestBroker(3, address);
-        vertx.deployVerticle(serverA, testContext.asyncAssertSuccess());
-        vertx.deployVerticle(serverB, testContext.asyncAssertSuccess());
-        vertx.deployVerticle(serverC, testContext.asyncAssertSuccess());
+        vertx.deployVerticle(serverA, testContext.succeeding(arg -> testContext.completeNow()));
+        vertx.deployVerticle(serverB, testContext.succeeding(arg -> testContext.completeNow()));
+        vertx.deployVerticle(serverC, testContext.succeeding(arg -> testContext.completeNow()));
     }
 
-    @After
+    @AfterEach
     public void teardown() throws Exception {
         vertx.close();
     }
@@ -98,7 +99,7 @@ public class ForwarderControllerTest {
         assertMessages(resultC.get(120, TimeUnit.SECONDS), "Hello 3", "Hello 4");
     }
 
-    private void assertMessages(List<String> result, String...messages) {
+    private void assertMessages(List<String> result, String... messages) {
         assertThat(messages.length, is(2));
         for (String message : messages) {
             assertThat(result, hasItem(message));