Align test names in BD and testcase.yaml declaration
[releng.git] / utils / test / reporting / functest / reportingUtils.py
1 #!/usr/bin/python
2 #
3 # This program and the accompanying materials
4 # are made available under the terms of the Apache License, Version 2.0
5 # which accompanies this distribution, and is available at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 from urllib2 import Request, urlopen, URLError
10 import json
11 import reportingConf
12
13
14 def getApiResults(case, installer, scenario, version):
15     results = json.dumps([])
16     # to remove proxy (to be removed at the end for local test only)
17     # proxy_handler = urllib2.ProxyHandler({})
18     # opener = urllib2.build_opener(proxy_handler)
19     # urllib2.install_opener(opener)
20     # url = "http://127.0.0.1:8000/results?case=" + case + \
21     #       "&period=30&installer=" + installer
22     url = (reportingConf.URL_BASE + "?case=" + case +
23            "&period=" + str(reportingConf.PERIOD) + "&installer=" + installer +
24            "&scenario=" + scenario + "&version=" + version)
25     request = Request(url)
26
27     try:
28         response = urlopen(request)
29         k = response.read()
30         results = json.loads(k)
31     except URLError, e:
32         print 'No kittez. Got an error code:', e
33
34     return results
35
36
37 def getScenarios(case, installer, version):
38
39     case = case.getName()
40     print case
41     url = (reportingConf.URL_BASE + "?case=" + case +
42            "&period=" + str(reportingConf.PERIOD) + "&installer=" + installer +
43            "&version=" + version)
44     request = Request(url)
45
46     try:
47         response = urlopen(request)
48         k = response.read()
49         results = json.loads(k)
50         test_results = results['results']
51     except URLError, e:
52         print 'Got an error code:', e
53
54     if test_results is not None:
55         test_results.reverse()
56
57         scenario_results = {}
58
59         for r in test_results:
60             # Retrieve all the scenarios per installer
61             if not r['scenario'] in scenario_results.keys():
62                 scenario_results[r['scenario']] = []
63             scenario_results[r['scenario']].append(r)
64
65     return scenario_results
66
67
68 def getScenarioStats(scenario_results):
69     scenario_stats = {}
70     for k, v in scenario_results.iteritems():
71         scenario_stats[k] = len(v)
72
73     return scenario_stats
74
75
76 def getNbtestOk(results):
77     nb_test_ok = 0
78     for r in results:
79         for k, v in r.iteritems():
80             try:
81                 if "PASS" in v:
82                     nb_test_ok += 1
83             except:
84                 print "Cannot retrieve test status"
85     return nb_test_ok
86
87
88 def getResult(testCase, installer, scenario, version):
89
90     # retrieve raw results
91     results = getApiResults(testCase, installer, scenario, version)
92     # let's concentrate on test results only
93     test_results = results['results']
94
95     # if results found, analyze them
96     if test_results is not None:
97         test_results.reverse()
98
99         scenario_results = []
100
101         # print " ---------------- "
102         # print test_results
103         # print " ---------------- "
104         # print "nb of results:" + str(len(test_results))
105
106         for r in test_results:
107             # print r["creation_date"]
108             # print r["criteria"]
109             scenario_results.append({r["start_date"]: r["criteria"]})
110         # sort results
111         scenario_results.sort()
112         # 4 levels for the results
113         # 3: 4+ consecutive runs passing the success criteria
114         # 2: <4 successful consecutive runs but passing the criteria
115         # 1: close to pass the success criteria
116         # 0: 0% success, not passing
117         test_result_indicator = 0
118         nbTestOk = getNbtestOk(scenario_results)
119         # print "Nb test OK:"+ str(nbTestOk)
120         # check that we have at least 4 runs
121         if nbTestOk < 1:
122             test_result_indicator = 0
123         elif nbTestOk < 2:
124             test_result_indicator = 1
125         else:
126             # Test the last 4 run
127             if (len(scenario_results) > 3):
128                 last4runResults = scenario_results[-4:]
129                 if getNbtestOk(last4runResults):
130                     test_result_indicator = 3
131                 else:
132                     test_result_indicator = 2
133             else:
134                 test_result_indicator = 2
135     return test_result_indicator