2016-05-23 19:50:08 +02:00
|
|
|
#!/usr/bin/env python
|
|
|
|
from unittest import *
|
|
|
|
from console.include.common_functions_60 import *
|
|
|
|
from console.include.common_classes_60 import *
|
2016-05-27 18:26:47 +02:00
|
|
|
from sauceclient import SauceClient
|
2016-08-09 12:51:39 +02:00
|
|
|
import testtools
|
2016-07-12 09:35:02 +02:00
|
|
|
from os import environ, getenv
|
2016-05-27 18:26:47 +02:00
|
|
|
import subprocess, time, sys
|
2016-05-23 19:50:08 +02:00
|
|
|
|
|
|
|
def get_test_file(test_list):
|
|
|
|
#return [test[0].split(' ')[0].split('.')[0].split('<')[1] for test in test_list]
|
|
|
|
return [test[0].test_name for test in test_list]
|
|
|
|
|
2016-08-09 12:51:39 +02:00
|
|
|
""" Splits a Test Suite so that no more than 'n' threads will execute the tests """
|
|
|
|
def split_suite_into_chunks(num_threads, suite):
|
|
|
|
# Compute num_threads such that the number of threads does not exceed the value passed to the function
|
|
|
|
# Keep num_threads to a reasonable number of threads
|
|
|
|
if num_threads < 0: num_threads = 1
|
|
|
|
if num_threads > 8: num_threads = 8
|
|
|
|
num_tests = suite.countTestCases()
|
|
|
|
s = []
|
|
|
|
s_tmp = TestSuite()
|
|
|
|
n = round(num_tests / num_threads)
|
|
|
|
for case in suite:
|
|
|
|
if n <= 0 and s_tmp.countTestCases() > 0:
|
|
|
|
s.append([s_tmp, None])
|
|
|
|
num_threads -= 1
|
|
|
|
num_tests -= s_tmp.countTestCases()
|
|
|
|
s_tmp = TestSuite()
|
|
|
|
n = round(num_tests / num_threads)
|
|
|
|
s_tmp.addTest(case)
|
|
|
|
n -= 1
|
|
|
|
if s_tmp.countTestCases() > 0:
|
|
|
|
if s_tmp.countTestCases() > 0: s.append([s_tmp, None])
|
|
|
|
num_tests -= s_tmp.countTestCases()
|
|
|
|
if num_tests != 0: print("Error: num_tests should be 0 but is %s!" % num_tests)
|
|
|
|
return s
|
|
|
|
|
|
|
|
def add_test_case_to_suite(suite, tc_name):
|
|
|
|
# Creates a Test Suite with each Test Case added n times
|
|
|
|
n = 1
|
|
|
|
for i in range(0, n):
|
|
|
|
suite.addTest(tc_name)
|
|
|
|
|
|
|
|
class TracingStreamResult(testtools.StreamResult):
|
|
|
|
failures = []
|
|
|
|
success = []
|
|
|
|
skipped = []
|
|
|
|
errors = []
|
|
|
|
|
|
|
|
def status(self, test_status, test_id, *args, **kwargs):
|
|
|
|
if test_status=='inprogress':
|
|
|
|
print "Running "+str(test_id)
|
|
|
|
|
|
|
|
elif test_status=='xfail' or test_status=='fail' or test_status=='exists':
|
|
|
|
self.failures.append(test_id)
|
|
|
|
|
|
|
|
elif test_status=='uxsuccess' or test_status=='success':
|
|
|
|
self.success.append(test_id)
|
|
|
|
|
|
|
|
elif test_status=='exists':
|
|
|
|
self.errors.append(test_id)
|
|
|
|
|
|
|
|
elif test_status=='skip':
|
|
|
|
self.skipped.append('test_id')
|
|
|
|
|
2016-07-19 17:23:04 +02:00
|
|
|
#Run Enterprise tests
|
|
|
|
is_enterprise = '1' == getenv('ENTERPRISE', False)
|
|
|
|
|
2016-05-23 19:50:08 +02:00
|
|
|
a = TestLoader()
|
2016-07-19 17:23:04 +02:00
|
|
|
|
|
|
|
if is_enterprise:
|
|
|
|
tests = a.discover(start_dir='console',pattern='*.py')
|
|
|
|
else:
|
|
|
|
tests = a.discover(start_dir='console',pattern='PAN*.py')
|
2016-08-09 12:51:39 +02:00
|
|
|
if is_enterprise:
|
|
|
|
num_threads = 2
|
|
|
|
else:
|
|
|
|
num_threads = 3
|
|
|
|
suite = tests
|
|
|
|
concurrent_suite = testtools.ConcurrentStreamTestSuite(lambda: (split_suite_into_chunks(num_threads, suite)))
|
|
|
|
result = TracingStreamResult()
|
2016-08-09 16:22:56 +02:00
|
|
|
try:
|
|
|
|
result.startTestRun()
|
|
|
|
finally:
|
|
|
|
concurrent_suite.run(result)
|
2016-05-27 18:26:47 +02:00
|
|
|
|
2016-08-09 16:22:56 +02:00
|
|
|
print "Tests failed: %s" % result.failures
|
|
|
|
print "Tests succeeded: %s" % result.success
|
|
|
|
print "Tests skipped: %s" % result.skipped
|
|
|
|
print "Tests with errors: %s" % result.errors
|
2016-05-23 19:50:08 +02:00
|
|
|
|
2016-08-09 16:22:56 +02:00
|
|
|
if (len(result.failures)+len(result.errors)+len(result.skipped)) != 0:
|
2016-05-27 21:34:36 +02:00
|
|
|
sys.exit(1)
|
|
|
|
else:
|
|
|
|
sys.exit(0)
|