diff --git a/pom.xml b/pom.xml index d2b02b27..99b11afc 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ jar - 1.4-rc1 + 1.4.0-SNAPSHOT ${sebserver-version} ${sebserver-version} UTF-8 diff --git a/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/RunningExamInfo.java b/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/RunningExamInfo.java index 4d795bf0..d12db3c1 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/RunningExamInfo.java +++ b/src/main/java/ch/ethz/seb/sebserver/gbl/model/session/RunningExamInfo.java @@ -11,6 +11,7 @@ package ch.ethz.seb.sebserver.gbl.model.session; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import ch.ethz.seb.sebserver.gbl.Constants; import ch.ethz.seb.sebserver.gbl.model.exam.Exam; import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetup.LmsType; @@ -47,7 +48,7 @@ public final class RunningExamInfo { this.examId = exam.getModelId(); this.name = exam.name; this.url = exam.getStartURL(); - this.lmsType = (lmsType == null) ? "" : lmsType.name(); + this.lmsType = (lmsType == null) ? Constants.EMPTY_NOTE : lmsType.name(); } public String getExamId() { diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamDAOImpl.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamDAOImpl.java index 80b880ed..665e7b91 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamDAOImpl.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/dao/impl/ExamDAOImpl.java @@ -648,6 +648,9 @@ public class ExamDAOImpl implements ExamDAO { .and( ExamRecordDynamicSqlSupport.status, isEqualTo(ExamStatus.RUNNING.name())) + .and( + ExamRecordDynamicSqlSupport.lmsAvailable, + isEqualToWhenPresent(BooleanUtils.toIntegerObject(true))) .build() .execute()); } diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamAPI_V1_Controller.java b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamAPI_V1_Controller.java index a6a042b1..8e6aa53f 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamAPI_V1_Controller.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/weblayer/api/ExamAPI_V1_Controller.java @@ -137,6 +137,7 @@ public class ExamAPI_V1_Controller { .getOrThrow() .stream() .map(this::createRunningExamInfo) + .filter(this::checkConsistency) .collect(Collectors.toList()); } else { final Exam exam = this.examSessionService.getExamDAO() @@ -158,6 +159,18 @@ public class ExamAPI_V1_Controller { this.executor); } + private boolean checkConsistency(final RunningExamInfo info) { + if (StringUtils.isNotBlank(info.name) && + StringUtils.isNotBlank(info.url) && + StringUtils.isNotBlank(info.examId)) { + + return true; + } + + log.warn("Invalid running exam detected. Filter out exam : {}", info); + return false; + } + @RequestMapping( path = API.EXAM_API_HANDSHAKE_ENDPOINT, method = RequestMethod.PATCH, diff --git a/src/test/resources/data-test-additional.sql b/src/test/resources/data-test-additional.sql index a1a7ae5d..377469b1 100644 --- a/src/test/resources/data-test-additional.sql +++ b/src/test/resources/data-test-additional.sql @@ -9,13 +9,14 @@ INSERT IGNORE INTO seb_client_configuration VALUES INSERT IGNORE INTO additional_attributes VALUES (1, 'SEB_CLIENT_CONFIGURATION', 2, 'vdiSetup', 'VM_WARE'), - (2, 'SEB_CLIENT_CONFIGURATION', 2, 'vdiExecutable', 'vmware-view.exe') + (2, 'SEB_CLIENT_CONFIGURATION', 2, 'vdiExecutable', 'vmware-view.exe'), + (3, 'EXAM', 2, 'quiz_start_url', 'https://test.lms.mockup') ; INSERT IGNORE INTO exam VALUES - (1, 1, 1, 'quiz1', 'admin', 'admin', 'MANAGED', null, null, 'UP_COMING', 1, 0, null, 1, null, null, null, null, null, null), - (2, 1, 1, 'quiz6', 'admin', 'admin', 'MANAGED', null, null, 'RUNNING', 1, 0, null, 1, null, null, null, null, null, null), - (3, 1, 1, 'quiz3', 'admin', 'admin', 'MANAGED', null, null, 'FINISHED', 1, 0, null, 1, null, null, null, null, null, null) + (1, 1, 1, 'quiz1', 'admin', 'admin', 'MANAGED', null, null, 'UP_COMING', 1, 0, null, 1, null, null, 'quiz1', null, null, 1), + (2, 1, 1, 'quiz6', 'admin', 'admin', 'MANAGED', null, null, 'RUNNING', 1, 0, null, 1, null, null, 'quiz6', null, null, 1), + (3, 1, 1, 'quiz3', 'admin', 'admin', 'MANAGED', null, null, 'FINISHED', 1, 0, null, 1, null, null, 'quiz3', null, null, 1) ; INSERT IGNORE INTO indicator VALUES