blob: b15f6803dd1f6117eaa65d3cef7b0ab9cdd696c8 [file] [log] [blame]
#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
excludes = []
import tempfile, getpass
from xml.dom import minidom
from hodlib.Hod.hadoop import hadoopConfig
# All test-case classes should have the naming convention test_.*
class test_hadoopConfig(unittest.TestCase):
def setUp(self):
self.__hadoopConfig = hadoopConfig()
self.rootDir = '/tmp/hod-%s' % getpass.getuser()
if not os.path.exists(self.rootDir):
os.mkdir(self.rootDir)
self.testingDir = tempfile.mkdtemp( dir=self.rootDir,
prefix='HadoopTestSuite.test_hadoopConfig')
self.confDir = tempfile.mkdtemp(dir=self.rootDir,
prefix='HadoopTestSuite.test_hadoopConfig')
self.tempDir = '/tmp/hod-%s/something' % getpass.getuser()
self.hadoopSite = os.path.join(self.confDir,'hadoop-site.xml')
self.numNodes = 4
self.hdfsAddr = 'nosuchhost1.apache.org:50505'
self.mapredAddr = 'nosuchhost2.apache.org:50506'
self.finalServerParams = {
'mapred.child.java.opts' : '-Xmx1024m',
'mapred.compress.map.output' : 'false',
}
self.serverParams = {
'mapred.userlog.limit' : '200',
'mapred.userlog.retain.hours' : '10',
'mapred.reduce.parallel.copies' : '20',
}
self.clientParams = {
'mapred.tasktracker.tasks.maximum' : '2',
'io.sort.factor' : '100',
'io.sort.mb' : '200',
'mapred.userlog.limit.kb' : '1024',
'io.file.buffer.size' : '262144',
}
self.clusterFactor = 1.9
self.mySysDir = '/user/' + getpass.getuser() + '/mapredsystem'
pass
def testSuccess(self):
self.__hadoopConfig.gen_site_conf(
confDir = self.confDir,\
tempDir = self.tempDir,\
numNodes = self.numNodes,\
hdfsAddr = self.hdfsAddr,\
mrSysDir = self.mySysDir,\
mapredAddr = self.mapredAddr,\
clientParams = self.clientParams,\
serverParams = self.serverParams,\
finalServerParams = self.finalServerParams,\
clusterFactor = self.clusterFactor
)
xmldoc = minidom.parse(self.hadoopSite)
xmldoc = xmldoc.childNodes[0] # leave out xml spec
properties = xmldoc.childNodes # children of tag configuration
keyvals = {}
for prop in properties:
if not isinstance(prop,minidom.Comment):
# ---------- tag -------------------- -value elem-- data --
name = prop.getElementsByTagName('name')[0].childNodes[0].data
value = prop.getElementsByTagName('value')[0].childNodes[0].data
keyvals[name] = value
# fs.default.name should start with hdfs://
assert(keyvals['fs.default.name'].startswith('hdfs://'))
assert(keyvals['hadoop.tmp.dir'] == self.tempDir)
# TODO other tests
pass
def tearDown(self):
if os.path.exists(self.hadoopSite): os.unlink(self.hadoopSite)
if os.path.exists(self.confDir) : os.rmdir(self.confDir)
if os.path.exists(self.testingDir) : os.rmdir(self.testingDir)
pass
class HadoopTestSuite(BaseTestSuite):
def __init__(self):
# suite setup
BaseTestSuite.__init__(self, __name__, excludes)
pass
def cleanUp(self):
# suite tearDown
pass
def RunHadoopTests():
suite = HadoopTestSuite()
testResult = suite.runTests()
suite.cleanUp()
return testResult
if __name__ == "__main__":
RunHadoopTests()