You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2021/11/14 14:54:57 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2701] web-service errors are visible to user; build time is reduced

This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new e4481c0  [OPENMEETINGS-2701] web-service errors are visible to user; build time is reduced
e4481c0 is described below

commit e4481c01c31b94a23083243ccca7e0e7653d37b2
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sun Nov 14 21:54:44 2021 +0700

    [OPENMEETINGS-2701] web-service errors are visible to user; build time is reduced
---
 openmeetings-server/pom.xml                        |  1 -
 .../src/site/xdoc/BuildInstructions.xml            |  2 +-
 openmeetings-util/pom.xml                          | 17 -----
 .../{NonJenkinsTests.java => NonJenkinsTest.java}  | 13 +++-
 openmeetings-web/pom.xml                           | 40 ++++++----
 .../openmeetings/web/admin/backup/BackupPanel.java | 15 +---
 .../main/webapp/WEB-INF/classes/cxf-servlet.xml    |  1 +
 .../src/main/webapp/WEB-INF/classes/hazelcast.xml  |  2 +-
 ...UnitDefaults.java => AbstractOmServerTest.java} | 32 +++++++-
 .../apache/openmeetings/AbstractSpringTest.java    | 48 ------------
 ...etTester.java => AbstractWicketTesterTest.java} |  6 +-
 .../TestSmokeBasic.java => IsolatedTest.java}      | 19 ++---
 .../TestSmokeBasic.java => RegularTest.java}       | 19 ++---
 .../openmeetings/backup/AbstractTestImport.java    |  6 +-
 .../org/apache/openmeetings/backup/TestExport.java |  4 +-
 .../calendar/TestAppointmentAddAppointment.java    |  4 +-
 .../calendar/TestAppointmentSchedulerTask.java     |  4 +-
 .../calendar/TestDatabaseStructureAppointment.java |  4 +-
 ...TestDatabaseStructureGetAppointmentByRange.java |  4 +-
 .../TestDatabaseStructureGetUserStart.java         |  4 +-
 .../TestDatabaseStructureMeetingMember.java        |  4 +-
 .../openmeetings/calendar/TestGetAppointment.java  |  4 +-
 .../openmeetings/calendar/TestOmCalendar.java      |  4 +-
 .../openmeetings/calendar/TestSendIcalMessage.java |  4 +-
 .../org/apache/openmeetings/cli/TestAdmin.java     | 12 +--
 .../org/apache/openmeetings/cli/TestPatcher.java   |  4 +-
 .../org/apache/openmeetings/config/TestConfig.java |  4 +-
 .../openmeetings/core/file/TestFileProcessor.java  |  4 +-
 .../apache/openmeetings/db/dao/TestFileDao.java    |  4 +-
 .../apache/openmeetings/db/dao/TestRoomDao.java    |  4 +-
 .../apache/openmeetings/domain/TestAddGroup.java   |  4 +-
 .../domain/TestUserGroupAggregation.java           |  4 +-
 .../openmeetings/invitiation/TestInvitation.java   |  4 +-
 .../org/apache/openmeetings/ldap/TestLdap.java     |  4 +-
 .../service/mail/template/TestEmailTemplate.java   |  4 +-
 .../mail/template/subject/TestSubjTemplate.java    |  4 +-
 .../openmeetings/service/scheduler/TestJob.java    |  4 +-
 .../apache/openmeetings/smoke/TestSmokeBasic.java  |  4 +-
 .../apache/openmeetings/user/TestUserContact.java  |  4 +-
 .../apache/openmeetings/user/TestUserCount.java    |  4 +-
 .../apache/openmeetings/user/TestUserGroup.java    |  6 +-
 .../org/apache/openmeetings/userdata/TestAuth.java |  4 +-
 .../apache/openmeetings/userdata/TestLogin.java    |  4 +-
 .../org/apache/openmeetings/util/TestDateTime.java |  2 +
 .../apache/openmeetings/util/TestStoredFile.java   |  4 +-
 .../org/apache/openmeetings/web/TestCalendar.java  |  4 +-
 .../org/apache/openmeetings/web/TestMainAreas.java |  4 +-
 .../org/apache/openmeetings/web/TestMainMenu.java  |  4 +-
 .../openmeetings/web/app/TestApplication.java      |  4 +-
 .../web/app/TestApplicationMocked.java             |  2 +
 .../web/app/TestOmAuthenticationStrategy.java      |  4 +-
 .../web/app/TestUserManagerMocked.java             |  2 +
 .../openmeetings/web/app/TestWebSession.java       |  4 +-
 .../openmeetings/web/pages/TestHashPage.java       |  4 +-
 .../openmeetings/web/pages/auth/TestLoginUI.java   |  4 +-
 .../web/pages/install/TestInstall.java             | 24 +++---
 .../webservice/AbstractWebServiceTest.java         | 50 +++----------
 .../webservice/CreateTomcatExtension.java          | 85 ++++++++++++++++++++++
 .../webservice/TestCalendarService.java            | 14 ++--
 .../openmeetings/webservice/TestErrorService.java  |  2 +-
 .../openmeetings/webservice/TestFileService.java   | 11 ++-
 .../openmeetings/webservice/TestGroupService.java  |  4 +-
 .../webservice/TestRecordingService.java           |  2 +-
 .../openmeetings/webservice/TestUserService.java   | 22 ++++--
 openmeetings-webservice/pom.xml                    |  3 +-
 .../webservice/util/OmExceptionHandler.java        | 21 ++++--
 pom.xml                                            | 11 +--
 67 files changed, 345 insertions(+), 293 deletions(-)

diff --git a/openmeetings-server/pom.xml b/openmeetings-server/pom.xml
index 79c9ba4..090f428 100644
--- a/openmeetings-server/pom.xml
+++ b/openmeetings-server/pom.xml
@@ -55,7 +55,6 @@
 			<properties>
 				<assembly.finalName>server</assembly.finalName>
 				<assembly.descriptor>quick</assembly.descriptor>
-				<site.skip>true</site.skip>
 			</properties>
 			<build>
 				<plugins>
diff --git a/openmeetings-server/src/site/xdoc/BuildInstructions.xml b/openmeetings-server/src/site/xdoc/BuildInstructions.xml
index 6c733dc..0804851 100644
--- a/openmeetings-server/src/site/xdoc/BuildInstructions.xml
+++ b/openmeetings-server/src/site/xdoc/BuildInstructions.xml
@@ -72,7 +72,7 @@ cd ..; mvn clean install -PallModules,quick,mysql -pl openmeetings-util,openmeet
 			<p>In case you would like to develop Openmeetings you need to run <i>"unpacked"</i> build: </p>
 			<source>
 <![CDATA[
-mvn clean install -P allModules,unpacked,mysql -DskipTests=true -Dwicket.configuration=DEVELOPMENT
+mvn clean install -P allModules,unpacked,mysql -DskipTests=true -Dwicket.configuration=DEVELOPMENT -Dsite.skip=true
 ]]>
 			</source>
 			<p>After modifications are made you can run <i>"quick"</i> build: </p>
diff --git a/openmeetings-util/pom.xml b/openmeetings-util/pom.xml
index c1ecea7..f066117 100644
--- a/openmeetings-util/pom.xml
+++ b/openmeetings-util/pom.xml
@@ -58,23 +58,6 @@
 			</resource>
 		</resources>
 	</build>
-	<profiles>
-		<profile>
-			<id>Jenkins</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-surefire-plugin</artifactId>
-						<inherited>true</inherited>
-						<configuration>
-							<excludedGroups>org.apache.openmeetings.test.NonJenkinsTests</excludedGroups>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
 	<dependencies>
 		<dependency>
 			<groupId>org.dom4j</groupId>
diff --git a/openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTests.java b/openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTest.java
similarity index 69%
rename from openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTests.java
rename to openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTest.java
index 350e96b..285c88a 100644
--- a/openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTests.java
+++ b/openmeetings-util/src/test/java/org/apache/openmeetings/test/NonJenkinsTest.java
@@ -18,6 +18,17 @@
  */
 package org.apache.openmeetings.test;
 
-public @interface NonJenkinsTests {
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+@Target({ ElementType.TYPE, ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Tag("non-jenkins")
+@Test
+public @interface NonJenkinsTest {
 }
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index bcfd548..d4def4e 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -65,21 +65,6 @@
 				<db_pass>openmeetings_test</db_pass>
 			</properties>
 		</profile>
-		<profile>
-			<id>Jenkins</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-surefire-plugin</artifactId>
-						<inherited>true</inherited>
-						<configuration>
-							<excludedGroups>org.apache.openmeetings.test.HeavyTests,org.apache.openmeetings.test.NonJenkinsTests</excludedGroups>
-						</configuration>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
 	</profiles>
 	<build>
 		<plugins>
@@ -457,7 +442,7 @@
 				<inherited>true</inherited>
 				<configuration>
 					<workingDirectory>${project.build.directory}</workingDirectory>
-					<excludedGroups>org.apache.openmeetings.test.HeavyTests</excludedGroups>
+					<excludedGroups>heavy-test</excludedGroups>
 					<systemPropertyVariables>
 						<om.home>${project.build.directory}/test-root</om.home>
 						<languages.home>${project.build.directory}/test-root/languages</languages.home>
@@ -471,6 +456,29 @@
 					</additionalClasspathElements>
 					<skip>${maven.test.skip}</skip>
 				</configuration>
+				<executions>
+					<execution>
+						<id>default-test</id>
+						<configuration>
+							<groups>regular</groups>
+						</configuration>
+					</execution>
+					<execution>
+						<id>isolated-test</id>
+						<goals><goal>test</goal></goals>
+						<configuration>
+							<reuseForks>false</reuseForks>
+							<groups>isolated</groups>
+						</configuration>
+					</execution>
+					<execution>
+						<id>webservice-test</id>
+						<goals><goal>test</goal></goals>
+						<configuration>
+							<groups>webservice</groups>
+						</configuration>
+					</execution>
+				</executions>
 			</plugin>
 		</plugins>
 	</build>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
index 06c939f..a862c7f 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
@@ -28,7 +28,6 @@ import java.text.DecimalFormat;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.List;
 
 import org.apache.openmeetings.backup.BackupExport;
 import org.apache.openmeetings.backup.BackupImport;
@@ -91,19 +90,7 @@ public class BackupPanel extends AdminBasePanel {
 	private class BackupForm extends Form<Void> {
 		private static final long serialVersionUID = 1L;
 		private final Model<Boolean> includeFilesInBackup = Model.of(true);
-		private final FileUploadField fileUploadField = new FileUploadField("fileInput", new IModel<List<FileUpload>>() {
-			private static final long serialVersionUID = 1L;
-
-			@Override
-			public void setObject(List<FileUpload> object) {
-				//no-op
-			}
-
-			@Override
-			public List<FileUpload> getObject() {
-				return new ArrayList<>();
-			}
-		}) {
+		private final FileUploadField fileUploadField = new FileUploadField("fileInput", Model.ofList(new ArrayList<FileUpload>())) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
index 6ba3b7d..e375507 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/cxf-servlet.xml
@@ -59,6 +59,7 @@
 			<bean class="org.apache.openmeetings.webservice.util.AppointmentListMessageBodyWriter"/>
 			<bean class="org.apache.openmeetings.webservice.util.UserMessageBodyWriter"/>
 			<bean class="org.apache.openmeetings.webservice.util.OmParamConverterProvider"/>
+			<bean class="org.apache.openmeetings.webservice.util.OmExceptionHandler"/>
 		</jaxrs:providers>
 		<jaxrs:outInterceptors>
 			<bean id="allowOriginProvider" class="org.apache.openmeetings.webservice.util.AllowOriginProvider"/>
diff --git a/openmeetings-web/src/main/webapp/WEB-INF/classes/hazelcast.xml b/openmeetings-web/src/main/webapp/WEB-INF/classes/hazelcast.xml
index 4c3f21b..0e64c18 100644
--- a/openmeetings-web/src/main/webapp/WEB-INF/classes/hazelcast.xml
+++ b/openmeetings-web/src/main/webapp/WEB-INF/classes/hazelcast.xml
@@ -21,7 +21,7 @@
 <hazelcast
 		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 		xmlns="http://www.hazelcast.com/schema/config"
-		xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-4.2.xsd"
+		xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-5.0.xsd"
 	>
 	<map name="ONLINE_USERS_KEY">
 		<near-cache>
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractOmServerTest.java
similarity index 88%
rename from openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java
rename to openmeetings-web/src/test/java/org/apache/openmeetings/AbstractOmServerTest.java
index 3ac007f..b277a75 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractJUnitDefaults.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractOmServerTest.java
@@ -25,12 +25,14 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.getCryptClassNa
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getWicketApplicationName;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.setWicketApplicationName;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.Date;
 import java.util.Random;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -39,14 +41,20 @@ import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.Application;
+import org.apache.tomcat.util.scan.Constants;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
 
-public abstract class AbstractJUnitDefaults extends AbstractSpringTest {
-	private static final Logger log = LoggerFactory.getLogger(AbstractJUnitDefaults.class);
+@SpringJUnitWebConfig(locations={"classpath:applicationContext.xml"})
+@RegularTest
+public abstract class AbstractOmServerTest {
+	private static final Logger log = LoggerFactory.getLogger(AbstractOmServerTest.class);
 	private static final String timeZone = "Europe/Berlin";
 	public static final int ONE_HOUR = 60 * 60 * 1000;
 	public static final String adminUsername = "admin";
@@ -72,8 +80,18 @@ public abstract class AbstractJUnitDefaults extends AbstractSpringTest {
 	@Autowired
 	protected Application app;
 
+	@BeforeAll
+	public static void init() {
+		setOmHome();
+		System.setProperty(Constants.SKIP_JARS_PROPERTY, "*");
+		LabelDao.initLanguageMap();
+		if (LabelDao.getLanguages().isEmpty()) {
+			fail("Failed to set languages");
+		}
+	}
+
 	@BeforeEach
-	public void setUp() throws Exception {
+	public void serverSetup() throws Exception {
 		if (app.getName() == null) {
 			app.setName(DEFAULT_CONTEXT_NAME);
 		}
@@ -84,6 +102,14 @@ public abstract class AbstractJUnitDefaults extends AbstractSpringTest {
 		ensureSchema(userDao, importInitvalues);
 	}
 
+	public static void setOmHome() {
+		String webappsDir = System.getProperty("om.home", ".");
+		OmFileHelper.setOmHome(webappsDir);
+		if (!OmFileHelper.getOmHome().exists() || !OmFileHelper.getOmHome().isDirectory()) {
+			fail("Invalid directory is specified as OM HOME: " + webappsDir);
+		}
+	}
+
 	public static void ensureSchema(UserDao userDao, ImportInitvalues importInitvalues) throws Exception {
 		if (userDao.count() < 1) {
 			makeDefaultScheme(importInitvalues);
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
deleted file mode 100644
index e8fc40a..0000000
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractSpringTest.java
+++ /dev/null
@@ -1,48 +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.openmeetings;
-
-import static org.junit.jupiter.api.Assertions.fail;
-
-import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.tomcat.util.scan.Constants;
-import org.junit.jupiter.api.BeforeAll;
-import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
-
-@SpringJUnitWebConfig(locations={"classpath:applicationContext.xml"})
-public abstract class AbstractSpringTest {
-	@BeforeAll
-	public static void init() {
-		setOmHome();
-		System.setProperty(Constants.SKIP_JARS_PROPERTY, "*");
-		LabelDao.initLanguageMap();
-		if (LabelDao.getLanguages().isEmpty()) {
-			fail("Failed to set languages");
-		}
-	}
-
-	public static void setOmHome() {
-		String webappsDir = System.getProperty("om.home", ".");
-		OmFileHelper.setOmHome(webappsDir);
-		if (!OmFileHelper.getOmHome().exists() || !OmFileHelper.getOmHome().isDirectory()) {
-			fail("Invalid directory is specified as OM HOME: " + webappsDir);
-		}
-	}
-}
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java
similarity index 97%
rename from openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java
rename to openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java
index 6285b75..773cbd1 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTester.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/AbstractWicketTesterTest.java
@@ -47,8 +47,8 @@ import org.junit.jupiter.api.BeforeEach;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class AbstractWicketTester extends AbstractJUnitDefaults {
-	private static final Logger log = LoggerFactory.getLogger(AbstractWicketTester.class);
+public class AbstractWicketTesterTest extends AbstractOmServerTest {
+	private static final Logger log = LoggerFactory.getLogger(AbstractWicketTesterTest.class);
 	public static final String PATH_CHILD = "main-container:main:contents:child";
 	public static final String PATH_MENU = "main-container:main:topControls:menu:menu";
 	protected WicketTester tester;
@@ -77,10 +77,8 @@ public class AbstractWicketTester extends AbstractJUnitDefaults {
 		return escapeMarkup(getString(lbl)).toString();
 	}
 
-	@Override
 	@BeforeEach
 	public void setUp() throws Exception {
-		super.setUp();
 		tester = getWicketTester(app);
 		assertNotNull(WebSession.get(), "Web session should not be null");
 		Locale[] locales = Locale.getAvailableLocales();
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java b/openmeetings-web/src/test/java/org/apache/openmeetings/IsolatedTest.java
similarity index 69%
copy from openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
copy to openmeetings-web/src/test/java/org/apache/openmeetings/IsolatedTest.java
index 361b090..85a526a 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/IsolatedTest.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.smoke;
+package org.apache.openmeetings;
 
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Tag;
 
-class TestSmokeBasic extends AbstractJUnitDefaults {
-	@Test
-	void createErrorValueAndTest() {
-		assertNotNull(userDao.get(1L));
-	}
+@Target({ ElementType.TYPE, ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Tag("isolated")
+public @interface IsolatedTest {
 }
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java b/openmeetings-web/src/test/java/org/apache/openmeetings/RegularTest.java
similarity index 69%
copy from openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
copy to openmeetings-web/src/test/java/org/apache/openmeetings/RegularTest.java
index 361b090..73a8e94 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/RegularTest.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.smoke;
+package org.apache.openmeetings;
 
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Tag;
 
-class TestSmokeBasic extends AbstractJUnitDefaults {
-	@Test
-	void createErrorValueAndTest() {
-		assertNotNull(userDao.get(1L));
-	}
+@Target({ ElementType.TYPE, ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Tag("regular")
+public @interface RegularTest {
 }
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/AbstractTestImport.java b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/AbstractTestImport.java
index e0904e9..4f44062 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/AbstractTestImport.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/AbstractTestImport.java
@@ -26,21 +26,19 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PATH_SOX
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getCryptClassName;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class AbstractTestImport extends AbstractJUnitDefaults {
+public class AbstractTestImport extends AbstractOmServerTest {
 	private String cryptClass = null;
 	@Autowired
 	protected BackupImport backupImport;
 
-	@Override
 	@BeforeEach
 	public void setUp() throws Exception {
-		super.setUp();
 		// Crypt class need to be preserved here to avoid overriding by backup import
 		cryptClass = getCryptClassName();
 	}
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java
index 04bd0dc..8327cae 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java
@@ -33,7 +33,7 @@ import java.time.LocalDate;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Marshaller;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
@@ -45,7 +45,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import com.sun.xml.bind.marshaller.CharacterEscapeHandler;
 
-class TestExport extends AbstractJUnitDefaults {
+class TestExport extends AbstractOmServerTest {
 	@Autowired
 	private FileItemDao fileItemDao;
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
index 5819d14..65ba0b0 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentAddAppointment.java
@@ -29,7 +29,7 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder;
@@ -45,7 +45,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestAppointmentAddAppointment extends AbstractWicketTester {
+class TestAppointmentAddAppointment extends AbstractWicketTesterTest {
 	private static final Logger log = LoggerFactory.getLogger(TestAppointmentAddAppointment.class);
 
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
index 642c15f..50996e8 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestAppointmentSchedulerTask.java
@@ -23,7 +23,7 @@ import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.setBaseUrl;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.service.calendar.AppointmentLogic;
 import org.junit.jupiter.api.Test;
@@ -31,7 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestAppointmentSchedulerTask extends AbstractJUnitDefaults {
+class TestAppointmentSchedulerTask extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestAppointmentSchedulerTask.class);
 
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
index a5993c2..21371c2 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureAppointment.java
@@ -24,13 +24,13 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestDatabaseStructureAppointment extends AbstractJUnitDefaults {
+class TestDatabaseStructureAppointment extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestDatabaseStructureAppointment.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
index cf58b10..33f9a57 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetAppointmentByRange.java
@@ -23,14 +23,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import java.util.ArrayList;
 import java.util.Calendar;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestDatabaseStructureGetAppointmentByRange extends AbstractJUnitDefaults {
+class TestDatabaseStructureGetAppointmentByRange extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestDatabaseStructureGetAppointmentByRange.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
index 9898299..a40d9a8 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureGetUserStart.java
@@ -18,12 +18,12 @@
  */
 package org.apache.openmeetings.calendar;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestDatabaseStructureGetUserStart extends AbstractJUnitDefaults {
+class TestDatabaseStructureGetUserStart extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestDatabaseStructureGetUserStart.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
index 25e4d16..b29ffdb 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestDatabaseStructureMeetingMember.java
@@ -18,10 +18,10 @@
  */
 package org.apache.openmeetings.calendar;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.junit.jupiter.api.Test;
 
-class TestDatabaseStructureMeetingMember extends AbstractJUnitDefaults {
+class TestDatabaseStructureMeetingMember extends AbstractOmServerTest {
 
 	@Test
 	void testUpdateMeetingMember(){
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
index 511b803..bde1652 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestGetAppointment.java
@@ -24,7 +24,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import java.util.Calendar;
 import java.util.Date;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.junit.jupiter.api.Test;
@@ -32,7 +32,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestGetAppointment extends AbstractJUnitDefaults {
+class TestGetAppointment extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestGetAppointment.class);
 
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
index 9b1483f..cf9e953 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestOmCalendar.java
@@ -21,14 +21,14 @@ package org.apache.openmeetings.calendar;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
 import org.apache.openmeetings.db.entity.calendar.OmCalendar;
 import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestOmCalendar extends AbstractJUnitDefaults {
+class TestOmCalendar extends AbstractOmServerTest {
 	@Autowired
 	private OmCalendarDao calendarDao;
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
index 7da0ed6..2d3d2cf 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/calendar/TestSendIcalMessage.java
@@ -35,7 +35,7 @@ import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.core.mail.MailHandler;
 import org.apache.openmeetings.util.mail.ByteArrayDataSource;
 import org.apache.openmeetings.util.mail.IcalHandler;
@@ -44,7 +44,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestSendIcalMessage extends AbstractJUnitDefaults {
+class TestSendIcalMessage extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestSendIcalMessage.class);
 
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestAdmin.java b/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestAdmin.java
index 38bcf05..5ba13a8 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestAdmin.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestAdmin.java
@@ -19,11 +19,11 @@
 package org.apache.openmeetings.cli;
 
 import static org.apache.commons.io.FileUtils.deleteQuietly;
-import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
-import static org.apache.openmeetings.AbstractJUnitDefaults.email;
-import static org.apache.openmeetings.AbstractJUnitDefaults.group;
-import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
-import static org.apache.openmeetings.AbstractSpringTest.setOmHome;
+import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
+import static org.apache.openmeetings.AbstractOmServerTest.email;
+import static org.apache.openmeetings.AbstractOmServerTest.group;
+import static org.apache.openmeetings.AbstractOmServerTest.setOmHome;
+import static org.apache.openmeetings.AbstractOmServerTest.userpass;
 import static org.apache.openmeetings.cli.Admin.OM_HOME;
 import static org.apache.openmeetings.db.util.ApplicationHelper.destroyApplication;
 import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
@@ -42,12 +42,14 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
+import org.apache.openmeetings.IsolatedTest;
 import org.apache.wicket.Application;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+@IsolatedTest
 class TestAdmin {
 	private File tempFolder;
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestPatcher.java b/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestPatcher.java
index 149583f..194572c 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestPatcher.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/cli/TestPatcher.java
@@ -18,13 +18,14 @@
  */
 package org.apache.openmeetings.cli;
 
-import static org.apache.openmeetings.AbstractSpringTest.setOmHome;
+import static org.apache.openmeetings.AbstractOmServerTest.setOmHome;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.IOException;
 import java.util.TimeZone;
 
 import org.apache.openjpa.lib.util.Files;
+import org.apache.openmeetings.IsolatedTest;
 import org.apache.openmeetings.util.ConnectionProperties;
 import org.apache.openmeetings.util.ConnectionProperties.DbType;
 import org.apache.openmeetings.util.OmFileHelper;
@@ -36,6 +37,7 @@ import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
+@IsolatedTest
 class TestPatcher {
 	private static final String HOST = "myhost";
 	private static final String PORT = "6666";
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java b/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
index 9e45fbb..56bce75 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/config/TestConfig.java
@@ -24,13 +24,13 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 
 import java.util.List;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestConfig extends AbstractJUnitDefaults {
+class TestConfig extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestConfig.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java b/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
index 5a0545f..e472b79 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/core/file/TestFileProcessor.java
@@ -28,7 +28,7 @@ import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.Optional;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.core.data.file.FileProcessor;
 import org.apache.openmeetings.db.dto.file.FileItemDTO;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
@@ -37,7 +37,7 @@ import org.apache.openmeetings.util.process.ProcessResultList;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestFileProcessor extends AbstractJUnitDefaults {
+class TestFileProcessor extends AbstractOmServerTest {
 	private static final String FILE_NAME = "test_name";
 
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestFileDao.java b/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestFileDao.java
index 058705d..6e9b0a4 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestFileDao.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestFileDao.java
@@ -23,7 +23,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import java.util.List;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
@@ -33,7 +33,7 @@ import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestFileDao extends AbstractJUnitDefaults {
+class TestFileDao extends AbstractOmServerTest {
 	@Autowired
 	protected FileItemDao fileDao;
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestRoomDao.java b/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestRoomDao.java
index 30e02be..86ee4ca 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestRoomDao.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/db/dao/TestRoomDao.java
@@ -26,7 +26,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
@@ -36,7 +36,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestRoomDao extends AbstractJUnitDefaults {
+class TestRoomDao extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestRoomDao.class);
 	@Autowired
 	protected RoomDao roomDao;
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
index 03d1726..18bc5c0 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestAddGroup.java
@@ -20,14 +20,14 @@ package org.apache.openmeetings.domain;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestAddGroup extends AbstractJUnitDefaults {
+class TestAddGroup extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestAddGroup.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
index 576757e..3aec7e8 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/domain/TestUserGroupAggregation.java
@@ -21,14 +21,14 @@ package org.apache.openmeetings.domain;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.user.GroupUser;
 import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestUserGroupAggregation extends AbstractJUnitDefaults {
+class TestUserGroupAggregation extends AbstractOmServerTest {
 	private static final Logger log = LoggerFactory.getLogger(TestUserGroupAggregation.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java b/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
index ec508a2..bd5b349 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/invitiation/TestInvitation.java
@@ -24,7 +24,7 @@ import static org.junit.Assert.assertNotNull;
 import java.time.LocalDateTime;
 import java.util.Date;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.room.Invitation;
@@ -36,7 +36,7 @@ import org.apache.openmeetings.service.room.InvitationManager;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestInvitation extends AbstractWicketTester {
+class TestInvitation extends AbstractWicketTesterTest {
 	@Autowired
 	private InvitationManager invitationManager;
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java b/openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java
index fe1296d..0f4e998 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/ldap/TestLdap.java
@@ -52,7 +52,7 @@ import org.apache.directory.server.core.annotations.ApplyLdifFiles;
 import org.apache.directory.server.core.annotations.CreateDS;
 import org.apache.directory.server.core.annotations.CreatePartition;
 import org.apache.directory.server.protocol.shared.transport.Transport;
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.core.ldap.LdapLoginManager;
 import org.apache.openmeetings.db.dao.server.LdapConfigDao;
 import org.apache.openmeetings.db.entity.server.LdapConfig;
@@ -71,7 +71,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 	})
 @CreateLdapServer(transports = { @CreateTransport(protocol = "LDAP", address = "localhost")})
 @ApplyLdifFiles({"schema/users.ldif"})
-class TestLdap extends AbstractWicketTester {
+class TestLdap extends AbstractWicketTesterTest {
 	private static final String CFG_SEARCH_BIND = UUID.randomUUID().toString();
 	private static final String BAD_PASSWORD = "bad password";
 	private static final String USER1 = "ldaptest1";
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/TestEmailTemplate.java b/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/TestEmailTemplate.java
index 9f0e26f..1476a8b 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/TestEmailTemplate.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/TestEmailTemplate.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.service.mail.template;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.UserContact;
 import org.apache.wicket.util.string.Strings;
@@ -28,7 +28,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
-class TestEmailTemplate extends AbstractWicketTester {
+class TestEmailTemplate extends AbstractWicketTesterTest {
 	private static void checkTemplate(String eml) {
 		assertFalse(Strings.isEmpty(eml), "Body should be not empty");
 	}
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/subject/TestSubjTemplate.java b/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/subject/TestSubjTemplate.java
index 5d6e699..d579181 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/subject/TestSubjTemplate.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/service/mail/template/subject/TestSubjTemplate.java
@@ -29,7 +29,7 @@ import java.util.Locale;
 import java.util.TimeZone;
 import java.util.function.Consumer;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.user.Group;
@@ -37,7 +37,7 @@ import org.apache.openmeetings.db.entity.user.User;
 import org.apache.wicket.util.string.Strings;
 import org.junit.jupiter.api.Test;
 
-class TestSubjTemplate extends AbstractWicketTester {
+class TestSubjTemplate extends AbstractWicketTesterTest {
 	private static void checkTemplate(SubjectEmailTemplate t) {
 		assertNotNull(t, "Template should be created");
 		assertFalse(Strings.isEmpty(t.getSubject()), "Subject should be not empty");
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/service/scheduler/TestJob.java b/openmeetings-web/src/test/java/org/apache/openmeetings/service/scheduler/TestJob.java
index 89515a8..c2521fd 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/service/scheduler/TestJob.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/service/scheduler/TestJob.java
@@ -32,7 +32,7 @@ import java.time.ZoneId;
 import java.util.Date;
 import java.util.List;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.core.mail.MailHandler;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.user.Group;
@@ -48,7 +48,7 @@ import org.mockito.stubbing.Answer;
 import org.springframework.beans.factory.annotation.Autowired;
 
 @ExtendWith(MockitoExtension.class)
-class TestJob extends AbstractWicketTester {
+class TestJob extends AbstractWicketTesterTest {
 	@Autowired
 	private CleanupJob cleanJob;
 	@Mock
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java b/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
index 361b090..073daec 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
@@ -20,10 +20,10 @@ package org.apache.openmeetings.smoke;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.junit.jupiter.api.Test;
 
-class TestSmokeBasic extends AbstractJUnitDefaults {
+class TestSmokeBasic extends AbstractOmServerTest {
 	@Test
 	void createErrorValueAndTest() {
 		assertNotNull(userDao.get(1L));
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java
index 6aeb394..2831699 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserContact.java
@@ -29,11 +29,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.List;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 
-class TestUserContact extends AbstractWicketTester {
+class TestUserContact extends AbstractWicketTesterTest {
 
 	@Test
 	void testGetUser() {
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java
index f835642..73957e2 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserCount.java
@@ -23,12 +23,12 @@ import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 
-class TestUserCount extends AbstractWicketTester {
+class TestUserCount extends AbstractWicketTesterTest {
 	@Test
 	void testCountSearchUsers() throws Exception {
 		User u = createUser();
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
index d201a8b..f4c4683 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/user/TestUserGroup.java
@@ -26,7 +26,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.List;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.GroupUser;
@@ -36,7 +36,7 @@ import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestUserGroup extends AbstractJUnitDefaults {
+class TestUserGroup extends AbstractOmServerTest {
 	public static final String GROUP_NAME = "Test Group";
 	@Autowired
 	private GroupUserDao groupUserDao;
@@ -106,7 +106,7 @@ class TestUserGroup extends AbstractJUnitDefaults {
 	}
 
 	@Test
-	@Tag("org.apache.openmeetings.test.HeavyTests")
+	@Tag("heavy-test")
 	void add10kUsers() throws Exception {
 		List<Group> groups = groupDao.get(GROUP_NAME, 0, 1, null);
 		Group g = null;
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java b/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java
index 15a4808..b2a36aa 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestAuth.java
@@ -22,13 +22,13 @@ import static java.util.UUID.randomUUID;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
-class TestAuth extends AbstractJUnitDefaults {
+class TestAuth extends AbstractOmServerTest {
 	@Autowired
 	private SessiondataDao sessionDao;
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java b/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java
index 7a6e834..43133d1 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/userdata/TestLogin.java
@@ -20,12 +20,12 @@ package org.apache.openmeetings.userdata;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmException;
 import org.junit.jupiter.api.Test;
 
-class TestLogin extends AbstractJUnitDefaults {
+class TestLogin extends AbstractOmServerTest {
 	@Test
 	void testTestLogin() throws OmException {
 		User us = userDao.login(adminUsername, userpass);
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java b/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
index 926c59a..b6500ca 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestDateTime.java
@@ -29,9 +29,11 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 
+import org.apache.openmeetings.RegularTest;
 import org.apache.openmeetings.web.common.datetime.AbstractOmDateTimePicker;
 import org.junit.jupiter.api.Test;
 
+@RegularTest
 class TestDateTime {
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestStoredFile.java b/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestStoredFile.java
index ff343c3..4529a41 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestStoredFile.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/util/TestStoredFile.java
@@ -25,10 +25,10 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.junit.jupiter.api.Test;
 
-class TestStoredFile extends AbstractJUnitDefaults {
+class TestStoredFile extends AbstractOmServerTest {
 	@Test
 	void testPng() throws FileNotFoundException, IOException {
 		File f = getDefaultProfilePicture();
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
index 4d14dfe..16d5a97 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestCalendar.java
@@ -25,7 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import java.time.LocalDateTime;
 import java.util.List;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmException;
@@ -38,7 +38,7 @@ import com.googlecode.wicket.jquery.ui.calendar.CalendarView;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
 
-class TestCalendar extends AbstractWicketTester {
+class TestCalendar extends AbstractWicketTesterTest {
 	private static final String PATH_APPOINTMENT_DLG = String.format("%s:calendarAppointment", PATH_CHILD);
 	private static final String PATH_APPOINTMENT_DLG_FRM = String.format("%s:appForm", PATH_APPOINTMENT_DLG);
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
index a24b3e2..e433169 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainAreas.java
@@ -40,7 +40,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 
 import java.util.function.Consumer;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.util.OmException;
 import org.apache.openmeetings.web.admin.backup.BackupPanel;
 import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
@@ -73,7 +73,7 @@ import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class TestMainAreas extends AbstractWicketTester {
+class TestMainAreas extends AbstractWicketTesterTest {
 	private static final Logger log = LoggerFactory.getLogger(TestMainAreas.class);
 
 	@Test
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java
index adfd94c..344111d 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/TestMainMenu.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.web;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.util.OmException;
 import org.apache.openmeetings.web.admin.backup.BackupPanel;
 import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
@@ -42,7 +42,7 @@ import org.junit.jupiter.api.Test;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.navbar.Navbar;
 
-class TestMainMenu extends AbstractWicketTester {
+class TestMainMenu extends AbstractWicketTesterTest {
 	private void checkMenuItem(int idx1, Integer idx2, Class<? extends BasePanel> clazz) throws OmException {
 		testArea(adminUsername, p -> {
 			Navbar menu = (Navbar)p.get(PATH_MENU);
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java
index 985d45b..0a305c0 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplication.java
@@ -29,11 +29,11 @@ import java.util.Locale;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.junit.jupiter.api.Test;
 
-class TestApplication extends AbstractJUnitDefaults {
+class TestApplication extends AbstractOmServerTest {
 	@Test
 	void testMissing() {
 		assertEquals("[Missing]", app.getOmString("909", Locale.ENGLISH));
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java
index 7d5fa53..fbeff05 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestApplicationMocked.java
@@ -21,9 +21,11 @@ package org.apache.openmeetings.web.app;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
+import org.apache.openmeetings.RegularTest;
 import org.apache.wicket.request.Url;
 import org.junit.jupiter.api.Test;
 
+@RegularTest
 class TestApplicationMocked {
 	@Test
 	void testWsUrlIncomplete() {
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java
index a055f3c..8c0a7c1 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestOmAuthenticationStrategy.java
@@ -25,11 +25,11 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 
 import javax.servlet.http.Cookie;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.user.User;
 import org.junit.jupiter.api.Test;
 
-class TestOmAuthenticationStrategy extends AbstractWicketTester {
+class TestOmAuthenticationStrategy extends AbstractWicketTesterTest {
 	@Test
 	void test() {
 		String encKey = randomUUID().toString();
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java
index b57c21e..6ac16bc 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestUserManagerMocked.java
@@ -36,6 +36,7 @@ import java.io.IOException;
 import java.net.http.HttpRequest;
 import java.security.NoSuchAlgorithmException;
 
+import org.apache.openmeetings.RegularTest;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
@@ -55,6 +56,7 @@ import org.mockito.invocation.InvocationOnMock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.stubbing.Answer;
 
+@RegularTest
 @ExtendWith(MockitoExtension.class)
 class TestUserManagerMocked {
 	@Mock
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java
index bfa1208..0c1ab7b 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/app/TestWebSession.java
@@ -22,12 +22,12 @@ 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.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.OmException;
 import org.junit.jupiter.api.Test;
 
-class TestWebSession extends AbstractWicketTester {
+class TestWebSession extends AbstractWicketTesterTest {
 	@Test
 	void testLogin() throws OmException {
 		WebSession ws = WebSession.get();
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java
index e94fa3c..fdab9aa 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/TestHashPage.java
@@ -30,7 +30,7 @@ import static org.junit.Assert.assertEquals;
 import java.util.Date;
 import java.util.UUID;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -54,7 +54,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 
-class TestHashPage extends AbstractWicketTester {
+class TestHashPage extends AbstractWicketTesterTest {
 	private static final Logger log = LoggerFactory.getLogger(TestHashPage.class);
 
 	@Autowired
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java
index 1dfcd8e..7d943b1 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/auth/TestLoginUI.java
@@ -32,7 +32,7 @@ import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Locale;
 
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.WebSession;
@@ -47,7 +47,7 @@ import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.jupiter.api.Test;
 
-class TestLoginUI extends AbstractWicketTester {
+class TestLoginUI extends AbstractWicketTesterTest {
 	private final static String PATH_REGISTER = "register:form";
 
 	private void checkLogin(String login, String pass) {
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java
index de2da84..a2f5d41 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/web/pages/install/TestInstall.java
@@ -19,13 +19,14 @@
 package org.apache.openmeetings.web.pages.install;
 
 import static org.apache.commons.io.FileUtils.deleteQuietly;
-import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
-import static org.apache.openmeetings.AbstractJUnitDefaults.email;
-import static org.apache.openmeetings.AbstractJUnitDefaults.group;
-import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
-import static org.apache.openmeetings.AbstractWicketTester.checkErrors;
-import static org.apache.openmeetings.AbstractWicketTester.countErrors;
-import static org.apache.openmeetings.AbstractWicketTester.getWicketTester;
+import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
+import static org.apache.openmeetings.AbstractOmServerTest.email;
+import static org.apache.openmeetings.AbstractOmServerTest.group;
+import static org.apache.openmeetings.AbstractOmServerTest.setOmHome;
+import static org.apache.openmeetings.AbstractOmServerTest.userpass;
+import static org.apache.openmeetings.AbstractWicketTesterTest.checkErrors;
+import static org.apache.openmeetings.AbstractWicketTesterTest.countErrors;
+import static org.apache.openmeetings.AbstractWicketTesterTest.getWicketTester;
 import static org.apache.openmeetings.cli.ConnectionPropertiesPatcher.DEFAULT_DB_NAME;
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_APP_NAME;
@@ -41,8 +42,8 @@ import java.util.Locale;
 import java.util.Random;
 import java.util.TimeZone;
 
-import org.apache.openmeetings.AbstractSpringTest;
-import org.apache.openmeetings.AbstractWicketTester;
+import org.apache.openmeetings.AbstractWicketTesterTest;
+import org.apache.openmeetings.IsolatedTest;
 import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
 import org.apache.openmeetings.util.ConnectionProperties.DbType;
 import org.apache.openmeetings.util.crypt.SCryptImplementation;
@@ -62,6 +63,7 @@ import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@IsolatedTest
 public class TestInstall {
 	private static final Logger log = LoggerFactory.getLogger(TestInstall.class);
 	private static final String WIZARD_PATH = "wizard";
@@ -91,7 +93,7 @@ public class TestInstall {
 	@BeforeEach
 	public void setUp() throws Exception {
 		log.info("Going to perform setup for TestInstall");
-		AbstractSpringTest.setOmHome();
+		setOmHome();
 		setWicketApplicationName(DEFAULT_APP_NAME);
 		tempFolder = Files.createTempDirectory("omtempdb").toFile();
 		setH2Home(tempFolder);
@@ -113,7 +115,7 @@ public class TestInstall {
 	@AfterEach
 	public void tearDown() throws Exception {
 		log.info("Going to perform clean-up for TestInstall");
-		AbstractWicketTester.destroy(tester);
+		AbstractWicketTesterTest.destroy(tester);
 		log.info("WicketTester is destroyed");
 		resetH2Home();
 		deleteQuietly(tempFolder);
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
index 67cf812..e77fb4c 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/AbstractWebServiceTest.java
@@ -20,12 +20,11 @@ package org.apache.openmeetings.webservice;
 
 import static java.util.UUID.randomUUID;
 import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
-import static org.apache.openmeetings.AbstractJUnitDefaults.createPass;
-import static org.apache.openmeetings.AbstractJUnitDefaults.ensureSchema;
-import static org.apache.openmeetings.AbstractJUnitDefaults.soapUsername;
-import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
+import static org.apache.openmeetings.AbstractOmServerTest.createPass;
+import static org.apache.openmeetings.AbstractOmServerTest.ensureSchema;
+import static org.apache.openmeetings.AbstractOmServerTest.soapUsername;
+import static org.apache.openmeetings.AbstractOmServerTest.userpass;
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
-import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -33,21 +32,15 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.InetAddress;
-import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.ws.rs.core.Form;
 import javax.ws.rs.core.MediaType;
 
-import org.apache.catalina.LifecycleState;
-import org.apache.catalina.connector.Connector;
-import org.apache.catalina.startup.Tomcat;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.apache.openmeetings.AbstractSpringTest;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.basic.ServiceResult;
 import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
@@ -58,12 +51,13 @@ import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.installation.ImportInitvalues;
 import org.apache.openmeetings.webservice.util.AppointmentMessageBodyReader;
-import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.extension.RegisterExtension;
 
+@Tag("webservice")
 public class AbstractWebServiceTest {
-	private static Tomcat tomcat;
 	private static final String HOST = "localhost";
 	private static final String CONTEXT = "/openmeetings";
 	private static int port = 8080;
@@ -73,6 +67,9 @@ public class AbstractWebServiceTest {
 	public static final String UNIT_TEST_EXT_TYPE = "om_unit_tests";
 	public static final long TIMEOUT = 5 * 60 * 1000;
 
+	@RegisterExtension
+	public static final CreateTomcatExtension tomcatExt = new CreateTomcatExtension(HOST, CONTEXT);
+
 	protected static <T> T getBean(Class<T> clazz) {
 		return ensureApplication().getBean(clazz);
 	}
@@ -103,22 +100,7 @@ public class AbstractWebServiceTest {
 
 	@BeforeAll
 	public static void initialize() throws Exception {
-		AbstractSpringTest.init();
-		tomcat = new Tomcat();
-		Connector connector = new Connector("HTTP/1.1");
-		connector.setProperty("address", InetAddress.getByName(HOST).getHostAddress());
-		connector.setPort(0);
-		tomcat.getService().addConnector(connector);
-		tomcat.setConnector(connector);
-		File wd = Files.createTempDirectory("om" + randomUUID().toString()).toFile();
-		tomcat.setBaseDir(wd.getCanonicalPath());
-		tomcat.getHost().setAppBase(wd.getCanonicalPath());
-		tomcat.getHost().setAutoDeploy(false);
-		tomcat.getHost().setDeployOnStartup(false);
-		tomcat.addWebapp(CONTEXT, getOmHome().getAbsolutePath());
-		tomcat.getConnector(); // to init the connector
-		tomcat.start();
-		port = tomcat.getConnector().getLocalPort();
+		port = tomcatExt.getPort();
 	}
 
 	@BeforeEach
@@ -126,16 +108,6 @@ public class AbstractWebServiceTest {
 		ensureSchema(getBean(UserDao.class), getBean(ImportInitvalues.class));
 	}
 
-	@AfterAll
-	public static void destroy() throws Exception {
-		if (tomcat.getServer() != null && tomcat.getServer().getState() != LifecycleState.DESTROYED) {
-			if (tomcat.getServer().getState() != LifecycleState.STOPPED) {
-				tomcat.stop();
-			}
-			tomcat.destroy();
-		}
-	}
-
 	protected static CallResult<RoomDTO> createAndValidate(RoomDTO r) {
 		return createAndValidate(null, r);
 	}
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java
new file mode 100644
index 0000000..ad9c454
--- /dev/null
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/CreateTomcatExtension.java
@@ -0,0 +1,85 @@
+/*
+ * 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.openmeetings.webservice;
+
+import static java.util.UUID.randomUUID;
+import static org.apache.openmeetings.util.OmFileHelper.getOmHome;
+
+import java.io.File;
+import java.net.InetAddress;
+import java.nio.file.Files;
+
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.connector.Connector;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.openmeetings.AbstractOmServerTest;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CreateTomcatExtension implements BeforeAllCallback {
+	private static final Logger log = LoggerFactory.getLogger(CreateTomcatExtension.class);
+	private String host;
+	private String context;
+	private int port = 8080;
+	private Tomcat tomcat;
+
+	public CreateTomcatExtension(String host, String context) {
+		this.host = host;
+		this.context = context;
+	}
+
+	@Override
+	public void beforeAll(ExtensionContext extContext) throws Exception {
+		if (tomcat == null) {
+			extContext.getRoot().getStore(ExtensionContext.Namespace.GLOBAL).put("my_report", new ExtensionContext.Store.CloseableResource() {
+				@Override
+				public void close() throws Throwable {
+					if (tomcat.getServer() != null && tomcat.getServer().getState() != LifecycleState.DESTROYED) {
+						if (tomcat.getServer().getState() != LifecycleState.STOPPED) {
+							tomcat.stop();
+						}
+						tomcat.destroy();
+					}
+				}
+			});
+			AbstractOmServerTest.init();
+			tomcat = new Tomcat();
+			Connector connector = new Connector("HTTP/1.1");
+			connector.setProperty("address", InetAddress.getByName(host).getHostAddress());
+			connector.setPort(0);
+			tomcat.getService().addConnector(connector);
+			tomcat.setConnector(connector);
+			File wd = Files.createTempDirectory("om" + randomUUID().toString()).toFile();
+			tomcat.setBaseDir(wd.getCanonicalPath());
+			tomcat.getHost().setAppBase(wd.getCanonicalPath());
+			tomcat.getHost().setAutoDeploy(false);
+			tomcat.getHost().setDeployOnStartup(false);
+			tomcat.addWebapp(context, getOmHome().getAbsolutePath());
+			tomcat.getConnector(); // to init the connector
+			tomcat.start();
+			port = tomcat.getConnector().getLocalPort();
+		}
+	}
+
+	public int getPort() {
+		return port;
+	}
+}
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java
index 18fdafa..ff962b0 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestCalendarService.java
@@ -19,11 +19,11 @@
 package org.apache.openmeetings.webservice;
 
 import static java.util.UUID.randomUUID;
-import static org.apache.openmeetings.AbstractJUnitDefaults.ONE_HOUR;
-import static org.apache.openmeetings.AbstractJUnitDefaults.createPass;
-import static org.apache.openmeetings.AbstractJUnitDefaults.createUser;
-import static org.apache.openmeetings.AbstractJUnitDefaults.getAppointment;
-import static org.apache.openmeetings.AbstractJUnitDefaults.getUser;
+import static org.apache.openmeetings.AbstractOmServerTest.ONE_HOUR;
+import static org.apache.openmeetings.AbstractOmServerTest.createPass;
+import static org.apache.openmeetings.AbstractOmServerTest.createUser;
+import static org.apache.openmeetings.AbstractOmServerTest.getAppointment;
+import static org.apache.openmeetings.AbstractOmServerTest.getUser;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -37,7 +37,7 @@ import java.util.List;
 import javax.ws.rs.core.Form;
 import javax.ws.rs.core.Response;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
+import org.apache.openmeetings.AbstractOmServerTest;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
 import org.apache.openmeetings.db.dao.room.InvitationDao;
@@ -69,7 +69,7 @@ class TestCalendarService extends AbstractWebServiceTest {
 		u = getBean(UserDao.class).get(u.getId());
 
 		Date start = new Date();
-		Appointment a = AbstractJUnitDefaults.createAppointment(getBean(AppointmentDao.class), getAppointment(u, r, start, new Date(start.getTime() + ONE_HOUR)));
+		Appointment a = AbstractOmServerTest.createAppointment(getBean(AppointmentDao.class), getAppointment(u, r, start, new Date(start.getTime() + ONE_HOUR)));
 
 		AppointmentDTO app = getClient(getCalendarUrl()).path("/room/" + a.getRoom().getId()).query("sid", sr.getMessage())
 				.get(AppointmentDTO.class);
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java
index 2b4f875..42124d6 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestErrorService.java
@@ -19,7 +19,7 @@
 package org.apache.openmeetings.webservice;
 
 import static java.util.UUID.randomUUID;
-import static org.apache.openmeetings.AbstractJUnitDefaults.rnd;
+import static org.apache.openmeetings.AbstractOmServerTest.rnd;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java
index 7a93bd5..4474b6f 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestFileService.java
@@ -20,9 +20,9 @@ package org.apache.openmeetings.webservice;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.UUID.randomUUID;
-import static org.apache.openmeetings.AbstractJUnitDefaults.UNIT_TEST_ARAB_EXT_TYPE;
-import static org.apache.openmeetings.AbstractJUnitDefaults.createUser;
-import static org.apache.openmeetings.AbstractJUnitDefaults.getUser;
+import static org.apache.openmeetings.AbstractOmServerTest.UNIT_TEST_ARAB_EXT_TYPE;
+import static org.apache.openmeetings.AbstractOmServerTest.createUser;
+import static org.apache.openmeetings.AbstractOmServerTest.getUser;
 import static org.junit.Assert.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -45,14 +45,13 @@ import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.NonJenkinsTest;
 import org.apache.wicket.util.encoding.UrlEncoder;
-import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
 class TestFileService extends AbstractWebServiceTest {
 
-	@Test
-	@Tag("org.apache.openmeetings.test.NonJenkinsTests")
+	@NonJenkinsTest
 	void addFileTest() throws IOException {
 		File img = null;
 		try {
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java
index 820c4a3..3b24400 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestGroupService.java
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.webservice;
 
-import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
-import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
+import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
+import static org.apache.openmeetings.AbstractOmServerTest.userpass;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java
index 142cd76..e237380 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestRecordingService.java
@@ -19,7 +19,7 @@
 package org.apache.openmeetings.webservice;
 
 import static java.util.UUID.randomUUID;
-import static org.apache.openmeetings.AbstractJUnitDefaults.getUser;
+import static org.apache.openmeetings.AbstractOmServerTest.getUser;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java
index 104ab48..e3319ba 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java
+++ b/openmeetings-web/src/test/java/org/apache/openmeetings/webservice/TestUserService.java
@@ -20,10 +20,10 @@ package org.apache.openmeetings.webservice;
 
 import static java.util.UUID.randomUUID;
 import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
-import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername;
-import static org.apache.openmeetings.AbstractJUnitDefaults.createPass;
-import static org.apache.openmeetings.AbstractJUnitDefaults.rnd;
-import static org.apache.openmeetings.AbstractJUnitDefaults.userpass;
+import static org.apache.openmeetings.AbstractOmServerTest.adminUsername;
+import static org.apache.openmeetings.AbstractOmServerTest.createPass;
+import static org.apache.openmeetings.AbstractOmServerTest.rnd;
+import static org.apache.openmeetings.AbstractOmServerTest.userpass;
 import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -177,8 +177,20 @@ class TestUserService extends AbstractWebServiceTest {
 		ServiceResult r = login();
 		Collection<? extends UserDTO> users = getClient(getUserUrl())
 				.path("/")
-				.query("sid", r.getMessage()).getCollection(UserDTO.class);
+				.query("sid", r.getMessage())
+				.getCollection(UserDTO.class);
 		assertNotNull(users, "Collection should be not null");
 		assertFalse(users.isEmpty(), "Collection should be not empty");
 	}
+
+	@Test
+	void listNoAuth() {
+		Response r = getClient(getUserUrl())
+				.path("/")
+				.get();
+		assertEquals(500, r.getStatus(), "Not allowed error");
+		assertTrue(r.hasEntity());
+		ServiceResult result = r.readEntity(ServiceResult.class);
+		assertEquals(ServiceResult.Type.ERROR.name(), result.getType());
+	}
 }
diff --git a/openmeetings-webservice/pom.xml b/openmeetings-webservice/pom.xml
index 31dfb65..ee5580f 100644
--- a/openmeetings-webservice/pom.xml
+++ b/openmeetings-webservice/pom.xml
@@ -47,7 +47,7 @@
 									<packages>org.apache.openmeetings.webservice</packages>
 								</group>
 							</groups>
-							<skip>${om.quick.build}</skip>
+							<skip>${site.skip}</skip>
 						</configuration>
 						<goals>
 							<goal>javadoc-no-fork</goal>
@@ -147,6 +147,7 @@
 							</server>
 						</servers>
 					</swaggerConfig>
+					<skip>${site.skip}</skip>
 				</configuration>
 				<executions>
 					<execution>
diff --git a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmExceptionHandler.java
similarity index 55%
copy from openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
copy to openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmExceptionHandler.java
index 361b090..56aac5d 100644
--- a/openmeetings-web/src/test/java/org/apache/openmeetings/smoke/TestSmokeBasic.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/util/OmExceptionHandler.java
@@ -16,16 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.smoke;
+package org.apache.openmeetings.webservice.util;
 
-import static org.junit.jupiter.api.Assertions.assertNotNull;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
 
-import org.apache.openmeetings.AbstractJUnitDefaults;
-import org.junit.jupiter.api.Test;
+import org.apache.openmeetings.db.dto.basic.ServiceResult;
+import org.apache.openmeetings.db.dto.basic.ServiceResult.Type;
+import org.apache.openmeetings.webservice.error.ServiceException;
 
-class TestSmokeBasic extends AbstractJUnitDefaults {
-	@Test
-	void createErrorValueAndTest() {
-		assertNotNull(userDao.get(1L));
+public class OmExceptionHandler implements ExceptionMapper<ServiceException> {
+	@Override
+	public Response toResponse(ServiceException exception) {
+		return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
+				.entity(new ServiceResult(exception.getMessage(), Type.ERROR))
+				.header("exception", exception.getMessage())
+				.build();
 	}
 }
diff --git a/pom.xml b/pom.xml
index 446b51b..0058f41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,9 +80,9 @@
 		<swagger-plugin.version>2.1.6</swagger-plugin.version>
 		<!-- dependency versions -->
 		<junit.version>5.8.1</junit.version>
-		<wicket.version>9.5.0</wicket.version>
+		<wicket.version>9.6.0</wicket.version>
 		<wicket-jquery-ui.version>9.5.0</wicket-jquery-ui.version>
-		<wicketstuff.version>9.5.0</wicketstuff.version>
+		<wicketstuff.version>9.6.0</wicketstuff.version>
 		<wicket-bootstrap.version>6.0.0-M4</wicket-bootstrap.version>
 		<font-awesome.version>5.15.4</font-awesome.version>
 		<spring.version>5.3.12</spring.version>
@@ -1049,7 +1049,7 @@
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-site-plugin</artifactId>
 				<configuration>
-					<skip>${om.quick.build}</skip>
+					<skip>${site.skip}</skip>
 				</configuration>
 				<executions>
 					<execution>
@@ -1250,7 +1250,7 @@
 					<version>${maven-surefire-plugin.version}</version>
 					<configuration>
 						<forkCount>1</forkCount>
-						<reuseForks>false</reuseForks>
+						<reuseForks>true</reuseForks>
 						<includes>
 							<include>**/Test*.java</include>
 						</includes>
@@ -1711,6 +1711,7 @@
 			<id>quick</id>
 			<properties>
 				<maven.test.skip>true</maven.test.skip>
+				<site.skip>true</site.skip>
 				<om.quick.build>true</om.quick.build>
 				<om.notquick.build>false</om.notquick.build>
 				<wicket.configuration>DEVELOPMENT</wicket.configuration>
@@ -1864,7 +1865,7 @@
 						<groupId>org.apache.maven.plugins</groupId>
 						<artifactId>maven-surefire-plugin</artifactId>
 						<configuration>
-							<excludedGroups>org.apache.openmeetings.test.NonJenkinsTests</excludedGroups>
+							<excludedGroups>heavy-test,non-jenkins</excludedGroups>
 						</configuration>
 					</plugin>
 				</plugins>