185 lines
5.7 KiB
Python
Executable File
185 lines
5.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
##
|
|
## @author Edouard DUPIN
|
|
##
|
|
## @copyright 2012, Edouard DUPIN, all right reserved
|
|
##
|
|
## @license APACHE v2.0 (see license file)
|
|
##
|
|
import urllib, urllib2
|
|
import sys
|
|
import os
|
|
import argparse
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-u", "--url", help="server URL",
|
|
default="http://atria-soft.com/ci/test/inject")
|
|
parser.add_argument("-r", "--repo", help="Curent repositoty (generic github name (userName/repoName)",
|
|
default="")
|
|
parser.add_argument("-s", "--sha1", help="Sha1 on the commit (git) (256 char limited)",
|
|
default="")
|
|
parser.add_argument("-b", "--branch", help="branch of the repository (default master)",
|
|
default="")
|
|
###################
|
|
## Choice 1 ##
|
|
###################
|
|
parser.add_argument("-j", "--json", help="all data to send ... (json file NOT json data)",
|
|
default="")
|
|
###################
|
|
## Choice 2 ##
|
|
###################
|
|
parser.add_argument("--passed", help="if not use JSON file: nb Test passsed in the lib/program",
|
|
default=-1,
|
|
type=int)
|
|
parser.add_argument("--total", help="if not use JSON file: number total of test in the lib/program",
|
|
default=-1,
|
|
type=int)
|
|
###################
|
|
## Choice 3 ##
|
|
###################
|
|
parser.add_argument("--file", help="if not use JSON file: file with the 'gtest' log",
|
|
default="")
|
|
###################
|
|
## Choice 4 ##
|
|
###################
|
|
parser.add_argument("--test", help="test value (local server ...)",
|
|
action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
if args.test == True:
|
|
args.url = 'http://127.0.0.1/ci/test_inject.php'
|
|
args.repo = 'HeeroYui/test'
|
|
args.sha1 = ''
|
|
args.branch = 'master'
|
|
json_data = '{"executed":16,"executable":512,"list":[{"file":"test/plop.cpp","executed":57,"executable":75}]}'
|
|
else:
|
|
if args.json != "":
|
|
if args.passed >= 0:
|
|
print("[ERROR] (local) set 'passed' parameter with a json file")
|
|
exit(-2)
|
|
if args.total >= 0:
|
|
print("[ERROR] (local) set 'total' parameter with a json file")
|
|
exit(-2)
|
|
if args.file != "":
|
|
print("[ERROR] (local) set 'file' parameter with a json file")
|
|
exit(-2)
|
|
if not os.path.isfile(args.json):
|
|
print("[ERROR] (local) can not read json file" + args.json)
|
|
exit(-2)
|
|
file = open(args.json, "r")
|
|
json_data = file.read()
|
|
file.close()
|
|
if len(json_data) <= 0:
|
|
print("[ERROR] (local) json file is empty")
|
|
exit(-2)
|
|
elif args.passed >= 0:
|
|
if args.file != "":
|
|
print("[ERROR] (local) set 'file' parameter with 'passed'")
|
|
exit(-2)
|
|
if args.total < 0:
|
|
args.total = 0
|
|
json_data = '{"passed":' + args.passed + ',"total":' + args.total + ',"list":[]}'
|
|
else:
|
|
if args.file == "":
|
|
print("[ERROR] (local) set 'file' parameter empty")
|
|
exit(-2)
|
|
if not os.path.isfile(args.file):
|
|
print("[ERROR] (local) can not read test file" + args.file)
|
|
exit(-2)
|
|
file = open(args.file, "r")
|
|
data = file.read()
|
|
file.close()
|
|
lines = data.split("\n")
|
|
result = []
|
|
total_test = 0
|
|
total_passed = 0
|
|
# parse all lines
|
|
for line in lines:
|
|
if len(line) <= 0:
|
|
continue
|
|
if line[0] != '[':
|
|
continue
|
|
if line[:12] == "[ RUN ]":
|
|
#next line is usefull ...
|
|
continue
|
|
if line[:12] == "[ PASSED ]":
|
|
#End of test result
|
|
break
|
|
if line[:12] == "[ OK ]":
|
|
# this test is OK ...
|
|
# TestDeclaration.testBase (0 ms)
|
|
test_name = line[13:].split(" ")[0]
|
|
result.append([test_name, True])
|
|
total_test += 1
|
|
total_passed += 1
|
|
continue
|
|
if line[:12] == "[ FAILED ]":
|
|
# this test failled ...
|
|
test_name = line[13:].split(" ")[0]
|
|
result.append([test_name, False])
|
|
total_test += 1
|
|
continue
|
|
# nothing to do ...
|
|
#print("result : " + str(result))
|
|
|
|
# create the minimal json file:
|
|
json_data = '{\n\t"passed":' + str(total_passed) + ',\n\t"total":' + str(total_test) + ',\n\t"list":[\n'
|
|
first = True
|
|
for elem in result:
|
|
if first == True:
|
|
first = False
|
|
json_data += '\t\t{\n'
|
|
else:
|
|
json_data += '\t\t}, {\n'
|
|
json_data += '\t\t\t"test-name":"' + elem[0] + '",\n'
|
|
if elem[1] == True:
|
|
json_data += '\t\t\t"fail":false\n'
|
|
else:
|
|
json_data += '\t\t\t"fail":true\n'
|
|
if first == False:
|
|
json_data += '\t\t}\n'
|
|
json_data += '\t]\n}'
|
|
|
|
print("json data: " + str(json_data))
|
|
|
|
# todo : check if repo is contituated wit a "/" ...
|
|
# if repo, sha1 and branch is not set, we try to get it with travis global environement variable :
|
|
if args.repo == "":
|
|
args.repo = os.environ.get('TRAVIS_REPO_SLUG')
|
|
if args.repo == None:
|
|
print("[ERROR] (local) missing 'repo' parameter can not get travis env variable")
|
|
exit(-2)
|
|
if args.sha1 == "":
|
|
args.sha1 = os.environ.get('TRAVIS_COMMIT')
|
|
if args.sha1 == None:
|
|
args.sha1 = ""
|
|
|
|
if args.branch == "":
|
|
args.branch = os.environ.get('TRAVIS_BRANCH')
|
|
if args.branch == None:
|
|
args.branch = ""
|
|
|
|
print(" url = " + args.url)
|
|
print(" repo = " + args.repo)
|
|
print(" sha1 = " + args.sha1)
|
|
print(" branch = " + args.branch)
|
|
print(" json_data len = " + str(len(json_data)))
|
|
|
|
data = urllib.urlencode({'REPO':args.repo,
|
|
'SHA1':args.sha1,
|
|
'JSON_FILE':json_data,
|
|
'LIB_BRANCH':args.branch})
|
|
|
|
req = urllib2.Request(args.url, data)
|
|
response = urllib2.urlopen(req)
|
|
#print response.geturl()
|
|
#print response.info()
|
|
return_data = response.read()
|
|
print return_data
|
|
if return_data[:7] == "[ERROR]":
|
|
exit(-1)
|
|
|
|
exit(0)
|
|
|