Merge branch 'master' into DIRAPI-341
diff --git a/asn1/api/pom.xml b/asn1/api/pom.xml
index 2175a92..f8fd707 100644
--- a/asn1/api/pom.xml
+++ b/asn1/api/pom.xml
@@ -33,20 +33,29 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>log4j</groupId>
       <artifactId>log4j</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
       <scope>test</scope>
     </dependency>
+
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
diff --git a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1Buffer2Test.java b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1Buffer2Test.java
index 38e9baa..54f8504 100644
--- a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1Buffer2Test.java
+++ b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1Buffer2Test.java
@@ -19,12 +19,12 @@
  */
 package org.apache.directory.api.asn1.util;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.ByteBuffer;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for the Asn1Buffer class
@@ -34,7 +34,7 @@
 public class Asn1Buffer2Test
 {
     @Test
-    @Ignore
+    @Disabled
     public void testPutSmallBytes()
     {
         Asn1Buffer buffer = new Asn1Buffer();
@@ -96,7 +96,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testBytesPerf()
     {
         long t0 = System.currentTimeMillis();
diff --git a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1BufferTest.java b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1BufferTest.java
index 47eebd9..9ecab4d 100644
--- a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1BufferTest.java
+++ b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/Asn1BufferTest.java
@@ -19,12 +19,12 @@
  */
 package org.apache.directory.api.asn1.util;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.ByteBuffer;
 
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test for the Asn1Buffer class
@@ -95,7 +95,7 @@
     }
 
     @Test
-    @Ignore
+    @Disabled
     public void testBytesPerf()
     {
         long t0 = System.currentTimeMillis();
diff --git a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/BitStringTest.java b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/BitStringTest.java
index c49fc4e..4db8535 100644
--- a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/BitStringTest.java
+++ b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/BitStringTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.asn1.util;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.asn1.DecoderException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BitStringTest
 {
     /**
@@ -59,7 +56,7 @@
         }
         catch ( IndexOutOfBoundsException ioobe )
         {
-            assertTrue( true );
+            assertTrue(  true );
         }
     }
 
diff --git a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/OidTest.java b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/OidTest.java
index b082885..f98393b 100644
--- a/asn1/api/src/test/java/org/apache/directory/api/asn1/util/OidTest.java
+++ b/asn1/api/src/test/java/org/apache/directory/api/asn1/util/OidTest.java
@@ -20,15 +20,15 @@
 package org.apache.directory.api.asn1.util;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Arrays;
 
 import org.apache.directory.api.asn1.DecoderException;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 
 /**
diff --git a/asn1/ber/pom.xml b/asn1/ber/pom.xml
index 482cbd2..263ec7e 100644
--- a/asn1/ber/pom.xml
+++ b/asn1/ber/pom.xml
@@ -33,8 +33,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
 
diff --git a/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/LengthTest.java b/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/LengthTest.java
index 320b0e6..83fc488 100644
--- a/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/LengthTest.java
+++ b/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/LengthTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.asn1.ber.tlv;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LengthTest
 {
 
@@ -48,17 +45,17 @@
     @Test
     public void testLengthGetNbBytes()
     {
-        assertEquals( "1 expected", 1, TLV.getNbBytes( 0 ) );
-        assertEquals( "1 expected", 1, TLV.getNbBytes( 1 ) );
-        assertEquals( "1 expected", 1, TLV.getNbBytes( 127 ) );
-        assertEquals( "2 expected", 2, TLV.getNbBytes( 128 ) );
-        assertEquals( "2 expected", 2, TLV.getNbBytes( 255 ) );
-        assertEquals( "3 expected", 3, TLV.getNbBytes( 256 ) );
-        assertEquals( "3 expected", 3, TLV.getNbBytes( 65535 ) );
-        assertEquals( "4 expected", 4, TLV.getNbBytes( 65536 ) );
-        assertEquals( "4 expected", 4, TLV.getNbBytes( 16777215 ) );
-        assertEquals( "5 expected", 5, TLV.getNbBytes( 16777216 ) );
-        assertEquals( "5 expected", 5, TLV.getNbBytes( 0xFFFFFFFF ) );
+        assertEquals( 1, TLV.getNbBytes( 0 ), "1 expected" );
+        assertEquals( 1, TLV.getNbBytes( 1 ), "1 expected" );
+        assertEquals( 1, TLV.getNbBytes( 127 ), "1 expected" );
+        assertEquals( 2, TLV.getNbBytes( 128 ), "2 expected" );
+        assertEquals( 2, TLV.getNbBytes( 255 ), "2 expected" );
+        assertEquals( 3, TLV.getNbBytes( 256 ), "3 expected" );
+        assertEquals( 3, TLV.getNbBytes( 65535 ), "3 expected" );
+        assertEquals( 4, TLV.getNbBytes( 65536 ), "4 expected" );
+        assertEquals( 4, TLV.getNbBytes( 16777215 ), "4 expected" );
+        assertEquals( 5, TLV.getNbBytes( 16777216 ), "5 expected" );
+        assertEquals( 5, TLV.getNbBytes( 0xFFFFFFFF ), "5 expected" );
     }
 
 
diff --git a/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/PrimitivesTest.java b/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/PrimitivesTest.java
index c515439..a41edfc 100644
--- a/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/PrimitivesTest.java
+++ b/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/PrimitivesTest.java
@@ -20,23 +20,19 @@
 package org.apache.directory.api.asn1.ber.tlv;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Primitives
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class PrimitivesTest
 {
     /**
diff --git a/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/ValueTest.java b/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/ValueTest.java
index 7b860e5..2d2e8c7 100644
--- a/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/ValueTest.java
+++ b/asn1/ber/src/test/java/org/apache/directory/api/asn1/ber/tlv/ValueTest.java
@@ -20,9 +20,9 @@
 package org.apache.directory.api.asn1.ber.tlv;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
@@ -31,11 +31,10 @@
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1StringUtils;
 import org.apache.directory.api.asn1.util.BitString;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 
@@ -44,8 +43,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ValueTest
 {
 
diff --git a/dsml/parser/pom.xml b/dsml/parser/pom.xml
index 4279156..6c69eed 100644
--- a/dsml/parser/pom.xml
+++ b/dsml/parser/pom.xml
@@ -31,8 +31,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
@@ -81,6 +87,13 @@
               osgi-cache
             </org.osgi.framework.storage>
           </systemPropertyVariables>
+          <parallel>all</parallel>
+          <threadCount>10</threadCount>
+          <properties>
+            <configurationParameters>
+              junit.jupiter.execution.parallel.enabled=true
+            </configurationParameters>
+          </properties>
         </configuration>
       </plugin>
       <plugin>
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractResponseTest.java
index d8abb43..096605b 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractResponseTest.java
@@ -21,8 +21,8 @@
 package org.apache.directory.api.dsmlv2;
 
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -54,7 +54,7 @@
         }
         catch ( XmlPullParserException e )
         {
-            assertTrue( e.getMessage(), true );
+            assertTrue( true, e.getMessage() );
             return;
         }
         catch ( Exception e )
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractTest.java
index 49dad1f..453547a 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AbstractTest.java
@@ -21,8 +21,8 @@
 package org.apache.directory.api.dsmlv2;
 
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.dsmlv2.request.Dsmlv2Grammar;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
@@ -75,12 +75,12 @@
         }
         catch ( XmlPullParserException e )
         {
-            assertTrue( e.getMessage(), true );
+            assertTrue( true, e.getMessage() );
             return;
         }
         catch ( IllegalStateException e )
         {
-            assertTrue( e.getMessage(), true );
+            assertTrue( true, e.getMessage() );
             return;
         }
         catch ( Exception e )
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AllTests.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AllTests.java
index ce40700..24332aa 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AllTests.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/AllTests.java
@@ -44,19 +44,17 @@
 import org.apache.directory.api.dsmlv2.searchResponse.searchResultDone.SearchResultDoneTest;
 import org.apache.directory.api.dsmlv2.searchResponse.searchResultEntry.SearchResultEntryTest;
 import org.apache.directory.api.dsmlv2.searchResponse.searchResultReference.SearchResultReferenceTest;
+import org.junit.platform.runner.JUnitPlatform;
+import org.junit.platform.suite.api.SelectClasses;
 import org.junit.runner.RunWith;
-import org.junit.runners.Suite;
-
-import com.mycila.junit.concurrent.ConcurrentSuite;
-
 
 /**
  * This is the complete Test Suite for DSMLv2 Parser (Request and Response)
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentSuite.class)
-@Suite.SuiteClasses(
+@RunWith(JUnitPlatform.class)
+@SelectClasses(
     {
         AbandonRequestTest.class,
         AddRequestTest.class,
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/ParserUtilsTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/ParserUtilsTest.java
index 2398c0d..c4ef081 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/ParserUtilsTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/ParserUtilsTest.java
@@ -21,8 +21,8 @@
 package org.apache.directory.api.dsmlv2;
 
 
-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 java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -31,7 +31,9 @@
 import org.apache.directory.api.dsmlv2.batchResponse.BatchResponseTest;
 import org.apache.directory.api.dsmlv2.request.BatchRequestDsml;
 import org.apache.directory.api.dsmlv2.response.BatchResponseDsml;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -39,6 +41,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution( ExecutionMode.CONCURRENT)
 public class ParserUtilsTest extends AbstractTest
 {
 
@@ -62,8 +65,8 @@
         String dsml = batchRequest.toDsml();
         assertNotNull( dsml );
 
-        assertEquals( "Pretty printed DSML should contain newlines", 20, countNewlines( dsml ) );
-        assertEquals( "Pretty printed DSML should contain indention", 38, countIndention( dsml ) );
+        assertEquals( 20, countNewlines( dsml ), "Pretty printed DSML should contain newlines" );
+        assertEquals( 38, countIndention( dsml ), "Pretty printed DSML should contain indention" );
     }
 
 
@@ -84,8 +87,8 @@
         String dsml = batchResponse.toDsml();
         assertNotNull( dsml );
 
-        assertEquals( "Pretty printed DSML should contain newlines", 12, countNewlines( dsml ) );
-        assertEquals( "Pretty printed DSML should contain indention", 18, countIndention( dsml ) );
+        assertEquals( 12, countNewlines( dsml ), "Pretty printed DSML should contain newlines" );
+        assertEquals( 18, countIndention( dsml ), "Pretty printed DSML should contain indention" );
     }
 
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/abandonRequest/AbandonRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/abandonRequest/AbandonRequestTest.java
index f185e73..dcc0605 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/abandonRequest/AbandonRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/abandonRequest/AbandonRequestTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.abandonRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Map;
 
@@ -36,20 +36,16 @@
 import org.apache.directory.api.ldap.model.message.AbandonRequest;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Abandon Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class AbandonRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addRequest/AddRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addRequest/AddRequestTest.java
index ac2b23d..291cb62 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addRequest/AddRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addRequest/AddRequestTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.addRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -39,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.AddRequest;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Add Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class AddRequestTest extends AbstractTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addResponse/AddResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addResponse/AddResponseTest.java
index 4b2cfb4..1db9161 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addResponse/AddResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/addResponse/AddResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.addResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Add Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class AddResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authRequest/AuthRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authRequest/AuthRequestTest.java
index 5145dea..df86199 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authRequest/AuthRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authRequest/AuthRequestTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.authRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Map;
 
@@ -35,20 +35,16 @@
 import org.apache.directory.api.ldap.model.message.BindRequest;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Auth Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class AuthRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authResponse/AuthResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authResponse/AuthResponseTest.java
index b0ee7bb..efd0464 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authResponse/AuthResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/authResponse/AuthResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.authResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Auth Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class AuthResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchRequest/BatchRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchRequest/BatchRequestTest.java
index d8e50d1..d9d6aa1 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchRequest/BatchRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchRequest/BatchRequestTest.java
@@ -21,9 +21,9 @@
 package org.apache.directory.api.dsmlv2.batchRequest;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.List;
 
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ModifyRequest;
 import org.apache.directory.api.ldap.model.message.Request;
 import org.apache.directory.api.ldap.model.message.SearchRequest;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Compare Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class BatchRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchResponse/BatchResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchResponse/BatchResponseTest.java
index 2f76952..c944d9e 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchResponse/BatchResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/batchResponse/BatchResponseTest.java
@@ -21,9 +21,9 @@
 package org.apache.directory.api.dsmlv2.batchResponse;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.dsmlv2.AbstractResponseTest;
 import org.apache.directory.api.dsmlv2.DsmlDecorator;
@@ -39,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.ModifyDnResponse;
 import org.apache.directory.api.ldap.model.message.ModifyResponse;
 import org.apache.directory.api.ldap.model.message.Response;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Compare Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class BatchResponseTest extends AbstractResponseTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareRequest/CompareRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareRequest/CompareRequestTest.java
index 2fd521a..749fc39 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareRequest/CompareRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareRequest/CompareRequestTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.compareRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Map;
 
@@ -36,20 +36,16 @@
 import org.apache.directory.api.ldap.model.message.CompareRequest;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Compare Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class CompareRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareResponse/CompareResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareResponse/CompareResponseTest.java
index df715fe..e483baf 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareResponse/CompareResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/compareResponse/CompareResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.compareResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Compare Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class CompareResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delRequest/DelRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delRequest/DelRequestTest.java
index 682481c..80a86c2 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delRequest/DelRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delRequest/DelRequestTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.delRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Map;
 
@@ -35,20 +35,16 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.DeleteRequest;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Del Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class DelRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delResponse/DelResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delResponse/DelResponseTest.java
index 041aaf7..3d8a45e 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delResponse/DelResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/delResponse/DelResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.delResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Del Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class DelResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/errorResponse/ErrorResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/errorResponse/ErrorResponseTest.java
index 1a10bf0..1f86392 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/errorResponse/ErrorResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/errorResponse/ErrorResponseTest.java
@@ -21,28 +21,24 @@
 package org.apache.directory.api.dsmlv2.errorResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.dsmlv2.AbstractResponseTest;
 import org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser;
 import org.apache.directory.api.dsmlv2.response.ErrorResponse;
 import org.apache.directory.api.dsmlv2.response.ErrorResponse.ErrorResponseType;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Error Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ErrorResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedRequest/ExtendedRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedRequest/ExtendedRequestTest.java
index 33b5e2c..c30f1a7 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedRequest/ExtendedRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedRequest/ExtendedRequestTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.dsmlv2.extendedRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Map;
 
@@ -35,20 +35,16 @@
 import org.apache.directory.api.dsmlv2.request.ExtendedRequestDsml;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Extended Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ExtendedRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedResponse/ExtendedResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedResponse/ExtendedResponseTest.java
index 59a5f5b..4c00722 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedResponse/ExtendedResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/extendedResponse/ExtendedResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.extendedResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -44,20 +44,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Extended Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ExtendedResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNRequest/ModifyDNRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNRequest/ModifyDNRequestTest.java
index 859c77e..264f675 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNRequest/ModifyDNRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNRequest/ModifyDNRequestTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.modDNRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Map;
 
@@ -35,20 +35,16 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.ModifyDnRequest;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Modify Dn Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyDNRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNResponse/ModifyDNResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNResponse/ModifyDNResponseTest.java
index dd1bcdb..3b1f361 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNResponse/ModifyDNResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modDNResponse/ModifyDNResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.modDNResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Modify Dn Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyDNResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyRequest/ModifyRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyRequest/ModifyRequestTest.java
index d940415..5b11faa 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyRequest/ModifyRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyRequest/ModifyRequestTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.modifyRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
@@ -42,20 +42,16 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.ModifyRequest;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Modify Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyResponse/ModifyResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyResponse/ModifyResponseTest.java
index d963b12..d3215cb 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyResponse/ModifyResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/modifyResponse/ModifyResponseTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.modifyResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -41,20 +41,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Modify Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyResponseTest extends AbstractResponseTest
 {
 
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchRequest/SearchRequestTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchRequest/SearchRequestTest.java
index f58ed1f..df88097 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchRequest/SearchRequestTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchRequest/SearchRequestTest.java
@@ -21,19 +21,16 @@
 package org.apache.directory.api.dsmlv2.searchRequest;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.List;
 import java.util.Map;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.dsmlv2.AbstractTest;
 import org.apache.directory.api.dsmlv2.DsmlControl;
 import org.apache.directory.api.dsmlv2.Dsmlv2Parser;
@@ -55,17 +52,16 @@
 import org.apache.directory.api.ldap.model.message.SearchRequest;
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Del Request parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchRequestTest extends AbstractTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/SearchResponseTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/SearchResponseTest.java
index 50d28bd..eb735bc 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/SearchResponseTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/SearchResponseTest.java
@@ -21,27 +21,23 @@
 package org.apache.directory.api.dsmlv2.searchResponse;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.dsmlv2.AbstractResponseTest;
 import org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser;
 import org.apache.directory.api.dsmlv2.response.SearchResponse;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Search Result Done Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResponseTest extends AbstractResponseTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultDone/SearchResultDoneTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultDone/SearchResultDoneTest.java
index 5e4f55e..44f04ba 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultDone/SearchResultDoneTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultDone/SearchResultDoneTest.java
@@ -21,12 +21,12 @@
 package org.apache.directory.api.dsmlv2.searchResponse.searchResultDone;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -42,20 +42,16 @@
 import org.apache.directory.api.ldap.model.message.SearchResultDone;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Search Result Done Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResultDoneTest extends AbstractResponseTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultEntry/SearchResultEntryTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultEntry/SearchResultEntryTest.java
index 9078102..201d938 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultEntry/SearchResultEntryTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultEntry/SearchResultEntryTest.java
@@ -20,19 +20,16 @@
 package org.apache.directory.api.dsmlv2.searchResponse.searchResultEntry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Iterator;
 import java.util.Map;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.dsmlv2.AbstractResponseTest;
 import org.apache.directory.api.dsmlv2.DsmlControl;
 import org.apache.directory.api.dsmlv2.Dsmlv2ResponseParser;
@@ -44,8 +41,9 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.SearchResultEntry;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -53,8 +51,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResultEntryTest extends AbstractResponseTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultReference/SearchResultReferenceTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultReference/SearchResultReferenceTest.java
index 51103a3..57c4385 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultReference/SearchResultReferenceTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/searchResponse/searchResultReference/SearchResultReferenceTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.dsmlv2.searchResponse.searchResultReference;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Collection;
 import java.util.Map;
@@ -39,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.SearchResultReference;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for the Search Result Reference Response parsing
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResultReferenceTest extends AbstractResponseTest
 {
     /**
diff --git a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/soap/SoapDsmlParsingTest.java b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/soap/SoapDsmlParsingTest.java
index 891a3e0..6abcd3c 100644
--- a/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/soap/SoapDsmlParsingTest.java
+++ b/dsml/parser/src/test/java/org/apache/directory/api/dsmlv2/soap/SoapDsmlParsingTest.java
@@ -20,16 +20,18 @@
 package org.apache.directory.api.dsmlv2.soap;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.dsmlv2.Dsmlv2Parser;
 import org.apache.directory.api.dsmlv2.request.BatchRequestDsml;
 import org.apache.directory.api.ldap.model.message.SearchRequest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,9 +39,9 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution( ExecutionMode.CONCURRENT)
 public class SoapDsmlParsingTest
 {
-
     @Test
     public void testParsingRequestsOneByOne() throws Exception
     {
diff --git a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
index 24bf20f..4c0c052 100644
--- a/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
+++ b/i18n/src/main/resources/org/apache/directory/api/i18n/errors.properties
@@ -42,7 +42,7 @@
 #    actions    1100 - 1199
 ERR_01100_INCORRECT_LENGTH=The expected length is incorrect, expected {0}, got {1}
 ERR_01101_NULL_LENGTH=The length should not be 0
-ERR_01102_INVALID_INTEGER=The received bytes can't be decoded to a valid integer: ''{0}''
+ERR_01102_INVALID_INTEGER=The received bytes can''t be decoded to a valid integer: ''{0}''
 
 #    grammar    1200 - 1299
 ERR_01200_BAD_TRANSITION_FROM_STATE=Bad transition from state {0}, tag {1}
@@ -198,7 +198,7 @@
 ERR_04170_TIMEOUT_OCCURED=TimeOut occurred
 ERR_04171_CANNOT_PARSE_MATCHED_DN=Could not parse matchedDn while transforming Codec value to Internal: {0}
 ERR_04172_KEYSTORE_INIT_FAILURE=Keystore initialisation failure
-ERR_04173_ALGORITHM_NOT_FOUND=Not TrustManagerFactory found for algorithm '{0}'
+ERR_04173_ALGORITHM_NOT_FOUND=Not TrustManagerFactory found for algorithm ''{0}''
 
 ERR_04174_INPUT_FILE_NAME_NULL=LdapClientTrustStoreManager constructor : input file name is null
 ERR_04175_TRUST_STORE_FILE_NULL=TrustStoreFile : file not found
@@ -275,7 +275,7 @@
 ERR_05155_FLAG_TYPE_INVALID=The types only flag {0} is invalid: {1}. It should be 0 or 255
 ERR_05156_INVALID_ATTRIBUTE_TYPE=The Attribute type {0} is invalid : {1}
 ERR_05157_INVALID_DN=The Dn {0} is invalid : {1}
-ERR_05158_INVALID_REQUEST_VALUE=The encoded value '{0}' cannot be decoded
+ERR_05158_INVALID_REQUEST_VALUE=The encoded value ''{0}'' cannot be decoded
 ERR_05159_INVALID_RESPONSE_NAME_OID=The Response name is not a valid OID : {0} ({1}) is invalid
 
 # api-ldap-codec-core api       5200-5299
@@ -526,7 +526,7 @@
 ERR_13244_ID_AT_NOT_COMPATIBLE=ID ''{0}'' and AttributeType ''{1}'' are not compatible
 ERR_13245_AT_PARAMETER_NULL=The AttributeType parameter should not be null
 ERR_13246_INVALID_VALUE_PER_SYNTAX=Invalid upValue per syntax
-ERR_13247_INVALID_VALUE_CANT_NORMALIZE=Invalid upValue, it can't be normalized
+ERR_13247_INVALID_VALUE_CANT_NORMALIZE=Invalid upValue, it can''t be normalized
 ERR_13248_CANNOT_READ_ENTRY=Cannot read an entry
 ERR_13249_NO_COMPARATOR_FOR_AT=No comparator for attributeType {0}
 ERR_13250_VALUE_MISSING_AT_THE_END=A value is missing at the end
@@ -644,7 +644,7 @@
 ERR_13510_UNKNOWN_DEREF_MODE=Unknown derefmode {0}
 ERR_13511_INVALID_PROXIED_AUTHZ_NULL=Invalid proxied authz value: cannot be null
 ERR_13512_INVALID_PROXIED_AUTHZ_BAD_DN=Invalid proxied authz value: the DN is not valid
-ERR_13513_INVALID_PROXIED_AUTHZ_NO_DN_OR_U=Invalid proxied authz value: should start with 'dn:' or 'u:'
+ERR_13513_INVALID_PROXIED_AUTHZ_NO_DN_OR_U=Invalid proxied authz value: should start with ''dn:'' or ''u:''
 ERR_13514_UNKNOWN_SORT_RESPONSE_RESULT=Unknown sort response result code {0}
 ERR_13515_UNEXPECTED_MOD_OP=Unexpected ModificationOperation
 ERR_13516_UNEXPECTED_MESSAGE_TYPE=Unexpected MessageTypeEnum {0}
@@ -776,7 +776,7 @@
 ERR_13792_SIMPLE_QUOTE_EXPECTED_AT_END=Simple quote expected at the end of a descr (line {0}, col {1})
 ERR_13793_NO_CLOSING_PAREN=No closing '')'' (line {0}, col {1})
 ERR_13794_MORE_OIDS_EXPECTED=more OIDs expected (line {0}, col {1})
-ERR_13795_OPENED_BRACKET_NOT_CLOSED=Opened ''{'' hasn't been closed (line {0}, col {1})
+ERR_13795_OPENED_BRACKET_NOT_CLOSED=Opened ''{'' hasn''t been closed (line {0}, col {1})
 ERR_13796_USAGE_EXPECTED=Expected an USAGE (line {0}, col {1})
 ERR_13797_USAGE_UNKNOWN=The USAGE value is unknown (line {0}, col {1})
 ERR_13798_AT_DESCRIPTION_INVALID=Error, AttributeType definition invalid (line {0}, col {1})
@@ -947,7 +947,7 @@
 ERR_16074_CANNOT_ACCESS_NORM_CTOR_CLASS=Cannot access the normalizer class constructor for class {0}
 ERR_16075_CANNOT_ACCESS_NORM_CTOR=Cannot access the normalizer class constructor: {0}
 ERR_16076_NOT_A_SCHEMA_DEFINITION=The first entry in the LDIF file is not a schema definition
-ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED=SchemaManager can't be loaded: {0}
+ERR_16077_SCHEMA_MANAGER_CANT_BE_LOADED=SchemaManager can''t be loaded: {0}
 ERR_16078_CANNOT_LOAD_UNKNOWN_SCHEMA=Cannot load the unknown schema {0}
 ERR_16079_INVALID_SCHEMA_OBJECT_CANNOT_BE_LOADED=the SchemaObject {0} cannot be added, it''s not a valid LoadableSchemaObject.
 ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED=Default SchemaLoader cannot be created {0}
diff --git a/integ-osgi/pom.xml b/integ-osgi/pom.xml
index a3ec4b4..f483f46 100644
--- a/integ-osgi/pom.xml
+++ b/integ-osgi/pom.xml
@@ -92,8 +92,13 @@
     </dependency>
 
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
 
@@ -170,6 +175,13 @@
             <reuseForks>false</reuseForks>
             <forkedProcessExitTimeoutInSeconds>1</forkedProcessExitTimeoutInSeconds>
             <rerunFailingTestsCount>1</rerunFailingTestsCount>
+            <parallel>all</parallel>
+            <threadCount>10</threadCount>
+            <properties>
+              <configurationParameters>
+                junit.jupiter.execution.parallel.enabled=true
+              </configurationParameters>
+            </properties>
           </configuration>
         </plugin>
         <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
diff --git a/integ/pom.xml b/integ/pom.xml
index 6dac59e..2c53c16 100644
--- a/integ/pom.xml
+++ b/integ/pom.xml
@@ -49,8 +49,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemCheckerTest.java b/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemCheckerTest.java
index 18430b2..d5337b5 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemCheckerTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemCheckerTest.java
@@ -21,28 +21,24 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class for ACIItem checker (wrapper).
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class ACIItemCheckerTest
 {
     /** the ACIItem checker wrapper */
@@ -52,7 +48,7 @@
     /**
      * Initialization
      */
-    @BeforeClass
+    @BeforeAll
     public static void init() throws Exception
     {
         JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemParserTest.java b/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemParserTest.java
index a5bd700..5320b8e 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemParserTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/aci/ACIItemParserTest.java
@@ -21,30 +21,26 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class for ACIItem parser (wrapper).
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class ACIItemParserTest
 {
 
@@ -55,7 +51,7 @@
     /**
      * Initialization
      */
-    @BeforeClass
+    @BeforeAll
     public static void init() throws Exception
     {
         JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/codec/api/StandaloneLdapCodecServiceTest.java b/integ/src/test/java/org/apache/directory/api/ldap/codec/api/StandaloneLdapCodecServiceTest.java
index 329b8e4..6030077 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/codec/api/StandaloneLdapCodecServiceTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/codec/api/StandaloneLdapCodecServiceTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.codec.api;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.codec.standalone.StandaloneLdapApiService;
 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyRequest;
@@ -33,8 +33,8 @@
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl_impl.SyncInfoValueFactory;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -44,7 +44,7 @@
  */
 public class StandaloneLdapCodecServiceTest
 {
-    @BeforeClass
+    @BeforeAll
     public static void setupLdapApiService() throws Exception
     {
         // Load the extension points
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeSerializationTest.java
index 6f63f4b..c49c089 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.entry;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,9 +34,8 @@
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test the Attribute Serialization
@@ -61,7 +60,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeTest.java b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeTest.java
index 537c590..3de9241 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareAttributeTest.java
@@ -20,13 +20,13 @@
 package org.apache.directory.api.ldap.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -47,17 +47,13 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
-
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 /**
  * Test the schema aware Attribute
  * 
@@ -179,7 +175,7 @@
     }
 
 
-    @BeforeClass
+    @BeforeAll
     public static void startup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -189,7 +185,7 @@
     /**
      * Initialize the schemaManager
      */
-    @Before
+    @BeforeEach
     public void setup() throws Exception
     {
         atCN = schemaManager.getAttributeType( "cn" );
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntrySerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntrySerializationTest.java
index 5376806..a3474e2 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntrySerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntrySerializationTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,9 +34,8 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test the Entry Serialization
@@ -51,7 +50,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntryTest.java b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntryTest.java
index 2f3c13d..c604af1 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntryTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareEntryTest.java
@@ -19,13 +19,13 @@
 package org.apache.directory.api.ldap.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -48,21 +48,17 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test class for the DefaultEntry class
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaAwareEntryTest
 {
     private static Dn exampleDn;
@@ -179,7 +175,7 @@
     /**
      * @throws java.lang.Exception
      */
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws Exception
     {
         exampleDn = new Dn( "dc=example,dc=com" );
@@ -853,13 +849,13 @@
 
         entry.put( "sn", ( String ) null );
         assertEquals( 1, entry.size() );
-        assertNotNull( "sn", entry.get( "sn" ) );
+        assertNotNull( entry.get( "sn" ), "sn" );
         assertEquals( 1, entry.get( "sn" ).size() );
         assertNull( entry.get( "sn" ).get().getString() );
 
         entry.put( "ObjectClass", "top", "person", "top" );
         assertEquals( 2, entry.size() );
-        assertNotNull( "objectclass", entry.get( "sn" ) );
+        assertNotNull( entry.get( "sn" ), "objectclass" );
         assertEquals( 2, entry.get( "OBJECTCLASS" ).size() );
         Attribute attribute = entry.get( "objectClass" );
         assertTrue( attribute.contains( "top" ) );
@@ -909,7 +905,7 @@
 
         entry.put( "sn", strNullValue );
         assertEquals( 1, entry.size() );
-        assertNotNull( "sn", entry.get( "sn" ) );
+        assertNotNull( entry.get( "sn" ), "sn" );
         assertEquals( 1, entry.get( "sn" ).size() );
         assertNull( entry.get( "sn" ).get().getString() );
 
@@ -917,7 +913,7 @@
 
         entry.put( "ObjectClass", strValueTop, strValuePerson, strValueTop2, strNullValue );
         assertEquals( 1, entry.size() );
-        assertNotNull( "objectclass", entry.get( "objectclass" ) );
+        assertNotNull( entry.get( "objectclass" ), "objectclass" );
         assertEquals( 3, entry.get( "OBJECTCLASS" ).size() );
         Attribute attribute = entry.get( "objectClass" );
         assertTrue( attribute.contains( "top" ) );
@@ -930,7 +926,7 @@
 
         entry.put( "userpassword", strNullValue );
         assertEquals( 1, entry.size() );
-        assertNotNull( "userpassword", entry.get( "userpassword" ) );
+        assertNotNull( entry.get( "userpassword" ), "userpassword" );
         assertEquals( 1, entry.get( "userpassword" ).size() );
         assertNull( entry.get( "userpassword" ).get().getString() );
 
@@ -938,7 +934,7 @@
 
         entry.put( "userPassword", binValue1, binValue2, binValue3, binNullValue );
         assertEquals( 1, entry.size() );
-        assertNotNull( "userpassword", entry.get( "userpassword" ) );
+        assertNotNull( entry.get( "userpassword" ), "userpassword" );
         assertEquals( 3, entry.get( "userpassword" ).size() );
         attribute = entry.get( "userpassword" );
         assertTrue( attribute.contains( BYTES1 ) );
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareModificationSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareModificationSerializationTest.java
index ecbebd9..61ce3ed 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareModificationSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareModificationSerializationTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -39,21 +39,17 @@
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the DefaultModification class
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaAwareModificationSerializationTest
 {
     private static SchemaManager schemaManager;
@@ -63,7 +59,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareValueSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareValueSerializationTest.java
index c813a8e..4f7a6db 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareValueSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/entry/SchemaAwareValueSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.entry;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -35,21 +35,17 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Value Serialization
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaAwareValueSerializationTest
 {
     private static final byte[] DATA = new byte[]
@@ -76,7 +72,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/ldif/SchemaAwareLdifReaderTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/ldif/SchemaAwareLdifReaderTest.java
index eef9039..d1119ca 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/ldif/SchemaAwareLdifReaderTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/ldif/SchemaAwareLdifReaderTest.java
@@ -20,12 +20,13 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.DataOutputStream;
 import java.io.File;
@@ -46,22 +47,18 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the LdifReader class
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaAwareLdifReaderTest
 {
     private static byte[] data;
@@ -94,7 +91,7 @@
     /**
      * Create a file to be used by ":<" values
      */
-    @BeforeClass
+    @BeforeAll
     public static void setUp() throws Exception
     {
         data = new byte[256];
@@ -112,7 +109,7 @@
     /**
      * Initialize the SchemaManager
      */
-    @Before
+    @BeforeEach
     public void init()
     {
         schemaManager = new DefaultSchemaManager();
@@ -1254,8 +1251,8 @@
         }
         catch ( Exception ne )
         {
-            assertTrue( I18n.err( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER ), 
-                ne.getMessage().startsWith( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER.getErrorCode() ) );
+            assertTrue( ne.getMessage().startsWith( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER.getErrorCode() ),
+                I18n.err( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER ) );
         }
     }
 
@@ -2063,7 +2060,7 @@
     }
 
 
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testChangeTypeDeleteBadEntry() throws Exception
     {
         String ldif =
@@ -2072,14 +2069,17 @@
                 "changetype: delete\n" +
                 "attr1: test";
 
-        try ( LdifReader reader = new LdifReader( schemaManager ) )
+        assertThrows( LdapLdifException.class, ( ) ->
         {
-            reader.parseLdif( ldif );
-        }
+            try ( LdifReader reader = new LdifReader( schemaManager ) )
+            {
+                reader.parseLdif( ldif );
+            }
+        } );
     }
 
 
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifContentWithControl() throws Exception
     {
         String ldif =
@@ -2090,7 +2090,10 @@
 
         try ( LdifReader reader = new LdifReader( schemaManager ) )
         {
-            reader.parseLdif( ldif );
+            assertThrows( LdapLdifException.class, ( ) ->
+            {
+                reader.parseLdif( ldif );
+            } );
         }
     }
 
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
index 0bcbab1..8e32a25 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
@@ -20,9 +20,9 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -35,29 +35,25 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the AttributeTypeAndValue class serialization
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class AvaSerializationTest
 {
     /** A null schemaManager used in tests */
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -363,7 +359,7 @@
 
 
     @Test
-    @Ignore
+    @Disabled
     public void testSerializationPerf() throws LdapException, IOException, ClassNotFoundException
     {
         Ava atav = new Ava( schemaManager, "cn", "This is a serialization test" );
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
index aba8889..f031bbc 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
@@ -20,9 +20,9 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Arrays;
 
@@ -30,27 +30,23 @@
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the class AttributeTypeAndValue
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class AvaTest
 {
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java
index c82cc7c..d87ab98 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/DnTest.java
@@ -20,13 +20,14 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
@@ -40,22 +41,18 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the class Dn
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class DnTest
 {
     private static SchemaManager schemaManager;
@@ -64,7 +61,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -925,12 +922,15 @@
     /**
      * Get the prefix out of bound
      */
-    @Test(expected = LdapInvalidDnException.class)
+    @Test
     public void testDnGetPrefixPos4() throws LdapException
     {
         Dn dn = new Dn( "a=b, c=d,e = f" );
 
-        dn.getAncestorOf( "a=z" );
+        assertThrows( LdapInvalidDnException.class, () ->
+        {
+            dn.getAncestorOf( "a=z" );
+        } );
     }
 
 
@@ -1680,14 +1680,14 @@
 
         assertTrue( nn3210.isDescendantOf( nn3210 ) );
 
-        assertTrue( "Starting Dn fails with ADS Dn",
-            new Dn( "ou=foo,dc=apache,dc=org" ).isDescendantOf( new Dn( "dc=apache,dc=org" ) ) );
+        assertTrue( new Dn( "ou=foo,dc=apache,dc=org" ).isDescendantOf( new Dn( "dc=apache,dc=org" ) ),
+            "Starting Dn fails with ADS Dn" );
 
-        assertTrue( "Starting Dn fails with Java LdapName",
-            new Dn( "ou=foo,dc=apache,dc=org" ).isDescendantOf( new Dn( "dc=apache,dc=org" ) ) );
+        assertTrue( new Dn( "ou=foo,dc=apache,dc=org" ).isDescendantOf( new Dn( "dc=apache,dc=org" ) ),
+            "Starting Dn fails with Java LdapName" );
 
-        assertTrue( "Starting Dn fails with Java LdapName",
-            new Dn( "dc=apache,dc=org" ).isDescendantOf( new Dn( "dc=apache,dc=org" ) ) );
+        assertTrue( new Dn( "dc=apache,dc=org" ).isDescendantOf( new Dn( "dc=apache,dc=org" ) ),
+            "Starting Dn fails with Java LdapName" );
     }
 
 
@@ -3012,7 +3012,7 @@
 
     
     @Test
-    @Ignore
+    @Disabled
     public void testDnParsingPerf() throws LdapInvalidDnException
     {
         long[] deltas = new long[10];
@@ -3116,7 +3116,7 @@
     
     
     @Test
-    @Ignore
+    @Disabled
     public void testDnParsingOneRdnPerf() throws LdapInvalidDnException
     {
         long t0 = System.currentTimeMillis();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/FastParserRdnTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/FastParserRdnTest.java
index b449c49..bc56708 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/FastParserRdnTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/FastParserRdnTest.java
@@ -22,28 +22,25 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for the schemaAware Rdn class when using teh FastParser
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class FastParserRdnTest
 {
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/MultiThreadedTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/MultiThreadedTest.java
index 4ae57a2..a5ff923 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/MultiThreadedTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/MultiThreadedTest.java
@@ -20,33 +20,24 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.apache.directory.junit.tools.MultiThreadedMultiInvoker;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Multi-threaded 
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class MultiThreadedTest
 {
-    @Rule
-    public MultiThreadedMultiInvoker i = new MultiThreadedMultiInvoker( 100, 1000 );
-
     private static Dn referenceDn;
     private static Dn sharedDn;
     private static Rdn referenceRdn;
@@ -57,7 +48,7 @@
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
index 0711e5f..b12fdb2 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
@@ -23,28 +23,28 @@
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import java.io.IOException;
 
 /**
  * Tests for the schemaAware Rdn class
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class RdnTest
 {
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -262,10 +262,13 @@
      * test that a RDN with an attributeType used twice with the same value
      * throws an exception
      */
-    @Test( expected=LdapInvalidDnException.class )
+    @Test
     public void testWrongRdnAtUsedTwiceSameValue() throws LdapException
     {
-        new Rdn( schemaManager, " cn = b + cn = b " );
+        assertThrows( LdapInvalidDnException.class, () ->
+        {
+            new Rdn( schemaManager, " cn = b + cn = b " );
+        } );
     }
     
     
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareAvaSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareAvaSerializationTest.java
index 7d3f792..504d3c1 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareAvaSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareAvaSerializationTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,9 +35,9 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -49,7 +50,7 @@
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -124,7 +125,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testBinaryAtavSerializationBytes() throws LdapException, IOException, ClassNotFoundException
     {
@@ -333,7 +334,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testBinaryAtavStaticSerializationBytes() throws LdapException, IOException, ClassNotFoundException
     {
@@ -396,18 +397,20 @@
     }
 
 
-    @Test(expected = IOException.class)
+    @Test
     public void testNullNormValueStaticSerialization() throws LdapException, IOException, ClassNotFoundException
     {
         byte[] buffer = new byte[128];
         Ava atav = new Ava( schemaManager, "DC", ( String ) null );
 
-        atav.serialize( buffer, 0 );
-        fail();
+        assertThrows( IOException.class, () ->
+        {
+            atav.serialize( buffer, 0 );
+        } );
     }
 
 
-    @Test(expected = IOException.class)
+    @Test
     public void testNullNormValueStaticSerializationBytes() throws LdapException, IOException, ClassNotFoundException
     {
         Ava atav = new Ava( schemaManager, "DC", ( String ) null );
@@ -415,8 +418,10 @@
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ObjectOutputStream out = new ObjectOutputStream( baos );
 
-        atav.writeExternal( out );
-        fail();
+        assertThrows( IOException.class, () ->
+        {
+            atav.writeExternal( out );
+        } );
     }
 
 
@@ -458,7 +463,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testStringAtavSerializationPerf() throws IOException, LdapException,
         ClassNotFoundException
@@ -489,7 +494,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testStringAtavSerializationBytesPerf() throws IOException, LdapException,
         ClassNotFoundException
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareDnSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareDnSerializationTest.java
index 4175c2c..132e24f 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareDnSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareDnSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -31,9 +31,9 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -49,7 +49,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -194,7 +194,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testSerializationPerfs() throws Exception
     {
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnSerializationTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnSerializationTest.java
index 4ee80c4..fa99f7d 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnSerializationTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -31,22 +31,18 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Rdn Serialization
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaAwareRdnSerializationTest
 {
     private static SchemaManager schemaManager;
@@ -55,7 +51,7 @@
     /**
      * Initialize OIDs maps for normalization
      */
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
@@ -180,7 +176,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testRdnFullSerializationPerf() throws IOException, LdapException, ClassNotFoundException
     {
@@ -210,7 +206,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testRdnFullSerializationBytesPerf() throws IOException, LdapException, ClassNotFoundException
     {
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java
index 774ff3a..0f55360 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/model/name/SchemaAwareRdnTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -38,28 +38,24 @@
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Schema aware Rdn class
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaAwareRdnTest
 {
     /** A null schemaManager used in tests */
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         schemaManager = new DefaultSchemaManager();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/ACIItemSyntaxCheckerTest.java b/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/ACIItemSyntaxCheckerTest.java
index e6f4e4e..5cd0efa 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/ACIItemSyntaxCheckerTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/ACIItemSyntaxCheckerTest.java
@@ -20,35 +20,31 @@
 package org.apache.directory.api.ldap.schema.syntaxCheckers;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.aci.ACIItemSyntaxChecker;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for ACIItemSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class ACIItemSyntaxCheckerTest
 {
     private static ACIItemSyntaxChecker checker;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void init() throws Exception
     {
         JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/SubtreeSpecificationSyntaxCheckerTest.java b/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/SubtreeSpecificationSyntaxCheckerTest.java
index 524b133..aa742df 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/SubtreeSpecificationSyntaxCheckerTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/schema/syntaxCheckers/SubtreeSpecificationSyntaxCheckerTest.java
@@ -20,29 +20,25 @@
 package org.apache.directory.api.ldap.schema.syntaxCheckers;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+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 org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.SubtreeSpecificationSyntaxChecker;
 import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for SubtreeSpecificationSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SubtreeSpecificationSyntaxCheckerTest
 {
     private static SubtreeSpecificationSyntaxChecker checker;
@@ -51,7 +47,7 @@
     /**
      * Initialization
      */
-    @BeforeClass
+    @BeforeAll
     public static void init() throws Exception
     {
         JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
diff --git a/integ/src/test/java/org/apache/directory/api/ldap/subtree/SubtreeSpecificationParserTest.java b/integ/src/test/java/org/apache/directory/api/ldap/subtree/SubtreeSpecificationParserTest.java
index 414cf9d..b0bad2d 100644
--- a/integ/src/test/java/org/apache/directory/api/ldap/subtree/SubtreeSpecificationParserTest.java
+++ b/integ/src/test/java/org/apache/directory/api/ldap/subtree/SubtreeSpecificationParserTest.java
@@ -21,11 +21,11 @@
 package org.apache.directory.api.ldap.subtree;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 import java.util.ArrayList;
@@ -43,21 +43,17 @@
 import org.apache.directory.api.ldap.model.subtree.SubtreeSpecificationParser;
 import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class for Subtree Specification parser (wrapper).
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SubtreeSpecificationParserTest
 {
     /** the ss parser wrapper */
@@ -126,7 +122,7 @@
     /**
      * Initialization
      */
-    @BeforeClass
+    @BeforeAll
     public static void init() throws Exception
     {
         JarLdifSchemaLoader loader = new JarLdifSchemaLoader();
diff --git a/ldap/client/api/pom.xml b/ldap/client/api/pom.xml
index edfadf9..c09636a 100644
--- a/ldap/client/api/pom.xml
+++ b/ldap/client/api/pom.xml
@@ -85,8 +85,13 @@
     </dependency>
 
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.platform</groupId>
+      <artifactId>junit-platform-runner</artifactId>
       <scope>test</scope>
     </dependency>
 
@@ -113,6 +118,13 @@
             <exclude>**/Abstract*</exclude>
             <exclude>**/*RegressionTest*</exclude>
           </excludes>
+          <parallel>all</parallel>
+          <threadCount>10</threadCount>
+          <properties>
+            <configurationParameters>
+              junit.jupiter.execution.parallel.enabled=true
+            </configurationParameters>
+          </properties>
         </configuration>
       </plugin>
 
diff --git a/ldap/codec/core/pom.xml b/ldap/codec/core/pom.xml
index 893e77f..8c7f920 100644
--- a/ldap/codec/core/pom.xml
+++ b/ldap/codec/core/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapControlTest.java
index 401ef7b..549d75a 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapControlTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -43,15 +44,12 @@
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.ldap.model.message.controls.SortRequest;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapControlTest extends AbstractCodecServiceTest
 {
     /**
@@ -235,7 +233,7 @@
     /**
      * Test the decoding of a Request with null OID controls
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeRequestWithControlsNullOID() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x19 );
@@ -259,14 +257,17 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<Message>( codec );
 
         // Decode the PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a Request with bad OID controls
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeRequestWithControlsBadOID() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x20 );
@@ -292,14 +293,17 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode the PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a Request with bad criticality
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeRequestWithControlsBadCriticality() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x25 );
@@ -324,6 +328,9 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode the PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java
index c41c8aa..13bdf3d 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapDecoderTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
@@ -45,12 +46,9 @@
 import org.apache.directory.api.util.Strings;
 import org.apache.mina.core.session.DummySession;
 import org.apache.mina.core.session.IoSession;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -58,8 +56,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapDecoderTest extends AbstractCodecServiceTest
 {
     /**
@@ -366,7 +363,7 @@
      * Test the decoding of a PDU with a bad Length. The first TLV has a length
      * of 0x32 when the PDU is 0x33 bytes long.
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBadLengthTooSmall() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x35 );
@@ -396,7 +393,10 @@
         LdapMessageContainer<Message> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
@@ -404,7 +404,7 @@
      * Test the decoding of a PDU with a bad primitive Length. The second TLV
      * has a length of 0x02 when the PDU is 0x01 bytes long.
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBadPrimitiveLengthTooBig() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x35 );
@@ -432,14 +432,17 @@
         LdapMessageContainer<Message> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a PDU with a bad tag.
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBadTagTransition() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x35 );
@@ -466,7 +469,10 @@
         LdapMessageContainer<Message> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapMessageTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapMessageTest.java
index 95155f4..4412bf2 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapMessageTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapMessageTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec;
 
 
-import static org.junit.Assert.assertArrayEquals;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.ByteBuffer;
 
@@ -37,11 +38,9 @@
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.Message;
 import org.apache.directory.api.ldap.model.message.UnbindRequest;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -49,14 +48,13 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapMessageTest extends AbstractCodecServiceTest
 {
     /**
      * Test the decoding of null length messageId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeMessageLengthNull() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x02 );
@@ -71,14 +69,17 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<Message>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of null length messageId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeMessageIdLengthNull() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x04 );
@@ -94,14 +95,17 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<Message>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of null length messageId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeMessageIdMinusOne() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x05 );
@@ -117,14 +121,17 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<Message>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of messageId which value is -1
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeMessageIdMaxInt() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x08 );
@@ -141,7 +148,10 @@
         Asn1Container ldapMessageContainer = new LdapMessageContainer<Message>( codec );
 
         // Decode a BindRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapResultTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapResultTest.java
index bdd7c92..6c2b475 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapResultTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/LdapResultTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec;
 
 
-import static org.junit.Assert.assertArrayEquals;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Collection;
@@ -40,11 +41,9 @@
 import org.apache.directory.api.ldap.model.message.Referral;
 import org.apache.directory.api.ldap.model.message.ReferralImpl;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -53,14 +52,13 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapResultTest extends AbstractCodecServiceTest
 {
     /**
      * Test the decoding of a AddResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddResponseEmptyResultCode() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x10 );
@@ -79,14 +77,17 @@
         LdapMessageContainer<AddResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AddResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddResponseEmptyResultCodeAbove90() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
@@ -105,7 +106,10 @@
         LdapMessageContainer<AddResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } ); 
     }
 
 
@@ -149,7 +153,7 @@
     /**
      * Test the decoding of a AddResponse with no matched Dn
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddResponseEmptyResultCodeNoMatchedDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
@@ -168,14 +172,17 @@
         LdapMessageContainer<AddResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AddResponse with no error message
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddResponseEmptyResultCodeNoErrorMsg() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0C );
@@ -195,7 +202,10 @@
         LdapMessageContainer<AddResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
@@ -453,7 +463,7 @@
      * Test the decoding of a AddResponse with a valid LdapResult and an invalid
      * transition after the referral sequence
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddResponseEmptyResultCodeEmptyReferrals() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x10 );
@@ -475,6 +485,9 @@
         LdapMessageContainer<AddResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode the AddResponse PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/abandon/AbandonRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/abandon/AbandonRequestTest.java
index adfcd45..3bcb571 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/abandon/AbandonRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/abandon/AbandonRequestTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec.abandon;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -42,11 +43,9 @@
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.ldap.model.message.controls.SortRequest;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -54,8 +53,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AbandonRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -225,7 +223,7 @@
     /**
      * Test the decoding of a AbandonRequest with a null messageId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAbandonRequestNoMessageId() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
@@ -243,14 +241,17 @@
         LdapMessageContainer<AbandonRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AbandonRequest with a bad Message Id
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAbandonRequestBadMessageId() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0B );
@@ -268,6 +269,9 @@
         LdapMessageContainer<AbandonRequest>  container = new LdapMessageContainer<>( codec );
 
         // Decode the PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddRequestTest.java
index a421995..30424f9 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddRequestTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.add;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
@@ -50,20 +51,16 @@
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaITImpl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the AddRequest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AddRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -184,7 +181,7 @@
     /**
      * Test the decoding of a AddRequest with a null body
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNullBody() throws DecoderException
     {
 
@@ -203,14 +200,17 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest with a null entry
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNullEntry() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x39 );
@@ -248,27 +248,30 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof AddResponseImpl );
-            assertEquals( ResultCodeEnum.NAMING_VIOLATION, ( ( AddResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof AddResponseImpl );
+                assertEquals( ResultCodeEnum.NAMING_VIOLATION, ( ( AddResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestbadDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x59 );
@@ -309,27 +312,30 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof AddResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( AddResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof AddResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( AddResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest with a null attributeList
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNullAttributes() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2B );
@@ -354,14 +360,17 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest with a empty attributeList
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNullAttributeList() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2D );
@@ -387,14 +396,17 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest with a empty attributeList
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNullType() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2F );
@@ -421,27 +433,30 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof AddResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, ( ( AddResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof AddResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, ( ( AddResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest with a empty attributeList
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNoVals() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x30 );
@@ -469,14 +484,17 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a AddRequest with a empty attributeList
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddRequestNullVals() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x32 );
@@ -505,7 +523,10 @@
         LdapMessageContainer<AddRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddResponseTest.java
index 7331bf7..2078230 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/add/AddResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.add;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -38,18 +39,15 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AddResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -104,7 +102,7 @@
     /**
      * Test the decoding of a AddResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeAddResponseEmptyResult() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0E );
@@ -122,7 +120,10 @@
         LdapMessageContainer<AddResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a AddResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestPerfTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestPerfTest.java
index 15c4c67..f26f1e1 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestPerfTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestPerfTest.java
@@ -27,19 +27,15 @@
 import org.apache.directory.api.ldap.model.message.BindRequestImpl;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 //@Ignore("Ignore performance tests: should not be with integration tests")
 public class BindRequestPerfTest extends AbstractCodecServiceTest
 {
@@ -48,7 +44,7 @@
      * controls
      */
     @Test
-    @Ignore
+    @Disabled
     public void testEncodeBindRequestPerf() throws Exception
     {
         Dn dn = new Dn( "uid=akarasulu,dc=example,dc=com" );
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestTest.java
index 35dab88..6bb1bc6 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindRequestTest.java
@@ -26,6 +26,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -46,18 +47,14 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class BindRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -264,7 +261,7 @@
      * Test the decoding of a BindRequest with Simple authentication, no name
      * and no controls
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestSimpleNoName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x15 );
@@ -287,7 +284,10 @@
         Asn1Container container = new LdapMessageContainer<BindRequest>( codec );
 
         // Decode the BindRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
@@ -516,7 +516,7 @@
     /**
      * Test the decoding of a BindRequest with an empty body
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestEmptyBody() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -533,14 +533,17 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a BindRequest with an empty version
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestEmptyVersion() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -558,14 +561,17 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a BindRequest with a bad version (0)
      */
-    @Test( expected= DecoderException.class )
+    @Test
     public void testDecodeBindRequestBadVersion0() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
@@ -583,14 +589,17 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a BindRequest with a bad version (4)
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestBadVersion4() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
@@ -608,14 +617,17 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a BindRequest with a bad version (128)
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestBadVersion128() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0C );
@@ -633,14 +645,17 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a BindRequest with no name
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestNoName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0A );
@@ -658,14 +673,17 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a BindRequest with an empty name
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestEmptyName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0C );
@@ -684,7 +702,10 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
@@ -734,7 +755,7 @@
     /**
      * Test the decoding of a BindRequest with an empty sasl
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeBindRequestEmptySasl() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x0E );
@@ -754,22 +775,23 @@
         LdapMessageContainer<BindRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindRequest message
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof BindResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, ( ( BindResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
-
-        fail( "We should not reach this point" );
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof BindResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_CREDENTIALS, ( ( BindResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindResponseTest.java
index ed61753..10a6c79 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/bind/BindResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.bind;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -40,18 +41,14 @@
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class BindResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -355,8 +352,8 @@
     /**
      * Test the decoding of a BindResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
-    public void testDecodeAddResponseEmptyResult()throws DecoderException
+    @Test
+    public void testDecodeAddResponseEmptyResult() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
 
@@ -373,6 +370,9 @@
         LdapMessageContainer<BindResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a BindResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareRequestTest.java
index 9721f24..3f234c2 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareRequestTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec.compare;
 
 
-import static org.junit.Assert.assertArrayEquals;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -42,20 +43,16 @@
 import org.apache.directory.api.ldap.model.message.Message;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the CompareRequest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class CompareRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -112,7 +109,7 @@
     /**
      * Test the decoding of an empty CompareRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCompareRequestEmptyRequest() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -131,14 +128,17 @@
         LdapMessageContainer<CompareRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the CompareRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of an empty entry CompareRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCompareRequestEmptyEntry() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x18 );
@@ -164,14 +164,17 @@
         LdapMessageContainer<CompareRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the CompareRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of an empty ava
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCompareRequestEmptyAVA() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2B );
@@ -196,14 +199,17 @@
         LdapMessageContainer<CompareRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the CompareRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of an empty ava
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCompareRequestInvalidDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2B );
@@ -228,28 +234,31 @@
         LdapMessageContainer<CompareRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the CompareRequest PDU
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-            fail( "We should never reach this point !!!" );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof CompareResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( CompareResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+                fail( "We should never reach this point !!!" );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof CompareResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( CompareResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of an empty attributeDesc ava
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCompareRequestEmptyAttributeDesc() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2D );
@@ -275,21 +284,24 @@
         LdapMessageContainer<CompareRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the CompareRequest PDU
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-            fail( "We should never reach this point !!!" );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof CompareResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, ( ( CompareResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+                fail( "We should never reach this point !!!" );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof CompareResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, ( ( CompareResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareResponseTest.java
index a72cafb..689ee0c 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/compare/CompareResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.compare;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -38,11 +39,9 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -50,8 +49,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class CompareResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -174,7 +172,7 @@
     /**
      * Test the decoding of a CompareResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCompareResponseEmptyResult() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -193,6 +191,9 @@
         LdapMessageContainer<CompareResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a CompareResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/proxiedauthz/ProxiedAuthzControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/proxiedauthz/ProxiedAuthzControlTest.java
index eec0ab9..f8746a1 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/proxiedauthz/ProxiedAuthzControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/proxiedauthz/ProxiedAuthzControlTest.java
@@ -20,8 +20,9 @@
 package org.apache.directory.api.ldap.codec.controls.proxiedauthz;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
@@ -29,11 +30,9 @@
 import org.apache.directory.api.asn1.util.Asn1Buffer;
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.controls.ProxiedAuthz;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,8 +40,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProxiedAuthzControlTest extends AbstractCodecServiceTest
 {
     /**
@@ -137,7 +135,7 @@
     /**
      * Test the decoding of a ProxiedAuthzControl with a wrong DN user
      */
-    @Test( expected = DecoderException.class)
+    @Test
     public void testDecodeProxiedAuthzControlWrongDn() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x10 );
@@ -151,14 +149,18 @@
         ProxiedAuthzFactory factory = ( ProxiedAuthzFactory ) codec.getRequestControlFactories().
             get( ProxiedAuthz.OID );
         ProxiedAuthz control = factory.newControl();
-        factory.decodeValue( control, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( control, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a ProxiedAuthzControl with a wrong user
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeProxiedAuthzControlWrongAuthzId() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -172,7 +174,11 @@
         ProxiedAuthzFactory factory = ( ProxiedAuthzFactory ) codec.getRequestControlFactories().
             get( ProxiedAuthz.OID );
         ProxiedAuthz control = factory.newControl();
-        factory.decodeValue( control, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( control, bb.array() );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/entryChange/EntryChangeControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/entryChange/EntryChangeControlTest.java
index 0de2bc9..c70744d 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/entryChange/EntryChangeControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/entryChange/EntryChangeControlTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.controls.search.entryChange;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
@@ -34,20 +35,16 @@
 import org.apache.directory.api.ldap.model.message.controls.ChangeType;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the EntryChangeControlTest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class EntryChangeControlTest extends AbstractCodecServiceTest
 {
     /**
@@ -165,7 +162,7 @@
      * Test the decoding of a EntryChangeControl with a add so we should not
      * have a PreviousDN
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeEntryChangeControlWithADDAndPreviousDNBad() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0D );
@@ -186,7 +183,11 @@
         EntryChangeFactory factory = ( EntryChangeFactory ) codec.getResponseControlFactories().get( 
             EntryChange.OID );
         EntryChange entryChange = factory.newControl();
-        factory.decodeValue( entryChange, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( entryChange, bb.array() );
+        } );
     }
 
 
@@ -229,7 +230,7 @@
      * Test the decoding of a EntryChangeControl with a wrong changeType and
      * nothing else
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeEntryChangeControlWithWrongChangeType() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x05 );
@@ -246,14 +247,18 @@
         EntryChangeFactory factory = ( EntryChangeFactory ) codec.getResponseControlFactories().get( 
             EntryChange.OID );
         EntryChange entryChange = factory.newControl();
-        factory.decodeValue( entryChange, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( entryChange, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a EntryChangeControl with a wrong changeNumber
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeEntryChangeControlWithWrongChangeNumber() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x1C );
@@ -274,7 +279,11 @@
         EntryChangeFactory factory = ( EntryChangeFactory ) codec.getResponseControlFactories().get( 
             EntryChange.OID );
         EntryChange entryChange = factory.newControl();
-        factory.decodeValue( entryChange, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( entryChange, bb.array() );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/pagedSearch/PagedSearchControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/pagedSearch/PagedSearchControlTest.java
index a1fb013..f2546f6 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/pagedSearch/PagedSearchControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/pagedSearch/PagedSearchControlTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.controls.search.pagedSearch;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
@@ -32,20 +33,16 @@
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the PagedSearchControlTest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class PagedSearchControlTest extends AbstractCodecServiceTest
 {
     /**
@@ -86,7 +83,7 @@
     /**
      * Test the decoding of a PagedSearchControl with no cookie
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodePagedSearchRequestNoCookie() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x05 );
@@ -99,14 +96,18 @@
 
         PagedResultsFactory factory = ( PagedResultsFactory ) codec.getResponseControlFactories().get( PagedResults.OID );
         PagedResults pagedSearch = factory.newControl();
-        factory.decodeValue( pagedSearch, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( pagedSearch, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a PagedSearchControl with no size
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodePagedSearchRequestNoSize() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -120,14 +121,18 @@
 
         PagedResultsFactory factory = ( PagedResultsFactory ) codec.getResponseControlFactories().get( PagedResults.OID );
         PagedResults pagedSearch = factory.newControl();
-        factory.decodeValue( pagedSearch, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( pagedSearch, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a PagedSearchControl with no size  and no cookie
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodePagedSearchRequestNoSizeNoCookie() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -139,7 +144,11 @@
 
         PagedResultsFactory factory = ( PagedResultsFactory ) codec.getResponseControlFactories().get( PagedResults.OID );
         PagedResults pagedSearch = factory.newControl();
-        factory.decodeValue( pagedSearch, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( pagedSearch, bb.array() );
+        } );
     }
 
 
@@ -187,7 +196,7 @@
     /**
      * Test encoding of a PagedSearchControl with a empty size
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testEncodePagedSearchControlEmptySize() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0a );
@@ -202,7 +211,11 @@
 
         PagedResultsFactory factory = ( PagedResultsFactory ) codec.getResponseControlFactories().get( PagedResults.OID );
         PagedResults pagedSearch = factory.newControl();
-        factory.decodeValue( pagedSearch, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( pagedSearch, bb.array() );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/persistentSearch/PSearchControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/persistentSearch/PSearchControlTest.java
index 4a68c16..0806204 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/persistentSearch/PSearchControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/persistentSearch/PSearchControlTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.controls.search.persistentSearch;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 
@@ -31,20 +32,16 @@
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.controls.ChangeType;
 import org.apache.directory.api.ldap.model.message.controls.PersistentSearch;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the PSearchControlTest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class PSearchControlTest extends AbstractCodecServiceTest
 {
     /**
@@ -123,7 +120,7 @@
      * Test the decoding of a PSearchControl with a changes types which
      * value is 0
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeModifyDNRequestSuccessChangeTypes0() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0b );
@@ -139,7 +136,11 @@
         PersistentSearchFactory factory = ( PersistentSearchFactory ) codec.getRequestControlFactories().
             get( PersistentSearch.OID );
         PersistentSearch ctrl = factory.newControl();
-        factory.decodeValue( ctrl, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( ctrl, bb.array() );
+        } );
     }
 
 
@@ -147,7 +148,7 @@
      * Test the decoding of a PSearchControl with a changes types which
      * value is above 15
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeModifyDNRequestSuccessChangeTypes22() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0b );
@@ -163,14 +164,18 @@
         PersistentSearchFactory factory = ( PersistentSearchFactory ) codec.getRequestControlFactories().
             get( PersistentSearch.OID );
         PersistentSearch ctrl = factory.newControl();
-        factory.decodeValue( ctrl, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( ctrl, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a PSearchControl with a null sequence
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeModifyDNRequestSuccessNullSequence() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -183,14 +188,18 @@
         PersistentSearchFactory factory = ( PersistentSearchFactory ) codec.getRequestControlFactories().
             get( PersistentSearch.OID );
         PersistentSearch ctrl = factory.newControl();
-        factory.decodeValue( ctrl, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( ctrl, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a PSearchControl without changeTypes
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeModifyDNRequestSuccessWithoutChangeTypes() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -205,14 +214,18 @@
         PersistentSearchFactory factory = ( PersistentSearchFactory ) codec.getRequestControlFactories().
             get( PersistentSearch.OID );
         PersistentSearch ctrl = factory.newControl();
-        factory.decodeValue( ctrl, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( ctrl, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a PSearchControl without changeOnly
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeModifyDNRequestSuccessWithoutChangesOnly() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -227,14 +240,18 @@
         PersistentSearchFactory factory = ( PersistentSearchFactory ) codec.getRequestControlFactories().
             get( PersistentSearch.OID );
         PersistentSearch ctrl = factory.newControl();
-        factory.decodeValue( ctrl, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( ctrl, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a PSearchControl without returnECs
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeModifyDNRequestSuccessWithoutReturnECs() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -249,6 +266,10 @@
         PersistentSearchFactory factory = ( PersistentSearchFactory ) codec.getRequestControlFactories().
             get( PersistentSearch.OID );
         PersistentSearch ctrl = factory.newControl();
-        factory.decodeValue( ctrl, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( ctrl, bb.array() );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/subentries/SubEntryControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/subentries/SubEntryControlTest.java
index 08811bd..a6beebc 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/subentries/SubEntryControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/search/subentries/SubEntryControlTest.java
@@ -20,8 +20,9 @@
 package org.apache.directory.api.ldap.codec.controls.search.subentries;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
@@ -30,20 +31,16 @@
 import org.apache.directory.api.asn1.util.Asn1Buffer;
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.controls.Subentries;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SubEntryControlTest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SubEntryControlTest extends AbstractCodecServiceTest
 {
     /**
@@ -103,7 +100,7 @@
     /**
      * Test the decoding of a SubEntryControl with an empty visibility
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeSubEntryEmptyVisibility() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -118,14 +115,18 @@
         // Allocate a LdapMessage Container
         SubentriesFactory factory = ( SubentriesFactory ) codec.getRequestControlFactories().get( Subentries.OID );
         Subentries subentries = factory.newControl();
-        factory.decodeValue( subentries, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( subentries, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a bad SubEntryControl
      */
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeSubEntryBad() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x03 );
@@ -140,6 +141,10 @@
         // Allocate a LdapMessage Container
         SubentriesFactory factory = ( SubentriesFactory ) codec.getRequestControlFactories().get( Subentries.OID );
         Subentries subentries = factory.newControl();
-        factory.decodeValue( subentries, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( subentries, bb.array() );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortRequestControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortRequestControlTest.java
index 7963051..0a9b9de 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortRequestControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortRequestControlTest.java
@@ -20,11 +20,12 @@
 package org.apache.directory.api.ldap.codec.controls.sort;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 
@@ -33,13 +34,16 @@
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.controls.SortKey;
 import org.apache.directory.api.ldap.model.message.controls.SortRequest;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for SortRequestControl.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution( ExecutionMode.CONCURRENT)
 public class SortRequestControlTest extends AbstractCodecServiceTest
 {
     @Test
@@ -132,7 +136,7 @@
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeWithoutAtDesc() throws Exception
     {
         ByteBuffer stream = ByteBuffer.allocate( 16 );
@@ -146,7 +150,11 @@
 
         SortRequestFactory factory = ( SortRequestFactory ) codec.getRequestControlFactories().get( SortRequest.OID );
         SortRequest control = factory.newControl();
-        factory.decodeValue( control, stream.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( control, stream.array() );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortResponseControlTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortResponseControlTest.java
index 9e877da..85ffe04 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortResponseControlTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/controls/sort/SortResponseControlTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.controls.sort;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
@@ -30,13 +31,16 @@
 import org.apache.directory.api.ldap.codec.osgi.AbstractCodecServiceTest;
 import org.apache.directory.api.ldap.model.message.controls.SortResponse;
 import org.apache.directory.api.ldap.model.message.controls.SortResultCode;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests for SortResponseControl.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution( ExecutionMode.CONCURRENT)
 public class SortResponseControlTest extends AbstractCodecServiceTest
 {
     @Test
@@ -97,7 +101,7 @@
     }
 
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testDecodeControlWithWrongResultCode() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x05 );
@@ -111,6 +115,10 @@
         SortResponseFactory factory = ( SortResponseFactory ) codec.getResponseControlFactories().
             get( SortResponse.OID );
         SortResponse control = factory.newControl();
-        factory.decodeValue( control, bb.array() );
+
+        assertThrows( IllegalArgumentException.class, ( ) ->
+        {
+            factory.decodeValue( control, bb.array() );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelRequestTest.java
index e5d2da1..713f338 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelRequestTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.del;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -41,11 +42,9 @@
 import org.apache.directory.api.ldap.model.message.Message;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -53,8 +52,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class DelRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -102,7 +100,7 @@
     /**
      * Test the decoding of a full DelRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeDelRequestBadDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x27 );
@@ -124,27 +122,30 @@
         LdapMessageContainer<DeleteRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a DelRequest PDU
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, container );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof DeleteResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( DeleteResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, container );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof DeleteResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( DeleteResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of an empty DelRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeDelRequestEmpty() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -164,7 +165,10 @@
         LdapMessageContainer<DeleteRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode a DelRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelResponseTest.java
index 22d2594..471dfbc 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/del/DelResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.del;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -38,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.DeleteResponse;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the DelResponse codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class DelResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -109,7 +106,7 @@
     /**
      * Test the decoding of a DelResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeDelResponseEmptyResult() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -127,7 +124,10 @@
         LdapMessageContainer<DeleteResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode a DelResponse message
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/intermediate/IntermediateResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/intermediate/IntermediateResponseTest.java
index b412ad2..66803a9 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/intermediate/IntermediateResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/intermediate/IntermediateResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.intermediate;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -38,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.IntermediateResponse;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the IntermediateResponse codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class IntermediateResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -242,7 +239,7 @@
     /**
      * Test the decoding of an empty IntermediateResponse
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeIntermediateResponseEmpty() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -262,14 +259,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a IntermediateResponse PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of an empty OID
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeEmptyOID() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -290,14 +290,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a IntermediateResponse PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a bad name
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeExtendedBadRequestName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x16 );
@@ -320,7 +323,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a IntermediateResponse PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyRequestTest.java
index e422da2..4c95a97 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyRequestTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec.modify;
 
 
-import static org.junit.Assert.assertArrayEquals;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.ByteBuffer;
 import java.util.Collection;
@@ -48,20 +49,16 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the ModifyRequest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -157,7 +154,7 @@
     /**
      * Test the decoding of a ModifyRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestBadDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x54 );
@@ -207,20 +204,23 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, ldapMessageContainer );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof ModifyResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, ldapMessageContainer );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof ModifyResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
@@ -506,7 +506,7 @@
     /**
      * Test the decoding of a ModifyRequest with an empty body
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestEmptyBody() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -524,14 +524,17 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyRequest with an empty object
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestEmptyObject() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -550,14 +553,17 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyRequest with an object and nothing else
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestObjectAlone() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x29 );
@@ -579,14 +585,17 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyRequest with an empty modification
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestEmptyModification() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2B );
@@ -609,14 +618,17 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyRequest with an empty operation
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestEmptyOperation() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2D );
@@ -640,14 +652,17 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyRequest with an wrong empty operation
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestWrongOperationEmpty() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2F );
@@ -672,14 +687,17 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyRequest with an wrong operation
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestWrongOperation() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x30 );
@@ -704,7 +722,10 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -712,7 +733,7 @@
      * Test the decoding of a ModifyRequest with an add operation, and nothing
      * more
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestAddOperationEnd() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x30 );
@@ -737,7 +758,10 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -745,7 +769,7 @@
      * Test the decoding of a ModifyRequest with an add operation, and an empty
      * modification
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestAddOperationEmptyModification() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x32 );
@@ -771,7 +795,10 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -779,7 +806,7 @@
      * Test the decoding of a ModifyRequest with an add operation, and a
      * modification with an empty type
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestAddOperationModificationEmptyType() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x34 );
@@ -806,21 +833,24 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, ldapMessageContainer );
-            fail( "We should never reach this point !!!" );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof ModifyResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, ( ( ModifyResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, ldapMessageContainer );
+                fail( "We should never reach this point !!!" );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof ModifyResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_ATTRIBUTE_SYNTAX, ( ( ModifyResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
@@ -828,7 +858,7 @@
      * Test the decoding of a ModifyRequest with an add operation, and a
      * modification with a type and no vals
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyRequestAddOperationModificationTypeNoVals() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x35 );
@@ -856,7 +886,10 @@
         LdapMessageContainer<ModifyRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyResponseTest.java
index 35ac93a..7f77cc3 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modify/ModifyResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.modify;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -38,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.ModifyResponse;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the ModifyResponse codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -173,7 +170,7 @@
     /**
      * Test the decoding of a ModifyResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyResponseEmptyResult() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -191,6 +188,9 @@
         LdapMessageContainer<ModifyResponse> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyResponse message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNRequestTest.java
index 1cf9134..4308b3f 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNRequestTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.modifyDn;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -41,20 +42,16 @@
 import org.apache.directory.api.ldap.model.message.ModifyDnResponseImpl;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the ModifyDNRequest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyDNRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -110,7 +107,7 @@
     /**
      * Test the decoding of a bad Dn ModifyDNRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestBadDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x48 );
@@ -138,27 +135,30 @@
         // Allocate a ModifyRequest Container
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, ldapMessageContainer );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof ModifyDnResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyDnResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, ldapMessageContainer );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof ModifyDnResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyDnResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of a bad Rdn ModifyDNRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestBadRDN() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x48 );
@@ -186,27 +186,30 @@
         // Allocate a ModifyRequest Container
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, ldapMessageContainer );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof ModifyDnResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyDnResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, ldapMessageContainer );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof ModifyDnResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyDnResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of a bad Rdn ModifyDNRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestBadNewSuperior() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x48 );
@@ -234,20 +237,23 @@
         // Allocate a ModifyRequest Container
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, ldapMessageContainer );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof ModifyDnResponseImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyDnResponseImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, ldapMessageContainer );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof ModifyDnResponseImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( ModifyDnResponseImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
@@ -433,7 +439,7 @@
     /**
      * Test the decoding of a ModifyDNRequest with an empty body
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestEmptyBody() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -452,14 +458,17 @@
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyDNRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyDNRequest with an empty entry
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestEmptyEntry() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -479,14 +488,17 @@
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyDNRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyDNRequest with an empty newRdn
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestEmptyNewRdn() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2D );
@@ -510,14 +522,17 @@
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyDNRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a ModifyDNRequest with an empty deleteOldRdn
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNRequestEmptyDeleteOldRdnn() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x3C );
@@ -543,6 +558,9 @@
         LdapMessageContainer<ModifyDnRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyDNRequest PDU
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNResponseTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNResponseTest.java
index c70cb19..c4a2275 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNResponseTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/modifyDn/ModifyDNResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.modifyDn;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -38,20 +39,16 @@
 import org.apache.directory.api.ldap.model.message.ModifyDnResponse;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the ModifyDNResponse codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ModifyDNResponseTest extends AbstractCodecServiceTest
 {
     /**
@@ -173,7 +170,7 @@
     /**
      * Test the decoding of a ModifyDNResponse with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeModifyDNResponseEmptyResult() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -191,6 +188,9 @@
         LdapMessageContainer<ModifyDnResponse> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a ModifyDNResponse message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/osgi/AbstractCodecServiceTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/osgi/AbstractCodecServiceTest.java
index 95b33b6..3bd5a6c 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/osgi/AbstractCodecServiceTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/osgi/AbstractCodecServiceTest.java
@@ -20,14 +20,15 @@
 package org.apache.directory.api.ldap.codec.osgi;
 
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.codec.api.LdapEncoder;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.filter.codec.ProtocolCodecFactory;
 import org.apache.mina.filter.codec.ProtocolDecoder;
 import org.apache.mina.filter.codec.ProtocolEncoder;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.jupiter.api.BeforeEach;
 
 
 /**
@@ -37,49 +38,46 @@
  */
 public abstract class AbstractCodecServiceTest
 {
-    protected static DefaultLdapCodecService codec;
-
-    /** The encoder instance */
-    protected static LdapEncoder encoder;
-
+    protected DefaultLdapCodecService codec;
+    
+    private static Lock lock = new ReentrantLock();
 
     /**
      * Initialize the codec service
      */
-    @BeforeClass
-    public static void setupLdapCodecService()
+    @BeforeEach
+    public void setupLdapCodecService()
     {
-        codec = new DefaultLdapCodecService();
-
-        codec.registerProtocolCodecFactory( new ProtocolCodecFactory()
+        lock.lock();
+        
+        try
         {
-            @Override
-            public ProtocolEncoder getEncoder( IoSession session ) throws Exception
+            codec = new DefaultLdapCodecService();
+            
+            codec.registerProtocolCodecFactory( new ProtocolCodecFactory()
             {
-                return null;
-            }
-
-
-            @Override
-            public ProtocolDecoder getDecoder( IoSession session ) throws Exception
+                @Override
+                public ProtocolEncoder getEncoder( IoSession session ) throws Exception
+                {
+                    return null;
+                }
+    
+    
+                @Override
+                public ProtocolDecoder getDecoder( IoSession session ) throws Exception
+                {
+                    return null;
+                }
+            } );
+    
+            if ( LdapApiServiceFactory.isInitialized() == false )
             {
-                return null;
+                LdapApiServiceFactory.initialize( codec );
             }
-        } );
-
-        if ( LdapApiServiceFactory.isInitialized() == false )
-        {
-            LdapApiServiceFactory.initialize( codec );
         }
-    }
-
-
-    /**
-     * Shutdown the codec service
-     */
-    @AfterClass
-    public static void tearDownLdapCodecService()
-    {
-        codec = null;
+        finally
+        {
+            lock.unlock();
+        }
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java
index 182d4cc..73abfb1 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestMatchingRuleAssertionTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.codec.search;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-//import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
@@ -48,28 +48,24 @@
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.OidNormalizer;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test case for SearchRequest messages
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchRequestMatchingRuleAssertionTest extends AbstractCodecServiceTest
 {
     /** An oid normalizer map */
     static Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setUp() throws Exception
     {
         // DC normalizer
@@ -182,7 +178,7 @@
     /**
      * Test the decoding of a SearchRequest with an empty extensible match
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyExtensibleMatch() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -212,7 +208,10 @@
 
         // Decode a SearchRequest message
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -220,7 +219,7 @@
      * Test the decoding of a SearchRequest with an extensible match and an
      * empty matching rule
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchEmptyMatchingRule() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -250,7 +249,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -258,7 +260,7 @@
      * Test the decoding of a SearchRequest with an extensible match and an
      * empty type
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchEmptyType() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -288,7 +290,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -366,7 +371,7 @@
      * Test the decoding of a SearchRequest with an extensible match and an
      * matching rule and an empty type
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchMatchingRuleEmptyType() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -398,7 +403,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -406,7 +414,7 @@
      * Test the decoding of a SearchRequest with an extensible match and an
      * matching rule and an empty dnAttributes
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchDnAttributesEmptyType() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -456,7 +464,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -464,7 +475,7 @@
      * Test the decoding of a SearchRequest with an extensible match and a
      * matching rule and nothing else
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchMatchingRuleAlone() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -495,7 +506,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -503,7 +517,7 @@
      * Test the decoding of a SearchRequest with an extensible match and a type
      * and nothing else
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchTypeAlone() throws DecoderException, EncoderException
     {
         byte[] asn1BER = new byte[]
@@ -534,7 +548,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -542,7 +559,7 @@
      * Test the decoding of a SearchRequest with an extensible match and a match
      * Value and nothing else
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestExtensibleMatchMatchValueAlone() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -573,6 +590,9 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestSubstringTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestSubstringTest.java
index ad0a808..b35bf49 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestSubstringTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestSubstringTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec.search;
 
 
-import static org.junit.Assert.assertArrayEquals;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
@@ -49,28 +50,24 @@
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.OidNormalizer;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test case for SearchRequest messages
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchRequestSubstringTest extends AbstractCodecServiceTest
 {
     /** An oid normalizer map */
     static Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setUp() throws Exception
     {
         // DC normalizer
@@ -1054,7 +1051,7 @@
     /**
      * Test the decoding of a SearchRequest with an empty Substring filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptySubstringFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1090,7 +1087,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1098,7 +1098,7 @@
      * Test the decoding of a SearchRequest with a Substring filter and an empty
      * Substring
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterEmptyType() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1135,7 +1135,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1143,7 +1146,7 @@
      * Test the decoding of a SearchRequest with a Substring filter and an empty
      * Substring
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterNoSubstrings() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1181,7 +1184,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1189,7 +1195,7 @@
      * Test the decoding of a SearchRequest with a Substring filter and an empty
      * Substring
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterEmptySubstrings() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1228,7 +1234,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1236,7 +1245,7 @@
      * Test the decoding of a SearchRequest with a Substring filter and an empty
      * Substring Initial
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterEmptyInitial() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1276,7 +1285,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1284,7 +1296,7 @@
      * Test the decoding of a SearchRequest with a Substring filter and an empty
      * Substring Any
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterEmptyAny() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1324,7 +1336,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1332,7 +1347,7 @@
      * Test the decoding of a SearchRequest with a Substring filter and an empty
      * Substring Initial
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterEmptyFinal() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1372,7 +1387,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1380,7 +1398,7 @@
      * Test the decoding of a SearchRequest with a Substring filter Any before
      * initial
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterAnyInitial() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1423,7 +1441,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1431,7 +1452,7 @@
      * Test the decoding of a SearchRequest with a Substring filter Final before
      * initial
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterFinalInitial() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1474,7 +1495,10 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1482,7 +1506,7 @@
      * Test the decoding of a SearchRequest with a Substring filter Final before
      * any
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterFinalAny() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1525,14 +1549,17 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with a Substring filter Two initials
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterTwoInitials() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1575,14 +1602,17 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with a Substring filter Two finals
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestSubstringFilterTwoFinals() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1625,6 +1655,9 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestTest.java
index e46cae0..2ac19f4 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchRequestTest.java
@@ -20,10 +20,11 @@
 package org.apache.directory.api.ldap.codec.search;
 
 
-import static org.junit.Assert.assertArrayEquals;
-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.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
@@ -63,28 +64,24 @@
 import org.apache.directory.api.ldap.model.message.controls.Subentries;
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.OidNormalizer;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test case for SearchRequest messages
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchRequestTest extends AbstractCodecServiceTest
 {
     /** An oid normalizer map */
     static Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         // DC normalizer
@@ -1352,7 +1349,7 @@
     /**
      * Test the decoding of a SearchRequest with an empty body
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyBody() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1371,14 +1368,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty baseDN and nothing more
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestBaseDnOnly() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1398,7 +1398,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -1551,7 +1554,7 @@
     /**
      * Test the decoding of a SearchRequest with a bad objectBase
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestGlobalBadObjectBase() throws DecoderException
     {
 
@@ -1624,27 +1627,30 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        try
+        assertThrows( DecoderException.class, ( ) ->
         {
-            Asn1Decoder.decode( stream, ldapMessageContainer );
-        }
-        catch ( DecoderException de )
-        {
-            assertTrue( de instanceof ResponseCarryingException );
-            Message response = ( ( ResponseCarryingException ) de ).getResponse();
-            assertTrue( response instanceof SearchResultDoneImpl );
-            assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( SearchResultDoneImpl ) response ).getLdapResult()
-                .getResultCode() );
-
-            throw de;
-        }
+            try
+            {
+                Asn1Decoder.decode( stream, ldapMessageContainer );
+            }
+            catch ( DecoderException de )
+            {
+                assertTrue( de instanceof ResponseCarryingException );
+                Message response = ( ( ResponseCarryingException ) de ).getResponse();
+                assertTrue( response instanceof SearchResultDoneImpl );
+                assertEquals( ResultCodeEnum.INVALID_DN_SYNTAX, ( ( SearchResultDoneImpl ) response ).getLdapResult()
+                    .getResultCode() );
+    
+                throw de;
+            }
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty scope
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyScope() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1667,14 +1673,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with a bad scope
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestGlobalBadScope() throws DecoderException
     {
 
@@ -1742,14 +1751,17 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty derefAlias
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyDerefAlias() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1773,14 +1785,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with a bad derefAlias
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestGlobalBadDerefAlias() throws DecoderException
     {
 
@@ -1848,14 +1863,17 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty size limit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptySizeLimit() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1880,14 +1898,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with a bad sizeLimit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestGlobalBadSizeLimit() throws DecoderException
     {
 
@@ -1954,14 +1975,17 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty time limit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyTimeLimit() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -1987,14 +2011,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with a bad timeLimit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestGlobalBadTimeLimit() throws DecoderException
     {
 
@@ -2066,14 +2093,17 @@
         LdapMessageContainer<SearchRequest> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyTypeOnly() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2100,14 +2130,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2135,14 +2168,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty Present filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyPresentFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2170,14 +2206,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty equalityMatch filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyEqualityMatchFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2205,14 +2244,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty greaterOrEqual filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyGreaterOrEqualFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2240,14 +2282,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty lessOrEqual filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyLessOrEqualFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2275,14 +2320,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an approxMatch filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyApproxMatchFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2310,7 +2358,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -2318,7 +2369,7 @@
      * Test the decoding of a SearchRequest with a greaterOrEqual filter and an
      * empty attributeDesc
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyGreaterOrEqualEmptyAttrDesc()
         throws DecoderException
     {
@@ -2348,7 +2399,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -2567,7 +2621,7 @@
     /**
      * Test the decoding of a SearchRequest with an empty And filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyAndFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2597,14 +2651,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty Or filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyOrFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2634,14 +2691,17 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchRequest with an empty Not filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestEmptyNotFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2671,7 +2731,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -2679,7 +2742,7 @@
      * Test the decoding of a SearchRequest with a Not filter and an empty And
      * filter
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchRequestNotFilterEmptyAndFilter() throws DecoderException
     {
         byte[] asn1BER = new byte[]
@@ -2711,7 +2774,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultDoneTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultDoneTest.java
index b0e49ce..5ee41cb 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultDoneTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultDoneTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.search;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -39,20 +40,16 @@
 import org.apache.directory.api.ldap.model.message.SearchResultDone;
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SearchResultDone codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResultDoneTest extends AbstractCodecServiceTest
 {
     /**
@@ -179,7 +176,7 @@
     /**
      * Test the decoding of a SearchResultDone with no LdapResult
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultDoneEmptyResult() throws DecoderException
     {
 
@@ -198,7 +195,10 @@
         LdapMessageContainer<SearchResultDone> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a SearchResultDone message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultEntryTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultEntryTest.java
index 24d92bd..9b168dd 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultEntryTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultEntryTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.search;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Arrays;
@@ -42,20 +43,16 @@
 import org.apache.directory.api.ldap.model.message.SearchResultEntry;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SearchResultEntry codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResultEntryTest extends AbstractCodecServiceTest
 {
     /**
@@ -313,7 +310,7 @@
     /**
      * Test the decoding of an empty SearchResultEntry
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryEmpty() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -333,14 +330,17 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of an SearchResultEntry with an empty object name
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryEmptyObjectName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -363,14 +363,17 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of an SearchResultEntry with an object name alone
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryObjectNameAlone() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x24 );
@@ -394,7 +397,10 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -451,7 +457,7 @@
     /**
      * Test the decoding of an SearchResultEntry with an empty attributes list
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryEmptyAttributeList() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x28 );
@@ -479,7 +485,10 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
@@ -487,7 +496,7 @@
      * Test the decoding of an SearchResultEntry with an empty attributes list
      * with controls
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryEmptyAttributeListWithControls() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x45 );
@@ -520,14 +529,17 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchResultEntry with an empty type
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryEmptyType() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x2A );
@@ -556,14 +568,17 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
     /**
      * Test the decoding of a SearchResultEntry with a type alone
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultEntryTypeAlone() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x35 );
@@ -593,7 +608,10 @@
         LdapMessageContainer<SearchResultEntry> ldapMessageContainer =
             new LdapMessageContainer<>( codec );
 
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultReferenceTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultReferenceTest.java
index 003740a..b08101e 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultReferenceTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/search/SearchResultReferenceTest.java
@@ -20,11 +20,12 @@
 package org.apache.directory.api.ldap.codec.search;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.ByteBuffer;
 import java.util.HashSet;
@@ -43,20 +44,16 @@
 import org.apache.directory.api.ldap.model.message.SearchResultReference;
 import org.apache.directory.api.ldap.model.message.controls.EntryChange;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SearchResultReference codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class SearchResultReferenceTest extends AbstractCodecServiceTest
 {
     /**
@@ -283,7 +280,7 @@
     /**
      * Test the decoding of a SearchResultReference with no reference
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSearchResultReferenceNoReference() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -304,7 +301,10 @@
             new LdapMessageContainer<>( codec );
 
         // Decode a SearchResultReference message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 
 
diff --git a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/unbind/UnBindRequestTest.java b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/unbind/UnBindRequestTest.java
index 8d18b5a..7b56c38 100644
--- a/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/unbind/UnBindRequestTest.java
+++ b/ldap/codec/core/src/test/java/org/apache/directory/api/ldap/codec/unbind/UnBindRequestTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.codec.unbind;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -37,18 +38,15 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.UnbindRequest;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class UnBindRequestTest extends AbstractCodecServiceTest
 {
     /**
@@ -138,7 +136,7 @@
     /**
      * Test the decoding of a UnBindRequest with a not null body
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeUnBindRequestNotNull() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -156,6 +154,9 @@
         LdapMessageContainer<UnbindRequest> ldapMessageContainer = new LdapMessageContainer<>( codec );
 
         // Decode a UnbindRequest message
-        Asn1Decoder.decode( stream, ldapMessageContainer );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, ldapMessageContainer );
+        } );
     }
 }
diff --git a/ldap/codec/standalone/pom.xml b/ldap/codec/standalone/pom.xml
index 6861d2f..993b895 100644
--- a/ldap/codec/standalone/pom.xml
+++ b/ldap/codec/standalone/pom.xml
@@ -43,8 +43,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/ldap/extras/aci/pom.xml b/ldap/extras/aci/pom.xml
index 278ca6e..d94e9de 100644
--- a/ldap/extras/aci/pom.xml
+++ b/ldap/extras/aci/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AllAttributeValuesTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AllAttributeValuesTest.java
index c23f833..d3b84db 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AllAttributeValuesTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AllAttributeValuesTest.java
@@ -20,29 +20,25 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.AllAttributeValuesItem;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.AllAttributeValues.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_AllAttributeValuesTest
 {
     AllAttributeValuesItem allAttributeValuesA;
@@ -54,7 +50,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         Set<AttributeType> colA = new HashSet<AttributeType>();
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeTypeTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeTypeTest.java
index 164e009..268803b 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeTypeTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeTypeTest.java
@@ -20,29 +20,25 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.AttributeTypeItem;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.AttributeType.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_AttributeTypeTest
 {
     AttributeTypeItem attributeTypeA;
@@ -54,7 +50,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         Set<AttributeType> colA = new HashSet<AttributeType>();
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeValueTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeValueTest.java
index 7895367..3ce9dcd 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeValueTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_AttributeValueTest.java
@@ -20,30 +20,26 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.AttributeValueItem;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.AttributeValue.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_AttributeValueTest
 {
     AttributeValueItem attributeValueA;
@@ -55,7 +51,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
 
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_ClassesTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_ClassesTest.java
index 8cb921e..fc82dbd 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_ClassesTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_ClassesTest.java
@@ -20,27 +20,23 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.directory.api.ldap.aci.protectedItem.ClassesItem;
 import org.apache.directory.api.ldap.model.filter.ExprNode;
 import org.apache.directory.api.ldap.model.filter.FilterParser;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.Classes.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_ClassesTest
 {
     ClassesItem classesA;
@@ -52,7 +48,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         ExprNode filterA = FilterParser.parse( "(&(cn=test)(sn=test))" );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxImmSubTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxImmSubTest.java
index 79f3314..a9decfe 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxImmSubTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxImmSubTest.java
@@ -20,25 +20,21 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.directory.api.ldap.aci.protectedItem.MaxImmSubItem;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.MaxImmSub.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_MaxImmSubTest
 {
     MaxImmSubItem maxValueCountA;
@@ -50,7 +46,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         MaxImmSubItem misA = new MaxImmSubItem( 1 );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxValueCountTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxValueCountTest.java
index 37fe2a7..84311a0 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxValueCountTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_MaxValueCountTest.java
@@ -20,30 +20,26 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.MaxValueCountElem;
 import org.apache.directory.api.ldap.aci.protectedItem.MaxValueCountItem;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.MaxValueCount.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_MaxValueCountTest
 {
     MaxValueCountItem maxValueCountA;
@@ -55,7 +51,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
 
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RangeOfValuesTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RangeOfValuesTest.java
index 2c4e50c..67c1c43 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RangeOfValuesTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RangeOfValuesTest.java
@@ -20,27 +20,23 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.directory.api.ldap.aci.protectedItem.RangeOfValuesItem;
 import org.apache.directory.api.ldap.model.filter.ExprNode;
 import org.apache.directory.api.ldap.model.filter.FilterParser;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.RangeOfValues.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_RangeOfValuesTest
 {
     RangeOfValuesItem rangeOfValuesA;
@@ -52,7 +48,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
 
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RestrictedByTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RestrictedByTest.java
index 22e6d3c..7705c9c 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RestrictedByTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_RestrictedByTest.java
@@ -20,30 +20,26 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.RestrictedByElem;
 import org.apache.directory.api.ldap.aci.protectedItem.RestrictedByItem;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.RestrictedBy.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_RestrictedByTest
 {
     RestrictedByItem restrictedByA;
@@ -55,7 +51,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         RestrictedByElem rbiA = new RestrictedByElem( new AttributeType( "aa" ), new AttributeType( "aa" ) );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_SelfValueTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_SelfValueTest.java
index a0219e5..96588fb 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_SelfValueTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/ProtectedItem_SelfValueTest.java
@@ -20,29 +20,25 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.SelfValueItem;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ProtectedItem.SelfValue.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ProtectedItem_SelfValueTest
 {
     SelfValueItem selfValueA;
@@ -54,7 +50,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         Set<AttributeType> colA = new HashSet<AttributeType>();
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_NameTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_NameTest.java
index ec8e9a2..86e5ba6 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_NameTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_NameTest.java
@@ -20,22 +20,20 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.UserClass.Name;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,8 +41,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class UserClass_NameTest
 {
     private Name nameA;
@@ -56,7 +53,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws LdapInvalidDnException
     {
         Set<String> dnSetA = new HashSet<>();
@@ -111,7 +108,7 @@
     }
 
 
-    @Ignore( "There is no way this test can succeed, we are hashcoding values in a set...")
+    @Disabled( "There is no way this test can succeed, we are hashcoding values in a set...")
     @Test
     public void testHashCodeSymmetric() throws Exception
     {
@@ -129,7 +126,7 @@
     }
 
 
-    @Ignore( "There is no way this test can succeed, we are hashcoding values in a set...")
+    @Disabled( "There is no way this test can succeed, we are hashcoding values in a set...")
     @Test
     public void testHashCodeTransitive() throws Exception
     {
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_SubtreeTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_SubtreeTest.java
index 160672f..adce38d 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_SubtreeTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/UserClass_SubtreeTest.java
@@ -20,31 +20,26 @@
 package org.apache.directory.api.ldap.aci;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.UserClass.Subtree;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.subtree.BaseSubtreeSpecification;
 import org.apache.directory.api.ldap.model.subtree.SubtreeSpecification;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class UserClass.Subtree.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class UserClass_SubtreeTest
 {
     Subtree subtreeA;
@@ -56,7 +51,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         SubtreeSpecification subtreeSpecA = new BaseSubtreeSpecification();
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/AttributeValueItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/AttributeValueItemTest.java
index 5206e7e..0c22202 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/AttributeValueItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/AttributeValueItemTest.java
@@ -20,31 +20,27 @@
 package org.apache.directory.api.ldap.aci.protectedItem;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.AttributeValueItem;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
 import org.apache.directory.api.ldap.model.filter.UndefinedNode;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class AttributeValueItem.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class AttributeValueItemTest
 {
     AttributeValueItem attributeValueItemA;
@@ -61,7 +57,7 @@
     /**
      * Initialize maxValueCountItem instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         attributeA = new HashSet<Attribute>();
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/ClassesItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/ClassesItemTest.java
index fe9afa5..8b94303 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/ClassesItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/ClassesItemTest.java
@@ -20,27 +20,23 @@
 package org.apache.directory.api.ldap.aci.protectedItem;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.directory.api.ldap.aci.protectedItem.ClassesItem;
 import org.apache.directory.api.ldap.model.filter.SubstringNode;
 import org.apache.directory.api.ldap.model.filter.UndefinedNode;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ClassesItem.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class ClassesItemTest
 {
     ClassesItem classesItemA;
@@ -52,7 +48,7 @@
     /**
      * Initialize classesItem instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         classesItemA = new ClassesItem( new SubstringNode( "aa" ) );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxImmSubItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxImmSubItemTest.java
index 8c358d6..4487912 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxImmSubItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxImmSubItemTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.aci.protectedItem;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.directory.api.ldap.aci.protectedItem.MaxImmSubItem;
 import org.apache.directory.api.ldap.model.filter.UndefinedNode;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class MaxImmSubItem.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class MaxImmSubItemTest
 {
     MaxImmSubItem maxImmSubItemA;
@@ -51,7 +47,7 @@
     /**
      * Initialize maxImmSubItem instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         maxImmSubItemA = new MaxImmSubItem( 1 );
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxValueCountItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxValueCountItemTest.java
index 0b6beb4..9268d2d 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxValueCountItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/MaxValueCountItemTest.java
@@ -20,31 +20,27 @@
 package org.apache.directory.api.ldap.aci.protectedItem;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.MaxValueCountElem;
 import org.apache.directory.api.ldap.aci.protectedItem.MaxValueCountItem;
 import org.apache.directory.api.ldap.model.filter.UndefinedNode;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class MaxValueCountItem.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class MaxValueCountItemTest
 {
     MaxValueCountItem maxValueCountItemA;
@@ -61,7 +57,7 @@
     /**
      * Initialize maxValueCountItem instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         itemsA = new HashSet<MaxValueCountElem>();
diff --git a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/RestrictedByItemTest.java b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/RestrictedByItemTest.java
index c2460dc..99efd2d 100644
--- a/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/RestrictedByItemTest.java
+++ b/ldap/extras/aci/src/test/java/org/apache/directory/api/ldap/aci/protectedItem/RestrictedByItemTest.java
@@ -20,31 +20,27 @@
 package org.apache.directory.api.ldap.aci.protectedItem;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.HashSet;
 import java.util.Set;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.aci.protectedItem.RestrictedByElem;
 import org.apache.directory.api.ldap.aci.protectedItem.RestrictedByItem;
 import org.apache.directory.api.ldap.model.filter.UndefinedNode;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class RestrictedByItem.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class RestrictedByItemTest
 {
     RestrictedByItem restrictedByItemA;
@@ -61,7 +57,7 @@
     /**
      * Initialize maxValueCountItem instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         elemsA = new HashSet<RestrictedByElem>();
diff --git a/ldap/extras/codec-api/pom.xml b/ldap/extras/codec-api/pom.xml
index b5318f7..7471667 100644
--- a/ldap/extras/codec-api/pom.xml
+++ b/ldap/extras/codec-api/pom.xml
@@ -35,8 +35,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
 
diff --git a/ldap/extras/codec/pom.xml b/ldap/extras/codec/pom.xml
index f0e69ba..0613ff0 100644
--- a/ldap/extras/codec/pom.xml
+++ b/ldap/extras/codec/pom.xml
@@ -38,8 +38,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
 
@@ -89,6 +95,13 @@
               ${project.build.directory}/osgi-cache
             </org.osgi.framework.storage>
           </systemPropertyVariables>
+          <parallel>all</parallel>
+          <threadCount>10</threadCount>
+          <properties>
+            <configurationParameters>
+              junit.jupiter.execution.parallel.enabled=true
+            </configurationParameters>
+          </properties>
         </configuration>
       </plugin>
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/AbstractCodecServiceTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/AbstractCodecServiceTest.java
deleted file mode 100644
index a120c1c..0000000
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/AbstractCodecServiceTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *  
- *    http://www.apache.org/licenses/LICENSE-2.0
- *  
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License. 
- *  
- */
-package org.apache.directory.api.ldap.extras;
-
-
-import org.apache.directory.api.ldap.codec.api.LdapApiService;
-import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-
-
-/**
- * Initialize the Codec service. This can later be removed.
- *
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- */
-public abstract class AbstractCodecServiceTest
-{
-    protected static LdapApiService codec;
-
-
-    /**
-     * Initialize the codec service
-     */
-    @BeforeClass
-    public static void setupLdapCodecService()
-    {
-        codec = new DefaultLdapCodecService();
-    }
-
-
-    /**
-     * Shutdown the codec service
-     */
-    @AfterClass
-    public static void tearDownLdapCodecService()
-    {
-        codec = null;
-    }
-}
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncRequestControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncRequestControlTest.java
index 60df0f6..66aad11 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncRequestControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncRequestControlTest.java
@@ -20,24 +20,23 @@
 package org.apache.directory.api.ldap.extras.controls.ad;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.ad_impl.AdDirSyncRequestFactory;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  *
@@ -45,13 +44,15 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class AdDirSyncRequestControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class AdDirSyncRequestControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerRequestControl( new AdDirSyncRequestFactory( codec ) );
     }
     
@@ -123,7 +124,7 @@
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdDirSyncControlAbsentCookie() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -140,11 +141,15 @@
         AdDirSyncRequestFactory factory = ( AdDirSyncRequestFactory ) codec.getRequestControlFactories().
             get( AdDirSyncRequest.OID );
         AdDirSyncRequest adDirSyncRequest = factory.newControl();
-        factory.decodeValue( adDirSyncRequest, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adDirSyncRequest, bb.array() );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdDirSyncControlAbsentParentFirst() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x07 );
@@ -161,11 +166,15 @@
         AdDirSyncRequestFactory factory = ( AdDirSyncRequestFactory ) codec.getRequestControlFactories().
             get( AdDirSyncRequest.OID );
         AdDirSyncRequest adDirSyncRequest = factory.newControl();
-        factory.decodeValue( adDirSyncRequest, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adDirSyncRequest, bb.array() );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdDirSyncControlEmpty() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -180,6 +189,10 @@
         AdDirSyncRequestFactory factory = ( AdDirSyncRequestFactory ) codec.getRequestControlFactories().
             get( AdDirSyncRequest.OID );
         AdDirSyncRequest adDirSyncRequest = factory.newControl();
-        factory.decodeValue( adDirSyncRequest, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adDirSyncRequest, bb.array() );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncResponseControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncResponseControlTest.java
index 8115d31..ad07128 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncResponseControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdDirSyncResponseControlTest.java
@@ -20,8 +20,9 @@
 package org.apache.directory.api.ldap.extras.controls.ad;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.EnumSet;
@@ -29,16 +30,14 @@
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.ad_impl.AdDirSyncResponseFactory;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  *
@@ -46,14 +45,16 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class AdDirSyncResponseControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class AdDirSyncResponseControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
-        codec.registerRequestControl( new AdDirSyncResponseFactory( codec ) );
+        codec = new DefaultLdapCodecService();
+        codec.registerResponseControl( new AdDirSyncResponseFactory( codec ) );
     }
     
     
@@ -73,7 +74,7 @@
 
         bb.flip();
 
-        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getRequestControlFactories().
+        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getResponseControlFactories().
             get( AdDirSyncResponse.OID );
         AdDirSyncResponse adDirSyncResponse = factory.newControl();
         factory.decodeValue( adDirSyncResponse, bb.array() );
@@ -109,7 +110,7 @@
 
         bb.flip();
 
-        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getRequestControlFactories().
+        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getResponseControlFactories().
             get( AdDirSyncResponse.OID );
         AdDirSyncResponse adDirSyncResponse = factory.newControl();
         factory.decodeValue( adDirSyncResponse, bb.array() );
@@ -127,7 +128,7 @@
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdDirSyncControlAbsentCookie() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x08 );
@@ -141,14 +142,18 @@
 
         bb.flip();
 
-        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getRequestControlFactories().
+        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getResponseControlFactories().
             get( AdDirSyncResponse.OID );
         AdDirSyncResponse adDirSyncResponse = factory.newControl();
-        factory.decodeValue( adDirSyncResponse, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adDirSyncResponse, bb.array() );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdDirSyncControlAbsentParentFirst() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x07 );
@@ -162,14 +167,18 @@
 
         bb.flip();
 
-        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getRequestControlFactories().
+        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getResponseControlFactories().
             get( AdDirSyncResponse.OID );
         AdDirSyncResponse adDirSyncResponse = factory.newControl();
-        factory.decodeValue( adDirSyncResponse, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adDirSyncResponse, bb.array() );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdDirSyncControlEmpty() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -181,9 +190,13 @@
 
         bb.flip();
 
-        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getRequestControlFactories().
+        AdDirSyncResponseFactory factory = ( AdDirSyncResponseFactory ) codec.getResponseControlFactories().
             get( AdDirSyncResponse.OID );
         AdDirSyncResponse adDirSyncResponse = factory.newControl();
-        factory.decodeValue( adDirSyncResponse, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adDirSyncResponse, bb.array() );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdPolicyHintsControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdPolicyHintsControlTest.java
index e88dd13..535f94d 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdPolicyHintsControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ad/AdPolicyHintsControlTest.java
@@ -20,23 +20,22 @@
 package org.apache.directory.api.ldap.extras.controls.ad;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.ad_impl.AdPolicyHintsFactory;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  *
@@ -44,18 +43,20 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class AdPolicyHintsControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class AdPolicyHintsControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerRequestControl( new AdPolicyHintsFactory( codec ) );
     }
     
     
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdPolicyHiontsControlNoFlag() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -70,11 +71,15 @@
         AdPolicyHintsFactory factory = ( AdPolicyHintsFactory ) codec.getRequestControlFactories().
             get( AdPolicyHints.OID );
         AdPolicyHints adPolicyHints = factory.newControl();
-        factory.decodeValue( adPolicyHints, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adPolicyHints, bb.array() );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testAdPolicyHiontsControlEmptyFlag() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x04 );
@@ -90,7 +95,11 @@
         AdPolicyHintsFactory factory = ( AdPolicyHintsFactory ) codec.getRequestControlFactories().
             get( AdPolicyHints.OID );
         AdPolicyHints adPolicyHints = factory.newControl();
-        factory.decodeValue( adPolicyHints, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( adPolicyHints, bb.array() );
+        } );
     }
 
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ppolicy/PasswordPolicyResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ppolicy/PasswordPolicyResponseTest.java
index d3d338d..9e1b63c 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ppolicy/PasswordPolicyResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/ppolicy/PasswordPolicyResponseTest.java
@@ -21,31 +21,37 @@
 package org.apache.directory.api.ldap.extras.controls.ppolicy;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyResponseFactory;
-import org.junit.Before;
-import org.junit.Test;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * PasswordPolicyResponseControlTest.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class PasswordPolicyResponseTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class PasswordPolicyResponseTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerResponseControl( new PasswordPolicyResponseFactory( codec ) );
     }
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncDoneValueControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncDoneValueControlTest.java
index cae7be6..bcef36a 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncDoneValueControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncDoneValueControlTest.java
@@ -20,27 +20,25 @@
 package org.apache.directory.api.ldap.extras.controls.syncrepl_impl;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * 
@@ -48,13 +46,15 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class SyncDoneValueControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class SyncDoneValueControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerResponseControl( new SyncDoneValueFactory( codec ) );
     }
     
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncRequestValueControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncRequestValueControlTest.java
index bc639bf..367647c 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncRequestValueControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncRequestValueControlTest.java
@@ -20,39 +20,40 @@
 package org.apache.directory.api.ldap.extras.controls.syncrepl_impl;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.SynchronizationModeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncRequest.SyncRequestValue;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SyncRequestControlValue codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class SyncRequestValueControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class SyncRequestValueControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerRequestControl( new SyncRequestValueFactory( codec ) );
     }
     
@@ -360,7 +361,7 @@
     /**
      * Test the decoding of a SyncRequestValue control with an empty sequence
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncRequestValueControlEmptySequence() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -373,14 +374,18 @@
         SyncRequestValueFactory factory = ( SyncRequestValueFactory ) codec.getRequestControlFactories().
             get( SyncRequestValue.OID );
         SyncRequestValue syncRequestValue = factory.newControl();
-        factory.decodeValue( syncRequestValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncRequestValue, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a SyncRequestValue control with no mode
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncRequestValueControlNoMode() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x07 );
@@ -395,6 +400,10 @@
         SyncRequestValueFactory factory = ( SyncRequestValueFactory ) codec.getRequestControlFactories().
             get( SyncRequestValue.OID );
         SyncRequestValue syncRequestValue = factory.newControl();
-        factory.decodeValue( syncRequestValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncRequestValue, bb.array() );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncStateValueControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncStateValueControlTest.java
index 5cb2443..82c10b0 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncStateValueControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/syncrepl_impl/SyncStateValueControlTest.java
@@ -20,39 +20,40 @@
 package org.apache.directory.api.ldap.extras.controls.syncrepl_impl;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateTypeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SyncStateControlValue codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class SyncStateValueControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class SyncStateValueControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerResponseControl( new SyncStateValueFactory( codec ) );
     }
     
@@ -182,7 +183,7 @@
     /**
      * Test the decoding of a SyncStateValue control with an empty sequence
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeSyncStateValueControlEmptySequence() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -195,14 +196,18 @@
         SyncStateValueFactory factory = ( SyncStateValueFactory ) codec.getResponseControlFactories().
             get( SyncStateValue.OID );
         SyncStateValue syncStateValue = factory.newControl();
-        factory.decodeValue( syncStateValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncStateValue, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a SyncStateValue control with no syncState
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeSyncStateValueControlNoSyancState() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x07 );
@@ -217,14 +222,18 @@
         SyncStateValueFactory factory = ( SyncStateValueFactory ) codec.getResponseControlFactories().
             get( SyncStateValue.OID );
         SyncStateValue syncStateValue = factory.newControl();
-        factory.decodeValue( syncStateValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncStateValue, bb.array() );
+        } );
     }
 
 
     /**
      * Test the decoding of a SyncStateValue control with no syncUUID
      */
-    @Test( expected = DecoderException.class )
+    @Test
     public void testDecodeSyncStateValueControlNoSyncUUID() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x05 );
@@ -240,7 +249,11 @@
         SyncStateValueFactory factory = ( SyncStateValueFactory ) codec.getResponseControlFactories().
             get( SyncStateValue.OID );
         SyncStateValue syncStateValue = factory.newControl();
-        factory.decodeValue( syncStateValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncStateValue, bb.array() );
+        } );
     }
 
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVRequestControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVRequestControlTest.java
index 32c5842..5a7f471 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVRequestControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVRequestControlTest.java
@@ -21,33 +21,40 @@
 package org.apache.directory.api.ldap.extras.controls.vlv;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.vlv_impl.VirtualListViewRequestFactory;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * VLV request control tests.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class VLVRequestControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class VLVRequestControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerRequestControl( new VirtualListViewRequestFactory( codec ) );
     }
 
@@ -306,7 +313,7 @@
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeEmptySequence() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x2 );
@@ -321,11 +328,15 @@
         VirtualListViewRequestFactory factory = ( VirtualListViewRequestFactory ) codec.getRequestControlFactories().
             get( VirtualListViewRequest.OID );
         VirtualListViewRequest virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeNoBeforeCount() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x13 );
@@ -347,11 +358,15 @@
         VirtualListViewRequestFactory factory = ( VirtualListViewRequestFactory ) codec.getRequestControlFactories().
             get( VirtualListViewRequest.OID );
         VirtualListViewRequest virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeNoTarget() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0E );
@@ -370,11 +385,15 @@
         VirtualListViewRequestFactory factory = ( VirtualListViewRequestFactory ) codec.getRequestControlFactories().
             get( VirtualListViewRequest.OID );
         VirtualListViewRequest virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeEmptyByOffset() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x10 );
@@ -394,7 +413,11 @@
         VirtualListViewRequestFactory factory = ( VirtualListViewRequestFactory ) codec.getRequestControlFactories().
             get( VirtualListViewRequest.OID );
         VirtualListViewRequest virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
 
@@ -435,7 +458,7 @@
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeByOffsetNoOffsetOrContentCount() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x13 );
@@ -457,11 +480,15 @@
         VirtualListViewRequestFactory factory = ( VirtualListViewRequestFactory ) codec.getRequestControlFactories().
             get( VirtualListViewRequest.OID );
         VirtualListViewRequest virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
 
-    @Test(expected = DecoderException.class)
+    @Test
     public void testDecodeByOffsetWrongOffset() throws Exception
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x16 );
@@ -484,6 +511,10 @@
         VirtualListViewRequestFactory factory = ( VirtualListViewRequestFactory ) codec.getRequestControlFactories().
             get( VirtualListViewRequest.OID );
         VirtualListViewRequest virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVResponseControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVResponseControlTest.java
index 630bea6..aa25728 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVResponseControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/controls/vlv/VLVResponseControlTest.java
@@ -21,31 +21,38 @@
 package org.apache.directory.api.ldap.extras.controls.vlv;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.vlv_impl.VirtualListViewResponseFactory;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * VLV response control tests.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-public class VLVResponseControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class VLVResponseControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerResponseControl( new VirtualListViewResponseFactory( codec ) );
     }
 
@@ -168,7 +175,7 @@
     }
 
     
-    @Test( expected=IllegalArgumentException.class )
+    @Test
     public void testDecodeFullBadResult() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x11 );
@@ -190,11 +197,15 @@
         VirtualListViewResponseFactory factory = ( VirtualListViewResponseFactory ) codec.getResponseControlFactories().
             get( VirtualListViewResponse.OID );
         VirtualListViewResponse virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+
+        assertThrows( IllegalArgumentException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
     
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeEmptyVLVResponse() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -210,11 +221,15 @@
         VirtualListViewResponseFactory factory = ( VirtualListViewResponseFactory ) codec.getResponseControlFactories().
             get( VirtualListViewResponse.OID );
         VirtualListViewResponse virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
     
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeNoTargetPositionVLVResponse() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0E );
@@ -235,11 +250,15 @@
         VirtualListViewResponseFactory factory = ( VirtualListViewResponseFactory ) codec.getResponseControlFactories().
             get( VirtualListViewResponse.OID );
         VirtualListViewResponse virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 
     
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeNoResultVLVResponse() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0E );
@@ -259,6 +278,10 @@
         VirtualListViewResponseFactory factory = ( VirtualListViewResponseFactory ) codec.getResponseControlFactories().
             get( VirtualListViewResponse.OID );
         VirtualListViewResponse virtualListView = factory.newControl();
-        factory.decodeValue( virtualListView, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( virtualListView, bb.array() );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedRequestTest.java
index ee7e751..841699b 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedRequestTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedRequestTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.extras.extended;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -31,9 +32,10 @@
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.ber.Asn1Decoder;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapEncoder;
 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.ads_impl.cancel.CancelFactory;
 import org.apache.directory.api.ldap.extras.extended.ads_impl.startTls.StartTlsFactory;
 import org.apache.directory.api.ldap.extras.extended.cancel.CancelRequest;
@@ -41,26 +43,25 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.ExtendedRequest;
 import org.apache.directory.api.ldap.model.message.controls.ManageDsaIT;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the ExtendedRequest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class ExtendedRequestTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class ExtendedRequestTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.getExtendedRequestFactories().put( "1.3.6.1.1.8", new CancelFactory( codec ) );
         codec.getExtendedRequestFactories().put( "1.3.6.1.4.1.1466.20037", new StartTlsFactory( codec ) );
     }
@@ -248,7 +249,7 @@
     /**
      * Test the decoding of an empty ExtendedRequest
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeExtendedRequestEmpty() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -267,14 +268,17 @@
         LdapMessageContainer<ExtendedRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the ExtendedRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of an empty OID
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeEmptyOID() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x09 );
@@ -294,14 +298,17 @@
         LdapMessageContainer<ExtendedRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the ExtendedRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of a bad name
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeExtendedBadRequestName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x1F );
@@ -324,7 +331,10 @@
         LdapMessageContainer<ExtendedRequest> container = new LdapMessageContainer<>( codec );
 
         // Decode the ExtendedRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedResponseTest.java
index 9256ef0..db1a1bb 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ExtendedResponseTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.extras.extended;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 import java.util.Map;
@@ -31,9 +32,10 @@
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.ber.Asn1Decoder;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapEncoder;
 import org.apache.directory.api.ldap.codec.api.LdapMessageContainer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulDisconnect.GracefulDisconnectFactory;
 import org.apache.directory.api.ldap.extras.extended.gracefulDisconnect.GracefulDisconnectResponse;
 import org.apache.directory.api.ldap.model.message.Control;
@@ -42,26 +44,25 @@
 import org.apache.directory.api.ldap.model.message.controls.PagedResults;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the ExtendedResponse codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class ExtendedResponseTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class ExtendedResponseTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.getExtendedResponseFactories().put( "1.3.6.1.4.1.18060.0.1.5", new GracefulDisconnectFactory( codec ) );
     }
     
@@ -336,7 +337,7 @@
     /**
      * Test the decoding of an empty ExtendedResponse
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeExtendedResponseEmpty() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x07 );
@@ -355,14 +356,17 @@
         LdapMessageContainer<ExtendedResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode the ExtendedRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of an ExtendedResponse with an empty ResponseName
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeExtendedResponseEmptyResponseName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x10 );
@@ -391,14 +395,17 @@
         LdapMessageContainer<ExtendedResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode the ExtendedRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
     /**
      * Test the decoding of an ExtendedResponse with a bad responseName
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeExtendedResponseBadOIDResponseName() throws DecoderException
     {
         ByteBuffer stream = ByteBuffer.allocate( 0x12 );
@@ -428,7 +435,10 @@
         LdapMessageContainer<ExtendedResponse> container = new LdapMessageContainer<>( codec );
 
         // Decode the ExtendedRequest PDU
-        Asn1Decoder.decode( stream, container );
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            Asn1Decoder.decode( stream, container );
+        } );
     }
 
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/CancelRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/CancelRequestTest.java
index 98b686e..fea62dc 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/CancelRequestTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/cancel/CancelRequestTest.java
@@ -21,34 +21,35 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.cancel;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.cancel.CancelRequest;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * TestCase for a Cancel Extended Operation request
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class CancelRequestTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class CancelRequestTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedRequest( new CancelFactory( codec ) );
     }
     
@@ -81,7 +82,7 @@
     /**
      * Test a Cancel message with no cancelId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCancelNoCancelId() throws DecoderException
     {
         byte[] stream = new byte[]
@@ -91,14 +92,18 @@
 
         CancelFactory factory = ( CancelFactory ) codec.getExtendedRequestFactories().
             get( CancelRequest.EXTENSION_OID );
-        factory.newRequest( stream );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( stream );
+        } );
     }
 
 
     /**
      * Test a Cancel message with an empty cancelId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCancelEmptyCancelId() throws DecoderException
     {
         byte[] stream = new byte[]
@@ -109,14 +114,18 @@
 
         CancelFactory factory = ( CancelFactory ) codec.getExtendedRequestFactories().
             get( CancelRequest.EXTENSION_OID );
-        factory.newRequest( stream );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( stream );
+        } );
     }
 
 
     /**
      * Test a Cancel message with a bad cancelId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCancelBadCancelId() throws DecoderException
     {
         byte[] stream = new byte[]
@@ -128,14 +137,18 @@
 
         CancelFactory factory = ( CancelFactory ) codec.getExtendedRequestFactories().
             get( CancelRequest.EXTENSION_OID );
-        factory.newRequest( stream );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( stream );
+        } );
     }
 
 
     /**
      * Test a Cancel message with more than one cancelId
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeCancelMoreThanOneCancelId() throws DecoderException
     {
         byte[] stream = new byte[]
@@ -147,6 +160,10 @@
 
         CancelFactory factory = ( CancelFactory ) codec.getExtendedRequestFactories().
             get( CancelRequest.EXTENSION_OID );
-        factory.newRequest( stream );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( stream );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/certGeneration/CertGenerationRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/certGeneration/CertGenerationRequestTest.java
index 3730d40..244ee74 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/certGeneration/CertGenerationRequestTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/certGeneration/CertGenerationRequestTest.java
@@ -20,21 +20,20 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.certGeneration;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.certGeneration.CertGenerationRequest;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * 
@@ -42,13 +41,15 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class CertGenerationRequestTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class CertGenerationRequestTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedRequest( new CertGenerationFactory( codec ) );
     }
     
@@ -96,7 +97,7 @@
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testCertGenerationDecodeEmptyTargetDN() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -108,11 +109,15 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testCertGenerationDecodeInvalidTargetDN() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -124,11 +129,15 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testCertGenerationDecodeEmptyIssuerDN() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -142,11 +151,15 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testCertGenerationDecodeInvalidIssuerDN() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -160,11 +173,15 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testCertGenerationDecodeEmptySubjectDN() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -180,11 +197,15 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testCertGenerationDecodeInvalidSubjectDN() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -200,11 +221,15 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeEmptySequence() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -214,6 +239,10 @@
 
         CertGenerationFactory factory = ( CertGenerationFactory ) codec.getExtendedRequestFactories().
             get( CertGenerationRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
index 0191543..14838e6 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
@@ -20,37 +20,38 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionRequest;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the EndTransactionRequest codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class EndTransactionRequestTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class EndTransactionRequestTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedRequest( new EndTransactionFactory( codec ) );
     }
     
@@ -58,7 +59,7 @@
     /**
      * Test the decoding of a EndTransactionRequest with nothing in it
      */
-    @Test( expected=DecoderException.class)
+    @Test
     public void testDecodeEndTransactionRequestEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -68,14 +69,18 @@
         
         EndTransactionFactory factory = ( EndTransactionFactory ) codec.getExtendedRequestFactories().
             get( EndTransactionRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a EndTransactionRequest with an commit but no identifier
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testEndTransactionRequestCommitNoIdentifier() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -86,7 +91,11 @@
 
         EndTransactionFactory factory = ( EndTransactionFactory ) codec.getExtendedRequestFactories().
             get( EndTransactionRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseTest.java
index 2abc2e2..708d2c7 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseTest.java
@@ -20,19 +20,21 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
 import org.apache.directory.api.ldap.codec.api.LdapApiServiceFactory;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncDone.SyncDoneValue;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateTypeEnum;
 import org.apache.directory.api.ldap.extras.controls.syncrepl.syncState.SyncStateValue;
@@ -45,32 +47,26 @@
 import org.apache.directory.api.ldap.model.message.controls.SortResponse;
 import org.apache.directory.api.ldap.model.message.controls.SortResultCode;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the EndTransactionResponse codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class EndTransactionResponseTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class EndTransactionResponseTest
 {
-    static
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         LdapApiServiceFactory.initialize( codec );
-    }
-    
-    @Before
-    public void init()
-    {
-        codec = LdapApiServiceFactory.getSingleton();
         codec.registerResponseControl( new SyncDoneValueFactory( codec ) );
         codec.registerResponseControl( new SyncStateValueFactory( codec ) );
         codec.registerExtendedResponse( new EndTransactionFactory( codec ) );
@@ -80,7 +76,7 @@
     /**
      * Test the decoding of a EndTransactionResponse with nothing in it
      */
-    @Test( expected=DecoderException.class)
+    @Test
     public void testDecodeEndTransactionResponseEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -90,7 +86,11 @@
 
         EndTransactionFactory factory = ( EndTransactionFactory ) codec.getExtendedResponseFactories().
             get( EndTransactionResponse.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulDisconnect/GracefulDisconnectResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulDisconnect/GracefulDisconnectResponseTest.java
index d98d8fd..b14a618 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulDisconnect/GracefulDisconnectResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulDisconnect/GracefulDisconnectResponseTest.java
@@ -20,36 +20,37 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulDisconnect;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.util.Iterator;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.gracefulDisconnect.GracefulDisconnectResponse;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the GracefulDisconnectTest codec
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class GracefulDisconnectResponseTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class GracefulDisconnectResponseTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedResponse( new GracefulDisconnectFactory( codec ) );
     }
     
@@ -275,7 +276,7 @@
     /**
      * Test the decoding of a GracefulDisconnect with a timeOffline off limit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulDisconnectTimeOfflineOffLimit() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -286,14 +287,18 @@
 
         GracefulDisconnectFactory factory = ( GracefulDisconnectFactory ) codec.getExtendedResponseFactories().
             get( GracefulDisconnectResponse.EXTENSION_OID );
-        factory.newResponse( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newResponse( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a GracefulDisconnect with a delay off limit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulDisconnectDelayOffLimit() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -305,14 +310,18 @@
 
         GracefulDisconnectFactory factory = ( GracefulDisconnectFactory ) codec.getExtendedResponseFactories().
             get( GracefulDisconnectResponse.EXTENSION_OID );
-        factory.newResponse( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newResponse( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a GracefulDisconnect with an empty TimeOffline
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulDisconnectTimeOfflineEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -323,14 +332,18 @@
 
         GracefulDisconnectFactory factory = ( GracefulDisconnectFactory ) codec.getExtendedResponseFactories().
             get( GracefulDisconnectResponse.EXTENSION_OID );
-        factory.newResponse( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newResponse( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a GracefulDisconnect with an empty delay
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulDisconnectDelayEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -341,7 +354,11 @@
 
         GracefulDisconnectFactory factory = ( GracefulDisconnectFactory ) codec.getExtendedResponseFactories().
             get( GracefulDisconnectResponse.EXTENSION_OID );
-        factory.newResponse( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newResponse( bb );
+        } );
     }
 
 
@@ -349,7 +366,7 @@
      * Test the decoding of a GracefulDisconnect with an empty replicated
      * contexts
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulDisconnectReplicatedContextsEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -360,7 +377,11 @@
 
         GracefulDisconnectFactory factory = ( GracefulDisconnectFactory ) codec.getExtendedResponseFactories().
             get( GracefulDisconnectResponse.EXTENSION_OID );
-        factory.newResponse( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newResponse( bb );
+        } );
     }
 
 
@@ -368,7 +389,7 @@
      * Test the decoding of a GracefulDisconnect with an invalid replicated
      * context
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulDisconnectReplicatedContextsInvalid() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -380,6 +401,10 @@
 
         GracefulDisconnectFactory factory = ( GracefulDisconnectFactory ) codec.getExtendedResponseFactories().
             get( GracefulDisconnectResponse.EXTENSION_OID );
-        factory.newResponse( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newResponse( bb );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulShutdown/GracefulShutdownTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulShutdown/GracefulShutdownTest.java
index 942b3aa..f56538e 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulShutdown/GracefulShutdownTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/gracefulShutdown/GracefulShutdownTest.java
@@ -20,34 +20,35 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulShutdown;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.gracefulShutdown.GracefulShutdownRequest;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the GracefulShutdownTest codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class GracefulShutdownTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class GracefulShutdownTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedRequest( new GracefulShutdownFactory( codec ) );
     }
 
@@ -262,7 +263,7 @@
     /**
      * Test the decoding of a GracefulShutdown with a timeOffline off limit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulShutdownTimeOfflineOffLimit() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -273,14 +274,18 @@
 
         GracefulShutdownFactory factory = ( GracefulShutdownFactory ) codec.getExtendedRequestFactories().
             get( GracefulShutdownRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a GracefulShutdown with a delay off limit
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulShutdownDelayOffLimit() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -292,14 +297,18 @@
 
         GracefulShutdownFactory factory = ( GracefulShutdownFactory ) codec.getExtendedRequestFactories().
             get( GracefulShutdownRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a GracefulShutdown with an empty TimeOffline
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulShutdownTimeOfflineEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -310,14 +319,18 @@
 
         GracefulShutdownFactory factory = ( GracefulShutdownFactory ) codec.getExtendedRequestFactories().
             get( GracefulShutdownRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 
 
     /**
      * Test the decoding of a GracefulShutdown with an empty delay
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeGracefulShutdownDelayEmpty() throws DecoderException
     {
         byte[] bb = new byte[]
@@ -328,6 +341,10 @@
 
         GracefulShutdownFactory factory = ( GracefulShutdownFactory ) codec.getExtendedRequestFactories().
             get( GracefulShutdownRequest.EXTENSION_OID );
-        factory.newRequest( bb );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.newRequest( bb );
+        } );
     }
 }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyRequestTest.java
index a842c5b..23774d3 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyRequestTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyRequestTest.java
@@ -20,36 +20,36 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.pwdModify;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyRequest;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the PasswordModifyRequest codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class PasswordModifyRequestTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class PasswordModifyRequestTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedRequest( new PasswordModifyFactory( codec ) );
     }
     
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java
index 4365e35..329b2a5 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java
@@ -20,36 +20,36 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.pwdModify;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.pwdModify.PasswordModifyResponse;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the PasswordModifyReponse codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class PasswordModifyResponseTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class PasswordModifyResponseTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedResponse( new PasswordModifyFactory( codec ) );
     }
     
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/storedProcedure/StoredProcedureTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/storedProcedure/StoredProcedureTest.java
index 9982272..3144a00 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/storedProcedure/StoredProcedureTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/storedProcedure/StoredProcedureTest.java
@@ -21,8 +21,8 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.storedProcedure;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
@@ -30,29 +30,29 @@
 import org.apache.directory.api.asn1.ber.tlv.IntegerDecoder;
 import org.apache.directory.api.asn1.ber.tlv.IntegerDecoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.storedProcedure.StoredProcedureRequest;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * TestCase for a Stored Procedure Extended Operation ASN.1 codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class StoredProcedureTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class StoredProcedureTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedRequest( new StoredProcedureFactory( codec ) );
     }
     
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/whoAmI/WhoAmIResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/whoAmI/WhoAmIResponseTest.java
index 1cd2a1f..5aadbca 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/whoAmI/WhoAmIResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/whoAmI/WhoAmIResponseTest.java
@@ -21,39 +21,39 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.whoAmI;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.extended.whoAmI.WhoAmIResponse;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /*
  * TestCase for a WhoAmI response Extended Operation
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class WhoAmIResponseTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class WhoAmIResponseTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerExtendedResponse( new WhoAmIFactory( codec ) );
     }
 
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/intermediate/syncrepl/SyncInfoValueControlTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/intermediate/syncrepl/SyncInfoValueControlTest.java
index 64a34da..dd83a89 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/intermediate/syncrepl/SyncInfoValueControlTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/intermediate/syncrepl/SyncInfoValueControlTest.java
@@ -20,41 +20,42 @@
 package org.apache.directory.api.ldap.extras.intermediate.syncrepl;
 
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
 import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.util.Asn1Buffer;
-import org.apache.directory.api.ldap.extras.AbstractCodecServiceTest;
+import org.apache.directory.api.ldap.codec.api.LdapApiService;
+import org.apache.directory.api.ldap.codec.osgi.DefaultLdapCodecService;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SyncInfoValue;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl.SynchronizationInfoEnum;
 import org.apache.directory.api.ldap.extras.intermediate.syncrepl_impl.SyncInfoValueFactory;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the SyncInfoControlValue codec
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
-public class SyncInfoValueControlTest extends AbstractCodecServiceTest
+@Execution( ExecutionMode.CONCURRENT)
+public class SyncInfoValueControlTest
 {
-    @Before
-    public void init()
+    private static LdapApiService codec;
+
+    @BeforeAll
+    public static void init()
     {
+        codec = new DefaultLdapCodecService();
         codec.registerIntermediateResponse( new SyncInfoValueFactory() );
     }
 
@@ -495,7 +496,7 @@
     /**
      * Test the decoding of a SyncInfoValue control, syncIdSet choice, empty
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncInfoValueControlSyncIdSetEmpty() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x02 );
@@ -509,7 +510,11 @@
         SyncInfoValueFactory factory = ( SyncInfoValueFactory ) codec.getIntermediateResponseFactories().
             get( SyncInfoValue.OID );
         SyncInfoValue syncInfoValue = factory.newResponse();
-        factory.decodeValue( syncInfoValue, bb.array() );
+
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncInfoValue, bb.array() );
+        } );
     }
 
 
@@ -517,7 +522,7 @@
      * Test the decoding of a SyncInfoValue control, syncIdSet choice, cookie
      * but no UUID set
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncInfoValueControlSyncIdSetCookieNoSet() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x07 );
@@ -533,7 +538,11 @@
         SyncInfoValueFactory factory = ( SyncInfoValueFactory ) codec.getIntermediateResponseFactories().
             get( SyncInfoValue.OID );
         SyncInfoValue syncInfoValue = factory.newResponse();
-        factory.decodeValue( syncInfoValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncInfoValue, bb.array() );
+        } );
     }
 
 
@@ -541,7 +550,7 @@
      * Test the decoding of a SyncInfoValue control, syncIdSet choice, no cookie
      * a refreshDeletes flag, but no UUID set
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncInfoValueControlSyncIdSetNoCookieRefreshDeletesNoSet() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x05 );
@@ -556,7 +565,11 @@
         SyncInfoValueFactory factory = ( SyncInfoValueFactory ) codec.getIntermediateResponseFactories().
             get( SyncInfoValue.OID );
         SyncInfoValue syncInfoValue = factory.newResponse();
-        factory.decodeValue( syncInfoValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncInfoValue, bb.array() );
+        } );
     }
 
 
@@ -564,7 +577,7 @@
      * Test the decoding of a SyncInfoValue control, syncIdSet choice, a cookie
      * a refreshDeletes flag, but no UUID set
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncInfoValueControlSyncIdSetCookieRefreshDeletesNoSet() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x0A );
@@ -581,7 +594,11 @@
         SyncInfoValueFactory factory = ( SyncInfoValueFactory ) codec.getIntermediateResponseFactories().
             get( SyncInfoValue.OID );
         SyncInfoValue syncInfoValue = factory.newResponse();
-        factory.decodeValue( syncInfoValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncInfoValue, bb.array() );
+        } );
     }
 
 
@@ -1006,7 +1023,7 @@
      * Test the decoding of a SyncInfoValue control, syncIdSet choice, with some
      * invalid UUID
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncInfoValueControlSyncIdSetTooSmallUUID() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x1D );
@@ -1027,7 +1044,11 @@
         SyncInfoValueFactory factory = ( SyncInfoValueFactory ) codec.getIntermediateResponseFactories().
             get( SyncInfoValue.OID );
         SyncInfoValue syncInfoValue = factory.newResponse();
-        factory.decodeValue( syncInfoValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncInfoValue, bb.array() );
+        } );
     }
 
 
@@ -1035,7 +1056,7 @@
      * Test the decoding of a SyncInfoValue control, syncIdSet choice, with some
      * invalid UUID
      */
-    @Test( expected=DecoderException.class )
+    @Test
     public void testDecodeSyncInfoValueControlSyncIdSetTooLongUUID() throws DecoderException
     {
         ByteBuffer bb = ByteBuffer.allocate( 0x20 );
@@ -1057,6 +1078,10 @@
         SyncInfoValueFactory factory = ( SyncInfoValueFactory ) codec.getIntermediateResponseFactories().
             get( SyncInfoValue.OID );
         SyncInfoValue syncInfoValue = factory.newResponse();
-        factory.decodeValue( syncInfoValue, bb.array() );
+        
+        assertThrows( DecoderException.class, ( ) ->
+        {
+            factory.decodeValue( syncInfoValue, bb.array() );
+        } );
     }
 }
diff --git a/ldap/extras/pom.xml b/ldap/extras/pom.xml
index c318a66..250effa 100644
--- a/ldap/extras/pom.xml
+++ b/ldap/extras/pom.xml
@@ -25,7 +25,7 @@
   </parent>
   
   <artifactId>api-ldap-extras-parent</artifactId>
-  <name>Apache Directory LDAP API Extras</name>
+  <name>Apache Directory LDAP API Extras Parent</name>
   <packaging>pom</packaging>
 
   <modules>
diff --git a/ldap/extras/sp/pom.xml b/ldap/extras/sp/pom.xml
index 5607cd7..7dce2bc 100644
--- a/ldap/extras/sp/pom.xml
+++ b/ldap/extras/sp/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/ldap/extras/trigger/pom.xml b/ldap/extras/trigger/pom.xml
index e1d3f9c..012e20b 100644
--- a/ldap/extras/trigger/pom.xml
+++ b/ldap/extras/trigger/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/ldap/extras/trigger/src/test/java/org/apache/directory/api/ldap/trigger/TriggerSpecificationParserTest.java b/ldap/extras/trigger/src/test/java/org/apache/directory/api/ldap/trigger/TriggerSpecificationParserTest.java
index 3bdcd9a..931ed1d 100644
--- a/ldap/extras/trigger/src/test/java/org/apache/directory/api/ldap/trigger/TriggerSpecificationParserTest.java
+++ b/ldap/extras/trigger/src/test/java/org/apache/directory/api/ldap/trigger/TriggerSpecificationParserTest.java
@@ -21,15 +21,12 @@
 package org.apache.directory.api.ldap.trigger;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.List;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.message.SearchScope;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.trigger.ActionTime;
@@ -39,9 +36,10 @@
 import org.apache.directory.api.ldap.trigger.StoredProcedureSearchContextOption;
 import org.apache.directory.api.ldap.trigger.TriggerSpecification;
 import org.apache.directory.api.ldap.trigger.TriggerSpecificationParser;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.apache.directory.api.ldap.trigger.TriggerSpecification.SPSpec;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
 
 /**
@@ -49,8 +47,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class TriggerSpecificationParserTest
 {
 
diff --git a/ldap/extras/util/pom.xml b/ldap/extras/util/pom.xml
index 87232cf..d6ab270 100644
--- a/ldap/extras/util/pom.xml
+++ b/ldap/extras/util/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
 
diff --git a/ldap/extras/util/src/test/java/org/apache/directory/api/ldap/util/tree/TestDnNode.java b/ldap/extras/util/src/test/java/org/apache/directory/api/ldap/util/tree/TestDnNode.java
index e20ac02..0d320d3 100644
--- a/ldap/extras/util/src/test/java/org/apache/directory/api/ldap/util/tree/TestDnNode.java
+++ b/ldap/extras/util/src/test/java/org/apache/directory/api/ldap/util/tree/TestDnNode.java
@@ -20,25 +20,24 @@
 package org.apache.directory.api.ldap.util.tree;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.List;
 import java.util.Map;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.ldap.util.tree.DnNode;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -46,8 +45,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT)
 public class TestDnNode
 {
     //---------------------------------------------------------------------------
@@ -56,12 +54,15 @@
     /**
      * Test the addition of a null Dn
      */
-    @Test(expected = LdapUnwillingToPerformException.class)
+    @Test
     public void testAddNullDNNoElem() throws LdapException
     {
         DnNode<Dn> tree = new DnNode<Dn>();
 
-        tree.add( null );
+        assertThrows( LdapUnwillingToPerformException.class, () ->
+        {
+            tree.add( null );
+        } );
     }
 
 
@@ -172,7 +173,7 @@
     /**
      * Test the addition of two equal DNs
      */
-    @Test(expected = LdapUnwillingToPerformException.class)
+    @Test
     public void testAdd2EqualDNsNoElem() throws LdapException
     {
         DnNode<Dn> tree = new DnNode<Dn>();
@@ -180,7 +181,12 @@
         Dn dn2 = new Dn( "dc=b,dc=a" );
 
         tree.add( dn1 );
-        tree.add( dn2 );
+
+
+        assertThrows( LdapUnwillingToPerformException.class, () ->
+        {
+            tree.add( dn2 );
+        } );
     }
 
 
@@ -190,12 +196,16 @@
     /**
      * Test the addition of a null Dn
      */
-    @Test(expected = LdapUnwillingToPerformException.class)
+    @Test
     public void testAddNullDN() throws LdapException
     {
         DnNode<Dn> tree = new DnNode<Dn>();
 
-        tree.add( ( Dn ) null, null );
+
+        assertThrows( LdapUnwillingToPerformException.class, () ->
+        {
+            tree.add( ( Dn ) null, null );
+        } );
     }
 
 
@@ -306,7 +316,7 @@
     /**
      * Test the addition of two equal DNs
      */
-    @Test(expected = LdapUnwillingToPerformException.class)
+    @Test
     public void testAdd2EqualDNs() throws LdapException
     {
         DnNode<Dn> tree = new DnNode<Dn>();
@@ -314,7 +324,11 @@
         Dn dn2 = new Dn( "dc=b,dc=a" );
 
         tree.add( dn1, dn1 );
-        tree.add( dn2, dn2 );
+
+        assertThrows( LdapUnwillingToPerformException.class, () ->
+        {
+            tree.add( dn2, dn2 );
+        } );
     }
 
 
diff --git a/ldap/model/pom.xml b/ldap/model/pom.xml
index 473568b..9dad8e9 100644
--- a/ldap/model/pom.xml
+++ b/ldap/model/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
@@ -71,6 +77,7 @@
       <artifactId>antlr</artifactId>
       <scope>provided</scope>
     </dependency>
+    
     <dependency>
       <groupId>org.apache.servicemix.bundles</groupId>
       <artifactId>org.apache.servicemix.bundles.antlr</artifactId>
@@ -129,6 +136,13 @@
             <exclude>**/Abstract*</exclude>
             <exclude>**/*RegressionTest*</exclude>
           </excludes>
+          <parallel>all</parallel>
+          <threadCount>10</threadCount>
+          <properties>
+            <configurationParameters>
+              junit.jupiter.execution.parallel.enabled=true
+            </configurationParameters>
+          </properties>
         </configuration>
       </plugin>
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnFactoryTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnFactoryTest.java
index 70db221..587249e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnFactoryTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnFactoryTest.java
@@ -21,15 +21,13 @@
 package org.apache.directory.api.ldap.model.csn;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.csn.Csn;
 import org.apache.directory.api.ldap.model.csn.CsnFactory;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CsnFactoryTest
 {
     private static final int NUM_GENERATES = 10;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnTest.java
index 659c938..b954d12 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/csn/CsnTest.java
@@ -20,9 +20,9 @@
 package org.apache.directory.api.ldap.model.csn;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
@@ -32,11 +32,9 @@
 
 import org.apache.directory.api.ldap.model.csn.Csn;
 import org.apache.directory.api.ldap.model.csn.InvalidCSNException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -45,8 +43,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CsnTest
 {
     private static final SimpleDateFormat SDF = new SimpleDateFormat( "yyyyMMddHHmmss.123456'Z'", Locale.ROOT );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/cursor/ListCursorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/cursor/ListCursorTest.java
index 157bc95..a2c385e 100755
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/cursor/ListCursorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/cursor/ListCursorTest.java
@@ -23,17 +23,15 @@
 import java.util.Collections;
 import java.util.List;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.cursor.Cursor;
 import org.apache.directory.api.ldap.model.cursor.ListCursor;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.fail;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
 /**
@@ -43,8 +41,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ListCursorTest
 {
     @Test
@@ -244,7 +241,7 @@
     {
         try
         {
-            assertEquals( msg, expected, cursor.isClosed() );
+            assertEquals( expected, cursor.isClosed(), msg );
         }
         catch ( Exception e )
         {
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeSerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeSerializationTest.java
index 05cf71a..4971d75 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeSerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -31,20 +31,17 @@
 
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the EntryAttribute Serialization
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeSerializationTest
 {
     private static byte[] data1 = new byte[]
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeTest.java
index f56aa25..75e6e0e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeTest.java
@@ -19,12 +19,13 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -40,12 +41,11 @@
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -53,8 +53,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeTest
 {
     private static final Value NULL_STRING_VALUE = new Value( ( String ) null );
@@ -157,7 +156,7 @@
     /**
      * @throws java.lang.Exception
      */
-    @BeforeClass
+    @BeforeAll
     public static void setUpBeforeClass() throws Exception
     {
     }
@@ -1527,10 +1526,12 @@
     /**
      * test that we properly throw an exception, and not a NPE, when no AttributeType is provided.
      */
-    @Test( expected=IllegalArgumentException.class )
+    @Test
     public void testNullAT() throws LdapInvalidAttributeValueException
     {
-        AttributeType attributeType = new AttributeType("mail");
-        new Value(attributeType, "test@test.com");
+        AttributeType attributeType = new AttributeType( "mail" );
+        assertThrows( IllegalArgumentException.class, () -> {
+            new Value( attributeType, "test@test.com" );
+        } );
     }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeUtilsTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeUtilsTest.java
index 29d7a70..f823be4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeUtilsTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/AttributeUtilsTest.java
@@ -20,10 +20,10 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -39,12 +39,11 @@
 import org.apache.directory.api.ldap.model.entry.Value;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -52,8 +51,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeUtilsTest
 {
 
@@ -66,7 +64,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         byte[] b = Strings.getBytesUtf8( "aa" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueAttributeTypeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueAttributeTypeTest.java
index 70f36f9..9e1cc02 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueAttributeTypeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueAttributeTypeTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -44,12 +44,11 @@
 import org.apache.directory.api.ldap.model.schema.comparators.ByteArrayComparator;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OctetStringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -64,8 +63,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BinaryValueAttributeTypeTest
 {
     private LdapSyntax s;
@@ -82,7 +80,7 @@
      * Initialize an AttributeType and the associated MatchingRule
      * and Syntax
      */
-    @Before
+    @BeforeEach
     public void initAT()
     {
         s = EntryUtils.syntaxFactory( "1.1.1.1", false );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueTest.java
index 334f50b..a00135c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/BinaryValueTest.java
@@ -19,12 +19,12 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -43,12 +43,11 @@
 import org.apache.directory.api.ldap.model.schema.comparators.ByteArrayComparator;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OctetStringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -57,8 +56,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BinaryValueTest
 {
     private static final byte[] BYTES1 = new byte[]
@@ -78,7 +76,7 @@
      * Initialize an AttributeType and the associated MatchingRule
      * and Syntax
      */
-    @Before
+    @BeforeEach
     public void initAT()
     {
         s = EntryUtils.syntaxFactory( "1.1.1.1", false );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/DnValueTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/DnValueTest.java
index 031aaea..c795204 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/DnValueTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/DnValueTest.java
@@ -19,18 +19,17 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.comparators.DnComparator;
 import org.apache.directory.api.ldap.model.schema.normalizers.DnNormalizer;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DnSyntaxChecker;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -38,8 +37,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DnValueTest
 {
     private static EntryUtils.S s;
@@ -51,7 +49,7 @@
      * Initialize an AttributeType and the associated MatchingRule 
      * and Syntax
      */
-    @BeforeClass
+    @BeforeAll
     public static void initAT()
     {
         s = new EntryUtils.S( "1.1.1.1", true );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntrySerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntrySerializationTest.java
index c8c35b7..e304d9f 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntrySerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntrySerializationTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -30,20 +30,17 @@
 import java.io.ObjectOutputStream;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Entry Serialization
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class EntrySerializationTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntryTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntryTest.java
index cb0d13d..3e15dda 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntryTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/EntryTest.java
@@ -19,14 +19,17 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -34,6 +37,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution(ExecutionMode.CONCURRENT)
 public class EntryTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ModificationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ModificationTest.java
index 40c1419..acf7111 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ModificationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ModificationTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -35,11 +35,10 @@
 import org.apache.directory.api.ldap.model.entry.Modification;
 import org.apache.directory.api.ldap.model.entry.ModificationOperation;
 import org.apache.directory.api.ldap.model.exception.LdapException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -47,8 +46,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ModificationTest
 {
     /**
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueAttributeTypeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueAttributeTypeTest.java
index b80ba69..e638c0f 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueAttributeTypeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueAttributeTypeTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -46,12 +46,11 @@
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.NoOpNormalizer;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OctetStringSyntaxChecker;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -66,8 +65,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class StringValueAttributeTypeTest
 {
     private EntryUtils.S s;
@@ -79,7 +77,7 @@
      * Initialize an AttributeType and the associated MatchingRule 
      * and Syntax
      */
-    @Before
+    @BeforeEach
     public void initAT()
     {
         s = new EntryUtils.S( "1.1.1.1", true );
@@ -480,7 +478,7 @@
         set.add( v3 );
 
         // check contains method
-        assertTrue( "since v1.equals( v0 ) and v0 was added then this should be true", set.contains( v1 ) );
+        assertTrue( set.contains( v1 ), "since v1.equals( v0 ) and v0 was added then this should be true" );
 
         // check ordering based on the comparator
         List<Value> list = new ArrayList<Value>();
@@ -492,10 +490,10 @@
         Collections.sort( list );
 
         // High, low, low, medium
-        assertTrue( "since v0 equals v1 either could be at index 0 & 1", list.get( 0 ).equals( v3 ) );
-        assertTrue( "since v0 equals v1 either could be at index 0 & 1", list.get( 1 ).equals( v0 ) );
-        assertTrue( "since v2 \"MEDIUM\" should be at index 2", list.get( 2 ).equals( v1 ) );
-        assertTrue( "since v3 \"HIGH\" should be at index 3", list.get( 3 ).equals( v2 ) );
+        assertTrue( list.get( 0 ).equals( v3 ), "since v0 equals v1 either could be at index 0 & 1" );
+        assertTrue( list.get( 1 ).equals( v0 ), "since v0 equals v1 either could be at index 0 & 1" );
+        assertTrue( list.get( 2 ).equals( v1 ), "since v2 \"MEDIUM\" should be at index 2" );
+        assertTrue( list.get( 3 ).equals( v2 ), "since v3 \"HIGH\" should be at index 3" );
 
         assertEquals( 4, list.size() );
     }
@@ -540,8 +538,8 @@
         set.add( v4 );
 
         // check contains method
-        assertTrue( "since v1.equals( v0 ) and v0 was added then this should be true", set.contains( v1 ) );
-        assertTrue( "since v4.equals( v5 ) and v4 was added then this should be true", set.contains( v5 ) );
+        assertTrue( set.contains( v1 ), "since v1.equals( v0 ) and v0 was added then this should be true" );
+        assertTrue( set.contains( v5 ), "since v4.equals( v5 ) and v4 was added then this should be true" );
 
         // check ordering based on the comparator
         ArrayList<Value> list = new ArrayList<Value>();
@@ -584,18 +582,18 @@
 
         Collections.sort( list, c );
 
-        assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v4 ) );
-        assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 0 ).equals( v5 ) );
-        assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v4 ) );
-        assertTrue( "since v4 equals v5 and has no value either could be at index 0 & 1", list.get( 1 ).equals( v5 ) );
+        assertTrue( list.get( 0 ).equals( v4 ), "since v4 equals v5 and has no value either could be at index 0 & 1" );
+        assertTrue( list.get( 0 ).equals( v5 ), "since v4 equals v5 and has no value either could be at index 0 & 1" );
+        assertTrue( list.get( 1 ).equals( v4 ), "since v4 equals v5 and has no value either could be at index 0 & 1" );
+        assertTrue( list.get( 1 ).equals( v5 ), "since v4 equals v5 and has no value either could be at index 0 & 1" );
 
-        assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v0 ) );
-        assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 2 ).equals( v1 ) );
-        assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v0 ) );
-        assertTrue( "since v0 equals v1 either could be at index 2 & 3", list.get( 3 ).equals( v1 ) );
+        assertTrue( list.get( 2 ).equals( v0 ), "since v0 equals v1 either could be at index 2 & 3" );
+        assertTrue( list.get( 2 ).equals( v1 ), "since v0 equals v1 either could be at index 2 & 3" );
+        assertTrue( list.get( 3 ).equals( v0 ), "since v0 equals v1 either could be at index 2 & 3" );
+        assertTrue( list.get( 3 ).equals( v1 ), "since v0 equals v1 either could be at index 2 & 3" );
 
-        assertTrue( "since v2 \"next0\" should be at index 4", list.get( 4 ).equals( v2 ) );
-        assertTrue( "since v3 \"next1\" should be at index 5", list.get( 5 ).equals( v3 ) );
+        assertTrue( list.get( 4 ).equals( v2 ), "since v2 \"next0\" should be at index 4" );
+        assertTrue( list.get( 5 ).equals( v3 ), "since v3 \"next1\" should be at index 5" );
 
         assertEquals( 6, list.size() );
     }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueTest.java
index e5ad956..891bd55 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/StringValueTest.java
@@ -19,12 +19,12 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -39,12 +39,11 @@
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DirectoryStringSyntaxChecker;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.Ia5StringSyntaxChecker;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -53,8 +52,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class StringValueTest
 {
     private static EntryUtils.S s;
@@ -66,7 +64,7 @@
      * Initialize an AttributeType and the associated MatchingRule 
      * and Syntax
      */
-    @BeforeClass
+    @BeforeAll
     public static void initAT()
     {
         s = new EntryUtils.S( "1.1.1.1", true );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ValueSerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ValueSerializationTest.java
index 3371b20..e5de8b1 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ValueSerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/entry/ValueSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.entry;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -38,22 +38,19 @@
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OctetStringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Value Serialization
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ValueSerializationTest
 {
     private static byte[] data = new byte[]
@@ -84,7 +81,7 @@
      * Initialize an AttributeType and the associated MatchingRule 
      * and Syntax
      */
-    @Before
+    @BeforeEach
     public void initAT()
     {
         sb = new EntryUtils.S( "1.1.1.1", false );
@@ -493,7 +490,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testStringValueWithDataNormalizedSerializationPerf() throws IOException, LdapException,
         ClassNotFoundException
@@ -521,7 +518,7 @@
     }
 
 
-    @Ignore
+    @Disabled
     @Test
     public void testStringValueWithDataNormalizedSerializationBytesPerf() throws IOException, LdapException,
         ClassNotFoundException
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionClassifierTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionClassifierTest.java
index 0fd06a4..04802a2 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionClassifierTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionClassifierTest.java
@@ -33,9 +33,13 @@
 import java.security.cert.CertificateNotYetValidException;
 
 import org.apache.directory.api.ldap.model.exception.LdapTlsHandshakeFailCause.LdapApiReason;
-import org.junit.Test;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapTlsHandshakeExceptionClassifierTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionTest.java
index 2309b11..26945f3 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/exception/LdapTlsHandshakeExceptionTest.java
@@ -27,12 +27,16 @@
 import java.security.cert.CertPathBuilderException;
 import java.security.cert.CertPathValidatorException;
 import java.security.cert.CertPathValidatorException.BasicReason;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
 import java.security.cert.CertificateExpiredException;
 import java.security.cert.CertificateNotYetValidException;
 
-import org.junit.Test;
 
-
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapTlsHandshakeExceptionTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java
index 7ca1152..d2d145e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/BranchNormalizedVisitorTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+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 org.apache.directory.api.ldap.model.filter.FilterParser;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BranchNormalizedVisitorTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java
index 761b08f..1e5d256 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterCloneTest.java
@@ -20,19 +20,17 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.text.ParseException;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.filter.FilterParser;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -40,8 +38,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FilterCloneTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterEncoderTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterEncoderTest.java
index db68a68..b41cba7 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterEncoderTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterEncoderTest.java
@@ -20,11 +20,14 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -32,6 +35,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution(ExecutionMode.CONCURRENT)
 public class FilterEncoderTest
 {
 
@@ -52,17 +56,23 @@
     }
 
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testFormatWithNoPlaceholdersAndTooManyArguments()
     {
-        FilterEncoder.format( "(cn=foo)", ONE );
+        assertThrows( IllegalArgumentException.class, () -> 
+        {
+            FilterEncoder.format( "(cn=foo)", ONE );
+        } );
     }
 
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testFormatWithPlaceholdersAndTooFewArguments()
     {
-        FilterEncoder.format( "(cn={0})", ZERO );
+        assertThrows( IllegalArgumentException.class, () -> 
+        {
+            FilterEncoder.format( "(cn={0})", ZERO );
+        } );
     }
 
 
@@ -74,10 +84,13 @@
     }
 
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testFormatWithPlaceholdersAndTooManyArguments()
     {
-        FilterEncoder.format( "(cn={0})", TWO );
+        assertThrows( IllegalArgumentException.class, () -> 
+        {
+            FilterEncoder.format( "(cn={0})", TWO );
+        } );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterNodeEqualityTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterNodeEqualityTest.java
index 3c3f05a..8db79a5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterNodeEqualityTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterNodeEqualityTest.java
@@ -20,15 +20,14 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.exception.LdapSchemaException;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 
 /**
@@ -36,8 +35,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FilterNodeEqualityTest
 {
     @Test
@@ -46,21 +44,21 @@
         EqualityNode<String> eqNode1 = new EqualityNode<String>( "attr1", "test" );
         EqualityNode<String> eqNode2 = new EqualityNode<String>( "attr1", "test" );
 
-        assertEquals( "two exact nodes should be equal", eqNode1, eqNode2 );
+        assertEquals( eqNode1, eqNode2, "two exact nodes should be equal" );
 
         eqNode2 = new EqualityNode<String>( "attr2", "test" );
-        assertFalse( "different attribute in node should return false on equals()", eqNode1.equals( eqNode2 ) );
+        assertFalse( eqNode1.equals( eqNode2 ), "different attribute in node should return false on equals()" );
 
         eqNode2 = new EqualityNode<String>( "attr2", "foobar" );
-        assertFalse( "different value in node should return false on equals()", eqNode1.equals( eqNode2 ) );
+        assertFalse( eqNode1.equals( eqNode2 ), "different value in node should return false on equals()" );
 
         PresenceNode presenceNode = new PresenceNode( "attr1" );
-        assertFalse( "two different leaf nodes should not be equal", eqNode1.equals( presenceNode ) );
-        assertFalse( "two different leaf nodes should not be equal", presenceNode.equals( eqNode1 ) );
+        assertFalse( eqNode1.equals( presenceNode ), "two different leaf nodes should not be equal" );
+        assertFalse( presenceNode.equals( eqNode1 ), "two different leaf nodes should not be equal" );
 
         GreaterEqNode<String> greaterEqNode = new GreaterEqNode<String>( "attr1", "test" );
-        assertFalse( "two different simple nodes should not be equal", eqNode1.equals( greaterEqNode ) );
-        assertFalse( "two different simple nodes should not be equal", greaterEqNode.equals( eqNode1 ) );
+        assertFalse( eqNode1.equals( greaterEqNode ), "two different simple nodes should not be equal" );
+        assertFalse( greaterEqNode.equals( eqNode1 ), "two different simple nodes should not be equal" );
     }
 
 
@@ -70,14 +68,14 @@
         GreaterEqNode<String> greaterEqNode1 = new GreaterEqNode<String>( "attr1", "test" );
         GreaterEqNode<String> greaterEqNode2 = new GreaterEqNode<String>( "attr1", "test" );
 
-        assertEquals( "two exact nodes should be equal", greaterEqNode1, greaterEqNode2 );
+        assertEquals( greaterEqNode1, greaterEqNode2, "two exact nodes should be equal" );
 
         greaterEqNode2 = new GreaterEqNode<String>( "attr2", "test" );
-        assertFalse( "different attribute in node should return false on equals()", greaterEqNode1
-            .equals( greaterEqNode2 ) );
+        assertFalse( greaterEqNode1
+            .equals( greaterEqNode2 ), "different attribute in node should return false on equals()" );
 
         greaterEqNode2 = new GreaterEqNode<String>( "attr2", "foobar" );
-        assertFalse( "different value in node should return false on equals()", greaterEqNode1.equals( greaterEqNode2 ) );
+        assertFalse( greaterEqNode1.equals( greaterEqNode2 ), "different value in node should return false on equals()" );
     }
 
 
@@ -87,13 +85,13 @@
         LessEqNode<String> lessEqNode1 = new LessEqNode<String>( "attr1", "test" );
         LessEqNode<String> lessEqNode2 = new LessEqNode<String>( "attr1", "test" );
 
-        assertEquals( "two exact nodes should be equal", lessEqNode1, lessEqNode2 );
+        assertEquals( lessEqNode1, lessEqNode2, "two exact nodes should be equal" );
 
         lessEqNode2 = new LessEqNode<String>( "attr2", "test" );
-        assertFalse( "different attribute in node should return false on equals()", lessEqNode1.equals( lessEqNode2 ) );
+        assertFalse( lessEqNode1.equals( lessEqNode2 ), "different attribute in node should return false on equals()" );
 
         lessEqNode2 = new LessEqNode<String>( "attr2", "foobar" );
-        assertFalse( "different value in node should return false on equals()", lessEqNode1.equals( lessEqNode2 ) );
+        assertFalse( lessEqNode1.equals( lessEqNode2 ), "different value in node should return false on equals()" );
     }
 
 
@@ -103,15 +101,15 @@
         ApproximateNode<String> approximateNode1 = new ApproximateNode<String>( "attr1", "test" );
         ApproximateNode<String> approximateNode2 = new ApproximateNode<String>( "attr1", "test" );
 
-        assertEquals( "two exact nodes should be equal", approximateNode1, approximateNode2 );
+        assertEquals( approximateNode1, approximateNode2, "two exact nodes should be equal" );
 
         approximateNode2 = new ApproximateNode<String>( "attr2", "test" );
-        assertFalse( "different attribute in node should return false on equals()", approximateNode1
-            .equals( approximateNode2 ) );
+        assertFalse( approximateNode1
+            .equals( approximateNode2 ), "different attribute in node should return false on equals()" );
 
         approximateNode2 = new ApproximateNode<String>( "attr2", "foobar" );
-        assertFalse( "different value in node should return false on equals()", approximateNode1
-            .equals( approximateNode2 ) );
+        assertFalse( approximateNode1
+            .equals( approximateNode2 ), "different value in node should return false on equals()" );
     }
 
 
@@ -121,10 +119,10 @@
         PresenceNode presenceNode1 = new PresenceNode( "attr1" );
         PresenceNode presenceNode2 = new PresenceNode( "attr1" );
 
-        assertEquals( "two exact presence nodes on same attribute should be equal", presenceNode1, presenceNode2 );
+        assertEquals( presenceNode1, presenceNode2, "two exact presence nodes on same attribute should be equal" );
 
         presenceNode2 = new PresenceNode( "attr2" );
-        assertFalse( "presence nodes on different attributes should not be equal", presenceNode1.equals( presenceNode2 ) );
+        assertFalse( presenceNode1.equals( presenceNode2 ), "presence nodes on different attributes should not be equal" );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java
index be6e6b0..95d8a21 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterParserTest.java
@@ -20,25 +20,25 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 import java.text.ParseException;
 import java.util.List;
 import java.util.Locale;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.entry.Value;
 import org.apache.directory.api.ldap.model.filter.FilterParser;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
 
 
 /**
@@ -46,8 +46,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FilterParserTest
 {
     private boolean checkWrongFilter( String filter )
@@ -1111,11 +1110,15 @@
     }
 
 
-    @Test(expected = ParseException.class)
+    @Test
     public void testEqualsFilterWithUnderscoreNotRelaxed() throws ParseException
     {
         String str = "(a_b_=people)";
-        FilterParser.parse( str, false );
+        
+        assertThrows( ParseException.class, () -> 
+        {
+            FilterParser.parse( str, false );
+        } );
     }
 
 
@@ -1131,11 +1134,15 @@
     }
 
 
-    @Test(expected = ParseException.class)
+    @Test
     public void testAndFilterWithUnderscoreNotRelaxed() throws ParseException
     {
         String str = "(&(o_u~=people)(a_g_e>=30))";
-        FilterParser.parse( str, false );
+        
+        assertThrows( ParseException.class, () -> 
+        {
+            FilterParser.parse( str, false );
+        } );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java
index ac3fa23..5fd5b0a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/FilterToStringTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.text.ParseException;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.filter.FilterParser;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FilterToStringTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/SubstringNodeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/SubstringNodeTest.java
index 5a269b0..8771517 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/SubstringNodeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/SubstringNodeTest.java
@@ -20,15 +20,14 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 import java.util.regex.Pattern;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 
 /**
@@ -36,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SubstringNodeTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java
index 59af973..47148b4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/filter/UndefinedNodeTest.java
@@ -21,18 +21,17 @@
 package org.apache.directory.api.ldap.model.filter;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.util.List;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.filter.FilterVisitor;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -40,8 +39,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class UndefinedNodeTest
 {
     ExprNode undefinedNode = UndefinedNode.UNDEFINED_NODE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReaderTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReaderTest.java
index 32670e5..de59d69 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReaderTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifAttributesReaderTest.java
@@ -20,17 +20,19 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.DataOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 
 import javax.naming.NamingException;
 import javax.naming.directory.Attributes;
@@ -42,50 +44,50 @@
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.ldif.LdapLdifException;
 import org.apache.directory.api.ldap.model.ldif.LdifAttributesReader;
+import org.apache.directory.api.util.FileUtils;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 
 
 /**
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifAttributesReaderTest
 {
-    /** Uses a temporary folder rule */
-    @Rule 
-    public TemporaryFolder tmpFolder= new TemporaryFolder();
-
     private byte[] data;
 
     private File HJENSEN_JPEG_FILE = null;
+    
+    private File jpegFile;
+    
+    private File tmpFolder;
 
 
     private File createFile( String name, byte[] data ) throws IOException
     {
-        File jpeg = tmpFolder.newFile( name + ".jpg" );
+        Path tmpFolder = Files.createTempDirectory( LdifAttributesReaderTest.class.getSimpleName() );
+        
+        jpegFile = File.createTempFile( tmpFolder.toString(), name + ".jpg" );
 
-        DataOutputStream os = new DataOutputStream( new FileOutputStream( jpeg ) );
+        DataOutputStream os = new DataOutputStream( new FileOutputStream( jpegFile ) );
 
         os.write( data );
         os.close();
 
-        return jpeg;
+        return jpegFile;
     }
 
 
     /**
      * Create a file to be used by ":<" values
      */
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         data = new byte[256];
@@ -97,6 +99,14 @@
 
         HJENSEN_JPEG_FILE = createFile( "hjensen", data );
     }
+    
+    
+    @AfterEach
+    public void cleanup()
+    {
+        FileUtils.deleteQuietly( jpegFile );
+        FileUtils.deleteQuietly( tmpFolder );
+    }
 
 
     @Test
@@ -714,8 +724,8 @@
         }
         catch ( LdapLdifException ne )
         {
-            assertTrue( I18n.err( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER ), ne.getMessage().startsWith(
-                I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER.getErrorCode() ) );
+            assertTrue( ne.getMessage().startsWith( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER.getErrorCode() ),
+                I18n.err( I18n.ERR_13442_ERROR_PARSING_LDIF_BUFFER ) );
         }
 
         reader.close();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifControlSerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifControlSerializationTest.java
index 03bac6f..786453e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifControlSerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifControlSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -32,12 +32,11 @@
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.ldap.model.message.controls.OpaqueControl;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -45,8 +44,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifControlSerializationTest
 {
     private static Control controlCriticalWithData;
@@ -59,7 +57,7 @@
         { 0x01, 0x02, 0x03, 0x04 };
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup()
     {
         controlCriticalWithData = new OpaqueControl( "1.2.3.4.1" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntrySerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntrySerializationTest.java
index 70baae6..fdb3c36 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntrySerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntrySerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -28,11 +28,9 @@
 import java.io.ObjectOutputStream;
 
 import org.apache.directory.api.ldap.model.ldif.LdifEntry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -40,8 +38,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifEntrySerializationTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntryTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntryTest.java
index 270363c..991d4b7 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntryTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifEntryTest.java
@@ -20,11 +20,12 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultEntry;
@@ -38,29 +39,29 @@
 import org.apache.directory.api.ldap.model.ldif.LdifEntry;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the LdifEntry class
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifEntryTest
 {
     /**
      * Check that we can't create an empty LdifEntry
      */
-    @Test(expected = LdapInvalidAttributeValueException.class)
+    @Test
     public void testLdifEntryEmpty() throws Exception
     {
-        new LdifEntry( "", "" );
+        assertThrows( LdapInvalidAttributeValueException.class, () ->
+        {
+            new LdifEntry( "", "" );
+        } );
     }
 
 
@@ -156,7 +157,7 @@
      * 
      * @throws Exception
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifParserChangeTypeDeleteNoControlAttribute() throws Exception
     {
         String ldif =
@@ -167,7 +168,10 @@
                 "changetype: delete\n" +
                 "cn: bad !!\n";
 
-        new LdifEntry( "ou=Product Development, dc=airius, dc=com", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "ou=Product Development, dc=airius, dc=com", ldif );
+        } );
     }
 
 
@@ -383,28 +387,34 @@
     /**
      * Test a ModDn changeType LdifEntry with no newRdn
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifEntryChangeTypeModDnNoNewRdn() throws Exception
     {
         String ldif =
             "changetype: moddn\n" +
                 "deleteoldrdn: 1\n";
 
-        new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        } );
     }
 
 
     /**
      * Test a ModDn changeType LdifEntry with no deleteOldRdn flag
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifEntryChangeTypeModDnNoDeleteOldRdn() throws Exception
     {
         String ldif =
             "changetype: moddn\n" +
                 "newrdn: cn=app2\n";
 
-        new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        } );
     }
 
 
@@ -550,7 +560,7 @@
     /**
      * Test a Modify changeType LdifEntry with no end separator ("-")
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifEntryChangeTypeModifyNoEndSeparator() throws Exception
     {
         String ldif =
@@ -559,7 +569,10 @@
                 "cn: v1\n" +
                 "cn: v2\n";
 
-        new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        } );
     }
 
 
@@ -636,7 +649,7 @@
     /**
      * Test a Modify changeType LdifEntry with no operation
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifEntryChangeTypeModifyNoOperator() throws Exception
     {
         String ldif =
@@ -645,7 +658,10 @@
                 "dn: v2\n" +
                 "-";
 
-        new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        } );
     }
 
 
@@ -688,7 +704,7 @@
     /**
      * Test a Modify changeType LdifEntry with a different attribute used
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifEntryChangeTypeModifyNotSameAttr() throws Exception
     {
         String ldif =
@@ -698,14 +714,17 @@
                 "sn: v2\n" +
                 "-";
 
-        new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        } );
     }
 
 
     /**
      * Test a Modify changeType LdifEntry with a different attribute used
      */
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifEntryChangeTypeModifyNotSameAttr2() throws Exception
     {
         String ldif =
@@ -715,7 +734,10 @@
                 "sn: v2\n" +
                 "-";
 
-        new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        assertThrows( LdapLdifException.class, () ->
+        {
+            new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        } );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifReaderTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifReaderTest.java
index 8a2d5e2..9c91a73 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifReaderTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifReaderTest.java
@@ -26,6 +26,7 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.DataOutputStream;
 import java.io.File;
@@ -44,12 +45,10 @@
 import org.apache.directory.api.ldap.model.entry.ModificationOperation;
 import org.apache.directory.api.ldap.model.message.Control;
 import org.apache.directory.api.util.Strings;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -57,8 +56,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifReaderTest
 {
     private static byte[] data;
@@ -89,7 +87,7 @@
     /**
      * Create a file to be used by ":<" values
      */
-    @BeforeClass
+    @BeforeAll
     public static void setUp() throws Exception
     {
         data = new byte[256];
@@ -2067,7 +2065,7 @@
     }
 
 
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testChangeTypeDeleteBadEntry() throws Exception
     {
         String ldif =
@@ -2078,12 +2076,15 @@
 
         try ( LdifReader reader = new LdifReader() )
         {
-            reader.parseLdif( ldif );
+            assertThrows( LdapLdifException.class, () ->
+            {
+                reader.parseLdif( ldif );
+            } );
         }
     }
 
 
-    @Test(expected = LdapLdifException.class)
+    @Test
     public void testLdifContentWithControl() throws Exception
     {
         String ldif =
@@ -2094,7 +2095,10 @@
 
         try ( LdifReader reader = new LdifReader() )
         {
-            reader.parseLdif( ldif );
+            assertThrows( LdapLdifException.class, () ->
+            {
+                reader.parseLdif( ldif );
+            } );
         }
     }
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifRevertorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifRevertorTest.java
index f56e6b2..a759bf5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifRevertorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifRevertorTest.java
@@ -20,19 +20,16 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.entry.*;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
@@ -43,8 +40,9 @@
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -52,8 +50,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifRevertorTest
 {
     /**
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifUtilsTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifUtilsTest.java
index 025954d..7e9c72a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifUtilsTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/ldif/LdifUtilsTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.model.ldif;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.List;
 
@@ -49,11 +49,9 @@
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -61,8 +59,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdifUtilsTest
 {
     private String testString = "this is a test";
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractMessageTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractMessageTest.java
index 5abea12..69ad9d8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractMessageTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractMessageTest.java
@@ -20,15 +20,12 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for the AbstractMessage class' methods.
@@ -36,8 +33,7 @@
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  *         $Rev: 910150 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AbstractMessageTest
 {
     /**
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractResultResponseTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractResultResponseTest.java
index 65300f5..91e43a9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractResultResponseTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AbstractResultResponseTest.java
@@ -20,25 +20,21 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * TestCase for the methods of the AbstractResultResponse class.
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AbstractResultResponseTest
 {
     /**
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AddRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AddRequestImplTest.java
index e3bd95a..1eb66de 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AddRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/AddRequestImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
@@ -32,11 +32,9 @@
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -44,8 +42,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AddRequestImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindRequestImplTest.java
index 18f614b..8eb8f62 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindRequestImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
@@ -29,11 +29,9 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -42,8 +40,7 @@
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  *         $Rev: 923524 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BindRequestImplTest
 {
     private static final byte[] PASSWORD = Strings.getBytesUtf8( "password" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindResponseImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindResponseImplTest.java
index 6b19658..47ac704 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindResponseImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/BindResponseImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.message.BindResponseImpl;
@@ -31,12 +31,9 @@
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests the methods of the BindResponseImpl class.
@@ -44,8 +41,7 @@
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  *         $Rev: 946353 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BindResponseImplTest
 {
     private static final byte[] PASSWORD = Strings.getBytesUtf8( "password" );
@@ -58,7 +54,7 @@
     public void testEqualsSameObj()
     {
         BindResponseImpl resp = new BindResponseImpl( 1 );
-        assertTrue( "same object should be equal", resp.equals( resp ) );
+        assertTrue( resp.equals( resp ), "same object should be equal" );
     }
 
 
@@ -70,8 +66,8 @@
     {
         BindResponseImpl resp0 = new BindResponseImpl( 1 );
         BindResponseImpl resp1 = new BindResponseImpl( 1 );
-        assertTrue( "default copy with same id should be equal", resp0.equals( resp1 ) );
-        assertTrue( "default copy with same id should be equal", resp1.equals( resp0 ) );
+        assertTrue( resp0.equals( resp1 ), "default copy with same id should be equal" );
+        assertTrue( resp1.equals( resp0 ), "default copy with same id should be equal" );
     }
 
 
@@ -107,8 +103,8 @@
     {
         BindResponseImpl resp0 = new BindResponseImpl( 1 );
         BindResponseImpl resp1 = new BindResponseImpl( 2 );
-        assertFalse( "different id objects should not be equal", resp0.equals( resp1 ) );
-        assertFalse( "different id objects should not be equal", resp1.equals( resp0 ) );
+        assertFalse( resp0.equals( resp1 ), "different id objects should not be equal" );
+        assertFalse( resp1.equals( resp0 ), "different id objects should not be equal" );
     }
 
 
@@ -123,8 +119,8 @@
         resp0.setServerSaslCreds( new byte[2] );
         BindResponseImpl resp1 = new BindResponseImpl( 1 );
         resp1.setServerSaslCreds( new byte[3] );
-        assertFalse( "different serverSaslCreds objects should not be equal", resp0.equals( resp1 ) );
-        assertFalse( "different serverSaslCreds objects should not be equal", resp1.equals( resp0 ) );
+        assertFalse( resp0.equals( resp1 ), "different serverSaslCreds objects should not be equal" );
+        assertFalse( resp1.equals( resp0 ), "different serverSaslCreds objects should not be equal" );
     }
 
 
@@ -160,8 +156,8 @@
         resp0.setServerSaslCreds( PASSWORD );
         resp1.setServerSaslCreds( PASSWORD );
 
-        assertTrue( "loaded carbon copies should be equal", resp0.equals( resp1 ) );
-        assertTrue( "loaded carbon copies should be equal", resp1.equals( resp0 ) );
+        assertTrue( resp0.equals( resp1 ), "loaded carbon copies should be equal" );
+        assertTrue( resp1.equals( resp0 ), "loaded carbon copies should be equal" );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/CompareRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/CompareRequestImplTest.java
index 0d2f8c7..d496446 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/CompareRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/CompareRequestImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
@@ -29,11 +29,9 @@
 import org.apache.directory.api.ldap.model.entry.Value;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,8 +39,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CompareRequestImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/DeleteRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/DeleteRequestImplTest.java
index 895843a..d92c733 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/DeleteRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/DeleteRequestImplTest.java
@@ -20,19 +20,17 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -40,8 +38,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DeleteRequestImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedRequestImplTest.java
index 9150a95..c1d5454 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ExtendedRequestImplTest.java
@@ -20,23 +20,19 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * TestCase for the ExtendedRequestImpl class.
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ExtendedRequestImplTest
 {
     /**
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/LdapResultImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/LdapResultImplTest.java
index 2dc8d0b..38403a2 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/LdapResultImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/LdapResultImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.message.LdapResult;
@@ -30,11 +30,9 @@
 import org.apache.directory.api.ldap.model.message.ReferralImpl;
 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,8 +41,7 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  *         $Rev: 946251 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapResultImplTest
 {
     /**
@@ -54,7 +51,7 @@
     public void testEqualsSameObj()
     {
         LdapResultImpl r0 = new LdapResultImpl();
-        assertTrue( "same object should be equal", r0.equals( r0 ) );
+        assertTrue( r0.equals( r0 ), "same object should be equal" );
     }
 
 
@@ -68,8 +65,8 @@
         LdapResultImpl r0 = new LdapResultImpl();
         LdapResultImpl r1 = new LdapResultImpl();
 
-        assertTrue( "default copy should be equal", r0.equals( r1 ) );
-        assertTrue( "default copy should be equal", r1.equals( r0 ) );
+        assertTrue( r0.equals( r1 ), "default copy should be equal" );
+        assertTrue( r1.equals( r0 ), "default copy should be equal" );
     }
 
 
@@ -82,8 +79,8 @@
         LdapResultImpl r0 = new LdapResultImpl();
         LdapResultImpl r1 = new LdapResultImpl();
 
-        assertTrue( "default copy with different lockable parents " + "should be equal", r0.equals( r1 ) );
-        assertTrue( "default copy with different lockable parents " + "should be equal", r1.equals( r0 ) );
+        assertTrue( r0.equals( r1 ), "default copy with different lockable parents should be equal" );
+        assertTrue( r1.equals( r0 ), "default copy with different lockable parents should be equal" );
     }
 
 
@@ -153,8 +150,8 @@
             }
         };
 
-        assertTrue( "r0 equals should see other impl r1 as equal", r0.equals( r1 ) );
-        assertFalse( "r1 impl uses Object.equals() so it should not see " + "r0 as the same object", r1.equals( r0 ) );
+        assertTrue( r0.equals( r1 ), "r0 equals should see other impl r1 as equal" );
+        assertFalse( r1.equals( r0 ), "r1 impl uses Object.equals() so it should not see r0 as the same object" );
     }
 
 
@@ -184,8 +181,8 @@
         refs1.addLdapUrl( "ldap://someserver.com" );
         refs1.addLdapUrl( "ldap://anotherserver.org" );
 
-        assertTrue( "exact copy should be equal", r0.equals( r1 ) );
-        assertTrue( "exact copy should be equal", r1.equals( r0 ) );
+        assertTrue( r0.equals( r1 ), "exact copy should be equal" );
+        assertTrue( r1.equals( r0 ), "exact copy should be equal" );
     }
 
 
@@ -283,8 +280,8 @@
         refs1.addLdapUrl( "ldap://someserver.com" );
         refs1.addLdapUrl( "ldap://anotherserver.org" );
 
-        assertFalse( "results with different error messages should " + "not be equal", r0.equals( r1 ) );
-        assertFalse( "results with different error messages should " + "not be equal", r1.equals( r0 ) );
+        assertFalse( r0.equals( r1 ), "results with different error messages should not be equal" );
+        assertFalse( r1.equals( r0 ), "results with different error messages should not be equal" );
     }
 
 
@@ -314,8 +311,8 @@
         refs1.addLdapUrl( "ldap://someserver.com" );
         refs1.addLdapUrl( "ldap://anotherserver.org" );
 
-        assertFalse( "results with different matchedDn properties " + "should not be equal", r0.equals( r1 ) );
-        assertFalse( "results with different matchedDn properties " + "should not be equal", r1.equals( r0 ) );
+        assertFalse( r0.equals( r1 ), "results with different matchedDn properties should not be equal" );
+        assertFalse( r1.equals( r0 ), "results with different matchedDn properties should not be equal" );
     }
 
 
@@ -345,8 +342,8 @@
         refs1.addLdapUrl( "ldap://someserver.com" );
         refs1.addLdapUrl( "ldap://anotherserver.org" );
 
-        assertFalse( "results with different result codes should not be equal", r0.equals( r1 ) );
-        assertFalse( "results with different result codes should not be equal", r1.equals( r0 ) );
+        assertFalse( r0.equals( r1 ), "results with different result codes should not be equal" );
+        assertFalse( r1.equals( r0 ), "results with different result codes should not be equal" );
     }
 
 
@@ -378,7 +375,7 @@
         refs1.addLdapUrl( "ldap://abc.com" );
         refs1.addLdapUrl( "ldap://anotherserver.org" );
 
-        assertFalse( "results with different referrals should not be equal", r0.equals( r1 ) );
-        assertFalse( "results with different referrals should not be equal", r1.equals( r0 ) );
+        assertFalse( r0.equals( r1 ), "results with different referrals should not be equal" );
+        assertFalse( r1.equals( r0 ), "results with different referrals should not be equal" );
     }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyDnRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyDnRequestImplTest.java
index 87ed6a6..4b263c2 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyDnRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyDnRequestImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
@@ -29,20 +29,16 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * TestCase for the ModifyDnRequestImpl class.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ModifyDnRequestImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyRequestImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyRequestImplTest.java
index 858b832..bd9302a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyRequestImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ModifyRequestImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.ArrayList;
 import java.util.Collection;
@@ -37,11 +37,9 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -49,8 +47,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ModifyRequestImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java
index 016b689..596ba8a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/OpaqueExtendedResponseTest.java
@@ -20,20 +20,15 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.util.HashMap;
-import java.util.Map;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,13 +36,9 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class OpaqueExtendedResponseTest
 {
-    private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
-
-
     /**
      * Creates and populates a ExtendedResponseImpl stub for testing purposes.
      * 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ReferralImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ReferralImplTest.java
index a426d82..832e631 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ReferralImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/ReferralImplTest.java
@@ -20,19 +20,17 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.Collection;
 import java.util.Collections;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.message.Referral;
 import org.apache.directory.api.ldap.model.message.ReferralImpl;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,8 +39,7 @@
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  *         $Rev: 946251 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ReferralImplTest
 {
     /**
@@ -52,7 +49,7 @@
     public void testEqualsSameObject()
     {
         ReferralImpl refs = new ReferralImpl();
-        assertTrue( "equals method should work for the same object", refs.equals( refs ) );
+        assertTrue( refs.equals( refs ), "equals method should work for the same object" );
     }
 
 
@@ -71,8 +68,8 @@
         refs1.addLdapUrl( "ldap://blah0" );
         refs1.addLdapUrl( "ldap://blah1" );
         refs1.addLdapUrl( "ldap://blah2" );
-        assertTrue( "exact copies of Referrals should be equal", refs0.equals( refs1 ) );
-        assertTrue( "exact copies of Referrals should be equal", refs1.equals( refs0 ) );
+        assertTrue( refs0.equals( refs1 ), "exact copies of Referrals should be equal" );
+        assertTrue( refs1.equals( refs0 ), "exact copies of Referrals should be equal" );
     }
 
 
@@ -93,8 +90,8 @@
         refs1.addLdapUrl( "ldap://blah1" );
         refs1.addLdapUrl( "ldap://blah2" );
         refs1.addLdapUrl( "ldap://blah2" );
-        assertTrue( "exact copies of Referrals should be equal", refs0.equals( refs1 ) );
-        assertTrue( "exact copies of Referrals should be equal", refs1.equals( refs0 ) );
+        assertTrue( refs0.equals( refs1 ), "exact copies of Referrals should be equal" );
+        assertTrue( refs1.equals( refs0 ), "exact copies of Referrals should be equal" );
     }
 
 
@@ -166,8 +163,8 @@
         refs1.addLdapUrl( "ldap://blah1" );
         refs1.addLdapUrl( "ldap://blah2" );
         refs1.addLdapUrl( "ldap://blah4" );
-        assertFalse( "Referrals should not be equal", refs0.equals( refs1 ) );
-        assertFalse( "Referrals should not be equal", refs1.equals( refs0 ) );
+        assertFalse( refs0.equals( refs1 ), "Referrals should not be equal" );
+        assertFalse( refs1.equals( refs0 ), "Referrals should not be equal" );
     }
 
 
@@ -187,8 +184,8 @@
         ReferralImpl refs1 = new ReferralImpl();
         refs1.addLdapUrl( "ldap://blah0" );
         refs1.addLdapUrl( "ldap://blah1" );
-        assertFalse( "Referrals should not be equal", refs0.equals( refs1 ) );
-        assertFalse( "Referrals should not be equal", refs1.equals( refs0 ) );
+        assertFalse( refs0.equals( refs1 ), "Referrals should not be equal" );
+        assertFalse( refs1.equals( refs0 ), "Referrals should not be equal" );
     }
 
 
@@ -237,9 +234,9 @@
 
         ReferralImpl refs1 = new ReferralImpl();
 
-        assertFalse( "Object.equals() in effect because we did not redefine " + " equals for the new impl above", refs0
-            .equals( refs1 ) );
-        assertTrue( "Empty Referrals should be equal even if they are different" + " implementation classes", refs1
-            .equals( refs0 ) );
+        assertFalse( refs0.equals( refs1 ), 
+            "Object.equals() in effect because we did not redefine equals for the new impl above" );
+        assertTrue( refs1.equals( refs0 ), 
+            "Empty Referrals should be equal even if they are different implementation classes" );
     }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseDoneImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseDoneImplTest.java
index fc7af45..39f190a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseDoneImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseDoneImplTest.java
@@ -20,19 +20,17 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,8 +39,7 @@
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  *         $Rev: 946251 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SearchResponseDoneImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseReferenceImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseReferenceImplTest.java
index 5c2021f..89e4a63 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseReferenceImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResponseReferenceImplTest.java
@@ -20,17 +20,15 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 java.util.HashMap;
 import java.util.Map;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -38,8 +36,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SearchResponseReferenceImplTest
 {
     private static final Map<String, Control> EMPTY_CONTROL_MAP = new HashMap<String, Control>();
@@ -72,7 +69,7 @@
     {
         SearchResultReferenceImpl resp = new SearchResultReferenceImpl( 5 );
         getReferral( resp );
-        assertTrue( "the same object should be equal", resp.equals( resp ) );
+        assertTrue( resp.equals( resp ), "the same object should be equal" );
     }
 
 
@@ -87,8 +84,8 @@
         SearchResultReferenceImpl resp1 = new SearchResultReferenceImpl( 5 );
         getReferral( resp1 );
 
-        assertTrue( "exact copies should be equal", resp0.equals( resp1 ) );
-        assertTrue( "exact copies should be equal", resp1.equals( resp0 ) );
+        assertTrue( resp0.equals( resp1 ), "exact copies should be equal" );
+        assertTrue( resp1.equals( resp0 ), "exact copies should be equal" );
     }
 
 
@@ -180,8 +177,8 @@
         SearchResultReferenceImpl resp1 = new SearchResultReferenceImpl( 5 );
         getReferral( resp1 );
 
-        assertFalse( "using Object.equal() should NOT be equal", resp0.equals( resp1 ) );
-        assertTrue( "same but different implementations should be equal", resp1.equals( resp0 ) );
+        assertFalse( resp0.equals( resp1 ), "using Object.equal() should NOT be equal" );
+        assertTrue( resp1.equals( resp0 ), "same but different implementations should be equal" );
     }
 
 
@@ -224,8 +221,8 @@
         getReferral( resp1 );
         resp1.getReferral().addLdapUrl( "ldap://asdf.com???" );
 
-        assertFalse( "different urls should not be equal", resp1.equals( resp0 ) );
-        assertFalse( "different urls should not be equal", resp0.equals( resp1 ) );
+        assertFalse( resp1.equals( resp0 ), "different urls should not be equal" );
+        assertFalse( resp0.equals( resp1 ), "different urls should not be equal" );
     }
 
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResultEntryImplTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResultEntryImplTest.java
index c3ac841..f519019 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResultEntryImplTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/SearchResultEntryImplTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.ldap.model.message;
 
 
-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 org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.DefaultAttribute;
@@ -30,11 +30,9 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.message.SearchResultEntryImpl;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,8 +41,7 @@
  * @author <a href="mailto:dev@directory.apache.org"> Apache Directory Project</a>
  *         $Rev: 946251 $
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SearchResultEntryImplTest
 {
     /**
@@ -85,7 +82,7 @@
     public void testEqualsSameObject()
     {
         SearchResultEntryImpl resp = new SearchResultEntryImpl( 5 );
-        assertTrue( "the same object should be equal", resp.equals( resp ) );
+        assertTrue( resp.equals( resp ), "the same object should be equal" );
     }
 
 
@@ -103,8 +100,8 @@
         resp1.setEntry( getEntry() );
         resp1.setObjectName( new Dn( "dc=example,dc=com" ) );
 
-        assertTrue( "exact copies should be equal", resp0.equals( resp1 ) );
-        assertTrue( "exact copies should be equal", resp1.equals( resp0 ) );
+        assertTrue( resp0.equals( resp1 ), "exact copies should be equal" );
+        assertTrue( resp1.equals( resp0 ), "exact copies should be equal" );
     }
 
 
@@ -151,7 +148,7 @@
         resp1.setEntry( getEntry() );
         resp1.setObjectName( new Dn( "dc=example,dc=com" ) );
 
-        assertFalse( "different object names should not be equal", resp1.equals( resp0 ) );
-        assertFalse( "different object names should not be equal", resp0.equals( resp1 ) );
+        assertFalse( resp1.equals( resp0 ), "different object names should not be equal" );
+        assertFalse( resp0.equals( resp1 ), "different object names should not be equal" );
     }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/controls/OpaqueControlTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/controls/OpaqueControlTest.java
index 4149c5a..b8dad6c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/controls/OpaqueControlTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/message/controls/OpaqueControlTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.model.message.controls;
 
 
-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 org.apache.directory.api.ldap.model.message.controls.OpaqueControl;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 
 /**
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
index 475278c..df41759 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
@@ -20,9 +20,9 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-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.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -34,12 +34,10 @@
 import org.apache.directory.api.ldap.model.name.Ava;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -47,8 +45,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AvaSerializationTest
 {
     /** A null schemaManager used in tests */
@@ -351,7 +348,7 @@
 
 
     @Test
-    @Ignore
+    @Disabled
     public void testSerializationPerf() throws LdapException, IOException, ClassNotFoundException
     {
         Ava atav = new Ava( schemaManager, "cn", "This is a serialization test" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
index b8dd5a1..3317310 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaTest.java
@@ -20,20 +20,18 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+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.fail;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Ava;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,8 +39,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AvaTest
 {
     /** A null schemaManager used in tests */
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserDIRSERVER_584_Test.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserDIRSERVER_584_Test.java
index 0f424d3..c18dcd8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserDIRSERVER_584_Test.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserDIRSERVER_584_Test.java
@@ -20,13 +20,14 @@
 package org.apache.directory.api.ldap.model.name;
 
 
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -35,17 +36,19 @@
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  * @see <a href="https://issues.apache.org/jira/browse/DIRSERVER-584">DIRSERVER-584</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DnParserDIRSERVER_584_Test
 {
     /**
      * Need this testa() to run first to mess up the state of the static parser.
      */
-    @Test(expected = LdapException.class)
+    @Test
     public void testa() throws Exception
     {
-        new Dn( "ou=test+testing" );
+        assertThrows( LdapException.class, () -> 
+        {
+            new Dn( "ou=test+testing" );
+        } );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java
index 105c172..4deab3a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java
@@ -20,10 +20,10 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 
@@ -32,12 +32,10 @@
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.util.Strings;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -45,8 +43,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DnParserTest
 {
     /**
@@ -353,7 +350,7 @@
     {
         Dn nameNull = new Dn( ( String ) null );
 
-        assertEquals( "Null Dn are legal : ", "", nameNull.toString() );
+        assertEquals( "", nameNull.toString(), "Null Dn are legal : " );
     }
 
 
@@ -368,11 +365,11 @@
     {
         Dn nameRFC1779_1 = new Dn( "CN=Marshall T. Rose, O=Dover Beach Consulting, L=Santa Clara, ST=California, C=US" );
 
-        assertEquals( "RFC1779_1 : ",
+        assertEquals( 
             "CN=Marshall T. Rose, O=Dover Beach Consulting, L=Santa Clara, ST=California, C=US",
-            nameRFC1779_1.getName() );
-        assertEquals( "RFC1779_1 : ", "CN=Marshall T. Rose,O=Dover Beach Consulting,L=Santa Clara,ST=California,C=US",
-            nameRFC1779_1.getEscaped() );
+            nameRFC1779_1.getName(), "RFC1779_1 : " );
+        assertEquals( "CN=Marshall T. Rose,O=Dover Beach Consulting,L=Santa Clara,ST=California,C=US",
+            nameRFC1779_1.getEscaped(), "RFC1779_1 : " );
     }
 
 
@@ -387,7 +384,7 @@
     {
         Dn nameRFC2253_1 = new Dn( "CN=Steve Kille,O=Isode limited,C=GB" );
 
-        assertEquals( "RFC2253_1 : ", "CN=Steve Kille,O=Isode limited,C=GB", nameRFC2253_1.getName() );
+        assertEquals( "CN=Steve Kille,O=Isode limited,C=GB", nameRFC2253_1.getName(), "RFC2253_1 : " );
     }
 
 
@@ -402,9 +399,9 @@
     {
         Dn nameRFC2253_2 = new Dn( "OU = Sales + CN =   J. Smith , O = Widget Inc. , C = US" );
 
-        assertEquals( "RFC2253_2 : ", "OU = Sales + CN =   J. Smith , O = Widget Inc. , C = US",
-            nameRFC2253_2.getName() );
-        assertEquals( "RFC2253_2 : ", "OU=Sales+CN=J. Smith,O=Widget Inc.,C=US", nameRFC2253_2.getEscaped() );
+        assertEquals( "OU = Sales + CN =   J. Smith , O = Widget Inc. , C = US",
+            nameRFC2253_2.getName(), "RFC2253_2 : " );
+        assertEquals( "OU=Sales+CN=J. Smith,O=Widget Inc.,C=US", nameRFC2253_2.getEscaped(), "RFC2253_2 : " );
     }
 
 
@@ -419,9 +416,9 @@
     {
         Dn nameRFC2253_3 = new Dn( "CN=L. Eagle,   O=Sue\\, Grabbit and Runn, C=GB" );
 
-        assertEquals( "RFC2253_3 : ", "CN=L. Eagle,   O=Sue\\, Grabbit and Runn, C=GB", nameRFC2253_3
-            .getName() );
-        assertEquals( "RFC2253_3 : ", "CN=L. Eagle,O=Sue\\, Grabbit and Runn,C=GB", nameRFC2253_3.getEscaped() );
+        assertEquals( "CN=L. Eagle,   O=Sue\\, Grabbit and Runn, C=GB", nameRFC2253_3
+            .getName(), "RFC2253_3 : " );
+        assertEquals( "CN=L. Eagle,O=Sue\\, Grabbit and Runn,C=GB", nameRFC2253_3.getEscaped(), "RFC2253_3 : " );
     }
 
 
@@ -435,7 +432,7 @@
     public final void testParseStringRFC2253_4() throws LdapException
     {
         Dn nameRFC2253_4 = new Dn( "CN=Before\\0DAfter,O=Test,C=GB" );
-        assertEquals( "RFC2253_4 : ", "CN=Before\\0DAfter,O=Test,C=GB", nameRFC2253_4.getName() );
+        assertEquals( "CN=Before\\0DAfter,O=Test,C=GB", nameRFC2253_4.getName(), "RFC2253_4 : " );
     }
 
 
@@ -450,8 +447,8 @@
     {
         Dn nameRFC2253_5 = new Dn( "1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB" );
 
-        assertEquals( "RFC2253_5 : ", "1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB", nameRFC2253_5
-            .getName() );
+        assertEquals( "1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB", nameRFC2253_5
+            .getName(), "RFC2253_5 : " );
     }
 
 
@@ -466,7 +463,7 @@
     {
         Dn nameRFC2253_6 = new Dn( "SN=Lu\\C4\\8Di\\C4\\87" );
 
-        assertEquals( "RFC2253_6 : ", "SN=Lu\\C4\\8Di\\C4\\87", nameRFC2253_6.getName() );
+        assertEquals( "SN=Lu\\C4\\8Di\\C4\\87", nameRFC2253_6.getName(), "RFC2253_6 : " );
     }
 
 
@@ -683,7 +680,7 @@
     
     
     @Test
-    @Ignore
+    @Disabled
     public void testDnParsingPerf() throws LdapInvalidDnException
     {
         long[] deltas = new long[10];
@@ -787,7 +784,7 @@
     
     
     @Test
-    @Ignore
+    @Disabled
     public void testDnParsingOneRdnPerf() throws LdapInvalidDnException
     {
         long t0 = System.currentTimeMillis();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnSerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnSerializationTest.java
index a886050..7d23044 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnSerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -30,11 +30,10 @@
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.name.Dn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -42,8 +41,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DnSerializationTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java
index 5fd4770..0bc4f83 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 
@@ -31,11 +32,9 @@
 import org.apache.directory.api.ldap.model.name.FastDnParser;
 import org.apache.directory.api.ldap.model.name.TooComplexDnException;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -46,8 +45,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FastDnParserTest
 {
 
@@ -231,11 +229,13 @@
     /**
      * test a simple Dn with multiple NameComponents : a = b + c = d
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNSimpleMultivaluedAttribute() throws LdapException
     {
-        FastDnParser.parse( "a = b + c = d" );
-        fail( "Multivalued Rdn not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "a = b + c = d" );
+        } );
     }
 
 
@@ -243,33 +243,39 @@
      * test a composite Dn with multiple NC and separators : a=b+c=d, e=f + g=h +
      * i=j
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNCompositeMultivaluedAttribute() throws LdapException
     {
-        FastDnParser.parse( "a=b+c=d, e=f + g=h + i=j" );
-        fail( "Multivalued Rdn not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "a=b+c=d, e=f + g=h + i=j" );
+        } );
     }
 
 
     /**
      * test a simple Dn with an oid prefix (uppercase) : OID.12.34.56 = azerty
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNOidUpper() throws LdapException
     {
-        FastDnParser.parse( "OID.12.34.56 = azerty" );
-        fail( "OID prefix not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "OID.12.34.56 = azerty" );
+        } );
     }
 
 
     /**
      * test a simple Dn with an oid prefix (lowercase) : oid.12.34.56 = azerty
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNOidLower() throws LdapException
     {
-        FastDnParser.parse( "oid.12.34.56 = azerty" );
-        fail( "OID prefix not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "oid.12.34.56 = azerty" );
+        } );
     }
 
 
@@ -302,44 +308,52 @@
     /**
      * test a simple Dn with pair char attribute value : a = \,\=\+\<\>\#\;\\\"\C3\A9"
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNPairCharAttributeValue() throws LdapException
     {
-        FastDnParser.parse( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C3\\A9" );
-        fail( "Complex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C3\\A9" );
+        } );
     }
 
 
     /**
      * test a simple Dn with hexString attribute value : a = #0010A0AAFF
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNHexStringAttributeValue() throws LdapException
     {
-        FastDnParser.parse( "a = #0010A0AAFF" );
-        fail( "Hex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "a = #0010A0AAFF" );
+        } );
     }
 
 
     /**
      * test exception from illegal hexString attribute value : a=#zz.
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testBadLdapDNHexStringAttributeValue() throws LdapException
     {
-        FastDnParser.parse( "a=#zz" );
-        fail( "Hex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "a=#zz" );
+        } );
     }
 
 
     /**
      * test a simple Dn with quoted attribute value : a = "quoted \"value"
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testLdapDNQuotedAttributeValue() throws LdapException
     {
-        FastDnParser.parse( "a = quoted \\\"value" );
-        fail( "Quotes not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "a = quoted \\\"value" );
+        } );
     }
 
 
@@ -370,12 +384,14 @@
     }
 
 
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testVsldapExtras() throws LdapException
     {
-        FastDnParser
-            .parse( "cn=Billy Bakers, OID.2.5.4.11=Corporate Tax, ou=Fin-Accounting, ou=Americas, ou=Search, o=IMC, c=US" );
-        fail( "OID prefix not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser
+                .parse( "cn=Billy Bakers, OID.2.5.4.11=Corporate Tax, ou=Fin-Accounting, ou=Americas, ou=Search, o=IMC, c=US" );
+        } );
     }
 
 
@@ -399,7 +415,7 @@
     {
         Dn nameNull = FastDnParser.parse( null );
 
-        assertEquals( "Null Dn are legal : ", "", nameNull.toString() );
+        assertEquals( "", nameNull.toString(), "Null Dn are legal : " );
     }
 
 
@@ -412,11 +428,11 @@
         Dn nameRFC1779_1 = FastDnParser
             .parse( "CN=Marshall T. Rose, O=Dover Beach Consulting, L=Santa Clara, ST=California, C=US" );
 
-        assertEquals( "RFC1779_1 : ",
+        assertEquals( 
             "CN=Marshall T. Rose, O=Dover Beach Consulting, L=Santa Clara, ST=California, C=US",
-            nameRFC1779_1.getName() );
-        assertEquals( "RFC1779_1 : ", "CN=Marshall T. Rose,O=Dover Beach Consulting,L=Santa Clara,ST=California,C=US",
-            nameRFC1779_1.getEscaped() );
+            nameRFC1779_1.getName(), "RFC1779_1 : " );
+        assertEquals( "CN=Marshall T. Rose,O=Dover Beach Consulting,L=Santa Clara,ST=California,C=US",
+            nameRFC1779_1.getEscaped(), "RFC1779_1 : " );
     }
 
 
@@ -428,62 +444,72 @@
     {
         Dn nameRFC2253_1 = FastDnParser.parse( "CN=Steve Kille,O=Isode limited,C=GB" );
 
-        assertEquals( "RFC2253_1 : ", "CN=Steve Kille,O=Isode limited,C=GB", nameRFC2253_1.getName() );
+        assertEquals( "CN=Steve Kille,O=Isode limited,C=GB", nameRFC2253_1.getName(), "RFC2253_1 : " );
     }
 
 
     /**
      * Class under test for Name parse(String)
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testParseStringRFC2253_2() throws LdapException
     {
-        FastDnParser.parse( "CN = Sales + CN =   J. Smith , O = Widget Inc. , C = US" );
-        fail( "Multivalued Rdn not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "CN = Sales + CN =   J. Smith , O = Widget Inc. , C = US" );
+        } );
     }
 
 
     /**
      * Class under test for Name parse(String)
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testParseStringRFC2253_3() throws LdapException
     {
-        FastDnParser.parse( "CN=L. Eagle,   O=Sue\\, Grabbit and Runn, C=GB" );
-        fail( "Complex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "CN=L. Eagle,   O=Sue\\, Grabbit and Runn, C=GB" );
+        } );
     }
 
 
     /**
      * Class under test for Name parse(String)
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testParseStringRFC2253_4() throws LdapException
     {
-        FastDnParser.parse( "CN=Before\\0DAfter,O=Test,C=GB" );
-        fail( "Complex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "CN=Before\\0DAfter,O=Test,C=GB" );
+        } );
     }
 
 
     /**
      * Class under test for Name parse(String)
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testParseStringRFC2253_5() throws LdapException
     {
-        FastDnParser.parse( "1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB" );
-        fail( "Hex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "1.3.6.1.4.1.1466.0=#04024869,O=Test,C=GB" );
+        } );
     }
 
 
     /**
      * Class under test for Name parse(String)
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testParseStringRFC2253_6() throws LdapException
     {
-        FastDnParser.parse( "SN=Lu\\C4\\8Di\\C4\\87" );
-        fail( "Complex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( "SN=Lu\\C4\\8Di\\C4\\87" );
+        } );
     }
 
 
@@ -511,24 +537,28 @@
      * bug encountered in DIREVE-179 <a
      * href="http://issues.apache.org/jira/browse/DIREVE-179"> here</a>.
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testPreserveSpaceAfterEscape() throws LdapException
     {
         String input = "ou=some test\\,  something else";
 
-        FastDnParser.parse( input ).toString();
-        fail( "Complex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( input ).toString();
+        } );
     }
 
 
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testWindowsFilePath() throws Exception
     {
         // '\' should be escaped as stated in RFC 2253
         String path = "windowsFilePath=C:\\\\cygwin";
 
-        FastDnParser.parse( path );
-        fail( "Complex DNs not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( path );
+        } );
     }
 
 
@@ -583,14 +613,16 @@
      * Test that we can have non-ascii characters in a DN when we use the 
      * fast DN parser, but not followded by bytes
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testAUmlautPlusBytes() throws Exception
     {
         String cn = new String( new byte[]
             { 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0x84, 0x5C, 0x32, 0x42 }, StandardCharsets.UTF_8 );
 
-        FastDnParser.parse( cn ).toString();
-        fail( "DNs with special characters not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( cn ).toString();
+        } );
     }
 
 
@@ -598,14 +630,16 @@
      * Test that we can't have escaped characters in a DN when we use the 
      * fast DN parser
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public void testAUmlautPlusChar() throws Exception
     {
         String cn = new String( new byte[]
             { 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0x84, '\\', '+' }, StandardCharsets.UTF_8 );
 
-        FastDnParser.parse( cn ).toString();
-        fail( "DNs with special characters not supported by fast parser" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( cn ).toString();
+        } );
     }
 
 
@@ -613,12 +647,14 @@
      * Test to check that even with a non escaped char, the Dn is parsed ok
      * or at least an error is generated.
      */
-    @Test(expected=TooComplexDnException.class)
+    @Test
     public final void testNonEscapedChars() throws LdapException
     {
         String input = "ou=ou+test";
 
-        FastDnParser.parse( input ).toString();
-        fail( "Should never reach this point" );
+        assertThrows( TooComplexDnException.class, () -> 
+        {
+            FastDnParser.parse( input ).toString();
+        } );
     }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastRdnParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastRdnParserTest.java
index 1f18bc0..a51eee5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastRdnParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastRdnParserTest.java
@@ -20,10 +20,10 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -36,11 +36,9 @@
 import org.apache.directory.api.ldap.model.name.Ava;
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -48,8 +46,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FastRdnParserTest
 {
     /** A null schemaManager used in tests */
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnSerializationTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnSerializationTest.java
index 0760dc2..9a354b9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnSerializationTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnSerializationTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -31,11 +31,9 @@
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
 import org.apache.directory.api.ldap.model.name.Rdn;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,8 +41,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class RdnSerializationTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
index 7899c40..d1abc4d 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
@@ -20,11 +20,12 @@
 package org.apache.directory.api.ldap.model.name;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -39,11 +40,9 @@
 import org.apache.directory.api.ldap.model.name.Rdn;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -51,8 +50,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class RdnTest
 {
     /** A null schemaManager used in tests */
@@ -1229,10 +1227,13 @@
     /**
      * test that a RDN with two AVAs throws an exception
      */
-    @Test( expected=LdapInvalidDnException.class )
+    @Test
     public void testWrongRdn() throws LdapException
     {
-        new Rdn( " A = b, C = d " );
+        assertThrows( LdapInvalidDnException.class, () -> 
+        {
+            new Rdn( " A = b, C = d " );
+        } );
     }
 
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/password/PasswordUtilTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/password/PasswordUtilTest.java
index 3a8ba78..ea8e45e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/password/PasswordUtilTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/password/PasswordUtilTest.java
@@ -48,15 +48,17 @@
 import static org.apache.directory.api.ldap.model.password.PasswordUtil.SHA256_LENGTH;
 import static org.apache.directory.api.ldap.model.password.PasswordUtil.SHA384_LENGTH;
 import static org.apache.directory.api.ldap.model.password.PasswordUtil.SHA512_LENGTH;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -64,6 +66,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution(ExecutionMode.CONCURRENT)
 public class PasswordUtilTest
 {
 
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/AttributeTypeTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/AttributeTypeTest.java
index a4e42e0..f1d975e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/AttributeTypeTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/AttributeTypeTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class AttributeType.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeTypeTest
 {
     private AttributeType attributeType;
@@ -46,7 +42,7 @@
     /**
      * Initialize attribute type instances
      */
-    @Before
+    @BeforeEach
     public void initAttributeTypes() throws Exception
     {
         attributeType = new AttributeType( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitContentRuleTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitContentRuleTest.java
index dac7a7e..7170aec 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitContentRuleTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitContentRuleTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class DitContentRule.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitContentRuleTest
 {
     private DitContentRule ditContentRule;
@@ -48,7 +44,7 @@
     /**
      * Initialize attribute type instances
      */
-    @Before
+    @BeforeEach
     public void initDitContentRules() throws Exception
     {
         ditContentRule = new DitContentRule( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitStructureRuleTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitStructureRuleTest.java
index 2a6b7e2..32a673b 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitStructureRuleTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/DitStructureRuleTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class DitStructureRule.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitStructureRuleTest
 {
     private DitStructureRule ditStructureRule;
@@ -48,7 +44,7 @@
     /**
      * Initialize attribute type instances
      */
-    @Before
+    @BeforeEach
     public void initDitStructureRules() throws Exception
     {
         ditStructureRule = new DitStructureRule( 1234 );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/LdapSyntaxTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/LdapSyntaxTest.java
index e933b05..f71b8e4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/LdapSyntaxTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/LdapSyntaxTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class LdapSyntax.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapSyntaxTest
 {
     private LdapSyntax ldapSyntax;
@@ -46,7 +42,7 @@
     /**
      * Initialize ldap syntax use instances
      */
-    @Before
+    @BeforeEach
     public void initMatchingRuleUses() throws Exception
     {
         ldapSyntax = new LdapSyntax( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleTest.java
index bbf3c97..63b016e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class MatchingRule.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MatchingRuleTest
 {
     private MatchingRule matchingRule;
@@ -46,7 +42,7 @@
     /**
      * Initialize matching rule instances
      */
-    @Before
+    @BeforeEach
     public void initMatchingRules() throws Exception
     {
         matchingRule = new MatchingRule( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleUseTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleUseTest.java
index f60247a..4a254c4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleUseTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/MatchingRuleUseTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class MatchingRuleUse.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MatchingRuleUseTest
 {
     private MatchingRuleUse matchingRuleUse;
@@ -48,7 +44,7 @@
     /**
      * Initialize matching rule use instances
      */
-    @Before
+    @BeforeEach
     public void initMatchingRuleUses() throws Exception
     {
         matchingRuleUse = new MatchingRuleUse( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/NameFormTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/NameFormTest.java
index 20f803e..1a13ed9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/NameFormTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/NameFormTest.java
@@ -20,17 +20,15 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -38,8 +36,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NameFormTest
 {
     private NameForm nameForm;
@@ -48,7 +45,7 @@
     /**
      * Initialize attribute type instances
      */
-    @Before
+    @BeforeEach
     public void initNameForms() throws Exception
     {
         nameForm = new NameForm( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTest.java
index 202568c..5d98f5c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTest.java
@@ -20,29 +20,25 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.Arrays;
 import java.util.Collections;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Unit tests class ObjectClass.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectClassTest
 {
     private ObjectClass objectClassA;
@@ -55,7 +51,7 @@
     /**
      * Initialize object class instances
      */
-    @Before
+    @BeforeEach
     public void initObjectClasses() throws Exception
     {
         // TODO Create ObjectClasses with more meaningful constructor arguments
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTypeEnumTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTypeEnumTest.java
index 23483e3..0092357 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTypeEnumTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/ObjectClassTypeEnumTest.java
@@ -19,9 +19,9 @@
  */
 package org.apache.directory.api.ldap.model.schema;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * Test the ObjectClassTypeEnum enum
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/PrepareStringTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/PrepareStringTest.java
index 1ec1604..df3fe96 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/PrepareStringTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/PrepareStringTest.java
@@ -23,14 +23,18 @@
 import java.io.IOException;
 
 import org.apache.directory.api.util.exception.InvalidCharacterException;
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests for the PrepareString class
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution(ExecutionMode.CONCURRENT)
 public class PrepareStringTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectRendererTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectRendererTest.java
index d989b71..88f1292 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectRendererTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectRendererTest.java
@@ -19,8 +19,8 @@
  */package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.text.ParseException;
 import java.util.ArrayList;
@@ -36,14 +36,17 @@
 import org.apache.directory.api.ldap.model.schema.parsers.MatchingRuleUseDescriptionSchemaParser;
 import org.apache.directory.api.ldap.model.schema.parsers.NameFormDescriptionSchemaParser;
 import org.apache.directory.api.ldap.model.schema.parsers.ObjectClassDescriptionSchemaParser;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution(ExecutionMode.CONCURRENT)
 public class SchemaObjectRendererTest
 {
 
@@ -61,7 +64,7 @@
     private NameForm nameForm;
 
 
-    @Before
+    @BeforeEach
     public void setUp()
     {
         objectClassSimple = new ObjectClass( "1.2.3.4" );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectSorterTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectSorterTest.java
index 7bd854f..8fcf8f6 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectSorterTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaObjectSorterTest.java
@@ -20,9 +20,10 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -31,7 +32,9 @@
 import java.util.List;
 
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -39,6 +42,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
+@Execution(ExecutionMode.CONCURRENT)
 public class SchemaObjectSorterTest
 {
 
@@ -127,7 +131,7 @@
     }
 
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testSortAttributeTypesLoop()
     {
         List<AttributeType> attributeTypes = new ArrayList<AttributeType>();
@@ -137,7 +141,11 @@
         addAttributeType( attributeTypes, "1.1.4", "att4", "att3" );
 
         Iterable<AttributeType> sorted = SchemaObjectSorter.hierarchicalOrdered( attributeTypes );
-        sorted.iterator().next();
+
+        assertThrows( IllegalStateException.class, () ->
+        {
+            sorted.iterator().next();
+        } );
     }
 
 
@@ -227,7 +235,7 @@
     }
 
 
-    @Test(expected = IllegalStateException.class)
+    @Test
     public void testSortObjectClassesLoop()
     {
         List<ObjectClass> objectClasses = new ArrayList<ObjectClass>();
@@ -236,7 +244,10 @@
         addObjectClass( objectClasses, "1.2.3", "oc3", "oc2" );
 
         Iterable<ObjectClass> sorted = SchemaObjectSorter.sortObjectClasses( objectClasses );
-        sorted.iterator().next();
-    }
 
+        assertThrows( IllegalStateException.class, () ->
+        {
+            sorted.iterator().next();
+        } );
+    }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaUtilsTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaUtilsTest.java
index 9fd7b0f..4287944 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaUtilsTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SchemaUtilsTest.java
@@ -20,22 +20,20 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import java.util.Arrays;
 import java.util.List;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.LdapSyntax;
 import org.apache.directory.api.ldap.model.schema.MatchingRule;
 import org.apache.directory.api.ldap.model.schema.SchemaUtils;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,8 +41,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SchemaUtilsTest
 {
     public static LdapSyntax[] getSyntaxes()
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SyntaxCheckerTest.java
index cdde2b1..9c25fa0 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/SyntaxCheckerTest.java
@@ -20,18 +20,16 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
 import org.apache.directory.api.ldap.model.schema.SyntaxChecker;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.AccessPointSyntaxChecker;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CountrySyntaxChecker;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -39,8 +37,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SyntaxCheckerTest
 {
     SyntaxChecker objectClassA;
@@ -52,7 +49,7 @@
     /**
      * Initialize name instances
      */
-    @Before
+    @BeforeEach
     public void initNames() throws Exception
     {
         objectClassA = AccessPointSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/UsageEnumTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/UsageEnumTest.java
index d1d858f..6467a9e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/UsageEnumTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/UsageEnumTest.java
@@ -20,14 +20,12 @@
 package org.apache.directory.api.ldap.model.schema;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.schema.UsageEnum;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -35,8 +33,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class UsageEnumTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BitStringComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BitStringComparatorTest.java
index 63d544b..532f75a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BitStringComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BitStringComparatorTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.schema.comparators.BitStringComparator;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,14 +34,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BitStringComparatorTest
 {
     private BitStringComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new BitStringComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BooleanComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BooleanComparatorTest.java
index abf3fbe..6c76d31 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BooleanComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/BooleanComparatorTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.schema.comparators.BooleanComparator;
 import org.apache.directory.api.util.Strings;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,14 +35,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BooleanComparatorTest
 {
     private BooleanComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new BooleanComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ByteArrayComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ByteArrayComparatorTest.java
index 302829c..6f9fefc 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ByteArrayComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ByteArrayComparatorTest.java
@@ -20,14 +20,12 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.schema.comparators.ByteArrayComparator;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -35,8 +33,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ByteArrayComparatorTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnComparatorTest.java
index 3ff101d..99825ec 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnComparatorTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.csn.Csn;
 import org.apache.directory.api.ldap.model.schema.comparators.CsnComparator;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,14 +35,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CsnComparatorTest
 {
     private CsnComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new CsnComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnSidComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnSidComparatorTest.java
index 6592c15..dd8fd09 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnSidComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/CsnSidComparatorTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.schema.comparators.CsnSidComparator;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,14 +34,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CsnSidComparatorTest
 {
     private CsnSidComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new CsnSidComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/IntegerComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/IntegerComparatorTest.java
index 8567e03..7b0016e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/IntegerComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/IntegerComparatorTest.java
@@ -19,27 +19,24 @@
  */
 package org.apache.directory.api.ldap.model.schema.comparators;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the Integer comparator
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class IntegerComparatorTest 
 {
     private IntegerComparator comparator;
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new IntegerComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ObjectIdentifierFirstComponentComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ObjectIdentifierFirstComponentComparatorTest.java
index cad64a2..67759b4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ObjectIdentifierFirstComponentComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/ObjectIdentifierFirstComponentComparatorTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotSame;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
 
 import org.apache.directory.api.ldap.model.schema.comparators.ObjectIdentifierFirstComponentComparator;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,14 +35,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectIdentifierFirstComponentComparatorTest
 {
     private ObjectIdentifierFirstComponentComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new ObjectIdentifierFirstComponentComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/TelephoneNumberComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/TelephoneNumberComparatorTest.java
index e89a189..4c1c9b9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/TelephoneNumberComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/TelephoneNumberComparatorTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.comparators.TelephoneNumberComparator;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,14 +35,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class TelephoneNumberComparatorTest
 {
     private TelephoneNumberComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new TelephoneNumberComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/WordComparatorTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/WordComparatorTest.java
index fbb8f60..de41390 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/WordComparatorTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/comparators/WordComparatorTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.comparators;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.schema.comparators.WordComparator;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,14 +34,13 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class WordComparatorTest
 {
     private WordComparator comparator;
 
 
-    @Before
+    @BeforeEach
     public void init()
     {
         comparator = new WordComparator( null );
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/BooleanNormalizerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/BooleanNormalizerTest.java
index f4547ca..3ea740c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/BooleanNormalizerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/BooleanNormalizerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.normalizers;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.normalizers.BooleanNormalizer;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BooleanNormalizerTest
 {
     BooleanNormalizer normalizer = new BooleanNormalizer();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java
index b4be3d3..d4aeed6 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.normalizers;
 
 
-import static org.junit.Assert.assertEquals;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.Normalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimNormalizer;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DeepTrimNormalizerTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimToLowerNormalizerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimToLowerNormalizerTest.java
index 0d52079..2086981 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimToLowerNormalizerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimToLowerNormalizerTest.java
@@ -20,19 +20,17 @@
 package org.apache.directory.api.ldap.model.schema.normalizers;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.Normalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.DeepTrimToLowerNormalizer;
 import org.apache.directory.api.util.Strings;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -40,8 +38,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DeepTrimToLowerNormalizerTest
 {
     @Test
@@ -219,7 +216,7 @@
 
     
     @Test
-    @Ignore
+    @Disabled
     public void testSpeed() throws Exception
     {
         Normalizer normalizer = new DeepTrimToLowerNormalizer();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/NumericNormalizerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/NumericNormalizerTest.java
index cc7ee8f..e817065 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/NumericNormalizerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/NumericNormalizerTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.normalizers;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.Normalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.NumericNormalizer;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NumericNormalizerTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/TelephoneNumberNormalizerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/TelephoneNumberNormalizerTest.java
index 81dd8ee..fcb3f1f 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/TelephoneNumberNormalizerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/TelephoneNumberNormalizerTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.normalizers;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.Normalizer;
 import org.apache.directory.api.ldap.model.schema.normalizers.TelephoneNumberNormalizer;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class TelephoneNumberNormalizerTest
 {
     @Test
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/FastOpenLdapSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/FastOpenLdapSchemaParserTest.java
index afe68ba..9455864 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/FastOpenLdapSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/FastOpenLdapSchemaParserTest.java
@@ -20,10 +20,10 @@
 package org.apache.directory.api.ldap.model.schema.parsers;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.InputStream;
 import java.util.HashMap;
@@ -34,13 +34,11 @@
 import org.apache.directory.api.ldap.model.schema.ObjectClass;
 import org.apache.directory.api.ldap.model.schema.ObjectClassTypeEnum;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OpenLdapObjectIdentifierMacro;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -48,21 +46,20 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FastOpenLdapSchemaParserTest
 {
     private OpenLdapSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new OpenLdapSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java
index cb44780..d566fe5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/parsers/OpenLdapSchemaParserTest.java
@@ -20,10 +20,10 @@
 package org.apache.directory.api.ldap.model.schema.parsers;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.InputStream;
 import java.util.HashMap;
@@ -34,13 +34,11 @@
 import org.apache.directory.api.ldap.model.schema.ObjectClass;
 import org.apache.directory.api.ldap.model.schema.ObjectClassTypeEnum;
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OpenLdapObjectIdentifierMacro;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -48,14 +46,13 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class OpenLdapSchemaParserTest
 {
     private OpenLdapSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new OpenLdapSchemaParser();
@@ -63,7 +60,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/AttributeTypeRegistryTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/AttributeTypeRegistryTest.java
index 6792231..58a5fd2 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/AttributeTypeRegistryTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/AttributeTypeRegistryTest.java
@@ -20,21 +20,19 @@
 package org.apache.directory.api.ldap.model.schema.registries;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+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.fail;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.registries.AttributeTypeRegistry;
 import org.apache.directory.api.ldap.model.schema.registries.DefaultAttributeTypeRegistry;
-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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -42,14 +40,13 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeTypeRegistryTest
 {
     AttributeTypeRegistry atRegistry;
 
 
-    @Before
+    @BeforeEach
     public void setup()
     {
         atRegistry = new DefaultAttributeTypeRegistry();
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/OidRegistryTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/OidRegistryTest.java
index e4ec84d..89a5e76 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/OidRegistryTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/OidRegistryTest.java
@@ -20,10 +20,9 @@
 package org.apache.directory.api.ldap.model.schema.registries;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -31,11 +30,9 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class OidRegistryTest
 {
-
     @Test
     public void testCopy() throws Exception
     {
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/RegistriesTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/RegistriesTest.java
index 6b77f68..3cff9d4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/RegistriesTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/registries/RegistriesTest.java
@@ -19,25 +19,20 @@
  */
 package org.apache.directory.api.ldap.model.schema.registries;
 
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test the registries class
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class RegistriesTest
 {
     @Test
     public void testClone()
     {
-
     }
 }
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AccessPointSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AccessPointSyntaxCheckerTest.java
index 3212539..e3ccc20 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AccessPointSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AccessPointSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.AccessPointSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AccessPointSyntaxCheckerTest
 {
     AccessPointSyntaxChecker checker = AccessPointSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AttributeTypeDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AttributeTypeDescriptionSyntaxCheckerTest.java
index 9d9992d..6bcfac5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AttributeTypeDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AttributeTypeDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.AttributeTypeDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for AttributeTypeDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeTypeDescriptionSyntaxCheckerTest
 {
     private AttributeTypeDescriptionSyntaxChecker checker = AttributeTypeDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AudioSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AudioSyntaxCheckerTest.java
index 0f24da6..74badc6 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AudioSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/AudioSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.AudioSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AudioSyntaxCheckerTest
 {
     AudioSyntaxChecker checker = AudioSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BinarySyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BinarySyntaxCheckerTest.java
index 9de303a..315ddad 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BinarySyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BinarySyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.BinarySyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BinarySyntaxCheckerTest
 {
     BinarySyntaxChecker checker = BinarySyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BitStringSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BitStringSyntaxCheckerTest.java
index f50e4cb..71e9129 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BitStringSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BitStringSyntaxCheckerTest.java
@@ -20,15 +20,12 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-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 com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.BitStringSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
 
 
 /**
@@ -36,8 +33,6 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
 public class BitStringSyntaxCheckerTest
 {
     BitStringSyntaxChecker checker = BitStringSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BooleanSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BooleanSyntaxCheckerTest.java
index 9cbe1d7..d8ff3b8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BooleanSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/BooleanSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.BooleanSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class BooleanSyntaxCheckerTest
 {
     BooleanSyntaxChecker checker = BooleanSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateListSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateListSyntaxCheckerTest.java
index 4ebc914..0f1d48f 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateListSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateListSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CertificateListSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CertificateListSyntaxCheckerTest
 {
     CertificateListSyntaxChecker checker = CertificateListSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificatePairSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificatePairSyntaxCheckerTest.java
index 87d5561..1942cea 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificatePairSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificatePairSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CertificatePairSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CertificatePairSyntaxCheckerTest
 {
     CertificatePairSyntaxChecker checker = CertificatePairSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateSyntaxCheckerTest.java
index ce1b6ee..035e2c0 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CertificateSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CertificateSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CertificateSyntaxCheckerTest
 {
     CertificateSyntaxChecker checker = CertificateSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CountrySyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CountrySyntaxCheckerTest.java
index 69e2ca6..2e6537a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CountrySyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CountrySyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CountrySyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CountrySyntaxCheckerTest
 {
     CountrySyntaxChecker checker = CountrySyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSidSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSidSyntaxCheckerTest.java
index ebb1726..54d8b53 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSidSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSidSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CsnSidSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for CsnSidSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CsnSidSyntaxCheckerTest
 {
     CsnSidSyntaxChecker checker = CsnSidSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSyntaxCheckerTest.java
index 3ccd898..dae2f83 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/CsnSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.CsnSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for CsnSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class CsnSyntaxCheckerTest
 {
     CsnSyntaxChecker checker = CsnSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DataQualitySyntaxSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DataQualitySyntaxSyntaxCheckerTest.java
index 1270488..7f1e23c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DataQualitySyntaxSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DataQualitySyntaxSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DataQualitySyntaxSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DataQualitySyntaxSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DataQualitySyntaxSyntaxCheckerTest
 {
     DataQualitySyntaxSyntaxChecker checker = DataQualitySyntaxSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DeliveryMethodSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DeliveryMethodSyntaxCheckerTest.java
index ec17ef1..c0cd929 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DeliveryMethodSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DeliveryMethodSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DeliveryMethodSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DeliveryMethodSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DeliveryMethodSyntaxCheckerTest
 {
     DeliveryMethodSyntaxChecker checker = DeliveryMethodSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DirectoryStringSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DirectoryStringSyntaxCheckerTest.java
index 7259a6b..986b56e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DirectoryStringSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DirectoryStringSyntaxCheckerTest.java
@@ -20,25 +20,21 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DirectoryStringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DirectoryStringSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DirectoryStringSyntaxCheckerTest
 {
     DirectoryStringSyntaxChecker checker = DirectoryStringSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitContentRuleDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitContentRuleDescriptionSyntaxCheckerTest.java
index 413437c..36a3ad9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitContentRuleDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitContentRuleDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DitContentRuleDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DITContentRuleDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitContentRuleDescriptionSyntaxCheckerTest
 {
     private DitContentRuleDescriptionSyntaxChecker checker = DitContentRuleDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitStructureRuleDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitStructureRuleDescriptionSyntaxCheckerTest.java
index da4bdee..ab1db2c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitStructureRuleDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DitStructureRuleDescriptionSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DitStructureRuleDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -38,8 +36,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitStructureRuleDescriptionSyntaxCheckerTest
 {
     private DitStructureRuleDescriptionSyntaxChecker checker = DitStructureRuleDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DlSubmitPermissionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DlSubmitPermissionSyntaxCheckerTest.java
index c379f80..2a797a3 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DlSubmitPermissionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DlSubmitPermissionSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DlSubmitPermissionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DlSubmitPermissionSyntaxCheckerTest
 {
     DlSubmitPermissionSyntaxChecker checker = DlSubmitPermissionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DnSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DnSyntaxCheckerTest.java
index b0dd176..95943ab 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DnSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DnSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DnSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DNSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DnSyntaxCheckerTest
 {
     DnSyntaxChecker checker = DnSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DsaQualitySyntaxSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DsaQualitySyntaxSyntaxCheckerTest.java
index 5d9a5b1..4a3be18 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DsaQualitySyntaxSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DsaQualitySyntaxSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DsaQualitySyntaxSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DSAQualitySyntaxSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DsaQualitySyntaxSyntaxCheckerTest
 {
     DsaQualitySyntaxSyntaxChecker checker = DsaQualitySyntaxSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DseTypeSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DseTypeSyntaxCheckerTest.java
index 73c8a4a..21a442a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DseTypeSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/DseTypeSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.DseTypeSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for DSETypeSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DseTypeSyntaxCheckerTest
 {
     DseTypeSyntaxChecker checker = DseTypeSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/EnhancedGuideSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/EnhancedGuideSyntaxCheckerTest.java
index ba48554..3c6f9ba 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/EnhancedGuideSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/EnhancedGuideSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.EnhancedGuideSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for EnhancedGuideSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class EnhancedGuideSyntaxCheckerTest
 {
     EnhancedGuideSyntaxChecker checker = EnhancedGuideSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FacsimileTelephoneNumberSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FacsimileTelephoneNumberSyntaxCheckerTest.java
index 8cbc696..2865227 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FacsimileTelephoneNumberSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FacsimileTelephoneNumberSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.FacsimileTelephoneNumberSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for FacsimileTelephoneNumberSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FacsimileTelephoneNumberSyntaxCheckerTest
 {
     FacsimileTelephoneNumberSyntaxChecker checker = FacsimileTelephoneNumberSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FaxSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FaxSyntaxCheckerTest.java
index 6a2630a..e8a9619 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FaxSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/FaxSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.FaxSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for FaxSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class FaxSyntaxCheckerTest
 {
     FaxSyntaxChecker checker = FaxSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GeneralizedTimeSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GeneralizedTimeSyntaxCheckerTest.java
index 1b6da14..f691aeb 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GeneralizedTimeSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GeneralizedTimeSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.GeneralizedTimeSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for GeneralizedTimeSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class GeneralizedTimeSyntaxCheckerTest
 {
     GeneralizedTimeSyntaxChecker checker = GeneralizedTimeSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GuideSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GuideSyntaxCheckerTest.java
index 5d6aef1..08666b1 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GuideSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/GuideSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.GuideSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for GuideSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class GuideSyntaxCheckerTest
 {
     GuideSyntaxChecker checker = GuideSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/Ia5StringSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/Ia5StringSyntaxCheckerTest.java
index d75b412..a6895f8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/Ia5StringSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/Ia5StringSyntaxCheckerTest.java
@@ -20,25 +20,21 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.Ia5StringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for Ia5StringSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class Ia5StringSyntaxCheckerTest
 {
     Ia5StringSyntaxChecker checker = Ia5StringSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/IntegerSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/IntegerSyntaxCheckerTest.java
index 42c216c..483d2a3 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/IntegerSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/IntegerSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.IntegerSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for IntegerSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class IntegerSyntaxCheckerTest
 {
     IntegerSyntaxChecker checker = IntegerSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaByteSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaByteSyntaxCheckerTest.java
index 8c86e9e..5aff7dd 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaByteSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaByteSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.JavaByteSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for JavaByteSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class JavaByteSyntaxCheckerTest
 {
     JavaByteSyntaxChecker checker = JavaByteSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaIntegerSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaIntegerSyntaxCheckerTest.java
index ceb2a14..aeeedc1 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaIntegerSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaIntegerSyntaxCheckerTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-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 java.math.BigInteger;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.JavaIntegerSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for IntegerSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class JavaIntegerSyntaxCheckerTest
 {
     JavaIntegerSyntaxChecker checker = JavaIntegerSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaLongSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaLongSyntaxCheckerTest.java
index cb43b52..17f6f2d 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaLongSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaLongSyntaxCheckerTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-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 java.math.BigInteger;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.JavaLongSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for JavaLongSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class JavaLongSyntaxCheckerTest
 {
     JavaLongSyntaxChecker checker = JavaLongSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaShortSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaShortSyntaxCheckerTest.java
index 00b8ffc..66aff2e 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaShortSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JavaShortSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.JavaShortSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for JavaShortSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class JavaShortSyntaxCheckerTest
 {
     JavaShortSyntaxChecker checker = JavaShortSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JpegSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JpegSyntaxCheckerTest.java
index 166ef92..c48c4f5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JpegSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/JpegSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.JpegSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for JpegSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class JpegSyntaxCheckerTest
 {
     JpegSyntaxChecker checker = JpegSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/LdapSyntaxDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/LdapSyntaxDescriptionSyntaxCheckerTest.java
index 3900bce..ddceca4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/LdapSyntaxDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/LdapSyntaxDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.LdapSyntaxDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for LdapSyntaxDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapSyntaxDescriptionSyntaxCheckerTest
 {
     private LdapSyntaxDescriptionSyntaxChecker checker = LdapSyntaxDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MailPreferenceSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MailPreferenceSyntaxCheckerTest.java
index 716a469..43721d8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MailPreferenceSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MailPreferenceSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.MailPreferenceSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for MailPreferenceSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MailPreferenceSyntaxCheckerTest
 {
     MailPreferenceSyntaxChecker checker = MailPreferenceSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MasterAndShadowAccessPointSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MasterAndShadowAccessPointSyntaxCheckerTest.java
index 0e6d5aa..db785f3 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MasterAndShadowAccessPointSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MasterAndShadowAccessPointSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.MasterAndShadowAccessPointSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for MasterAndShadowAccessPointSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MasterAndShadowAccessPointSyntaxCheckerTest
 {
     MasterAndShadowAccessPointSyntaxChecker checker = MasterAndShadowAccessPointSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleDescriptionSyntaxCheckerTest.java
index e09d0a9..a060e7d 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.MatchingRuleDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for MatchingRuleDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MatchingRuleDescriptionSyntaxCheckerTest
 {
     private MatchingRuleDescriptionSyntaxChecker checker = MatchingRuleDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleUseDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleUseDescriptionSyntaxCheckerTest.java
index 59515eb..1fe311b 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleUseDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MatchingRuleUseDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.MatchingRuleUseDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for MatchingRuleUseDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MatchingRuleUseDescriptionSyntaxCheckerTest
 {
     private MatchingRuleUseDescriptionSyntaxChecker checker = MatchingRuleUseDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MhsOrAddressSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MhsOrAddressSyntaxCheckerTest.java
index ee4e071..8b4364b 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MhsOrAddressSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/MhsOrAddressSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.MhsOrAddressSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for MHSORAddressSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MhsOrAddressSyntaxCheckerTest
 {
     MhsOrAddressSyntaxChecker checker = MhsOrAddressSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameAndOptionalUIDSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameAndOptionalUIDSyntaxCheckerTest.java
index c1ca88a..58d5ef8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameAndOptionalUIDSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameAndOptionalUIDSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.NameAndOptionalUIDSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NameAndOptionalUIDSyntaxCheckerTest
 {
     NameAndOptionalUIDSyntaxChecker checker = NameAndOptionalUIDSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameFormDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameFormDescriptionSyntaxCheckerTest.java
index 19e4e95..4857a4a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameFormDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameFormDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.NameFormDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for NameFormDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NameFormDescriptionSyntaxCheckerTest
 {
     private NameFormDescriptionSyntaxChecker checker = NameFormDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameOrNumericIdSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameOrNumericIdSyntaxCheckerTest.java
index 490a723..b3035f5 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameOrNumericIdSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NameOrNumericIdSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.NumericOidSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test case for the NameOrNumericId test.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NameOrNumericIdSyntaxCheckerTest
 {
     NumericOidSyntaxChecker checker = NumericOidSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NumericStringSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NumericStringSyntaxCheckerTest.java
index 0908bc3..416037a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NumericStringSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/NumericStringSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.NumericStringSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for NumericStringSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NumericStringSyntaxCheckerTest
 {
     NumericStringSyntaxChecker checker = NumericStringSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassDescriptionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassDescriptionSyntaxCheckerTest.java
index 0ca0d38..3742bdd 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassDescriptionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassDescriptionSyntaxCheckerTest.java
@@ -20,16 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.ObjectClassDescriptionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for ObjectClassDescriptionSyntaxChecker.
@@ -38,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectClassDescriptionSyntaxCheckerTest
 {
     private ObjectClassDescriptionSyntaxChecker checker = ObjectClassDescriptionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassTypeSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassTypeSyntaxCheckerTest.java
index 7ee52a3..03a63d4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassTypeSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectClassTypeSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.ObjectClassTypeSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for ObjectClassTypeSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectClassTypeSyntaxCheckerTest
 {
     ObjectClassTypeSyntaxChecker checker = ObjectClassTypeSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectNameSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectNameSyntaxCheckerTest.java
index 0f12564..1848050 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectNameSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ObjectNameSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.ObjectNameSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for ObjectNameSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectNameSyntaxCheckerTest
 {
     ObjectNameSyntaxChecker checker = ObjectNameSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OctetStringSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OctetStringSyntaxCheckerTest.java
index 70848a6..561f141 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OctetStringSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OctetStringSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OctetStringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for OctetStringSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class OctetStringSyntaxCheckerTest
 {
     OctetStringSyntaxChecker checker = OctetStringSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OtherMailboxSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OtherMailboxSyntaxCheckerTest.java
index baf97ee..286dc54 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OtherMailboxSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/OtherMailboxSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.OtherMailboxSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for OtherMailboxSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class OtherMailboxSyntaxCheckerTest
 {
     OtherMailboxSyntaxChecker checker = OtherMailboxSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PostalAddressSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PostalAddressSyntaxCheckerTest.java
index ac680ae..40a40de 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PostalAddressSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PostalAddressSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.PostalAddressSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for PostalAddressSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class PostalAddressSyntaxCheckerTest
 {
     PostalAddressSyntaxChecker checker = PostalAddressSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PresentationAddressSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PresentationAddressSyntaxCheckerTest.java
index 92ade7f..2e1471c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PresentationAddressSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PresentationAddressSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.PresentationAddressSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for PresentationAddress.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class PresentationAddressSyntaxCheckerTest
 {
     PresentationAddressSyntaxChecker checker = PresentationAddressSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PrintableStringSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PrintableStringSyntaxCheckerTest.java
index 8cf9bfe..5c66a20 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PrintableStringSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/PrintableStringSyntaxCheckerTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.PrintableStringSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class PrintableStringSyntaxCheckerTest
 {
     PrintableStringSyntaxChecker checker = PrintableStringSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ProtocolInformationSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ProtocolInformationSyntaxCheckerTest.java
index fd289d5..1f1960c 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ProtocolInformationSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/ProtocolInformationSyntaxCheckerTest.java
@@ -20,15 +20,13 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.ProtocolInformationSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -36,8 +34,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ProtocolInformationSyntaxCheckerTest
 {
     ProtocolInformationSyntaxChecker checker = ProtocolInformationSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SubstringAssertionSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SubstringAssertionSyntaxCheckerTest.java
index b4a42c3..1b6a341 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SubstringAssertionSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SubstringAssertionSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.SubstringAssertionSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for SubstringAssertionSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SubstringAssertionSyntaxCheckerTest
 {
     SubstringAssertionSyntaxChecker checker = SubstringAssertionSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierAndConsumerSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierAndConsumerSyntaxCheckerTest.java
index 38805b0..ae62a39 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierAndConsumerSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierAndConsumerSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.SupplierAndConsumerSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for SupplierAndConsumerSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SupplierAndConsumerSyntaxCheckerTest
 {
     SupplierAndConsumerSyntaxChecker checker = SupplierAndConsumerSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierInformationSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierInformationSyntaxCheckerTest.java
index 2dce7b0..400ec91 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierInformationSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierInformationSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.SupplierInformationSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for SupplierInformationSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SupplierInformationSyntaxCheckerTest
 {
     SupplierInformationSyntaxChecker checker = SupplierInformationSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierOrConsumerSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierOrConsumerSyntaxCheckerTest.java
index 48ca1b3..32cc3ad 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierOrConsumerSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupplierOrConsumerSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.SupplierOrConsumerSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for SupplierOrConsumerSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SupplierOrConsumerSyntaxCheckerTest
 {
     SupplierOrConsumerSyntaxChecker checker = SupplierOrConsumerSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupportedAlgorithmSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupportedAlgorithmSyntaxCheckerTest.java
index 7325dac..899a47a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupportedAlgorithmSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/SupportedAlgorithmSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.SupportedAlgorithmSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for SupportedAlgorithmSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SupportedAlgorithmSyntaxCheckerTest
 {
     SupportedAlgorithmSyntaxChecker checker = SupportedAlgorithmSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelephoneNumberSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelephoneNumberSyntaxCheckerTest.java
index 94401aa..e94c037 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelephoneNumberSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelephoneNumberSyntaxCheckerTest.java
@@ -20,25 +20,21 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.TelephoneNumberSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for NumericStringSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class TelephoneNumberSyntaxCheckerTest
 {
     TelephoneNumberSyntaxChecker checker = TelephoneNumberSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TeletexTerminalIdentifierSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TeletexTerminalIdentifierSyntaxCheckerTest.java
index c95f0f1..a600c87 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TeletexTerminalIdentifierSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TeletexTerminalIdentifierSyntaxCheckerTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-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 java.nio.charset.StandardCharsets;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.TeletexTerminalIdentifierSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for TeletexTerminalIdentifierSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class TeletexTerminalIdentifierSyntaxCheckerTest
 {
     TeletexTerminalIdentifierSyntaxChecker checker = TeletexTerminalIdentifierSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelexNumberSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelexNumberSyntaxCheckerTest.java
index ae91bc0..767b413 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelexNumberSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/TelexNumberSyntaxCheckerTest.java
@@ -20,26 +20,22 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-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 java.nio.charset.StandardCharsets;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.TelexNumberSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for TelexNumberSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class TelexNumberSyntaxCheckerTest
 {
     TelexNumberSyntaxChecker checker = TelexNumberSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UtcTimeSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UtcTimeSyntaxCheckerTest.java
index a4406df..7098659 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UtcTimeSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UtcTimeSyntaxCheckerTest.java
@@ -20,24 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.UtcTimeSyntaxChecker;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Test cases for UtcTimeSyntaxChecker.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class UtcTimeSyntaxCheckerTest
 {
     UtcTimeSyntaxChecker checker = UtcTimeSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UuidSyntaxCheckerTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UuidSyntaxCheckerTest.java
index dd37bca..8e067b0 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UuidSyntaxCheckerTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/UuidSyntaxCheckerTest.java
@@ -20,16 +20,14 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.syntaxCheckers.UuidSyntaxChecker;
 import org.apache.directory.api.util.Strings;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -37,8 +35,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class UuidSyntaxCheckerTest
 {
     UuidSyntaxChecker checker = UuidSyntaxChecker.INSTANCE;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserRelaxedTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserRelaxedTest.java
index b30c4a6..f301bfb 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserRelaxedTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserRelaxedTest.java
@@ -20,25 +20,23 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.UsageEnum;
 import org.apache.directory.api.ldap.model.schema.parsers.AttributeTypeDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -46,15 +44,14 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeTypeDescriptionSchemaParserRelaxedTest
 {
     /** the parser instance */
     private AttributeTypeDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new AttributeTypeDescriptionSchemaParser();
@@ -62,7 +59,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserStrictTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserStrictTest.java
index 1191571..5d75e9a 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserStrictTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/AttributeTypeDescriptionSchemaParserStrictTest.java
@@ -20,25 +20,23 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.UsageEnum;
 import org.apache.directory.api.ldap.model.schema.parsers.AttributeTypeDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -46,22 +44,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class AttributeTypeDescriptionSchemaParserStrictTest
 {
     /** the parser instance */
     private AttributeTypeDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new AttributeTypeDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ComparatorDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ComparatorDescriptionSchemaParserTest.java
index 2918b44..1d21267 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ComparatorDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ComparatorDescriptionSchemaParserTest.java
@@ -20,21 +20,19 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.parsers.LdapComparatorDescription;
 import org.apache.directory.api.ldap.model.schema.parsers.LdapComparatorDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-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.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -42,22 +40,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ComparatorDescriptionSchemaParserTest
 {
     /** the parser instance */
     private LdapComparatorDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new LdapComparatorDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserRelaxedTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserRelaxedTest.java
index dd2f97e..23a71d8 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserRelaxedTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserRelaxedTest.java
@@ -20,22 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.DitContentRule;
 import org.apache.directory.api.ldap.model.schema.parsers.DitContentRuleDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,15 +41,14 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitContentRuleDescriptionSchemaParserRelaxedTest
 {
     /** the parser instance */
     private DitContentRuleDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new DitContentRuleDescriptionSchemaParser();
@@ -59,7 +56,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserTest.java
index 64787dc..7c6b149 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitContentRuleDescriptionSchemaParserTest.java
@@ -20,22 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.DitContentRule;
 import org.apache.directory.api.ldap.model.schema.parsers.DitContentRuleDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,22 +41,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitContentRuleDescriptionSchemaParserTest
 {
     /** the parser instance */
     private DitContentRuleDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new DitContentRuleDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserRelaxedTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserRelaxedTest.java
index af6606f..5f612ec 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserRelaxedTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserRelaxedTest.java
@@ -20,22 +20,21 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.DitStructureRule;
 import org.apache.directory.api.ldap.model.schema.parsers.DitStructureRuleDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-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.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
 
 
 /**
@@ -43,15 +42,14 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitStructureRuleDescriptionSchemaParserRelaxedTest
 {
     /** the parser instance */
     private DitStructureRuleDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new DitStructureRuleDescriptionSchemaParser();
@@ -59,7 +57,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserStrictTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserStrictTest.java
index 7e6dc9e..ff8c4b7 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserStrictTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/DitStructureRuleDescriptionSchemaParserStrictTest.java
@@ -20,22 +20,20 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.DitStructureRule;
 import org.apache.directory.api.ldap.model.schema.parsers.DitStructureRuleDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -43,22 +41,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class DitStructureRuleDescriptionSchemaParserStrictTest
 {
     /** the parser instance */
     private DitStructureRuleDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new DitStructureRuleDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/LdapSyntaxDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/LdapSyntaxDescriptionSchemaParserTest.java
index 30e8733..e65d8f4 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/LdapSyntaxDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/LdapSyntaxDescriptionSchemaParserTest.java
@@ -20,20 +20,18 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-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 java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.LdapSyntax;
 import org.apache.directory.api.ldap.model.schema.parsers.LdapSyntaxDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,22 +39,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapSyntaxDescriptionSchemaParserTest
 {
     /** the parser instance */
     private LdapSyntaxDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new LdapSyntaxDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleDescriptionSchemaParserTest.java
index 78a155a..c080684 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleDescriptionSchemaParserTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
@@ -33,13 +33,11 @@
 
 import org.apache.directory.api.ldap.model.schema.MatchingRule;
 import org.apache.directory.api.ldap.model.schema.parsers.MatchingRuleDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -47,22 +45,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MatchingRuleDescriptionSchemaParserTest
 {
     /** the parser instance */
     private MatchingRuleDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new MatchingRuleDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleUseDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleUseDescriptionSchemaParserTest.java
index 2062717..2c0c015 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleUseDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/MatchingRuleUseDescriptionSchemaParserTest.java
@@ -20,24 +20,22 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.schema.MatchingRuleUse;
 import org.apache.directory.api.ldap.model.schema.parsers.MatchingRuleUseDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -45,22 +43,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MatchingRuleUseDescriptionSchemaParserTest
 {
     /** the parser instance */
     private MatchingRuleUseDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new MatchingRuleUseDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NameFormDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NameFormDescriptionSchemaParserTest.java
index 2628649..52dab78 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NameFormDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NameFormDescriptionSchemaParserTest.java
@@ -20,23 +20,21 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.schema.NameForm;
 import org.apache.directory.api.ldap.model.schema.parsers.NameFormDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -44,22 +42,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NameFormDescriptionSchemaParserTest
 {
     /** the parser instance */
     private NameFormDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new NameFormDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NormalizerDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NormalizerDescriptionSchemaParserTest.java
index 5f037d9..58119db 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NormalizerDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/NormalizerDescriptionSchemaParserTest.java
@@ -20,20 +20,18 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-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 java.text.ParseException;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.parsers.NormalizerDescription;
 import org.apache.directory.api.ldap.model.schema.parsers.NormalizerDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-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.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,22 +39,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class NormalizerDescriptionSchemaParserTest
 {
     /** the parser instance */
     private NormalizerDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new NormalizerDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserRelaxedTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserRelaxedTest.java
index b55e564..09ba6a9 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserRelaxedTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserRelaxedTest.java
@@ -20,11 +20,11 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
@@ -33,13 +33,11 @@
 import org.apache.directory.api.ldap.model.schema.ObjectClass;
 import org.apache.directory.api.ldap.model.schema.ObjectClassTypeEnum;
 import org.apache.directory.api.ldap.model.schema.parsers.ObjectClassDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -47,15 +45,14 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectClassDescriptionSchemaParserRelaxedTest
 {
     /** the parser instance */
     private ObjectClassDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new ObjectClassDescriptionSchemaParser();
@@ -63,7 +60,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserStrictTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserStrictTest.java
index 763da65..38705bb 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserStrictTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/ObjectClassDescriptionSchemaParserStrictTest.java
@@ -20,11 +20,11 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 
@@ -33,13 +33,11 @@
 import org.apache.directory.api.ldap.model.schema.ObjectClass;
 import org.apache.directory.api.ldap.model.schema.ObjectClassTypeEnum;
 import org.apache.directory.api.ldap.model.schema.parsers.ObjectClassDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -47,22 +45,21 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ObjectClassDescriptionSchemaParserStrictTest
 {
     /** the parser instance */
     private ObjectClassDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new ObjectClassDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SchemaParserTestUtils.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SchemaParserTestUtils.java
index f7b87c2..a1a7068 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SchemaParserTestUtils.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SchemaParserTestUtils.java
@@ -20,11 +20,11 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.text.ParseException;
 import java.util.ArrayList;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SyntaxCheckerDescriptionSchemaParserTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SyntaxCheckerDescriptionSchemaParserTest.java
index beb8af6..f1bbe82 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SyntaxCheckerDescriptionSchemaParserTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/syntaxes/parser/SyntaxCheckerDescriptionSchemaParserTest.java
@@ -20,21 +20,19 @@
 package org.apache.directory.api.ldap.model.schema.syntaxes.parser;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.text.ParseException;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.ldap.model.schema.parsers.SyntaxCheckerDescription;
 import org.apache.directory.api.ldap.model.schema.parsers.SyntaxCheckerDescriptionSchemaParser;
-import org.junit.After;
-import org.junit.Before;
 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.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -42,8 +40,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class SyntaxCheckerDescriptionSchemaParserTest
 {
     private static final String OID = "1.3.6.1.4.1.18060.0.4.0.2.10000";
@@ -55,14 +52,14 @@
     private SyntaxCheckerDescriptionSchemaParser parser;
 
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception
     {
         parser = new SyntaxCheckerDescriptionSchemaParser();
     }
 
 
-    @After
+    @AfterEach
     public void tearDown() throws Exception
     {
         parser = null;
diff --git a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/url/LdapUrlTest.java b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/url/LdapUrlTest.java
index 2a1109b..baf970d 100644
--- a/ldap/model/src/test/java/org/apache/directory/api/ldap/model/url/LdapUrlTest.java
+++ b/ldap/model/src/test/java/org/apache/directory/api/ldap/model/url/LdapUrlTest.java
@@ -20,12 +20,13 @@
 package org.apache.directory.api.ldap.model.url;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -37,11 +38,10 @@
 import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.api.ldap.model.url.LdapUrl;
 import org.apache.directory.api.ldap.model.url.LdapUrl.Extension;
-import org.junit.Test;
-import org.junit.runner.RunWith;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -49,8 +49,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class LdapUrlTest
 {
     /**
@@ -97,40 +96,52 @@
     /**
      * test a LdapUrl with a bad port
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnBadPort() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:/" );
+        } );
     }
 
 
     /**
      * test a LdapUrl with a bad port 2
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnBadPort2() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:-1/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:-1/" );
+        } );
     }
 
 
     /**
      * test a LdapUrl with a bad port 3
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnBadPort3() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:abc/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:abc/" );
+        } );
     }
 
 
     /**
      * test a LdapUrl with a bad port 4
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnBadPort4() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:65536/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:65536/" );
+        } );
     }
 
 
@@ -261,10 +272,13 @@
     /**
      * test a LdapUrl with a bad IP host 4
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnBadHostIP4() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://1.1.1.1.1/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://1.1.1.1.1/" );
+        } );
     }
 
 
@@ -297,10 +311,13 @@
      * test a bad LdapUrl IPv6 host
      * @throws LdapURLEncodingException 
      */
-    @Test( expected=LdapURLEncodingException.class )
+    @Test
     public void testDnIPv6BadHost() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://[:]/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://[:]/" );
+        } );
     }
 
 
@@ -308,10 +325,13 @@
      * test a bad LdapUrl IPv6 host
      * @throws LdapURLEncodingException 
      */
-    @Test( expected=LdapURLEncodingException.class )
+    @Test
     public void testDnIPv6BadHost2() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://[1::2::3]/" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://[1::2::3]/" );
+        } );
     }
 
 
@@ -351,20 +371,26 @@
     /**
      * test a LdapUrl with an invalid Dn
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnInvalidDN() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:389/dc=example%202,dc : org" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:389/dc=example%202,dc : org" );
+        } );
     }
 
 
     /**
      * test a LdapUrl with an invalid Dn 2
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testDnInvalidDN2() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:389/dc=example%202,dc = org," );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:389/dc=example%202,dc = org," );
+        } );
     }
 
 
@@ -404,10 +430,13 @@
     /**
      * test a LdapUrl with invalid attributes
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testLdapInvalideAttributes() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://directory.apache.org:389/dc=example,dc=org?ou=,dc" );
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://directory.apache.org:389/dc=example,dc=org?ou=,dc" );
+        } );
     }
 
 
@@ -766,12 +795,13 @@
      * test a LdapUrl with no host, a port, and a Dn
      *
      */
-    @Test(expected = LdapURLEncodingException.class)
+    @Test
     public void testLdapURLNoHostPortDN() throws LdapURLEncodingException
     {
-        new LdapUrl( "ldap://:123/ou=system" );
-
-        fail();
+        assertThrows( LdapURLEncodingException.class, () ->
+        {
+            new LdapUrl( "ldap://:123/ou=system" );
+        } );
     }
 
 
diff --git a/ldap/schema/converter/pom.xml b/ldap/schema/converter/pom.xml
index 7c96993..48925c5 100644
--- a/ldap/schema/converter/pom.xml
+++ b/ldap/schema/converter/pom.xml
@@ -32,8 +32,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
diff --git a/ldap/schema/converter/src/test/java/org/apache/directory/api/ldap/schema/converter/TestSchemaToLdif.java b/ldap/schema/converter/src/test/java/org/apache/directory/api/ldap/schema/converter/TestSchemaToLdif.java
index 561cd35..0a219e3 100644
--- a/ldap/schema/converter/src/test/java/org/apache/directory/api/ldap/schema/converter/TestSchemaToLdif.java
+++ b/ldap/schema/converter/src/test/java/org/apache/directory/api/ldap/schema/converter/TestSchemaToLdif.java
@@ -20,7 +20,8 @@
 package org.apache.directory.api.ldap.schema.converter;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.io.IOException;
 import java.io.StringWriter;
@@ -28,15 +29,16 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
-
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+/**
+ * Test the schema converter
+ *  
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@Execution( ExecutionMode.CONCURRENT )
 public class TestSchemaToLdif
 {
     private static final String HEADER =
@@ -884,9 +886,12 @@
     }
 
 
-    @Test(expected = ParserException.class)
+    @Test
     public void testConvertWrongLdif() throws ParserException, IOException
     {
-        transform( "testWrongLdif" );
+        assertThrows( ParserException.class, ( ) ->
+        {
+            transform( "testWrongLdif" );
+        } );
     }
 }
diff --git a/ldap/schema/data/pom.xml b/ldap/schema/data/pom.xml
index 2cf7532..ca284fe 100644
--- a/ldap/schema/data/pom.xml
+++ b/ldap/schema/data/pom.xml
@@ -36,8 +36,14 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <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>
     
@@ -67,6 +73,13 @@
           <systemPropertyVariables>
             <workingDirectory>${basedir}/target</workingDirectory>
           </systemPropertyVariables>
+          <parallel>all</parallel>
+          <threadCount>10</threadCount>
+          <properties>
+            <configurationParameters>
+              junit.jupiter.execution.parallel.enabled=true
+            </configurationParameters>
+          </properties>
         </configuration>
       </plugin>
       <plugin>
diff --git a/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java b/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
index 42f7633..9da424a 100644
--- a/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
+++ b/ldap/schema/data/src/main/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManager.java
@@ -135,6 +135,7 @@
     public DefaultSchemaManager()
     {
         this( STRICT, jarLdifSchemaLoader().getAllSchemas() );
+        
         try
         {
             loadAllEnabled();
@@ -164,6 +165,24 @@
     }
 
     
+    /*
+     * Static helper factory Create LDIF based SchemaLoader
+     */
+    private static SchemaLoader jarLdifSchemaLoader()
+    {
+        try
+        {
+            return new JarLdifSchemaLoader();
+        }
+        catch ( LdapException | IOException e )
+        {
+            LOG.error( I18n.err( I18n.ERR_16080_SCHEMA_LOADER_CANT_BE_CREATED, e.getMessage() ) );
+            throw new RuntimeException( e.getMessage() );
+        }
+    }
+
+
+    
     /**
      * Creates a new instance of DefaultSchemaManager with the default schema schemaLoader
      * Strict schema validation
@@ -172,7 +191,7 @@
      */
     public DefaultSchemaManager( Collection<Schema> schemas )
     {
-       this( STRICT, schemas );
+        this( STRICT, schemas );
     }
 
     
@@ -180,7 +199,7 @@
      * Creates a new instance of DefaultSchemaManager with the given schemaLoader
      *
      * Schema validation strictness (i.e. relaxed/strict) controlled by the given schemaLoader
-     *
+     * 
      * @param schemaLoader The schemaLoader containing the schemas to load
      */
     public DefaultSchemaManager( SchemaLoader schemaLoader )
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/extractor/SchemaLdifExtractorTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/extractor/SchemaLdifExtractorTest.java
index 512aa78..088d855 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/extractor/SchemaLdifExtractorTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/extractor/SchemaLdifExtractorTest.java
@@ -25,28 +25,24 @@
 
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.util.FileUtils;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * Tests the DefaultSchemaLdifExtractor class.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaLdifExtractorTest
 {
     private static String workingDirectory;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws IOException
     {
         workingDirectory = System.getProperty( "workingDirectory" );
@@ -63,7 +59,7 @@
     }
 
 
-    @AfterClass
+    @AfterAll
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/JarLdifSchemaLoaderTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/JarLdifSchemaLoaderTest.java
index 269652a..ecb98d6 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/JarLdifSchemaLoaderTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/JarLdifSchemaLoaderTest.java
@@ -20,17 +20,15 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -38,8 +36,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class JarLdifSchemaLoaderTest
 {
     @Test
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/LdifSchemaLoaderTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/LdifSchemaLoaderTest.java
index d988615..789f86e 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/LdifSchemaLoaderTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/LdifSchemaLoaderTest.java
@@ -20,11 +20,13 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.schema.extractor.SchemaLdifExtractor;
@@ -32,13 +34,11 @@
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.FileUtils;
 import org.apache.directory.api.util.exception.Exceptions;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -46,45 +46,32 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class LdifSchemaLoaderTest
 {
-    private static String workingDirectory;
+    private static Path tmpFolder;
 
-
-    @BeforeClass
-    public static void setup() throws IOException
+    @BeforeEach
+    public void setup() throws IOException
     {
-        workingDirectory = System.getProperty( "workingDirectory" );
-
-        if ( workingDirectory == null )
-        {
-            String path = LdifSchemaLoaderTest.class.getResource( "" ).getPath();
-            int targetPos = path.indexOf( "target" );
-            workingDirectory = path.substring( 0, targetPos + 6 );
-        }
-
-        // Cleanup the target directory
-        FileUtils.deleteDirectory( new File( workingDirectory + "/schema" ) );
+        tmpFolder = Files.createTempDirectory( LdifSchemaLoaderTest.class.getSimpleName() );
     }
-
-
-    @AfterClass
-    public static void cleanup() throws IOException
+    
+    
+    @AfterEach
+    public void cleanup()
     {
-        // Cleanup the target directory
-        FileUtils.deleteDirectory( new File( workingDirectory + "/schema" ) );
+        FileUtils.deleteQuietly( tmpFolder.toFile() );
     }
 
 
     @Test
     public void testLoader() throws Exception
     {
-        SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( new File( workingDirectory ) );
+        SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( tmpFolder.toFile() );
         extractor.extractOrCopy();
 
-        LdifSchemaLoader loader = new LdifSchemaLoader( new File( workingDirectory, "schema" ) );
+        LdifSchemaLoader loader = new LdifSchemaLoader( new File( tmpFolder.toFile(), "schema" ) );
         SchemaManager sm = new DefaultSchemaManager( loader );
 
         boolean loaded = sm.loadAllEnabled();
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/MatchingRuleTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/MatchingRuleTest.java
index 125aef9..7ac4808 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/MatchingRuleTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/MatchingRuleTest.java
@@ -20,15 +20,21 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.File;
-import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 
 import org.apache.directory.api.util.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.MatchingRule;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
@@ -43,69 +49,46 @@
 import org.apache.directory.api.ldap.schema.extractor.SchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 
 /**
  * Tests that matching rules of the schema use correct normalizers and comparators.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class MatchingRuleTest
 {
     // A directory in which the ldif files will be stored
-    private static String workingDirectory;
-
-    // The schema repository
-    private static File schemaRepository;
+    private static Path tmpFolder;
 
     // The schema manager
     private static SchemaManager schemaManager;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
-        workingDirectory = System.getProperty( "workingDirectory" );
+        tmpFolder = Files.createTempDirectory( MatchingRuleTest.class.getSimpleName() );
 
-        if ( workingDirectory == null )
-        {
-            String path = MatchingRuleTest.class.getResource( "" ).getPath();
-            int targetPos = path.indexOf( "target" );
-            workingDirectory = path.substring( 0, targetPos + 6 );
-        }
-
-        schemaRepository = new File( workingDirectory, "schema" );
-
-        // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
-
-        SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( new File( workingDirectory ) );
+        SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( tmpFolder.toFile() );
         extractor.extractOrCopy();
 
-        LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository );
+        LdifSchemaLoader loader = new LdifSchemaLoader( new File( tmpFolder.toFile(), "schema" ) );
         schemaManager = new DefaultSchemaManager( loader );
+        
         for ( Schema schema : loader.getAllSchemas() )
         {
             schema.enable();
         }
+        
         schemaManager.loadAllEnabled();
     }
-
-
-    @AfterClass
-    public static void cleanup() throws IOException
+    
+    
+    @AfterAll
+    public static void cleanup()
     {
-        // Cleanup the target directory
-        FileUtils.deleteDirectory( schemaRepository );
+        FileUtils.deleteQuietly( tmpFolder.toFile() );
     }
 
 
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerAddTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerAddTest.java
index 4a74132..2a3917d 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerAddTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerAddTest.java
@@ -20,11 +20,11 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,6 +33,11 @@
 import java.util.Set;
 
 import org.apache.directory.api.util.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapSchemaException;
@@ -55,22 +60,13 @@
 import org.apache.directory.api.ldap.schema.extractor.SchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 
 /**
  * A test class for SchemaManager, testig the addition of a SchemaObject.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaManagerAddTest
 {
     // A directory in which the ldif files will be stored
@@ -80,7 +76,7 @@
     private static File schemaRepository;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         workingDirectory = System.getProperty( "workingDirectory" );
@@ -105,7 +101,7 @@
     }
 
 
-    @AfterClass
+    @AfterAll
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerDelTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerDelTest.java
index f7def78..44cd8d1 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerDelTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerDelTest.java
@@ -20,17 +20,22 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
 
 import org.apache.directory.api.util.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.exception.LdapException;
 import org.apache.directory.api.ldap.model.exception.LdapProtocolErrorException;
@@ -48,22 +53,13 @@
 import org.apache.directory.api.ldap.schema.extractor.SchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 
 /**
  * A test class for SchemaManager, testing the deletion of a SchemaObject.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaManagerDelTest
 {
     // A directory in which the ldif files will be stored
@@ -73,7 +69,7 @@
     private static File schemaRepository;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         workingDirectory = System.getProperty( "workingDirectory" );
@@ -98,7 +94,7 @@
     }
 
 
-    @AfterClass
+    @AfterAll
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerEnableDisableLoadTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerEnableDisableLoadTest.java
index ba0ca7e..084703d 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerEnableDisableLoadTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerEnableDisableLoadTest.java
@@ -20,12 +20,12 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.IOException;
@@ -41,23 +41,19 @@
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
 import org.apache.directory.api.util.Strings;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test class for SchemaManager enable/disable and loadAllEnbled() methods.
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaManagerEnableDisableLoadTest
 {
     // A directory in which the ldif files will be stored
@@ -83,7 +79,7 @@
     private List<String> disabledSchemas = Arrays.asList( "nis", "autofs", "apachedns", "dhcp", "samba", "corba" );
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         workingDirectory = System.getProperty( "workingDirectory" );
@@ -108,7 +104,7 @@
     }
 
 
-    @Before
+    @BeforeEach
     public void init() throws Exception
     {
         LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository );
@@ -116,7 +112,7 @@
     }
 
 
-    @AfterClass
+    @AfterAll
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadTest.java
index 83f7c42..93977c8 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadTest.java
@@ -20,17 +20,21 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.IOException;
 
 import org.apache.directory.api.util.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
 import org.apache.directory.api.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.api.ldap.model.schema.AttributeType;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
@@ -39,10 +43,6 @@
 import org.apache.directory.api.ldap.schema.extractor.SchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
 
 
 /**
@@ -166,8 +166,6 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-//@RunWith(ConcurrentJunitRunner.class)
-//@Concurrency()
 public class SchemaManagerLoadTest
 {
     // A directory in which the ldif files will be stored
@@ -177,7 +175,7 @@
     private static File schemaRepository;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         workingDirectory = System.getProperty( "workingDirectory" );
@@ -202,7 +200,7 @@
     }
 
 
-    @AfterClass
+    @AfterAll
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
@@ -658,7 +656,7 @@
     /**
      * test loading the "InetOrgPerson", "core" and a disabled schema
      */
-    @Ignore("ignoring for the moment to let the other tests run on CI")
+    @Disabled("ignoring for the moment to let the other tests run on CI")
     @Test
     public void testLoadCoreInetOrgPersonAndNis() throws Exception
     {
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadWithDepsTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadWithDepsTest.java
index 93d83e7..722c209 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadWithDepsTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/loader/SchemaManagerLoadWithDepsTest.java
@@ -20,16 +20,21 @@
 package org.apache.directory.api.ldap.schema.loader;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.File;
 import java.io.IOException;
 
 import org.apache.directory.api.util.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.apache.directory.api.ldap.model.exception.LdapUnwillingToPerformException;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
 import org.apache.directory.api.ldap.model.schema.registries.DefaultSchema;
@@ -37,14 +42,6 @@
 import org.apache.directory.api.ldap.schema.extractor.SchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
 import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 
 /**
  * A test class for SchemaManager loadWithDeps() method. We test those methods here :
@@ -59,8 +56,7 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution( ExecutionMode.CONCURRENT )
 public class SchemaManagerLoadWithDepsTest
 {
     // A directory in which the ldif files will be stored
@@ -70,7 +66,7 @@
     private static File schemaRepository;
 
 
-    @BeforeClass
+    @BeforeAll
     public static void setup() throws Exception
     {
         workingDirectory = System.getProperty( "workingDirectory" );
@@ -95,7 +91,7 @@
     }
 
 
-    @AfterClass
+    @AfterAll
     public static void cleanup() throws IOException
     {
         // Cleanup the target directory
diff --git a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManagerTest.java b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManagerTest.java
index 76af2d8..7e16a3e 100644
--- a/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManagerTest.java
+++ b/ldap/schema/data/src/test/java/org/apache/directory/api/ldap/schema/manager/impl/DefaultSchemaManagerTest.java
@@ -21,7 +21,7 @@
 
 
 import org.apache.directory.api.ldap.model.schema.SyntaxChecker;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 
 /**
diff --git a/pom.xml b/pom.xml
index 7b0352d..da462e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,6 @@
     
     <!-- Set versions for depending projects -->
     <skin.version>1.0.3</skin.version>
-    <org.apache.directory.junit.junit-addons.version>2.0.0</org.apache.directory.junit.junit-addons.version>
     <org.apache.directory.checkstyle-configuration.version>2.0.0</org.apache.directory.checkstyle-configuration.version>
     
     <!-- Set versions for depending jars -->
@@ -63,7 +62,9 @@
     <commons.pool.version>2.6.1</commons.pool.version>
     <dom4j.version>2.1.1</dom4j.version>
     <forbiddenapis.version>2.5</forbiddenapis.version>
-    <junit.version>4.12</junit.version>
+    <hamcrest.version>2.1</hamcrest.version>
+    <junit.engine.version>5.4.2</junit.engine.version>
+    <junit.platform.version>1.4.2</junit.platform.version>
     <log4j.version>1.2.17</log4j.version>
     <logback.version>1.2.3</logback.version>
     <mina.core.version>2.1.2</mina.core.version>
@@ -129,13 +130,26 @@
         </plugin>
 
         <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <configuration>
+            <parallel>all</parallel>
+            <threadCount>10</threadCount>
+            <properties>
+              <configurationParameters>
+                junit.jupiter.execution.parallel.enabled=true
+              </configurationParameters>
+            </properties>
+          </configuration>
+        </plugin>
+
+        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-report-plugin</artifactId>
           <configuration>
             <aggregate>true</aggregate>
-           <forkCount>3</forkCount>
-           <reuseForks>true</reuseForks>
-           <argLine>-Xmx2048m -XX:MaxPermSize=512</argLine>
+            <forkCount>3</forkCount>
+            <reuseForks>true</reuseForks>
+            <argLine>-Xmx2048m -XX:MaxPermSize=512</argLine>
           </configuration>
         </plugin>
 
@@ -521,13 +535,6 @@
       </dependency>
 
       <!-- Test dependencies -->
-
-      <dependency>
-        <groupId>org.apache.directory.junit</groupId>
-        <artifactId>junit-addons</artifactId>
-        <version>${org.apache.directory.junit.junit-addons.version}</version>
-      </dependency>
-
       <dependency>
           <groupId>org.ops4j.pax.exam</groupId>
           <artifactId>pax-exam-container-forked</artifactId>
@@ -605,9 +612,23 @@
       </dependency>
 
       <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>${junit.version}</version>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-engine</artifactId>
+        <version>${junit.engine.version}</version>
+      </dependency>
+      
+      <dependency>
+        <groupId>org.junit.platform</groupId>
+        <artifactId>junit-platform-runner</artifactId>
+        <version>${junit.platform.version}</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.hamcrest</groupId>
+        <artifactId>hamcrest-library</artifactId>
+        <version>${hamcrest.version}</version>
+        <scope>test</scope>
       </dependency>
 
       <dependency>
diff --git a/util/pom.xml b/util/pom.xml
index 6be1519..862f78b 100644
--- a/util/pom.xml
+++ b/util/pom.xml
@@ -33,8 +33,20 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.directory.junit</groupId>
-      <artifactId>junit-addons</artifactId>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>hamcrest-library</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>
     
diff --git a/util/src/test/java/org/apache/directory/api/util/ByteBufferTest.java b/util/src/test/java/org/apache/directory/api/util/ByteBufferTest.java
index a2e4326..0ea2a35 100644
--- a/util/src/test/java/org/apache/directory/api/util/ByteBufferTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/ByteBufferTest.java
@@ -22,20 +22,16 @@
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 /**
  * A test case for a dynamically growing byte[]. 
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class ByteBufferTest
 {
     @Test
diff --git a/util/src/test/java/org/apache/directory/api/util/DateUtilTest.java b/util/src/test/java/org/apache/directory/api/util/DateUtilTest.java
index aa4e688..45b11ad 100644
--- a/util/src/test/java/org/apache/directory/api/util/DateUtilTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/DateUtilTest.java
@@ -20,9 +20,9 @@
 
 package org.apache.directory.api.util;
 
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.fail;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * A class to test DateUtils
diff --git a/util/src/test/java/org/apache/directory/api/util/FileUtilsTest.java b/util/src/test/java/org/apache/directory/api/util/FileUtilsTest.java
index 02da1ca..94ab39c 100644
--- a/util/src/test/java/org/apache/directory/api/util/FileUtilsTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/FileUtilsTest.java
@@ -21,16 +21,18 @@
 package org.apache.directory.api.util;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.File;
+import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for FileUtils.
@@ -39,15 +41,26 @@
  */
 public class FileUtilsTest
 {
-
-    @Rule
-    public TemporaryFolder tmpFolder = new TemporaryFolder();
+    private  Path tmpFolder;
+    
+    @BeforeEach
+    public void init() throws IOException
+    {
+        tmpFolder = Files.createTempDirectory( FileUtilsTest.class.getSimpleName() );
+    }
+    
+    
+    @AfterEach
+    public void cleanup()
+    {
+        FileUtils.deleteQuietly( tmpFolder.toFile() );
+    }
 
 
     @Test
     public void testOpenOutputStreamAppendToNonExistingFileInNonExistingFolder() throws Exception
     {
-        File nonExistingFile = new File( tmpFolder.getRoot(),
+        File nonExistingFile = new File( tmpFolder.toFile(),
             "testOpenOutputStreamAppendToNonExistingFileInNonExistingFolder/testOpenOutputStreamAppendToNonExistingFileInNonExistingFolder" );
 
         OutputStream os1 = FileUtils.openOutputStream( nonExistingFile, true );
@@ -71,7 +84,7 @@
     @Test
     public void testOpenOutputStreamAppendToExistingFile() throws Exception
     {
-        File existingFile = tmpFolder.newFile( "testOpenOutputStreamAppendToExistingFile" );
+        File existingFile = new File( tmpFolder.toFile(), "testOpenOutputStreamAppendToExistingFile" );
         FileUtils.writeStringToFile( existingFile, "abc", StandardCharsets.UTF_8, false );
 
         OutputStream os = FileUtils.openOutputStream( existingFile, true );
@@ -89,7 +102,7 @@
     @Test
     public void testOpenOutputStreamNotAppendToNonExistingFile() throws Exception
     {
-        File nonExistingFile = new File( tmpFolder.getRoot(),
+        File nonExistingFile = new File( tmpFolder.toFile(),
             "testOpenOutputStreamNotAppendToNonExistingFile/testOpenOutputStreamNotAppendToNonExistingFile" );
 
         OutputStream os1 = FileUtils.openOutputStream( nonExistingFile, false );
@@ -113,7 +126,7 @@
     @Test
     public void testOpenOutputStreamNotAppendToExistingFile() throws Exception
     {
-        File existingFile = tmpFolder.newFile( "testOpenOutputStreamNotAppendToExistingFile" );
+        File existingFile = new File( tmpFolder.toFile(), "testOpenOutputStreamNotAppendToExistingFile" );
         FileUtils.writeStringToFile( existingFile, "abc", StandardCharsets.UTF_8, false );
 
         OutputStream os = FileUtils.openOutputStream( existingFile, false );
diff --git a/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java b/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java
index 7e16b7f..9aeaee9 100644
--- a/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/GeneralizedTimeTest.java
@@ -37,13 +37,11 @@
 import java.util.Locale;
 import java.util.TimeZone;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
 import org.apache.directory.api.util.GeneralizedTime.Format;
 import org.apache.directory.api.util.GeneralizedTime.TimeZoneFormat;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,8 +51,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class GeneralizedTimeTest
 {
     private static final Logger LOG = LoggerFactory.getLogger( GeneralizedTimeTest.class );
diff --git a/util/src/test/java/org/apache/directory/api/util/HexTest.java b/util/src/test/java/org/apache/directory/api/util/HexTest.java
index 318a554..5c630e5 100644
--- a/util/src/test/java/org/apache/directory/api/util/HexTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/HexTest.java
@@ -20,11 +20,9 @@
 package org.apache.directory.api.util;
 
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 import javax.naming.NamingException;
 
@@ -37,8 +35,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class HexTest
 {
     @Test
diff --git a/util/src/test/java/org/apache/directory/api/util/MethodUtilsTest.java b/util/src/test/java/org/apache/directory/api/util/MethodUtilsTest.java
index 4961982..8f53ed2 100644
--- a/util/src/test/java/org/apache/directory/api/util/MethodUtilsTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/MethodUtilsTest.java
@@ -29,11 +29,9 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -41,8 +39,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class MethodUtilsTest
 {
     private static class TestClass
diff --git a/util/src/test/java/org/apache/directory/api/util/StringsTest.java b/util/src/test/java/org/apache/directory/api/util/StringsTest.java
index a2f1058..cabb08c 100644
--- a/util/src/test/java/org/apache/directory/api/util/StringsTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/StringsTest.java
@@ -20,8 +20,8 @@
 package org.apache.directory.api.util;
 
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -30,11 +30,9 @@
 import java.util.Map;
 import java.util.UUID;
 
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -42,8 +40,7 @@
  * 
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class StringsTest
 {
     private static final byte[] AZERTY = "azerty".getBytes( StandardCharsets.US_ASCII );
diff --git a/util/src/test/java/org/apache/directory/api/util/UnicodeTest.java b/util/src/test/java/org/apache/directory/api/util/UnicodeTest.java
index 36a728f..efd979e 100644
--- a/util/src/test/java/org/apache/directory/api/util/UnicodeTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/UnicodeTest.java
@@ -20,7 +20,7 @@
 package org.apache.directory.api.util;
 
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -28,17 +28,15 @@
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Arrays;
 
-import com.mycila.junit.concurrent.Concurrency;
-import com.mycila.junit.concurrent.ConcurrentJunitRunner;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.Execution;
+import org.junit.jupiter.api.parallel.ExecutionMode;
 
 
 /**
@@ -46,28 +44,24 @@
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */
-@RunWith(ConcurrentJunitRunner.class)
-@Concurrency()
+@Execution(ExecutionMode.CONCURRENT)
 public class UnicodeTest
 {
-    /** Uses a temporary folder rule */
-    @Rule 
-    public TemporaryFolder tmpFolder= new TemporaryFolder();
-
     /** The file stream we use for this test */
+    private  Path tmpFolder;
     private FileOutputStream fos = null;
     private FileInputStream fis = null;
-
-
-    /**
-     * Initialize the temporary folder and the associated streams
-     */
-    @Before
-    public void init()
+    
+    @BeforeEach
+    public void init() throws IOException
     {
+        tmpFolder = Files.createTempDirectory( FileUtilsTest.class.getSimpleName() );
+        tmpFolder.toFile().deleteOnExit();
+        
         try
         {
-            File tmpFile = tmpFolder.newFile( "UTFUtils.test" );
+            File tmpFile = File.createTempFile( tmpFolder.toFile().getAbsolutePath(), "UTFUtils.test" );
+            tmpFile.deleteOnExit();
             fos = new FileOutputStream( tmpFile );
             fis = new FileInputStream( tmpFile );
         }
@@ -80,7 +74,7 @@
     /**
      * Cleanup the streams after each test
      */
-    @After
+    @AfterEach
     public void reset()
     {
         try
diff --git a/util/src/test/java/org/apache/directory/api/util/exception/MultiExceptionTest.java b/util/src/test/java/org/apache/directory/api/util/exception/MultiExceptionTest.java
index 7604808..63b624c 100644
--- a/util/src/test/java/org/apache/directory/api/util/exception/MultiExceptionTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/exception/MultiExceptionTest.java
@@ -22,17 +22,16 @@
 
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 
-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;
 
 /**
  * 
@@ -43,7 +42,7 @@
     private PrintStream originalOut;
     private PrintStream originalErr;
 
-    @Before
+    @BeforeEach
     public void setUp()
     {
         originalOut = System.out;
@@ -51,7 +50,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown()
     {
         System.setOut( originalOut );
diff --git a/util/src/test/java/org/apache/directory/api/util/exception/RuntimeMultiExceptionTest.java b/util/src/test/java/org/apache/directory/api/util/exception/RuntimeMultiExceptionTest.java
index 87a11c6..a935beb 100644
--- a/util/src/test/java/org/apache/directory/api/util/exception/RuntimeMultiExceptionTest.java
+++ b/util/src/test/java/org/apache/directory/api/util/exception/RuntimeMultiExceptionTest.java
@@ -22,17 +22,16 @@
 
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.StringWriter;
 
-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;
 
 /**
  * 
@@ -44,7 +43,7 @@
     private PrintStream originalErr;
 
 
-    @Before
+    @BeforeEach
     public void setUp()
     {
         originalOut = System.out;
@@ -52,7 +51,7 @@
     }
 
 
-    @After
+    @AfterEach
     public void tearDown()
     {
         System.setOut( originalOut );
@@ -79,27 +78,22 @@
         assertThat( customOut.toString(), containsString( "nested1" ) );
         assertThat( customOut.toString(), containsString( "nested2" ) );
         assertThat( systemOut.size(), equalTo( 0 ) );
-    }
 
+        ByteArrayOutputStream systemOut2 = new ByteArrayOutputStream();
+        PrintStream systemPrintStream2 = new PrintStream( systemOut2 );
+        System.setOut( systemPrintStream2 );
+        System.setErr( systemPrintStream2 );
 
-    @Test
-    public void testPrintStacktraceToPrintStreamDoesNotWriteToSystemOutErr()
-    {
-        ByteArrayOutputStream systemOut = new ByteArrayOutputStream();
-        PrintStream systemPrintStream = new PrintStream( systemOut );
-        System.setOut( systemPrintStream );
-        System.setErr( systemPrintStream );
-
-        ByteArrayOutputStream customOut = new ByteArrayOutputStream();
-        PrintStream customPrintWriter = new PrintStream( customOut );
-        RuntimeMultiException runtimeMultiException = new RuntimeMultiException( "multi" );
+        ByteArrayOutputStream customOut2 = new ByteArrayOutputStream();
+        PrintStream customPrintWriter2 = new PrintStream( customOut2 );
+        runtimeMultiException = new RuntimeMultiException( "multi" );
         runtimeMultiException.addThrowable( new Exception( "nested1" ) );
         runtimeMultiException.addThrowable( new Exception( "nested2" ) );
-        runtimeMultiException.printStackTrace( customPrintWriter );
+        runtimeMultiException.printStackTrace( customPrintWriter2 );
 
-        assertThat( customOut.toString(), containsString( "multi" ) );
-        assertThat( customOut.toString(), containsString( "nested1" ) );
-        assertThat( customOut.toString(), containsString( "nested2" ) );
-        assertThat( systemOut.size(), equalTo( 0 ) );
+        assertThat( customOut2.toString(), containsString( "multi" ) );
+        assertThat( customOut2.toString(), containsString( "nested1" ) );
+        assertThat( customOut2.toString(), containsString( "nested2" ) );
+        assertThat( systemOut2.size(), equalTo( 0 ) );
     }
 }
\ No newline at end of file