testHodCleanup.py
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
- #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.
- import unittest, os, sys, re, threading, time
- myDirectory = os.path.realpath(sys.argv[0])
- rootDirectory = re.sub("/testing/.*", "", myDirectory)
- sys.path.append(rootDirectory)
- from testing.lib import BaseTestSuite
- from hodlib.HodRing.hodRing import MRSystemDirectoryManager, createMRSystemDirectoryManager
- from hodlib.Common.threads import simpleCommand
- excludes = []
- # duplicating temporarily until HADOOP-2848 is committed.
- class MyMockLogger:
- def __init__(self):
- self.__logLines = {}
- def info(self, message):
- self.__logLines[message] = 'info'
- def critical(self, message):
- self.__logLines[message] = 'critical'
- def warn(self, message):
- self.__logLines[message] = 'warn'
- def debug(self, message):
- # don't track debug lines.
- pass
- # verify a certain message has been logged at the defined level of severity.
- def hasMessage(self, message, level):
- if not self.__logLines.has_key(message):
- return False
- return self.__logLines[message] == level
- class test_MRSystemDirectoryManager(unittest.TestCase):
- def setUp(self):
- self.log = MyMockLogger()
- def testCleanupArgsString(self):
- sysDirMgr = MRSystemDirectoryManager(1234, '/user/hod/mapredsystem/hoduser.123.abc.com',
- 'def.com:5678', '/usr/bin/hadoop', self.log)
- str = sysDirMgr.toCleanupArgs()
- self.assertTrue(" --jt-pid 1234 --mr-sys-dir /user/hod/mapredsystem/hoduser.123.abc.com --fs-name def.com:5678 --hadoop-path /usr/bin/hadoop ", str)
- def testCreateMRSysDirInvalidParams(self):
- # test that no mr system directory manager is created if required keys are not present
- # this case will test scenarios of non jobtracker daemons.
- keys = [ 'jt-pid', 'mr-sys-dir', 'fs-name', 'hadoop-path' ]
- map = { 'jt-pid' : 1234,
- 'mr-sys-dir' : '/user/hod/mapredsystem/hoduser.def.com',
- 'fs-name' : 'ghi.com:1234',
- 'hadoop-path' : '/usr/bin/hadoop'
- }
- for key in keys:
- val = map[key]
- map[key] = None
- self.assertEquals(createMRSystemDirectoryManager(map, self.log), None)
- map[key] = val
- def testUnresponsiveJobTracker(self):
- # simulate an unresponsive job tracker, by giving a command that runs longer than the retries
- # verify that the program returns with the right error message.
- sc = simpleCommand("sleep", "sleep 300")
- sc.start()
- pid = sc.getPid()
- while pid is None:
- pid = sc.getPid()
- sysDirMgr = MRSystemDirectoryManager(pid, '/user/yhemanth/mapredsystem/hoduser.123.abc.com',
- 'def.com:5678', '/usr/bin/hadoop', self.log, retries=3)
- sysDirMgr.removeMRSystemDirectory()
- self.log.hasMessage("Job Tracker did not exit even after a minute. Not going to try and cleanup the system directory", 'warn')
- sc.kill()
- sc.wait()
- sc.join()
- class HodCleanupTestSuite(BaseTestSuite):
- def __init__(self):
- # suite setup
- BaseTestSuite.__init__(self, __name__, excludes)
- pass
-
- def cleanUp(self):
- # suite tearDown
- pass
- def RunHodCleanupTests():
- # modulename_suite
- suite = HodCleanupTestSuite()
- testResult = suite.runTests()
- suite.cleanUp()
- return testResult
- if __name__ == "__main__":
- RunHodCleanupTests()