| 
									
										
										
										
											2012-08-30 02:07:58 +08:00
										 |  |  | # Licensed to the Apache Software Foundation (ASF) under one | 
					
						
							|  |  |  | # or more contributor license agreements.  See the NOTICE file | 
					
						
							|  |  |  | # distributed with this work for additional information | 
					
						
							|  |  |  | # regarding copyright ownership.  The ASF licenses this file | 
					
						
							|  |  |  | # to you under the Apache 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.apache.org/licenses/LICENSE-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. | 
					
						
							| 
									
										
										
										
											2012-08-23 01:16:26 +08:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # =================================== | 
					
						
							|  |  |  | # system_test_env.py | 
					
						
							|  |  |  | # =================================== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-11 00:56:57 +08:00
										 |  |  | import copy | 
					
						
							| 
									
										
										
										
											2012-08-23 01:16:26 +08:00
										 |  |  | import json | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-11 00:56:57 +08:00
										 |  |  | from   utils import system_test_utils | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-23 01:16:26 +08:00
										 |  |  | class SystemTestEnv(): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # private: | 
					
						
							|  |  |  |     _cwdFullPath              = os.getcwd() | 
					
						
							|  |  |  |     _thisScriptFullPathName   = os.path.realpath(__file__) | 
					
						
							|  |  |  |     _thisScriptBaseDir        = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # public: | 
					
						
							|  |  |  |     SYSTEM_TEST_BASE_DIR      = os.path.abspath(_thisScriptBaseDir) | 
					
						
							|  |  |  |     SYSTEM_TEST_UTIL_DIR      = os.path.abspath(SYSTEM_TEST_BASE_DIR + "/utils") | 
					
						
							|  |  |  |     SYSTEM_TEST_SUITE_SUFFIX  = "_testsuite" | 
					
						
							|  |  |  |     SYSTEM_TEST_CASE_PREFIX   = "testcase_" | 
					
						
							|  |  |  |     SYSTEM_TEST_MODULE_EXT    = ".py" | 
					
						
							|  |  |  |     CLUSTER_CONFIG_FILENAME   = "cluster_config.json" | 
					
						
							|  |  |  |     CLUSTER_CONFIG_PATHNAME   = os.path.abspath(SYSTEM_TEST_BASE_DIR + "/" + CLUSTER_CONFIG_FILENAME) | 
					
						
							| 
									
										
										
										
											2012-08-30 02:07:58 +08:00
										 |  |  |     METRICS_FILENAME          = "metrics.json" | 
					
						
							|  |  |  |     METRICS_PATHNAME          = os.path.abspath(SYSTEM_TEST_BASE_DIR + "/" + METRICS_FILENAME) | 
					
						
							| 
									
										
										
										
											2012-10-11 00:56:57 +08:00
										 |  |  |     TESTCASE_TO_RUN_FILENAME  = "testcase_to_run.json" | 
					
						
							|  |  |  |     TESTCASE_TO_RUN_PATHNAME  = os.path.abspath(SYSTEM_TEST_BASE_DIR + "/" + TESTCASE_TO_RUN_FILENAME) | 
					
						
							|  |  |  |     TESTCASE_TO_SKIP_FILENAME = "testcase_to_skip.json" | 
					
						
							|  |  |  |     TESTCASE_TO_SKIP_PATHNAME = os.path.abspath(SYSTEM_TEST_BASE_DIR + "/" + TESTCASE_TO_SKIP_FILENAME) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     clusterEntityConfigDictList                      = []   # cluster entity config for current level | 
					
						
							|  |  |  |     clusterEntityConfigDictListInSystemTestLevel     = []   # cluster entity config defined in system level | 
					
						
							|  |  |  |     clusterEntityConfigDictListLastFoundInTestSuite  = []   # cluster entity config last found in testsuite level | 
					
						
							|  |  |  |     clusterEntityConfigDictListLastFoundInTestCase   = []   # cluster entity config last found in testcase level | 
					
						
							| 
									
										
										
										
											2012-08-23 01:16:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     systemTestResultsList        = [] | 
					
						
							| 
									
										
										
										
											2012-10-11 00:56:57 +08:00
										 |  |  |     testCaseToRunListDict        = {} | 
					
						
							|  |  |  |     testCaseToSkipListDict       = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     printTestDescriptionsOnly    = False | 
					
						
							|  |  |  |     doNotValidateRemoteHost      = False | 
					
						
							| 
									
										
										
										
											2012-08-23 01:16:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self): | 
					
						
							|  |  |  |         "Create an object with this system test session environment" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-11 00:56:57 +08:00
										 |  |  |         # load the system level cluster config | 
					
						
							|  |  |  |         system_test_utils.load_cluster_config(self.CLUSTER_CONFIG_PATHNAME, self.clusterEntityConfigDictList) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # save the system level cluster config | 
					
						
							|  |  |  |         self.clusterEntityConfigDictListInSystemTestLevel = copy.deepcopy(self.clusterEntityConfigDictList) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # retrieve testcases to run from testcase_to_run.json | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             testcaseToRunFileContent  = open(self.TESTCASE_TO_RUN_PATHNAME, "r").read() | 
					
						
							|  |  |  |             testcaseToRunData        = json.loads(testcaseToRunFileContent) | 
					
						
							|  |  |  |             for testClassName, caseList in testcaseToRunData.items(): | 
					
						
							|  |  |  |                 self.testCaseToRunListDict[testClassName] = caseList | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # retrieve testcases to skip from testcase_to_skip.json | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             testcaseToSkipFileContent = open(self.TESTCASE_TO_SKIP_PATHNAME, "r").read() | 
					
						
							|  |  |  |             testcaseToSkipData        = json.loads(testcaseToSkipFileContent) | 
					
						
							|  |  |  |             for testClassName, caseList in testcaseToSkipData.items(): | 
					
						
							|  |  |  |                 self.testCaseToSkipListDict[testClassName] = caseList | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def isTestCaseToSkip(self, testClassName, testcaseDirName): | 
					
						
							|  |  |  |         testCaseToRunList  = {} | 
					
						
							|  |  |  |         testCaseToSkipList = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             testCaseToRunList  = self.testCaseToRunListDict[testClassName] | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             # no 'testClassName' found => no need to run any cases for this test class | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             testCaseToSkipList = self.testCaseToSkipListDict[testClassName] | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # if testCaseToRunList has elements, it takes precedence: | 
					
						
							|  |  |  |         if len(testCaseToRunList) > 0: | 
					
						
							|  |  |  |             #print "#### testClassName => ", testClassName | 
					
						
							|  |  |  |             #print "#### testCaseToRunList => ", testCaseToRunList | 
					
						
							|  |  |  |             #print "#### testcaseDirName => ", testcaseDirName | 
					
						
							|  |  |  |             if not testcaseDirName in testCaseToRunList: | 
					
						
							|  |  |  |                 #self.log_message("Skipping : " + testcaseDirName) | 
					
						
							|  |  |  |                 return True | 
					
						
							|  |  |  |         elif len(testCaseToSkipList) > 0: | 
					
						
							|  |  |  |             #print "#### testClassName => ", testClassName | 
					
						
							|  |  |  |             #print "#### testCaseToSkipList => ", testCaseToSkipList | 
					
						
							|  |  |  |             #print "#### testcaseDirName => ", testcaseDirName | 
					
						
							|  |  |  |             if testcaseDirName in testCaseToSkipList: | 
					
						
							|  |  |  |                 #self.log_message("Skipping : " + testcaseDirName) | 
					
						
							|  |  |  |                 return True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return False | 
					
						
							| 
									
										
										
										
											2012-08-23 01:16:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def getSystemTestEnvDict(self): | 
					
						
							|  |  |  |         envDict = {} | 
					
						
							|  |  |  |         envDict["system_test_base_dir"]             = self.SYSTEM_TEST_BASE_DIR | 
					
						
							|  |  |  |         envDict["system_test_util_dir"]             = self.SYSTEM_TEST_UTIL_DIR | 
					
						
							|  |  |  |         envDict["cluster_config_pathname"]          = self.CLUSTER_CONFIG_PATHNAME | 
					
						
							|  |  |  |         envDict["system_test_suite_suffix"]         = self.SYSTEM_TEST_SUITE_SUFFIX | 
					
						
							|  |  |  |         envDict["system_test_case_prefix"]          = self.SYSTEM_TEST_CASE_PREFIX | 
					
						
							|  |  |  |         envDict["system_test_module_ext"]           = self.SYSTEM_TEST_MODULE_EXT | 
					
						
							|  |  |  |         envDict["cluster_config_pathname"]          = self.CLUSTER_CONFIG_PATHNAME | 
					
						
							|  |  |  |         envDict["cluster_entity_config_dict_list"]  = self.clusterEntityConfigDictList | 
					
						
							|  |  |  |         envDict["system_test_results_list"]         = self.systemTestResultsList | 
					
						
							|  |  |  |         return envDict | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |