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 e213b36  [OPENMEETINGS-2423] import should be fixed
e213b36 is described below

commit e213b3647f5e22e2e610e3b4fe321ac2f2c60f25
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Tue Sep 8 18:28:20 2020 +0700

    [OPENMEETINGS-2423] import should be fixed
---
 .../openmeetings/core/remote/AbstractStream.java   |   6 +-
 .../org/apache/openmeetings/TestConnection.java    |   2 +-
 .../openmeetings/core/remote/BaseMockedTest.java   |  64 +++++++++----
 .../core/remote/TestNotConnectedMocked.java        |   6 +-
 .../core/remote/TestRecordingFlowMocked.java       |  41 ++++----
 .../core/remote/TestRoomFlowMocked.java            |  94 ++++++++++---------
 .../core/remote/TestSetupFlowMocked.java           | 104 ++++++++++-----------
 .../java/org/apache/openmeetings/gui/TestGui.java  |   2 +-
 .../openmeetings/rdc/TestKeyCodesNumber.java       |   2 +-
 .../openmeetings/rdc/TestReadKeyCodesNumber.java   |   2 +-
 .../openmeetings/db/entity/file/FileItemTest.java  |  76 ++++++---------
 .../apache/openmeetings/backup/BackupImport.java   |  18 ++++
 openmeetings-web/pom.xml                           |   2 +-
 .../openmeetings/web/common/menu/OmMenuItem.java   |  34 ++++---
 .../web/pages/install/InstallWizard.java           |   7 +-
 .../apache/openmeetings/backup/TestImportOld.java  |  31 ++++++
 .../openmeetings/backup/jira2423/backup_2423.zip   | Bin 0 -> 25722 bytes
 pom.xml                                            |  32 +------
 18 files changed, 282 insertions(+), 241 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
index 1224288..c1376d2 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/AbstractStream.java
@@ -47,17 +47,17 @@ public abstract class AbstractStream {
 
        public abstract void release(IStreamProcessor processor, boolean 
remove);
 
-       public WebRtcEndpoint createWebRtcEndpoint(MediaPipeline pipeline) {
+       public static WebRtcEndpoint createWebRtcEndpoint(MediaPipeline 
pipeline) {
                return new WebRtcEndpoint.Builder(pipeline).build();
        }
 
-       public RecorderEndpoint createRecorderEndpoint(MediaPipeline pipeline, 
String path, MediaProfileSpecType profile) {
+       public static RecorderEndpoint createRecorderEndpoint(MediaPipeline 
pipeline, String path, MediaProfileSpecType profile) {
                return new RecorderEndpoint.Builder(pipeline, path)
                                .stopOnEndOfStream()
                                .withMediaProfile(profile).build();
        }
 
-       public PlayerEndpoint createPlayerEndpoint(MediaPipeline pipeline, 
String path) {
+       public static PlayerEndpoint createPlayerEndpoint(MediaPipeline 
pipeline, String path) {
                return new PlayerEndpoint.Builder(pipeline, path).build();
        }
 }
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/TestConnection.java 
b/openmeetings-core/src/test/java/org/apache/openmeetings/TestConnection.java
index 0a271ae..ba0eba8 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/TestConnection.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/TestConnection.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 public class TestConnection {
 
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
index f8f4b6b..154c6a7 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/BaseMockedTest.java
@@ -20,30 +20,39 @@
 package org.apache.openmeetings.core.remote;
 
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.when;
-import static org.mockito.MockitoAnnotations.initMocks;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.lenient;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
+
+import java.util.Locale;
 
 import org.apache.openmeetings.core.util.WebSocketHelper;
-import org.junit.Before;
-import org.junit.runner.RunWith;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.entity.basic.IWsClient;
+import org.apache.openmeetings.db.entity.label.OmLanguage;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.kurento.client.KurentoClient;
-import org.kurento.client.KurentoConnectionListener;
+import org.kurento.client.MediaPipeline;
+import org.kurento.client.MediaProfileSpecType;
+import org.kurento.client.PlayerEndpoint;
+import org.kurento.client.RecorderEndpoint;
 import org.kurento.client.ServerManager;
+import org.kurento.client.WebRtcEndpoint;
 import org.kurento.client.internal.TransactionImpl;
 import org.kurento.client.internal.client.RomManager;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.Spy;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.stubbing.Answer;
 
 import com.github.openjson.JSONObject;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({KurentoClient.class, WebSocketHelper.class, 
AbstractStream.class})
+@ExtendWith(MockitoExtension.class)
 public class BaseMockedTest {
        @Mock
        protected RomManager romManager;
@@ -63,14 +72,31 @@ public class BaseMockedTest {
 
        protected final static JSONObject MSG_BASE = new JSONObject();
 
-       @Before
+       @BeforeEach
        public void setup() {
-               initMocks(this);
-               mockStatic(KurentoClient.class);
-               mockStatic(WebSocketHelper.class);
-               doReturn(kServerManager).when(client).getServerManager();
-               when(KurentoClient.create(nullable(String.class), 
any(KurentoConnectionListener.class))).thenReturn(client);
-               doReturn(new 
TransactionImpl(romManager)).when(client).beginTransaction();
+               
lenient().doReturn(kServerManager).when(client).getServerManager();
+               lenient().doReturn(new 
TransactionImpl(romManager)).when(client).beginTransaction();
                handler.init();
        }
+
+       void runWrapped(Runnable task) {
+               try (MockedStatic<AbstractStream> streamMock = 
mockStatic(AbstractStream.class);
+                               MockedStatic<WebSocketHelper> wsHelperMock = 
mockStatic(WebSocketHelper.class);
+                               MockedStatic<LabelDao> labelMock = 
mockStatic(LabelDao.class);
+                               )
+               {
+                       wsHelperMock.when(() -> 
WebSocketHelper.sendClient(any(IWsClient.class), 
any(JSONObject.class))).thenAnswer(new Answer<Void>() {
+                               @Override
+                               public Void answer(InvocationOnMock invocation) 
throws Throwable {
+                                       return null;
+                               }
+                       });
+                       streamMock.when(() -> 
AbstractStream.createWebRtcEndpoint(any(MediaPipeline.class))).thenReturn(mock(WebRtcEndpoint.class));
+                       streamMock.when(() -> 
AbstractStream.createRecorderEndpoint(any(MediaPipeline.class), anyString(), 
any(MediaProfileSpecType.class))).thenReturn(mock(RecorderEndpoint.class));
+                       streamMock.when(() -> 
AbstractStream.createPlayerEndpoint(any(MediaPipeline.class), 
anyString())).thenReturn(mock(PlayerEndpoint.class));
+
+                       labelMock.when(() -> 
LabelDao.getLanguage(any(Long.class))).thenReturn(new 
OmLanguage(Locale.ENGLISH));
+                       task.run();
+               }
+       }
 }
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestNotConnectedMocked.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestNotConnectedMocked.java
index dd67727..05d89a3 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestNotConnectedMocked.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestNotConnectedMocked.java
@@ -19,10 +19,10 @@
  */
 package org.apache.openmeetings.core.remote;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import com.github.openjson.JSONObject;
 
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
index 5f22af0..5e418f0 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRecordingFlowMocked.java
@@ -19,40 +19,34 @@
  */
 package org.apache.openmeetings.core.remote;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Locale;
-
-import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.basic.Client.Activity;
 import org.apache.openmeetings.db.entity.basic.Client.StreamDesc;
-import org.apache.openmeetings.db.entity.label.OmLanguage;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.manager.IClientManager;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.kurento.client.MediaPipeline;
 import org.kurento.client.Transaction;
-import org.mockito.BDDMockito;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 
 import com.github.openjson.JSONObject;
 
-@PrepareForTest(LabelDao.class)
 public class TestRecordingFlowMocked extends BaseMockedTest {
        private static final Long USER_ID = 1L;
        private static final Long ROOM_ID = 5L;
@@ -72,6 +66,7 @@ public class TestRecordingFlowMocked extends BaseMockedTest {
        private String streamDescUID;
 
        @Override
+       @BeforeEach
        public void setup() {
                super.setup();
                
doReturn(mock(MediaPipeline.class)).when(client).createMediaPipeline(any(Transaction.class));
@@ -88,9 +83,6 @@ public class TestRecordingFlowMocked extends BaseMockedTest {
                        return r;
                });
 
-               PowerMockito.mockStatic(LabelDao.class);
-               
BDDMockito.given(LabelDao.getLanguage(any(Long.class))).willReturn(new 
OmLanguage(Locale.ENGLISH));
-
                // init client object for this test
                c = getClientFull();
                doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
@@ -119,13 +111,18 @@ public class TestRecordingFlowMocked extends 
BaseMockedTest {
        }
 
        @Test
-       public void testRecordingFlow() throws Exception {
-
-               // start recording and simulate broadcast starting
-               testStartRecordWhenSharingWasNot();
-
-               // stop recording
-               testStopRecordingWhenNoSharingStarted();
+       public void testRecordingFlow() {
+               runWrapped(() -> {
+                       try {
+                               // start recording and simulate broadcast 
starting
+                               testStartRecordWhenSharingWasNot();
+
+                               // stop recording
+                               testStopRecordingWhenNoSharingStarted();
+                       } catch (Exception e) {
+                               fail("Unexpected exception", e);
+                       }
+               });
        }
 
        /**
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
index 9a1cf0b..26fac73 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestRoomFlowMocked.java
@@ -19,36 +19,29 @@
  */
 package org.apache.openmeetings.core.remote;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
-import java.util.Locale;
-
-import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.Client;
-import org.apache.openmeetings.db.entity.label.OmLanguage;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.manager.IClientManager;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.kurento.client.MediaPipeline;
 import org.kurento.client.Transaction;
-import org.mockito.BDDMockito;
 import org.mockito.Mock;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 
 import com.github.openjson.JSONObject;
 
-@PrepareForTest(LabelDao.class)
 public class TestRoomFlowMocked extends BaseMockedTest {
        private static final Long USER_ID = 1L;
        private static final Long ROOM_ID = 5L;
@@ -62,16 +55,17 @@ public class TestRoomFlowMocked extends BaseMockedTest {
        private IClientManager cm;
 
        @Override
+       @BeforeEach
        public void setup() {
                super.setup();
-               
doReturn(mock(MediaPipeline.class)).when(client).createMediaPipeline(any(Transaction.class));
+               
lenient().doReturn(mock(MediaPipeline.class)).when(client).createMediaPipeline(any(Transaction.class));
                User u = new User();
                u.setId(USER_ID);
                u.setFirstname("firstname");
                u.setLastname("lastname");
-               doReturn(u).when(userDao).get(USER_ID);
+               lenient().doReturn(u).when(userDao).get(USER_ID);
                doReturn(true).when(handler).isConnected();
-               
when(recDao.update(any(Recording.class))).thenAnswer((invocation) ->  {
+               
lenient().when(recDao.update(any(Recording.class))).thenAnswer((invocation) ->  
{
                        Object[] args = invocation.getArguments();
                        Recording r = (Recording) args[0];
                        r.setId(1L);
@@ -81,7 +75,9 @@ public class TestRoomFlowMocked extends BaseMockedTest {
 
        @Test
        public void testNoClient() {
-               handler.onMessage(null, MSG_BASE.put("id", "aa"));
+               runWrapped(() -> {
+                       handler.onMessage(null, MSG_BASE.put("id", "aa"));
+               });
        }
 
        private Client getClient() {
@@ -90,21 +86,25 @@ public class TestRoomFlowMocked extends BaseMockedTest {
 
        @Test
        public void testNoRoom() {
-               handler.onMessage(getClient(), MSG_BASE.put("id", "aa"));
+               runWrapped(() -> {
+                       handler.onMessage(getClient(), MSG_BASE.put("id", 
"aa"));
+               });
        }
 
        @Test
        public void testRecordingAllowed() {
-               Client c = getClient();
-               assertFalse(streamProcessor.recordingAllowed(c));
-               c.setRoom(new Room());
-               assertFalse(streamProcessor.recordingAllowed(c));
-               c.getRoom().setId(ROOM_ID);
-               c.getRoom().setAllowRecording(true);
-               assertFalse(streamProcessor.recordingAllowed(c));
-               c.allow(Room.Right.MODERATOR);
-               doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
-               assertTrue(streamProcessor.recordingAllowed(c));
+               runWrapped(() -> {
+                       Client c = getClient();
+                       assertFalse(streamProcessor.recordingAllowed(c));
+                       c.setRoom(new Room());
+                       assertFalse(streamProcessor.recordingAllowed(c));
+                       c.getRoom().setId(ROOM_ID);
+                       c.getRoom().setAllowRecording(true);
+                       assertFalse(streamProcessor.recordingAllowed(c));
+                       c.allow(Room.Right.MODERATOR);
+                       doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
+                       assertTrue(streamProcessor.recordingAllowed(c));
+               });
        }
 
        private Client getClientWithRoom() {
@@ -129,28 +129,30 @@ public class TestRoomFlowMocked extends BaseMockedTest {
 
        @Test
        public void testWannaRecord2() throws Exception {
-               JSONObject msg = new JSONObject(MSG_BASE.toString()).put("id", 
"wannaRecord");
-               Client c = getClientFull();
-               c.getRoom().setType(Room.Type.INTERVIEW);
-               doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
-               handler.onMessage(c, msg);
+               runWrapped(() -> {
+                       JSONObject msg = new 
JSONObject(MSG_BASE.toString()).put("id", "wannaRecord");
+                       Client c = getClientFull();
+                       c.getRoom().setType(Room.Type.INTERVIEW);
+                       doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
+                       handler.onMessage(c, msg);
+               });
        }
 
        @Test
        public void testRecordRecord() throws Exception {
-               PowerMockito.mockStatic(LabelDao.class);
-               
BDDMockito.given(LabelDao.getLanguage(any(Long.class))).willReturn(new 
OmLanguage(Locale.ENGLISH));
-               JSONObject msg = new JSONObject(MSG_BASE.toString())
-                               .put("id", "wannaRecord")
-                               .put("width", 640)
-                               .put("height", 480)
-                               .put("shareType", "shareType")
-                               .put("fps", "fps")
-                               ;
-               Client c = getClientFull();
-               doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
-               handler.onMessage(c, msg);
-               assertTrue(streamProcessor.isSharing(ROOM_ID));
-               handler.onMessage(c, msg);
+               runWrapped(() -> {
+                       JSONObject msg = new JSONObject(MSG_BASE.toString())
+                                       .put("id", "wannaRecord")
+                                       .put("width", 640)
+                                       .put("height", 480)
+                                       .put("shareType", "shareType")
+                                       .put("fps", "fps")
+                                       ;
+                       Client c = getClientFull();
+                       doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
+                       handler.onMessage(c, msg);
+                       assertTrue(streamProcessor.isSharing(ROOM_ID));
+                       handler.onMessage(c, msg);
+               });
        }
 }
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestSetupFlowMocked.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestSetupFlowMocked.java
index 558b394..923e8a6 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestSetupFlowMocked.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/core/remote/TestSetupFlowMocked.java
@@ -23,24 +23,20 @@ import static 
org.apache.openmeetings.core.remote.KurentoHandler.MODE_TEST;
 import static 
org.apache.openmeetings.core.remote.KurentoHandler.PARAM_CANDIDATE;
 import static org.apache.openmeetings.core.remote.KurentoHandler.TAG_MODE;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
-import static org.powermock.api.mockito.PowerMockito.whenNew;
 
 import org.apache.openmeetings.db.entity.basic.WsClient;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.kurento.client.MediaPipeline;
-import org.kurento.client.MediaProfileSpecType;
-import org.kurento.client.PlayerEndpoint;
-import org.kurento.client.RecorderEndpoint;
 import org.kurento.client.Transaction;
-import org.kurento.client.WebRtcEndpoint;
 
 import com.github.openjson.JSONObject;
 
 public class TestSetupFlowMocked extends BaseMockedTest {
        @Override
+       @BeforeEach
        public void setup() {
                super.setup();
                doReturn(true).when(handler).isConnected();
@@ -49,71 +45,69 @@ public class TestSetupFlowMocked extends BaseMockedTest {
 
        @Test
        public void testMsgTestWannaRecord() throws Exception {
-               JSONObject msg = new JSONObject(MSG_BASE.toString()).put("id", 
"wannaRecord");
-               WsClient c = new WsClient("sessionId", 0);
-               handler.onMessage(c, msg);
+               runWrapped(() -> {
+                       JSONObject msg = new 
JSONObject(MSG_BASE.toString()).put("id", "wannaRecord");
+                       WsClient c = new WsClient("sessionId", 0);
+                       handler.onMessage(c, msg);
+               });
        }
 
        @Test
        public void testMsgTestRecord1() throws Exception {
-               
doReturn(mock(MediaPipeline.class)).when(client).createMediaPipeline(any(Transaction.class));
-               WebRtcEndpoint.Builder builder = 
mock(WebRtcEndpoint.Builder.class);
-               
whenNew(WebRtcEndpoint.Builder.class).withArguments(any(MediaPipeline.class)).thenReturn(builder);
-               doReturn(mock(WebRtcEndpoint.class)).when(builder).build();
+               runWrapped(() -> {
+                       
doReturn(mock(MediaPipeline.class)).when(client).createMediaPipeline(any(Transaction.class));
 
-               RecorderEndpoint.Builder recBuilder = 
mock(RecorderEndpoint.Builder.class);
-               
whenNew(RecorderEndpoint.Builder.class).withArguments(any(MediaPipeline.class), 
anyString()).thenReturn(recBuilder);
-               doReturn(recBuilder).when(recBuilder).stopOnEndOfStream();
-               
doReturn(recBuilder).when(recBuilder).withMediaProfile(any(MediaProfileSpecType.class));
-               doReturn(mock(RecorderEndpoint.class)).when(recBuilder).build();
-
-               WsClient c = new WsClient("sessionId", 0);
-               for (boolean audio : new boolean[] {true, false}) {
-                       for (boolean video : new boolean[] {true, false}) {
-                               JSONObject msg = new 
JSONObject(MSG_BASE.toString())
-                                               .put("id", "record")
-                                               .put("sdpOffer", "")
-                                               .put("audio", audio)
-                                               .put("video", video);
-                               handler.onMessage(c, msg);
+                       WsClient c = new WsClient("sessionId", 0);
+                       for (boolean audio : new boolean[] {true, false}) {
+                               for (boolean video : new boolean[] {true, 
false}) {
+                                       JSONObject msg = new 
JSONObject(MSG_BASE.toString())
+                                                       .put("id", "record")
+                                                       .put("sdpOffer", "")
+                                                       .put("audio", audio)
+                                                       .put("video", video);
+                                       handler.onMessage(c, msg);
+                               }
                        }
-               }
-               JSONObject iceMsg = new JSONObject(MSG_BASE.toString())
-                               .put("id", "iceCandidate")
-                               .put(PARAM_CANDIDATE, new JSONObject()
-                                               .put(PARAM_CANDIDATE, 
"candidate")
-                                               .put("sdpMid", "sdpMid")
-                                               .put("sdpMLineIndex", 1));
-               handler.onMessage(c, iceMsg);
-               PlayerEndpoint.Builder playBuilder = 
mock(PlayerEndpoint.Builder.class);
-               
whenNew(PlayerEndpoint.Builder.class).withArguments(any(MediaPipeline.class), 
anyString()).thenReturn(playBuilder);
-               doReturn(mock(PlayerEndpoint.class)).when(playBuilder).build();
-               handler.onMessage(c, new JSONObject(MSG_BASE.toString())
-                               .put("id", "play")
-                               .put("sdpOffer", "sdpOffer"));
-               testProcessor.destroy();
+                       JSONObject iceMsg = new JSONObject(MSG_BASE.toString())
+                                       .put("id", "iceCandidate")
+                                       .put(PARAM_CANDIDATE, new JSONObject()
+                                                       .put(PARAM_CANDIDATE, 
"candidate")
+                                                       .put("sdpMid", "sdpMid")
+                                                       .put("sdpMLineIndex", 
1));
+                       handler.onMessage(c, iceMsg);
+                       handler.onMessage(c, new JSONObject(MSG_BASE.toString())
+                                       .put("id", "play")
+                                       .put("sdpOffer", "sdpOffer"));
+                       testProcessor.destroy();
+               });
        }
 
        @Test
        public void testMsgTestIceCandidate() throws Exception {
-               JSONObject msg = new JSONObject(MSG_BASE.toString())
-                               .put("id", "iceCandidate")
-                               .put(KurentoHandler.PARAM_CANDIDATE, new 
JSONObject());
-               WsClient c = new WsClient("sessionId", 0);
-               handler.onMessage(c, msg);
+               runWrapped(() -> {
+                       JSONObject msg = new JSONObject(MSG_BASE.toString())
+                                       .put("id", "iceCandidate")
+                                       .put(KurentoHandler.PARAM_CANDIDATE, 
new JSONObject());
+                       WsClient c = new WsClient("sessionId", 0);
+                       handler.onMessage(c, msg);
+               });
        }
 
        @Test
        public void testMsgTestWannaPlay() throws Exception {
-               JSONObject msg = new JSONObject(MSG_BASE.toString()).put("id", 
"wannaPlay");
-               WsClient c = new WsClient("sessionId", 0);
-               handler.onMessage(c, msg);
+               runWrapped(() -> {
+                       JSONObject msg = new 
JSONObject(MSG_BASE.toString()).put("id", "wannaPlay");
+                       WsClient c = new WsClient("sessionId", 0);
+                       handler.onMessage(c, msg);
+               });
        }
 
        @Test
        public void testMsgTestPlay() throws Exception {
-               JSONObject msg = new JSONObject(MSG_BASE.toString()).put("id", 
"play");
-               WsClient c = new WsClient("sessionId", 0);
-               handler.onMessage(c, msg);
+               runWrapped(() -> {
+                       JSONObject msg = new 
JSONObject(MSG_BASE.toString()).put("id", "play");
+                       WsClient c = new WsClient("sessionId", 0);
+                       handler.onMessage(c, msg);
+               });
        }
 }
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/gui/TestGui.java 
b/openmeetings-core/src/test/java/org/apache/openmeetings/gui/TestGui.java
index 2541fd0..7c27196 100644
--- a/openmeetings-core/src/test/java/org/apache/openmeetings/gui/TestGui.java
+++ b/openmeetings-core/src/test/java/org/apache/openmeetings/gui/TestGui.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.gui;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 
 public class TestGui {
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestKeyCodesNumber.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestKeyCodesNumber.java
index 14e1a9b..f8e8e95 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestKeyCodesNumber.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestKeyCodesNumber.java
@@ -20,7 +20,7 @@ package org.apache.openmeetings.rdc;
 
 import java.awt.event.KeyEvent;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestReadKeyCodesNumber.java
 
b/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestReadKeyCodesNumber.java
index 572cff7..29d3c07 100644
--- 
a/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestReadKeyCodesNumber.java
+++ 
b/openmeetings-core/src/test/java/org/apache/openmeetings/rdc/TestReadKeyCodesNumber.java
@@ -18,7 +18,7 @@
  */
 package org.apache.openmeetings.rdc;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/openmeetings-db/src/test/java/org/apache/openmeetings/db/entity/file/FileItemTest.java
 
b/openmeetings-db/src/test/java/org/apache/openmeetings/db/entity/file/FileItemTest.java
index 11e5156..cc443c2 100644
--- 
a/openmeetings-db/src/test/java/org/apache/openmeetings/db/entity/file/FileItemTest.java
+++ 
b/openmeetings-db/src/test/java/org/apache/openmeetings/db/entity/file/FileItemTest.java
@@ -18,52 +18,26 @@
  */
 package org.apache.openmeetings.db.entity.file;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.when;
-import static org.mockito.MockitoAnnotations.initMocks;
-import static org.powermock.api.mockito.PowerMockito.mockStatic;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mockStatic;
 
 import java.io.File;
 
 import org.apache.openmeetings.util.OmFileHelper;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(OmFileHelper.class)
-public class FileItemTest {
-
-       @Mock
-       private OmFileHelper omFileHelper;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.MockedStatic;
+import org.mockito.junit.jupiter.MockitoExtension;
 
-       @InjectMocks
+@ExtendWith(MockitoExtension.class)
+public class FileItemTest {
        private FileItem fileItem;
 
-       @Before
-       public void setup() {
-               initMocks(this);
-
-               // Setup path to be local test resources
-               mockStatic(OmFileHelper.class);
-
-               // PDF file tests
-               
when(OmFileHelper.getFileExt("6594186e-c6bb-49d5-9f66-829e45599aaa.pdf")).thenReturn("pdf");
-
-               // DOCX file tests
-               
when(OmFileHelper.getFileExt("d44ab2c5-fd5d-4903-8fa7-292286d72a5f.docx")).thenReturn("docx");
-               
when(OmFileHelper.getFileExt("d44ab2c5-fd5d-4903-8fa7-292286d72a5f.pdf")).thenReturn("pdf");
-
-               // Generic
-               
when(OmFileHelper.getFileExt("page-0000.png")).thenReturn("png");
-               
when(OmFileHelper.getFileExt("page-0001.png")).thenReturn("png");
-
-               when(OmFileHelper.getUploadFilesDir()).thenReturn(new 
File("src/test/resources/org/apache/openmeetings/db/entity/file"));
+       @BeforeEach
+       void createNewStack() {
+               fileItem = new FileItem();
        }
 
        @Test
@@ -108,6 +82,13 @@ public class FileItemTest {
                assertEquals(f.getName(), 
"6594186e-c6bb-49d5-9f66-829e45599aaa.pdf");
        }
 
+       private void wrapper(Runnable r) {
+               try (MockedStatic<OmFileHelper> theMock = 
mockStatic(OmFileHelper.class)) {
+                       
theMock.when(OmFileHelper::getUploadFilesDir).thenReturn(new 
File("src/test/resources/org/apache/openmeetings/db/entity/file"));
+                       r.run();
+               }
+       }
+
        @Test
        public void testGetOriginalWithDOCXWithOriginalName() {
                // Setup file
@@ -116,10 +97,12 @@ public class FileItemTest {
                fileItem.setName("Sample Document.docx");
                fileItem.setType(BaseFileItem.Type.PRESENTATION);
 
-               File f = fileItem.getOriginal();
+               wrapper(() -> {
+                       File f = fileItem.getOriginal();
 
-               assertTrue(f.getName().endsWith("docx"));
-               assertEquals(f.getName(), 
"d44ab2c5-fd5d-4903-8fa7-292286d72a5f.docx");
+                       assertTrue(f.getName().endsWith("docx"));
+                       assertEquals(f.getName(), 
"d44ab2c5-fd5d-4903-8fa7-292286d72a5f.docx");
+               });
        }
 
        @Test
@@ -129,11 +112,12 @@ public class FileItemTest {
                fileItem.setHash("d44ab2c5-fd5d-4903-8fa7-292286d72a5f");
                fileItem.setName("Random Name");
                fileItem.setType(BaseFileItem.Type.PRESENTATION);
+               wrapper(() -> {
+                       File f = fileItem.getOriginal();
 
-               File f = fileItem.getOriginal();
-
-               assertTrue(f.getName().endsWith("docx"));
-               assertEquals(f.getName(), 
"d44ab2c5-fd5d-4903-8fa7-292286d72a5f.docx");
+                       assertTrue(f.getName().endsWith("docx"));
+                       assertEquals(f.getName(), 
"d44ab2c5-fd5d-4903-8fa7-292286d72a5f.docx");
+               });
        }
 
        @Test
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index 5c1fcdb..ebc04e5 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -718,6 +718,13 @@ public class BackupImport {
                readList(unmarshaller, base, "rooms.xml", ROOM_LIST_NODE, 
ROOM_NODE, eClazz, r -> {
                        Long roomId = r.getId();
 
+                       if (r.getOwnerId() != null) {
+                               Long newOwnerId = userMap.get(r.getOwnerId());
+                               if (newOwnerId == null) {
+                                       return; // owner was deleted
+                               }
+                               r.setOwnerId(newOwnerId);
+                       }
                        // We need to reset ids as openJPA reject to store them 
otherwise
                        r.setId(null);
                        if (r.getModerators() != null) {
@@ -884,6 +891,17 @@ public class BackupImport {
                        }
                        file.setOwnerId(newOwnerId);
                }
+               if (file.getInsertedBy() != null) {
+                       Long newInsertedBy = userMap.get(file.getInsertedBy());
+                       file.setInsertedBy(newInsertedBy);
+               }
+               if (file.getGroupId() != null) {
+                       Long newGroupId = groupMap.get(file.getGroupId());
+                       if (newGroupId == null) {
+                               return true; // owner was deleted
+                       }
+                       file.setGroupId(newGroupId);
+               }
                return false;
        }
 
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index e192aa6..47e665d 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -718,7 +718,7 @@
                </dependency>
                <dependency>
                        <groupId>org.mockito</groupId>
-                       <artifactId>mockito-core</artifactId>
+                       <artifactId>mockito-inline</artifactId>
                        <scope>test</scope>
                </dependency>
                <dependency>
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/OmMenuItem.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/OmMenuItem.java
index 003cf14..0056b8e 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/OmMenuItem.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/OmMenuItem.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.common.menu;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_CLASS;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.ATTR_TITLE;
 
 import java.util.ArrayList;
@@ -80,24 +81,15 @@ public class OmMenuItem implements INavbarComponent {
        @Override
        public AbstractLink create(String markupId) {
                AbstractLink item;
-               if (Strings.isEmpty(title)) {
-                       item = new MenuDivider();
-               } else if (items.isEmpty()) {
-                       item = new NavbarAjaxLink<String>(markupId, 
Model.of(title)) {
-                               private static final long serialVersionUID = 1L;
-
-                               @Override
-                               public void onClick(AjaxRequestTarget target) {
-                                       OmMenuItem.this.onClick(target);
-                               }
-                       }.setIconType(icon);
+               if (items.isEmpty()) {
+                       item = createLink(markupId, true);
                } else {
                        item = new NavbarDropDownButton(Model.of(title), 
Model.of(icon)) {
                                private static final long serialVersionUID = 1L;
 
                                @Override
                                protected List<AbstractLink> 
newSubMenuButtons(String markupId) {
-                                       return items.stream().map(mItem -> 
((OmMenuItem)mItem).create(markupId)).collect(Collectors.toList());
+                                       return items.stream().map(mItem -> 
((OmMenuItem)mItem).createLink(markupId, false)).collect(Collectors.toList());
                                }
                        };
                }
@@ -106,6 +98,24 @@ public class OmMenuItem implements INavbarComponent {
                return item;
        }
 
+       private AbstractLink createLink(String markupId, boolean topLevel) {
+               if (Strings.isEmpty(title)) {
+                       return new MenuDivider();
+               }
+               NavbarAjaxLink<String> link = new NavbarAjaxLink<>(markupId, 
Model.of(title)) {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public void onClick(AjaxRequestTarget target) {
+                               OmMenuItem.this.onClick(target);
+                       }
+               };
+               if (topLevel) {
+                       link.add(AttributeModifier.append(ATTR_CLASS, 
"nav-link"));
+               }
+               return link.setIconType(icon);
+       }
+
        @Override
        public ComponentPosition getPosition() {
                return ComponentPosition.LEFT; //FIXME TODO
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
index fdf50f9..ea6a345 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@ -120,6 +120,7 @@ public class InstallWizard extends BootstrapWizard {
        private NotificationPanel feedback;
        private final CompoundPropertyModel<InstallationConfig> model;
        private final List<Button> buttons = new ArrayList<>(4);
+       private WizardButtonBar btnBar;
 
        @SpringBean
        private ImportInitvalues initvalues;
@@ -163,7 +164,7 @@ public class InstallWizard extends BootstrapWizard {
 
        @Override
        protected Component newButtonBar(String id) {
-               return new WizardButtonBar(id, this) {
+               btnBar = new WizardButtonBar(id, this) {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -222,6 +223,8 @@ public class InstallWizard extends BootstrapWizard {
                                return button;
                        }
                };
+               btnBar.setOutputMarkupId(true);
+               return btnBar;
        }
 
        private abstract class BaseStep extends DynamicWizardStep {
@@ -771,7 +774,7 @@ public class InstallWizard extends BootstrapWizard {
                                stop(target);
                                progressBar.setVisible(false);
                                congrat.show(initDbType != dbType);
-                               target.add(container, desc.setVisible(false));
+                               target.add(container, desc.setVisible(false), 
btnBar.setVisible(false));
                        }
                };
                private final Label desc = new Label("desc", "");
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportOld.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportOld.java
index e102b87..3de3172 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportOld.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImportOld.java
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.backup;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -26,7 +27,11 @@ import java.io.FileInputStream;
 import java.io.InputStream;
 
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
+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.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,6 +44,8 @@ public class TestImportOld extends AbstractTestImport {
        private RoomDao roomDao;
        @Autowired
        private MeetingMemberDao meetingMemberDao;
+       @Autowired
+       private FileItemDao fileDao;
 
        @Test
        public void importOldVersions() {
@@ -84,4 +91,28 @@ public class TestImportOld extends AbstractTestImport {
                        log.debug("... Done.");
                }
        }
+
+       /**
+        * Test for https://issues.apache.org/jira/browse/OPENMEETINGS-2423
+        *
+        * @throws Exception
+        */
+       @Test
+       public void importJira2423() throws Exception {
+               try (InputStream is = 
getClass().getClassLoader().getResourceAsStream("org/apache/openmeetings/backup/jira2423/backup_2423.zip"))
 {
+                       backupImport.performImport(is, new ProgressHolder());
+
+                       Group grp2 = groupDao.get("group2_jira_2423");
+                       User usr2 = userDao.getByLogin("testUser2_jira_2423", 
User.Type.USER, null);
+                       assertTrue(usr2.getGroupUsers().stream().filter(gu -> 
gu.getGroup().getId().equals(grp2.getId())).findFirst().isPresent(), "User2 
should belong to group2");
+                       roomDao.getMyRooms(usr2.getId(), "bla", 
"bla1").forEach(r -> {
+                               
assertTrue(r.getName().contains("user2_jira_2423"));
+                       });
+                       FileItem f1 = 
fileDao.getByHash("820b356c-2c96-4634-90c4-3e490432987f");
+                       assertEquals(usr2.getId(), f1.getInsertedBy(), 
"Inserted by is wrong");
+                       assertEquals(usr2.getId(), f1.getOwnerId(), "Owner is 
wrong");
+                       FileItem f2 = 
fileDao.getByHash("7af3f90d-2a8d-44fa-9e0f-79fd87511cc6");
+                       assertEquals(grp2.getId(), f2.getGroupId(), "Group is 
wrong");
+               }
+       }
 }
diff --git 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/jira2423/backup_2423.zip
 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/jira2423/backup_2423.zip
new file mode 100644
index 0000000..f17518c
Binary files /dev/null and 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/jira2423/backup_2423.zip
 differ
diff --git a/pom.xml b/pom.xml
index 8752cdb..23e06e9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,7 +114,6 @@
                <license.excludedScopes>test</license.excludedScopes>
                <bcprov-jdk15on.version>1.66</bcprov-jdk15on.version>
                <mockito.version>3.5.10</mockito.version>
-               <powermock.version>2.0.7</powermock.version>
                <quartz.version>2.3.2</quartz.version>
                <kurento.version>6.14.0</kurento.version>
                <!--  Exclude all generated code  -->
@@ -616,7 +615,7 @@
                        </dependency>
                        <dependency>
                                <groupId>org.mockito</groupId>
-                               <artifactId>mockito-core</artifactId>
+                               <artifactId>mockito-inline</artifactId>
                                <version>${mockito.version}</version>
                                <scope>test</scope>
                        </dependency>
@@ -627,18 +626,6 @@
                                <scope>test</scope>
                        </dependency>
                        <dependency>
-                               <groupId>org.powermock</groupId>
-                               <artifactId>powermock-module-junit4</artifactId>
-                               <version>${powermock.version}</version>
-                               <scope>test</scope>
-                       </dependency>
-                       <dependency>
-                               <groupId>org.powermock</groupId>
-                               <artifactId>powermock-api-mockito2</artifactId>
-                               <version>${powermock.version}</version>
-                               <scope>test</scope>
-                       </dependency>
-                       <dependency>
                                <groupId>javax.websocket</groupId>
                                <artifactId>javax.websocket-api</artifactId>
                                <version>1.1</version>
@@ -676,24 +663,13 @@
                        <scope>test</scope>
                </dependency>
                <dependency>
-                       <groupId>org.junit.vintage</groupId>
-                       <artifactId>junit-vintage-engine</artifactId>
-                       <version>${junit.version}</version>
-                       <scope>test</scope>
-               </dependency>
-               <dependency>
                        <groupId>org.mockito</groupId>
-                       <artifactId>mockito-core</artifactId>
+                       <artifactId>mockito-inline</artifactId>
                        <scope>test</scope>
                </dependency>
                <dependency>
-                       <groupId>org.powermock</groupId>
-                       <artifactId>powermock-module-junit4</artifactId>
-                       <scope>test</scope>
-               </dependency>
-               <dependency>
-                       <groupId>org.powermock</groupId>
-                       <artifactId>powermock-api-mockito2</artifactId>
+                       <groupId>org.mockito</groupId>
+                       <artifactId>mockito-junit-jupiter</artifactId>
                        <scope>test</scope>
                </dependency>
                <dependency>

Reply via email to