mirror of https://github.com/apache/kafka.git
				
				
				
			
		
			
				
	
	
		
			164 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Python
		
	
	
	
| # 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.
 | |
| #!/usr/bin/env python
 | |
| 
 | |
| # ===================================
 | |
| # testcase_env.py
 | |
| # ===================================
 | |
| 
 | |
| import json
 | |
| import os
 | |
| import sys
 | |
| import thread
 | |
| 
 | |
| import system_test_utils
 | |
| 
 | |
| class TestcaseEnv():
 | |
| 
 | |
|     # ================================
 | |
|     # Generic testcase environment
 | |
|     # ================================
 | |
| 
 | |
|     # dictionary of entity_id to ppid for Zookeeper entities
 | |
|     # key: entity_id
 | |
|     # val: ppid of Zookeeper associated to that entity_id
 | |
|     # { 0: 12345, 1: 12389, ... }
 | |
|     entityZkParentPidDict = {}
 | |
| 
 | |
|     # dictionary of entity_id to ppid for broker entities
 | |
|     # key: entity_id
 | |
|     # val: ppid of broker associated to that entity_id
 | |
|     # { 0: 12345, 1: 12389, ... }
 | |
|     entityBrokerParentPidDict = {}
 | |
| 
 | |
|     # dictionary of entity_id to ppid for mirror-maker entities
 | |
|     # key: entity_id
 | |
|     # val: ppid of broker associated to that entity_id
 | |
|     # { 0: 12345, 1: 12389, ... }
 | |
|     entityMirrorMakerParentPidDict = {}
 | |
| 
 | |
|     # dictionary of entity_id to ppid for migration tool entities
 | |
|     # key: entity_id
 | |
|     # val: ppid of broker associated to that entity_id
 | |
|     # { 0: 12345, 1: 12389, ... }
 | |
|     entityMigrationToolParentPidDict = {}
 | |
| 
 | |
|     # dictionary of entity_id to list of JMX ppid
 | |
|     # key: entity_id
 | |
|     # val: list of JMX ppid associated to that entity_id
 | |
|     # { 1: [1234, 1235, 1236], 2: [2234, 2235, 2236], ... }
 | |
|     entityJmxParentPidDict = {}
 | |
| 
 | |
|     # dictionary of hostname-topic-ppid for consumer
 | |
|     # key: hostname
 | |
|     # val: dict of topic-ppid
 | |
|     # { host1: { test1 : 12345 }, host1: { test2 : 12389 }, ... }
 | |
|     consumerHostParentPidDict = {}
 | |
| 
 | |
|     # dictionary of hostname-topic-ppid for producer
 | |
|     # key: hostname
 | |
|     # val: dict of topic-ppid
 | |
|     # { host1: { test1 : 12345 }, host1: { test2 : 12389 }, ... }
 | |
|     producerHostParentPidDict = {}
 | |
| 
 | |
|     # list of testcase configs
 | |
|     testcaseConfigsList = []
 | |
| 
 | |
|     # dictionary to keep track of testcase arguments such as replica_factor, num_partition
 | |
|     testcaseArgumentsDict = {}
 | |
| 
 | |
| 
 | |
|     def __init__(self, systemTestEnv, classInstance):
 | |
|         self.systemTestEnv    = systemTestEnv
 | |
| 
 | |
|         # gather the test case related info and add to an SystemTestEnv object
 | |
|         self.testcaseResultsDict = {}
 | |
|         self.testcaseResultsDict["_test_class_name"] = classInstance.__class__.__name__
 | |
|         self.testcaseResultsDict["_test_case_name"]  = ""
 | |
|         self.validationStatusDict                      = {}
 | |
|         self.testcaseResultsDict["validation_status"]  = self.validationStatusDict
 | |
|         self.systemTestEnv.systemTestResultsList.append(self.testcaseResultsDict)
 | |
| 
 | |
|         # FIXME: in a distributed environement, kafkaBaseDir could be different in individual host
 | |
|         #        => TBD
 | |
|         self.kafkaBaseDir      = ""
 | |
| 
 | |
|         self.systemTestBaseDir = systemTestEnv.SYSTEM_TEST_BASE_DIR
 | |
| 
 | |
|         # to be initialized in the Test Module
 | |
|         self.testSuiteBaseDir      = ""
 | |
|         self.testCaseBaseDir       = ""
 | |
|         self.testCaseLogsDir       = ""
 | |
|         self.testCaseDashboardsDir = ""
 | |
|         self.testcasePropJsonPathName = ""
 | |
|         self.testcaseNonEntityDataDict = {}
 | |
| 
 | |
|         # ================================
 | |
|         # dictionary to keep track of
 | |
|         # user-defined environment variables
 | |
|         # ================================
 | |
|         # LEADER_ELECTION_COMPLETED_MSG = "completed the leader state transition"
 | |
|         # REGX_LEADER_ELECTION_PATTERN  = "\[(.*?)\] .* Broker (.*?) " + \
 | |
|         #                            LEADER_ELECTION_COMPLETED_MSG + \
 | |
|         #                            " for topic (.*?) partition (.*?) \(.*"
 | |
|         # zkConnectStr = ""
 | |
|         # consumerLogPathName    = ""
 | |
|         # consumerConfigPathName = ""
 | |
|         # producerLogPathName    = ""
 | |
|         # producerConfigPathName = ""
 | |
|         self.userDefinedEnvVarDict = {}
 | |
| 
 | |
|         # Lock object for producer threads synchronization
 | |
|         self.lock = thread.allocate_lock()
 | |
| 
 | |
|         self.numProducerThreadsRunning = 0
 | |
| 
 | |
|     def initWithKnownTestCasePathName(self, testCasePathName):
 | |
|         testcaseDirName = os.path.basename(testCasePathName)
 | |
|         self.testcaseResultsDict["_test_case_name"] = testcaseDirName
 | |
|         self.testCaseBaseDir = testCasePathName
 | |
|         self.testCaseLogsDir = self.testCaseBaseDir + "/logs"
 | |
|         self.testCaseDashboardsDir = self.testCaseBaseDir + "/dashboards"
 | |
| 
 | |
|         # find testcase properties json file
 | |
|         self.testcasePropJsonPathName = system_test_utils.get_testcase_prop_json_pathname(testCasePathName)
 | |
| 
 | |
|         # get the dictionary that contains the testcase arguments and description
 | |
|         self.testcaseNonEntityDataDict = system_test_utils.get_json_dict_data(self.testcasePropJsonPathName)
 | |
| 
 | |
|     def printTestCaseDescription(self, testcaseDirName):
 | |
|         testcaseDescription = ""
 | |
|         for k,v in self.testcaseNonEntityDataDict.items():
 | |
|             if ( k == "description" ):
 | |
|                 testcaseDescription = v
 | |
| 
 | |
|         print "\n"
 | |
|         print "======================================================================================="
 | |
|         print "Test Case Name :", testcaseDirName
 | |
|         print "======================================================================================="
 | |
|         print "Description    :"
 | |
|         for step in sorted(testcaseDescription.iterkeys()):
 | |
|             print "   ", step, ":", testcaseDescription[step]
 | |
|         print "======================================================================================="
 | |
|         print "Test Case Args :"
 | |
|         for k,v in self.testcaseArgumentsDict.items():
 | |
|             print "   ", k, " : ", v
 | |
|             self.testcaseResultsDict["arg : " + k] = v
 | |
|         print "======================================================================================="
 | |
| 
 | |
| 
 |