more integration tests (proctoring)
This commit is contained in:
parent
cd7e611663
commit
4dc6691213
2 changed files with 137 additions and 13 deletions
|
@ -41,7 +41,7 @@ import ch.ethz.seb.sebserver.webservice.servicelayer.dao.WebserviceInfoDAO;
|
||||||
|
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@SpringBootTest(
|
@SpringBootTest(
|
||||||
properties = "file.encoding=UTF-8",
|
properties = { "file.encoding=UTF-8" },
|
||||||
classes = SEBServer.class,
|
classes = SEBServer.class,
|
||||||
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
|
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
|
||||||
@ActiveProfiles("test")
|
@ActiveProfiles("test")
|
||||||
|
@ -62,9 +62,9 @@ public abstract class GuiIntegrationTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
protected FilterChainProxy springSecurityFilterChain;
|
protected FilterChainProxy springSecurityFilterChain;
|
||||||
@Autowired
|
@Autowired
|
||||||
private WebserviceInfoDAO webserviceInfoDAO;
|
protected WebserviceInfoDAO webserviceInfoDAO;
|
||||||
@Autowired
|
@Autowired
|
||||||
private WebserviceInfo webserviceInfo;
|
protected WebserviceInfo webserviceInfo;
|
||||||
|
|
||||||
protected MockMvc mockMvc;
|
protected MockMvc mockMvc;
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,6 @@ import org.junit.FixMethodOrder;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runners.MethodSorters;
|
import org.junit.runners.MethodSorters;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.ClassPathResource;
|
||||||
import org.springframework.test.context.jdbc.Sql;
|
import org.springframework.test.context.jdbc.Sql;
|
||||||
|
@ -71,6 +70,7 @@ import ch.ethz.seb.sebserver.gbl.model.exam.Indicator;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator.IndicatorType;
|
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator.IndicatorType;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator.Threshold;
|
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator.Threshold;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.IndicatorTemplate;
|
import ch.ethz.seb.sebserver.gbl.model.exam.IndicatorTemplate;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringRoomConnection;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings;
|
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings.ProctoringFeature;
|
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings.ProctoringFeature;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings.ProctoringServerType;
|
import ch.ethz.seb.sebserver.gbl.model.exam.ProctoringServiceSettings.ProctoringServerType;
|
||||||
|
@ -217,20 +217,27 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.Sa
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigHistory;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigHistory;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigTableValues;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigTableValues;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigValue;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.examconfig.SaveExamConfigValue;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.CloseProctoringRoom;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.ConfirmPendingClientNotification;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.ConfirmPendingClientNotification;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.DisableClientConnection;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.DisableClientConnection;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetClientConnection;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetClientConnection;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetClientConnectionDataList;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetClientConnectionDataList;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetClientConnectionPage;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetClientConnectionPage;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetCollectingRoomConnections;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetCollectingRooms;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetCollectingRooms;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetFinishedExamClientConnection;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetFinishedExamClientConnection;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetFinishedExamClientConnectionPage;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetFinishedExamClientConnectionPage;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetFinishedExamPage;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetFinishedExamPage;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetMonitoringFullPageData;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetMonitoringFullPageData;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetPendingClientNotifications;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetPendingClientNotifications;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetProctorRoomConnection;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetRunningExamPage;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetRunningExamPage;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.GetTownhallRoom;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.IsTownhallRoomAvailable;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.IsTownhallRoomAvailable;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.NotifyProctoringRoomOpened;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.OpenTownhallRoom;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.PropagateInstruction;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.PropagateInstruction;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.session.SendProctoringReconfigurationAttributes;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.ActivateUserAccount;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.ActivateUserAccount;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.ChangePassword;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.ChangePassword;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.DeleteUserAccount;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.DeleteUserAccount;
|
||||||
|
@ -240,10 +247,11 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.GetUs
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.NewUserAccount;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.NewUserAccount;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.RegisterNewUser;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.RegisterNewUser;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.SaveUserAccount;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.useraccount.SaveUserAccount;
|
||||||
|
import ch.ethz.seb.sebserver.webservice.servicelayer.dao.ClientConnectionDAO;
|
||||||
import ch.ethz.seb.sebserver.webservice.servicelayer.dao.SEBClientConfigDAO;
|
import ch.ethz.seb.sebserver.webservice.servicelayer.dao.SEBClientConfigDAO;
|
||||||
|
import ch.ethz.seb.sebserver.webservice.servicelayer.session.ExamProctoringRoomService;
|
||||||
|
|
||||||
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
|
||||||
@SpringBootTest(properties = "sebserver.webservice.forceMaster=true")
|
|
||||||
public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
@ -252,7 +260,7 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
@Before
|
@Before
|
||||||
@Sql(scripts = { "classpath:schema-test.sql", "classpath:data-test.sql" })
|
@Sql(scripts = { "classpath:schema-test.sql", "classpath:data-test.sql" })
|
||||||
public void init() {
|
public void init() {
|
||||||
// Nothing
|
System.out.println("*** init");
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -3502,8 +3510,6 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
assertNotNull(runningExam);
|
assertNotNull(runningExam);
|
||||||
assertTrue(runningExam.status == ExamStatus.RUNNING);
|
assertTrue(runningExam.status == ExamStatus.RUNNING);
|
||||||
|
|
||||||
System.out.println("***************** runningExam: " + runningExam.name);
|
|
||||||
|
|
||||||
final Result<ProctoringServiceSettings> pSettings = restService
|
final Result<ProctoringServiceSettings> pSettings = restService
|
||||||
.getBuilder(GetExamProctoringSettings.class)
|
.getBuilder(GetExamProctoringSettings.class)
|
||||||
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
@ -3564,6 +3570,11 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
assertTrue(collectingRooms.isEmpty());
|
assertTrue(collectingRooms.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ExamProctoringRoomService examProcotringRoomService;
|
||||||
|
@Autowired
|
||||||
|
private ClientConnectionDAO clientConnectionDAO;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Order(28)
|
@Order(28)
|
||||||
// *************************************
|
// *************************************
|
||||||
|
@ -3572,6 +3583,7 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
// - start some SEB clients connecting to running exam
|
// - start some SEB clients connecting to running exam
|
||||||
// - Check collecting rooms created
|
// - Check collecting rooms created
|
||||||
public void testUsecase28_TestExamProctoring() throws IOException {
|
public void testUsecase28_TestExamProctoring() throws IOException {
|
||||||
|
|
||||||
final RestServiceImpl restService = createRestServiceForUser(
|
final RestServiceImpl restService = createRestServiceForUser(
|
||||||
"admin",
|
"admin",
|
||||||
"admin",
|
"admin",
|
||||||
|
@ -3583,7 +3595,14 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
new GetClientConfigPage(),
|
new GetClientConfigPage(),
|
||||||
new ActivateClientConfig(),
|
new ActivateClientConfig(),
|
||||||
new NewClientConfig(),
|
new NewClientConfig(),
|
||||||
new GetClientConfig());
|
new GetClientConfig(),
|
||||||
|
new GetProctorRoomConnection(),
|
||||||
|
new GetCollectingRoomConnections(),
|
||||||
|
new NotifyProctoringRoomOpened(),
|
||||||
|
new SendProctoringReconfigurationAttributes(),
|
||||||
|
new GetTownhallRoom(),
|
||||||
|
new OpenTownhallRoom(),
|
||||||
|
new CloseProctoringRoom());
|
||||||
|
|
||||||
// get exam
|
// get exam
|
||||||
final Result<Page<Exam>> exams = restService
|
final Result<Page<Exam>> exams = restService
|
||||||
|
@ -3604,8 +3623,6 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
assertNotNull(runningExam);
|
assertNotNull(runningExam);
|
||||||
assertTrue(runningExam.status == ExamStatus.RUNNING);
|
assertTrue(runningExam.status == ExamStatus.RUNNING);
|
||||||
|
|
||||||
System.out.println("***************** runningExam: " + runningExam.name);
|
|
||||||
|
|
||||||
final Result<ProctoringServiceSettings> pSettings = restService
|
final Result<ProctoringServiceSettings> pSettings = restService
|
||||||
.getBuilder(GetExamProctoringSettings.class)
|
.getBuilder(GetExamProctoringSettings.class)
|
||||||
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
@ -3665,9 +3682,11 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
String.valueOf(runningExam.institutionId),
|
String.valueOf(runningExam.institutionId),
|
||||||
false);
|
false);
|
||||||
|
|
||||||
Thread.sleep(5000);
|
Thread.sleep(1000);
|
||||||
|
|
||||||
// check collecting rum was created
|
this.examProcotringRoomService.updateProctoringCollectingRooms();
|
||||||
|
|
||||||
|
// check collecting room was created
|
||||||
final Collection<RemoteProctoringRoom> collectingRooms = restService
|
final Collection<RemoteProctoringRoom> collectingRooms = restService
|
||||||
.getBuilder(GetCollectingRooms.class)
|
.getBuilder(GetCollectingRooms.class)
|
||||||
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
@ -3676,6 +3695,111 @@ public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
|
|
||||||
assertNotNull(collectingRooms);
|
assertNotNull(collectingRooms);
|
||||||
assertFalse(collectingRooms.isEmpty());
|
assertFalse(collectingRooms.isEmpty());
|
||||||
|
// Two rooms a two people for four connections
|
||||||
|
assertEquals(2, collectingRooms.size());
|
||||||
|
final RemoteProctoringRoom room1 = collectingRooms.iterator().next();
|
||||||
|
assertEquals(2, room1.roomSize.intValue());
|
||||||
|
assertFalse(room1.townhallRoom);
|
||||||
|
|
||||||
|
final ProctoringRoomConnection proctoringRoomConnection = restService
|
||||||
|
.getBuilder(GetProctorRoomConnection.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.withQueryParam(ProctoringRoomConnection.ATTR_ROOM_NAME, room1.name)
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
assertNotNull(proctoringRoomConnection);
|
||||||
|
assertEquals(room1.name, proctoringRoomConnection.roomName);
|
||||||
|
assertNotNull(proctoringRoomConnection.accessToken);
|
||||||
|
|
||||||
|
// notify room open
|
||||||
|
restService
|
||||||
|
.getBuilder(NotifyProctoringRoomOpened.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.withQueryParam(ProctoringRoomConnection.ATTR_ROOM_NAME, room1.name)
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
// reconfigure clients in room
|
||||||
|
restService
|
||||||
|
.getBuilder(SendProctoringReconfigurationAttributes.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.withQueryParam(Domain.REMOTE_PROCTORING_ROOM.ATTR_ID, room1.name)
|
||||||
|
.withQueryParam(API.EXAM_PROCTORING_ATTR_RECEIVE_AUDIO, "true")
|
||||||
|
.withQueryParam(API.EXAM_PROCTORING_ATTR_RECEIVE_VIDEO, "true")
|
||||||
|
.withQueryParam(API.EXAM_PROCTORING_ATTR_ALLOW_CHAT, "true")
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
final Collection<ClientConnection> collection = restService
|
||||||
|
.getBuilder(GetCollectingRoomConnections.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.withQueryParam(Domain.REMOTE_PROCTORING_ROOM.ATTR_ID, room1.name)
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
assertNotNull(collection);
|
||||||
|
assertFalse(collection.isEmpty());
|
||||||
|
assertEquals(2, collection.size());
|
||||||
|
final ClientConnection connection = collection.iterator().next();
|
||||||
|
assertEquals(runningExam.id, connection.examId);
|
||||||
|
// this is because the Json model do not contian certain attributes due to performance
|
||||||
|
assertNull(connection.remoteProctoringRoomId);
|
||||||
|
// we can geht the room number by getting it directyl from the record
|
||||||
|
final ClientConnection clientConnection = this.clientConnectionDAO.byPK(connection.id).get();
|
||||||
|
assertNotNull(clientConnection.remoteProctoringRoomId);
|
||||||
|
|
||||||
|
// get and open townhall
|
||||||
|
final String townhallActive = restService
|
||||||
|
.getBuilder(IsTownhallRoomAvailable.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
assertEquals("true", townhallActive);
|
||||||
|
|
||||||
|
// check no Townhallroom yet
|
||||||
|
RemoteProctoringRoom townhallRoom = restService
|
||||||
|
.getBuilder(GetTownhallRoom.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
assertEquals(RemoteProctoringRoom.NULL_ROOM, townhallRoom);
|
||||||
|
|
||||||
|
// open townhall room
|
||||||
|
final ProctoringRoomConnection townhallRoomConntection = restService
|
||||||
|
.getBuilder(OpenTownhallRoom.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
assertNotNull(townhallRoomConntection);
|
||||||
|
|
||||||
|
// check Townhallroom is available yet
|
||||||
|
townhallRoom = restService
|
||||||
|
.getBuilder(GetTownhallRoom.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
assertTrue(townhallRoom.townhallRoom);
|
||||||
|
assertEquals(townhallRoom.name, townhallRoomConntection.roomName);
|
||||||
|
|
||||||
|
// close townhall room
|
||||||
|
restService
|
||||||
|
.getBuilder(CloseProctoringRoom.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.withQueryParam(ProctoringRoomConnection.ATTR_ROOM_NAME, townhallRoom.name)
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
|
||||||
|
townhallRoom = restService
|
||||||
|
.getBuilder(GetTownhallRoom.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, runningExam.getModelId())
|
||||||
|
.call()
|
||||||
|
.get();
|
||||||
|
assertEquals(RemoteProctoringRoom.NULL_ROOM, townhallRoom);
|
||||||
|
|
||||||
|
Thread.sleep(5000);
|
||||||
|
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
fail(e.getMessage());
|
fail(e.getMessage());
|
||||||
|
|
Loading…
Reference in a new issue