c_extensions_test.py [plain text]
"""Tests for distcc_pump_c_extensions.
Writes out doc strings and calls some distcc rpc functions. Also, the program
times the speed-up of using the libc versions of os.path.realpath and
os.path.exists provided by distcc_pump_c_extensions.
"""
__author__ = 'opensource@google.com'
import os.path
import random
import sys
import time
import distcc_pump_c_extensions
def RunTest(random_filename):
def _MakeTempFile(mode):
return open(random_filename, mode)
assert distcc_pump_c_extensions.__file__
assert distcc_pump_c_extensions.__doc__
assert distcc_pump_c_extensions.__author__
assert distcc_pump_c_extensions.RTokenString.__doc__
assert distcc_pump_c_extensions.RArgv.__doc__
assert distcc_pump_c_extensions.XArgv.__doc__
assert distcc_pump_c_extensions.OsPathExists.__doc__
assert distcc_pump_c_extensions.OsPathIsFile.__doc__
assert distcc_pump_c_extensions.Realpath.__doc__
fd = _MakeTempFile('wb')
fd.write('ARGC 2')
fd.write('ARGV 6')
fd.write('tomato')
fd.write('ARGV 7')
fd.write('potatos')
fd.close()
fd = _MakeTempFile('rb')
try:
two_string = distcc_pump_c_extensions.RTokenString(fd.fileno(), 'XXXX')
sys.exit('internal error 1 - we should not get to here')
except distcc_pump_c_extensions.Error:
pass
fd.seek(0)
two_string = distcc_pump_c_extensions.RTokenString(fd.fileno(), 'ARGC')
if two_string != 'AR':
raise distcc_pump_c_extensions.error('internal error 2')
fd.seek(0)
args = distcc_pump_c_extensions.RArgv(fd.fileno())
if args != ['tomato', 'potatos']:
raise distcc_pump_c_extensions.error('internal error 3')
fd.close()
fd = _MakeTempFile('wb')
darth_vader_barney = ['Darth Vader', 'Barney']
args = distcc_pump_c_extensions.XArgv(fd.fileno(), darth_vader_barney)
fd.close()
fd = _MakeTempFile('r')
args = distcc_pump_c_extensions.RArgv(fd.fileno())
if args != darth_vader_barney:
raise distcc_pump_c_extensions.error('internal error 4')
fd.close()
t = time.time()
f = '/'
for unused_i in range(10000):
distcc_pump_c_extensions.OsPathExists(f)
print 'Stat', time.time() - t
t = time.time()
for unused_i in range(10000):
os.path.exists(f)
print 'os.path.exists', time.time() - t
for unused_i in range(10000):
distcc_pump_c_extensions.Realpath(f)
print 'c_realpath', time.time() - t
t = time.time()
for unused_i in range(10000):
os.path.realpath(f)
print 'os.path.realpath', time.time() - t
print 'c_extenstions_test passed'
def main():
random_testdir = ('/tmp/distcc-pump-c-extensions-test-%s.%s'
% (os.getuid(), random.random() * time.time()))
try:
if os.path.exists(random_testdir):
os.removedirs(random_testdir)
os.mkdir(random_testdir, 0700)
except (IOError, OSError), why:
sys.exit('Unable to create test dir %s: %s.' % (random_testdir, why))
random_filename = os.path.join(random_testdir, 'test')
assert not os.path.exists(random_filename), random_filename
try:
RunTest(random_filename)
finally:
if os.path.exists(random_filename):
os.unlink(random_filename)
if os.path.exists(random_testdir):
os.removedirs(random_testdir)
main()