/**************************************************************** * Copyright (C) 2006 LAMS Foundation (http://lamsfoundation.org) * ============================================================= * License Information: http://lamsfoundation.org/licensing/lams/2.0/ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2.0 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * * http://www.gnu.org/licenses/gpl.txt * **************************************************************** */ package org.lamsfoundation.testharness; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.apache.log4j.Logger; import org.lamsfoundation.testharness.admin.AdminTest; import org.lamsfoundation.testharness.admin.MockAdmin; import org.lamsfoundation.testharness.author.AuthorTest; import org.lamsfoundation.testharness.author.MockAuthor; import org.lamsfoundation.testharness.learner.LearnerTest; import org.lamsfoundation.testharness.learner.MockLearner; import org.lamsfoundation.testharness.monitor.MockMonitor; import org.lamsfoundation.testharness.monitor.MonitorTest; import org.lamsfoundation.testharness.Call.CallType; import static org.lamsfoundation.testharness.Call.CallType.*; /** * @version * *
* View Source *
* * @author Fei Yang */ public class PropertyFileTestManager extends AbstractTestManager { private static final Logger log = Logger.getLogger(PropertyFileTestManager.class); // property keys of the master property file private static final String REPORT_FILE_NAME = "ReportFileName"; private static final String REPORT_FILE_TEMPLATE = "ReportFileTemplate"; private static final String INDEX_PAGE_URL = "IndexPageURL"; private static final String NUMBER_OF_TEST_SUITES = "NumberOfTestSuites"; private static final String TARGET_SERVER = "TargetServer"; private static final String CONTEXT_ROOT = "ContextRoot"; private static final String RMI_REGISTRY_SERVICE_PORT = "RMIRegistryServicePort"; private static final String HTTP_PORT = "HttpPort"; private static final String ADMIN_PROPERTY_FILE = "AdminTestPropertyFile"; private static final String AUTHOR_PROPERTY_FILE = "AuthorTestPropertyFile"; private static final String MONITOR_PROPERTY_FILE = "MonitorTestPropertyFile"; private static final String LEARNER_PROPERTY_FILE = "LearnerTestPropertyFile"; //common property keys of all the single tests(admin test, author test, monitor test, learner test) private static final String CALL_TYPE = "CallType"; private static final String WEB_SERVICE_ADDRESS = "WebServiceAddress"; private static final String RMI_REGISTRY_NAME = "RMIRegistryName"; private static final String MIN_DELAY = "MinDelay"; private static final String MAX_DELAY = "MaxDelay"; //property keys of admin test private static final String CREATE_COURSE_URL = "CreateCourseURL"; private static final String CREATE_USER_URL = "CreateUserURL"; private static final String COURSE_NAME = "CourseName"; private static final String COURSE_ID = "CourseId"; private static final String USER_CREATED = "UserCreated"; private static final String SYSADMIN_USERNAME = "SysadminUsername"; private static final String SYSADMIN_PASSWORD = "SysadminPassword"; //property keys of author test private static final String LEARNING_DESIGN_UPLOAD_URL = "LearningDesignUploadURL"; private static final String LEARNING_DESIGN_FILE = "LearningDesignFile"; private static final String LEARNING_DESIGN_ID = "LearningDesignId"; private static final String BASE_AUTHOR_NAME = "BaseAuthorName"; //property keys of monitor test private static final String INIT_LESSON_URL = "InitLessonURL"; private static final String CREATE_LESSON_CLASS_URL = "CreateLessonClassURL"; private static final String START_LESSON_URL = "StartLessonURL"; private static final String LESSON_ID = "LessonId"; private static final String LESSON_NAME = "LessonName"; private static final String USER_ID = "UserId"; private static final String BASE_MONITOR_NAME = "BaseMonitorName"; private static final String GET_LESSON_DETAILS_URL = "GetLessonDetailsURL"; private static final String GET_CA_URL = "GetContributeActivitiesURL"; private static final String GET_LD_DETAILS_URL = "GetLearningDesignDetailsURL"; private static final String GET_ALL_PROGRESS_URL = "GetAllLearnersProgressURL"; //property keys of learner test private static final String NUMBER_LEARNERS = "NumberOfLearners"; private static final String LEARNER_OFFSET = "LearnerOffset"; private static final String BASE_LEARNER_NAME = "BaseLearnerName"; private static final String GET_LESSON_URL = "GetLessonURL"; private static final String GET_LD_URL = "GetLearningDesignURL"; private static final String JOIN_LESSON_URL = "JoinLessonURL"; private static final String GET_PROGRESS_URL = "GetFlashProgressDataURL"; private static final String LESSON_ENTRY_URL = "LessonEntryURL"; private static final String FILES_TO_UPLOAD = "FilesToUpload"; private String testPropertyFileName; public PropertyFileTestManager(String name) { this.testPropertyFileName = name; } /** * * @see org.lamsfoundation.testharness.AbstractTestManager#init() */ protected void init(){ log.info("Initializing..."); Properties testProperties = PropertyUtil.loadProperties(testPropertyFileName); TestReporter.setFileName(PropertyUtil.getStringProperty(testPropertyFileName,testProperties,REPORT_FILE_NAME,false)); MockUser.setIndexPage(PropertyUtil.getStringProperty(testPropertyFileName,testProperties,INDEX_PAGE_URL,false)); String fileTemplate = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,REPORT_FILE_TEMPLATE,false); TestReporter.setFileTemplate(fileTemplate); int numberOfTestSuites = PropertyUtil.getIntegerProperty(testPropertyFileName, testProperties, NUMBER_OF_TEST_SUITES, false); for (int i = 1; i < numberOfTestSuites+1; i++) { addTestSuite(createTestSuite(testProperties, i)); } log.info("Finished initialization"); } /** * @return Returns the propertyFileName. */ public String getTestPropertyFileName() { return testPropertyFileName; } private String buildPropertyKey(String basePropertyKey, int suiteIndex){ return basePropertyKey+"."+suiteIndex; } private String extractTestName(String propertyFileName){ return propertyFileName.substring(0,propertyFileName.indexOf(".properties")); } private TestSuite createTestSuite(Properties testProperties, int suiteIndex){ log.info("Creating test suite " + suiteIndex+ "..."); String targetServer = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,buildPropertyKey(TARGET_SERVER,suiteIndex),true); String contextRoot = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,buildPropertyKey(CONTEXT_ROOT,suiteIndex),true); Integer rmiRegistryServicePort = PropertyUtil.getIntegerProperty(testPropertyFileName,testProperties,buildPropertyKey(RMI_REGISTRY_SERVICE_PORT,suiteIndex),true); Integer httpPort = PropertyUtil.getIntegerProperty(testPropertyFileName,testProperties,buildPropertyKey(HTTP_PORT,suiteIndex),true); String adminTestPropertyFileName = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,buildPropertyKey(ADMIN_PROPERTY_FILE,suiteIndex),true); AdminTest adminTest = adminTestPropertyFileName==null? null : createAdminTest(adminTestPropertyFileName); String authorTestPropertyFileName = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,buildPropertyKey(AUTHOR_PROPERTY_FILE,suiteIndex),true); AuthorTest authorTest = authorTestPropertyFileName==null? null : createAuthorTest(authorTestPropertyFileName); String monitorTestPropertyFileName = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,buildPropertyKey(MONITOR_PROPERTY_FILE,suiteIndex),true); MonitorTest monitorTest = monitorTestPropertyFileName==null? null : createMonitorTest(monitorTestPropertyFileName); String learnerTestPropertyFileName = PropertyUtil.getStringProperty(testPropertyFileName,testProperties,buildPropertyKey(LEARNER_PROPERTY_FILE,suiteIndex),true); LearnerTest learnerTest = learnerTestPropertyFileName==null? null : createLearnerTest(learnerTestPropertyFileName); TestSuite suite = new TestSuite(this, suiteIndex,targetServer,contextRoot,rmiRegistryServicePort,httpPort,adminTest,authorTest,monitorTest,learnerTest); log.info("Finished creating test suite " + suite.toString()); return suite; } private LearnerTest createLearnerTest(String learnerTestPropertyFileName){ String testName = extractTestName(learnerTestPropertyFileName); log.info("Creating learner test:"+testName+"..."); Properties learnerTestProperties = PropertyUtil .loadProperties(learnerTestPropertyFileName); CallType callType = get(PropertyUtil.getStringProperty(learnerTestPropertyFileName, learnerTestProperties, CALL_TYPE, false)); String learnerRMIRegistryName = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, RMI_REGISTRY_NAME, !callType.equals(Call.CallType.RMI)); String webServiceAddress = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, WEB_SERVICE_ADDRESS, !callType.equals(Call.CallType.WS)); Integer minDelay = PropertyUtil.getIntegerProperty( learnerTestPropertyFileName, learnerTestProperties, MIN_DELAY, true); Integer maxDelay = PropertyUtil.getIntegerProperty( learnerTestPropertyFileName, learnerTestProperties, MAX_DELAY,true); Integer numberOfLearners = PropertyUtil.getIntegerProperty( learnerTestPropertyFileName, learnerTestProperties, NUMBER_LEARNERS,true); Integer learnerOffset = PropertyUtil.getIntegerProperty( learnerTestPropertyFileName, learnerTestProperties, LEARNER_OFFSET,true); String baseLearnerName = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, BASE_LEARNER_NAME, true); String getLessonURL = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, GET_LESSON_URL, !callType.equals(Call.CallType.WEB)); String getLearningDesignURL = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, GET_LD_URL, !callType.equals(Call.CallType.WEB)); String joinLessonURL = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, JOIN_LESSON_URL, !callType.equals(Call.CallType.WEB)); String getProgressURL = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, GET_PROGRESS_URL, !callType.equals(Call.CallType.WEB)); String lessonEntryURL = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, LESSON_ENTRY_URL, !callType.equals(Call.CallType.WEB)); String filesToUpload = PropertyUtil.getStringProperty( learnerTestPropertyFileName, learnerTestProperties, FILES_TO_UPLOAD, !callType.equals(Call.CallType.WEB)); LearnerTest test = new LearnerTest(testName,callType,learnerRMIRegistryName,webServiceAddress,minDelay,maxDelay, getLessonURL,getLearningDesignURL,joinLessonURL,getProgressURL,lessonEntryURL, filesToUpload==null? null : filesToUpload.split(";")); numberOfLearners = numberOfLearners == null? 1 : numberOfLearners; learnerOffset = learnerOffset==null? 1 : learnerOffset; MockLearner[] learners = new MockLearner[numberOfLearners]; for(int i=0; i