testHodCleanup.py
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. #Licensed to the Apache Software Foundation (ASF) under one
  2. #or more contributor license agreements.  See the NOTICE file
  3. #distributed with this work for additional information
  4. #regarding copyright ownership.  The ASF licenses this file
  5. #to you under the Apache License, Version 2.0 (the
  6. #"License"); you may not use this file except in compliance
  7. #with the License.  You may obtain a copy of the License at
  8. #     http://www.apache.org/licenses/LICENSE-2.0
  9. #Unless required by applicable law or agreed to in writing, software
  10. #distributed under the License is distributed on an "AS IS" BASIS,
  11. #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. #See the License for the specific language governing permissions and
  13. #limitations under the License.
  14. import unittest, os, sys, re, threading, time
  15. myDirectory = os.path.realpath(sys.argv[0])
  16. rootDirectory   = re.sub("/testing/.*", "", myDirectory)
  17. sys.path.append(rootDirectory)
  18. from testing.lib import BaseTestSuite
  19. from hodlib.HodRing.hodRing import MRSystemDirectoryManager, createMRSystemDirectoryManager
  20. from hodlib.Common.threads import simpleCommand
  21. excludes = []
  22. # duplicating temporarily until HADOOP-2848 is committed.
  23. class MyMockLogger:
  24.   def __init__(self):
  25.     self.__logLines = {}
  26.   def info(self, message):
  27.     self.__logLines[message] = 'info'
  28.   def critical(self, message):
  29.     self.__logLines[message] = 'critical'
  30.   def warn(self, message):
  31.     self.__logLines[message] = 'warn'
  32.   def debug(self, message):
  33.     # don't track debug lines.
  34.     pass
  35.   # verify a certain message has been logged at the defined level of severity.
  36.   def hasMessage(self, message, level):
  37.     if not self.__logLines.has_key(message):
  38.       return False
  39.     return self.__logLines[message] == level
  40. class test_MRSystemDirectoryManager(unittest.TestCase):
  41.   def setUp(self):
  42.     self.log = MyMockLogger()
  43.   def testCleanupArgsString(self):
  44.     sysDirMgr = MRSystemDirectoryManager(1234, '/user/hod/mapredsystem/hoduser.123.abc.com', 
  45.                                           'def.com:5678', '/usr/bin/hadoop', self.log)
  46.     str = sysDirMgr.toCleanupArgs()
  47.     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) 
  48.   def testCreateMRSysDirInvalidParams(self):
  49.     # test that no mr system directory manager is created if required keys are not present
  50.     # this case will test scenarios of non jobtracker daemons.
  51.     keys = [ 'jt-pid', 'mr-sys-dir', 'fs-name', 'hadoop-path' ]
  52.     map = { 'jt-pid' : 1234,
  53.             'mr-sys-dir' : '/user/hod/mapredsystem/hoduser.def.com',
  54.             'fs-name' : 'ghi.com:1234',
  55.             'hadoop-path' : '/usr/bin/hadoop'
  56.           }
  57.     for key in keys:
  58.       val = map[key]
  59.       map[key] = None
  60.       self.assertEquals(createMRSystemDirectoryManager(map, self.log), None)
  61.       map[key] = val
  62.   def testUnresponsiveJobTracker(self):
  63.     # simulate an unresponsive job tracker, by giving a command that runs longer than the retries
  64.     # verify that the program returns with the right error message.
  65.     sc = simpleCommand("sleep", "sleep 300")
  66.     sc.start()
  67.     pid = sc.getPid()
  68.     while pid is None:
  69.       pid = sc.getPid()
  70.     sysDirMgr = MRSystemDirectoryManager(pid, '/user/yhemanth/mapredsystem/hoduser.123.abc.com', 
  71.                                                 'def.com:5678', '/usr/bin/hadoop', self.log, retries=3)
  72.     sysDirMgr.removeMRSystemDirectory()
  73.     self.log.hasMessage("Job Tracker did not exit even after a minute. Not going to try and cleanup the system directory", 'warn')
  74.     sc.kill()
  75.     sc.wait()
  76.     sc.join()
  77. class HodCleanupTestSuite(BaseTestSuite):
  78.   def __init__(self):
  79.     # suite setup
  80.     BaseTestSuite.__init__(self, __name__, excludes)
  81.     pass
  82.   
  83.   def cleanUp(self):
  84.     # suite tearDown
  85.     pass
  86. def RunHodCleanupTests():
  87.   # modulename_suite
  88.   suite = HodCleanupTestSuite()
  89.   testResult = suite.runTests()
  90.   suite.cleanUp()
  91.   return testResult
  92. if __name__ == "__main__":
  93.   RunHodCleanupTests()