/**********************************************************************************
*
* $Id: TestServiceAgainstLoadedData.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $
*
***********************************************************************************
*
* Copyright (c) 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.tool.gradebook.test;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.section.api.coursemanagement.EnrollmentRecord;
import org.sakaiproject.section.api.facade.Role;
import org.sakaiproject.tool.gradebook.Assignment;
import org.sakaiproject.tool.gradebook.Gradebook;
/**
* This odd-looking JUnit class provides a very primitive test for data
* contention when using the external service API. You'll see what look like
* the same "tests" several times in a row. The idea is to run the test from
* multiple windows simultaneously and try for locking exceptions.
*
* Pretty cheap stuff, but it took less time to get going than trying to
* coordinate one of the JUnit multi-threading add-on projects with
* Spring and Hivernate....
*
* Sample usage:
*
* # Build standalone and load up the test database.
* cd ../sections/
* maven -Dmode=standalone -Dhibernate.properties.dir=C:/java/sakaisettings/mysql-standalone cln bld
* cd ../gradebook
* maven -Dhibernate.properties.dir=C:/java/sakaisettings/mysql-standalone cln bld
* maven -Dhibernate.properties.dir=C:/java/sakaisettings/mysql-standalone load-full-standalone
*
* # Then do this from as many windows as you feel up to.
* cd app/standalone-app/
* maven -Dhibernate.properties.dir=C:/java/sakaisettings/mysql-standalone test-against-loaded-data
*/
public class TestServiceAgainstLoadedData extends GradebookLoaderBase {
private static final Log log = LogFactory.getLog(TestServiceAgainstLoadedData.class);
public TestServiceAgainstLoadedData() {
// Don't roll these tests back, since they are intended to act like real-world users.
setDefaultRollback(false);
}
private Assignment getAssignment(Gradebook gradebook, String assignmentName) {
List assignments = gradebookManager.getAssignments(gradebook.getId());
for (Iterator iter = assignments.iterator(); iter.hasNext();) {
Assignment asn = (Assignment)iter.next();
if (asn.getName().equals(assignmentName)) {
return asn;
}
}
return null;
}
public void testUpdateExternalScores() throws Exception {
Gradebook gradebook = gradebookManager.getGradebook(TestGradebookLoader.GRADEBOOK_WITH_GRADES);
List enrollments = sectionAwareness.getSiteMembersInRole(gradebook.getUid(), Role.STUDENT);
Assignment asn = getAssignment(gradebook, TestGradebookLoader.EXTERNAL_ASN_NAME1);
Map studentUidsToScores = new HashMap();
int scoreGoRound = -1;
for (Iterator iter = enrollments.iterator(); iter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)iter.next();
String score = (scoreGoRound == -1) ? null : new Integer(scoreGoRound).toString();
scoreGoRound = (scoreGoRound < 11) ? (scoreGoRound + 1) : -1;
studentUidsToScores.put(enr.getUser().getUserUid(), score);
}
log.warn("about to updateExternalAssessmentScores with " + enrollments.size() + " scores for " + asn.getExternalId());
gradebookExternalAssessmentService.updateExternalAssessmentScoresString(gradebook.getUid(), asn.getExternalId(), studentUidsToScores);
}
public void testUpdateExternalScore() throws Exception {
Gradebook gradebook = gradebookManager.getGradebook(TestGradebookLoader.GRADEBOOK_WITH_GRADES);
List enrollments = sectionAwareness.getSiteMembersInRole(gradebook.getUid(), Role.STUDENT);
Assignment asn = getAssignment(gradebook, TestGradebookLoader.EXTERNAL_ASN_NAME2);
int scoreGoRound = 2;
for (Iterator iter = enrollments.iterator(); iter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)iter.next();
Double score = (scoreGoRound == -1) ? null : new Double(scoreGoRound);
scoreGoRound = (scoreGoRound < 11) ? (scoreGoRound + 1) : -1;
gradebookExternalAssessmentService.updateExternalAssessmentScore(gradebook.getUid(), asn.getExternalId(), enr.getUser().getUserUid(), score.toString());
}
}
public void testUpdateExternalScores2() throws Exception {
Gradebook gradebook = gradebookManager.getGradebook(TestGradebookLoader.GRADEBOOK_WITH_GRADES);
List enrollments = sectionAwareness.getSiteMembersInRole(gradebook.getUid(), Role.STUDENT);
Assignment asn = getAssignment(gradebook, TestGradebookLoader.EXTERNAL_ASN_NAME2);
Map studentUidsToScores = new HashMap();
int scoreGoRound = -1;
for (Iterator iter = enrollments.iterator(); iter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)iter.next();
String score = (scoreGoRound == -1) ? null : new Double(scoreGoRound).toString();
scoreGoRound = (scoreGoRound < 11) ? (scoreGoRound + 1) : -1;
studentUidsToScores.put(enr.getUser().getUserUid(), score);
}
log.warn("about to updateExternalAssessmentScores with " + enrollments.size() + " scores for " + asn.getExternalId());
gradebookExternalAssessmentService.updateExternalAssessmentScoresString(gradebook.getUid(), asn.getExternalId(), studentUidsToScores);
}
public void testUpdateExternalScore2() throws Exception {
Gradebook gradebook = gradebookManager.getGradebook(TestGradebookLoader.GRADEBOOK_WITH_GRADES);
List enrollments = sectionAwareness.getSiteMembersInRole(gradebook.getUid(), Role.STUDENT);
Assignment asn = getAssignment(gradebook, TestGradebookLoader.EXTERNAL_ASN_NAME1);
int scoreGoRound = 2;
for (Iterator iter = enrollments.iterator(); iter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)iter.next();
Double score = (scoreGoRound == -1) ? null : new Double(scoreGoRound);
scoreGoRound = (scoreGoRound < 11) ? (scoreGoRound + 1) : -1;
gradebookExternalAssessmentService.updateExternalAssessmentScore(gradebook.getUid(), asn.getExternalId(), enr.getUser().getUserUid(), score.toString());
}
}
public void testUpdateExternalScores2Same() throws Exception {
Gradebook gradebook = gradebookManager.getGradebook(TestGradebookLoader.GRADEBOOK_WITH_GRADES);
List enrollments = sectionAwareness.getSiteMembersInRole(gradebook.getUid(), Role.STUDENT);
Assignment asn = getAssignment(gradebook, TestGradebookLoader.EXTERNAL_ASN_NAME2);
Map studentUidsToScores = new HashMap();
int scoreGoRound = -1;
for (Iterator iter = enrollments.iterator(); iter.hasNext(); ) {
EnrollmentRecord enr = (EnrollmentRecord)iter.next();
String score = (scoreGoRound == -1) ? null : new Double(scoreGoRound).toString();
scoreGoRound = (scoreGoRound < 11) ? (scoreGoRound + 1) : -1;
studentUidsToScores.put(enr.getUser().getUserUid(), score);
}
log.warn("about to updateExternalAssessmentScores with " + enrollments.size() + " scores for " + asn.getExternalId());
gradebookExternalAssessmentService.updateExternalAssessmentScoresString(gradebook.getUid(), asn.getExternalId(), studentUidsToScores);
}
}