blob: 51c49ad21d5825bb2caaa5cb2023d7d9404c3b95 [file] [log] [blame]
#! /usr/bin/python
# // OpenCL Conformance Tests
# //
# // Copyright: (c) 2009-2013 by Apple Inc. All Rights Reserved.
# //
import os, re, sys, subprocess, time
# A script to run the entierty of math_brute_force, but to run each separate job in parallel.
def DEBUG(text, level=1):
if (DEBUG_LEVEL >= level): print(text)
def write_info(text):
print text,
if (ATF):
ATF_log.write("<Info>"+text+"</Info>\n")
ATF_log.flush()
def write_error(text):
print "ERROR:" + text,
if (ATF):
ATF_log.write("<Error>"+text+"</Error>\n")
ATF_log.flush()
def start_atf():
global ATF, ATF_log
DEBUG("start_atf()")
if (os.environ.get("ATF_RESULTSDIRECTORY") == None):
ATF = False
DEBUG("\tATF not defined",0)
return
ATF = True
ATF_output_file_name = "TestLog.xml"
output_path = os.environ.get("ATF_RESULTSDIRECTORY")
try:
ATF_log = open(output_path+ATF_output_file_name, "w")
except IOError:
DEBUG("Could not open ATF file " + ATF_output_file_name, 0)
ATF = False
return
DEBUG("ATF Enabled")
# Generate the XML header
ATF_log.write("<Log>\n")
ATF_log.write("<TestStart/>\n")
DEBUG("Done start_atf()")
def stop_atf():
DEBUG("stop_atf()")
if (ATF):
ATF.write("<TestFinish/>\n")
ATF.write("</Log>\n")
ATF.close()
def get_time() :
return time.strftime("%A %H:%M:%S", time.localtime())
def start_test(id):
DEBUG("start_test("+str(id) + ")")
command = test + " " + str(id) + " " + str(id)
try:
write_info(get_time() + " Executing " + command + "...")
p = subprocess.Popen(command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
except OSError:
write_error("Failed to execute " + command)
return
running_tests[id] = p
DEBUG("start_test("+str(id) + ") added: " + str(running_tests[id]) + \
", now " + str(len(running_tests.keys())) + " tests running")
DEBUG_LEVEL = 2
test = "./bruteforce -w"
instances = 4
max_test_ID = 12
running_tests = {}
ATF_log = None
ATF = False
# Start the ATF log
start_atf()
next_test = 0
next_test_to_finish = 0
while ( (next_test <= max_test_ID) | (next_test_to_finish <= max_test_ID)):
# If we want to run more tests, start them
while ((len(running_tests.keys()) < instances) & (next_test <= max_test_ID)):
start_test(next_test)
next_test = next_test + 1
time.sleep(1)
# Check if the oldest test has finished
p = running_tests[next_test_to_finish]
if (p.poll() != None):
write_info(get_time() + " Test " + str(next_test_to_finish) +" finished.")
del running_tests[next_test_to_finish]
next_test_to_finish = next_test_to_finish + 1
# Write the results from the test out
for line in p.stdout.readlines():
write_info(line)
for line in p.stderr.readlines():
write_error(line)
time.sleep(1)
# Stop the ATF log
stop_atf()