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

网格计算

开发平台:

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. excludes = ['']
  20. import tempfile, shutil, getpass, random
  21. from hodlib.Common.types import typeValidator
  22. # All test-case classes should have the naming convention test_.*
  23. class test_typeValidator(unittest.TestCase):
  24.   def setUp(self):
  25.     self.originalDir = os.getcwd()
  26.     self.validator = typeValidator(self.originalDir)
  27.     self.tempDir = tempfile.mkdtemp(dir='/tmp/hod-%s' % getpass.getuser(),
  28.                                     prefix='test_Types_typeValidator_tempDir')
  29.     self.tempFile = tempfile.NamedTemporaryFile(dir=self.tempDir)
  30.     # verification : error strings
  31.     self.errorStringsForVerify = {
  32.                           'pos_int' : 0,
  33.                           'uri' : '%s is an invalid uri',
  34.                           'directory' : 0,
  35.                           'file' : 0,
  36.                         }
  37.     # verification : valid vals
  38.     self.verifyValidVals = [
  39.                             ('pos_int', 0),
  40.                             ('pos_int', 1),
  41.                             ('directory', self.tempDir),
  42.                             ('directory', '/tmp/hod-%s/../../%s' % 
  43.                                     (getpass.getuser(), self.tempDir)),
  44.                             ('file', self.tempFile.name),
  45.                             ('file', '/tmp/hod-%s/../../%s' % 
  46.                                     (getpass.getuser(), self.tempFile.name)),
  47.                             ('uri', 'file://localhost/' + self.tempDir),
  48.                             ('uri', 'file:///' + self.tempDir),
  49.                             ('uri', 'file:///tmp/hod-%s/../../%s' % 
  50.                                     (getpass.getuser(), self.tempDir)),
  51.                             ('uri', 'file://localhost/tmp/hod-%s/../../%s' % 
  52.                                     (getpass.getuser(), self.tempDir)),
  53.                             ('uri', 'http://hadoop.apache.org/core/'),
  54.                             ('uri', self.tempDir),
  55.                             ('uri', '/tmp/hod-%s/../../%s' % 
  56.                                     (getpass.getuser(), self.tempDir)),
  57.                            ]
  58.     # generate an invalid uri
  59.     randomNum = random.random()
  60.     while os.path.exists('/%s' % randomNum):
  61.       # Just to be sure :)
  62.       randomNum = random.random()
  63.     invalidUri = 'file://localhost/%s' % randomNum
  64.     # verification : invalid vals
  65.     self.verifyInvalidVals = [
  66.                               ('pos_int', -1),
  67.                               ('uri', invalidUri),
  68.                               ('directory', self.tempFile.name),
  69.                               ('file', self.tempDir),
  70.                              ]
  71.     # normalization : vals
  72.     self.normalizeVals = [
  73.                             ('pos_int', 1, 1),
  74.                             ('pos_int', '1', 1),
  75.                             ('directory', self.tempDir, self.tempDir),
  76.                             ('directory', '/tmp/hod-%s/../../%s' % 
  77.                                   (getpass.getuser(), self.tempDir), 
  78.                                                       self.tempDir),
  79.                             ('file', self.tempFile.name, self.tempFile.name),
  80.                             ('file', '/tmp/hod-%s/../../%s' % 
  81.                                     (getpass.getuser(), self.tempFile.name),
  82.                                                          self.tempFile.name),
  83.                             ('uri', 'file://localhost' + self.tempDir, 
  84.                                   'file://' + self.tempDir),
  85.                             ('uri', 'file://127.0.0.1' + self.tempDir, 
  86.                                   'file://' + self.tempDir),
  87.                             ('uri', 'http://hadoop.apache.org/core',
  88.                                   'http://hadoop.apache.org/core'),
  89.                             ('uri', self.tempDir, self.tempDir),
  90.                             ('uri', '/tmp/hod-%s/../../%s' % 
  91.                                   (getpass.getuser(), self.tempDir), 
  92.                                                       self.tempDir),
  93.                          ]
  94.     pass
  95.   # All testMethods have to have their names start with 'test'
  96.   def testnormalize(self):
  97.     for (type, originalVal, normalizedVal) in self.normalizeVals:
  98.       # print type, originalVal, normalizedVal,
  99.       #                          self.validator.normalize(type, originalVal)
  100.       assert(self.validator.normalize(type, originalVal) == normalizedVal)
  101.     pass
  102.   def test__normalize(self):
  103.     # Special test for functionality of private method __normalizedPath
  104.     tmpdir = tempfile.mkdtemp(dir=self.originalDir) #create in self.originalDir
  105.     oldWd = os.getcwd()
  106.     os.chdir('/')
  107.     tmpdirName = re.sub(".*/","",tmpdir)
  108.     # print re.sub(".*/","",tmpdirName)
  109.     # print os.path.join(self.originalDir,tmpdir)
  110.     (type, originalVal, normalizedVal) = 
  111.                                     ('file', tmpdirName, 
  112.                                     os.path.join(self.originalDir,tmpdirName))
  113.     assert(self.validator.normalize(type, originalVal) == normalizedVal)
  114.     os.chdir(oldWd)
  115.     os.rmdir(tmpdir)
  116.     pass
  117.     
  118.   def testverify(self):
  119.     # test verify method
  120.     # test valid vals
  121.     for (type,value) in self.verifyValidVals:
  122.       valueInfo = { 'isValid' : 0, 'normalized' : 0, 'errorData' : 0 }
  123.       valueInfo = self.validator.verify(type,value)
  124.       # print type, value, valueInfo
  125.       assert(valueInfo['isValid'] == 1)
  126.     # test invalid vals
  127.     for (type,value) in self.verifyInvalidVals:
  128.       valueInfo = { 'isValid' : 0, 'normalized' : 0, 'errorData' : 0 }
  129.       valueInfo = self.validator.verify(type,value)
  130.       # print type, value, valueInfo
  131.       assert(valueInfo['isValid'] == 0)
  132.       if valueInfo['errorData'] != 0:
  133.         # if there is any errorData, check
  134.         assert(valueInfo['errorData'] == 
  135.                                       self.errorStringsForVerify[type] % value)
  136.     pass
  137.   def tearDown(self):
  138.     self.tempFile.close()
  139.     if os.path.exists(self.tempDir):
  140.       shutil.rmtree(self.tempDir)
  141.     pass
  142. class TypesTestSuite(BaseTestSuite):
  143.   def __init__(self):
  144.     # suite setup
  145.     BaseTestSuite.__init__(self, __name__, excludes)
  146.     pass
  147.   
  148.   def cleanUp(self):
  149.     # suite tearDown
  150.     pass
  151. def RunTypesTests():
  152.   # modulename_suite
  153.   suite = TypesTestSuite()
  154.   testResult = suite.runTests()
  155.   suite.cleanUp()
  156.   return testResult
  157. if __name__ == "__main__":
  158.   RunTypesTests()