Skip to content

Commit a23846c

Browse files
committed
Changed the storage format for code coverage in *coverage.json, in order to be able to calculate code coverage percentages for a subset of tested files.
- Legacy-Id: 9953
1 parent 7a059c9 commit a23846c

2 files changed

Lines changed: 32 additions & 14 deletions

File tree

ietf/utils/management/commands/coverage_changes.py

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from django.core.management.base import BaseCommand, CommandError
88
from django.utils.six import string_types
99

10+
import debug # pyflakes:ignore
11+
1012
class Command(BaseCommand):
1113
help = "Compare coverage between the latest release and the latest test run."
1214
option_list = BaseCommand.option_list + (
@@ -49,24 +51,41 @@ def coverage_diff(self, master, latest, sections=','.join(valid_sections), relea
4951
self.stdout.write("\nShowing coverage differeces between %s and %s:\n" % (mversion, lversion))
5052
for section in sections:
5153
mcoverage = master_coverage[section]["covered"]
54+
mformat = master_coverage[section].get("format", 1)
5255
lcoverage = latest_coverage[section]["covered"]
56+
lformat = latest_coverage[section].get("format", 1)
5357
#
5458
mkeys = mcoverage.keys()
5559
lkeys = lcoverage.keys()
5660
#
5761
keys = list(lkeys)
5862
keys.sort()
5963
header_written = False
64+
6065
for key in keys:
6166
if not key in mcoverage:
62-
mcoverage[key] = None
63-
if type(mcoverage[key]) is float or type(lcoverage[key]) is float:
64-
mval = ("%5.1f" % (100*mcoverage[key])) if mcoverage[key] else "-"
65-
lval = ("%5.1f %%" % (100*lcoverage[key])) if lcoverage[key] else "- "
67+
mlines, mcov = None, None
68+
else:
69+
if mformat == 1:
70+
mlines, mcov = None, mcoverage[key]
71+
elif mformat == 2:
72+
mlines, mcov = mcoverage[key]
73+
else:
74+
raise CommandError("The release coverage data has an unknown format ('%s'), quitting." % mformat)
75+
if lformat == 1:
76+
llines, lcov = None, lcoverage[key]
77+
elif lformat == 2:
78+
llines, lcov = lcoverage[key]
79+
else:
80+
raise CommandError("The latest coverage data has an unknown format ('%s'), quitting." % lformat)
81+
82+
if type(mcov) is float or type(lcov) is float:
83+
mval = ("%5.1f" % (100*mcov)) if mcov else "-"
84+
lval = ("%5.1f %%" % (100*lcov)) if lcov else "- "
6685
else:
67-
mval = mcoverage[key]
68-
lval = lcoverage[key]
69-
if mcoverage[key] != lcoverage[key]:
86+
mval = mcov
87+
lval = lcov
88+
if mcov != lcov:
7089
if not header_written:
7190
self.stdout.write(self.diff_line_format %
7291
("\n%s"%section.capitalize(), mversion[:7], lversion[:7]))

ietf/utils/test_runner.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,12 @@ def report(self):
178178
self.find_code_units(None)
179179

180180
total = Numbers()
181-
result = {"coverage": 0.0, "covered": {}}
181+
result = {"coverage": 0.0, "covered": {}, "format": 2, }
182182
for cu in self.code_units:
183183
try:
184184
analysis = self.coverage._analyze(cu)
185185
nums = analysis.numbers
186-
result["covered"][cu.name] = nums.pc_covered/100.0
186+
result["covered"][cu.name] = (nums.n_statements, nums.pc_covered/100.0)
187187
total += nums
188188
except KeyboardInterrupt: # pragma: not covered
189189
raise
@@ -221,7 +221,7 @@ def report_test_result(self, test):
221221
if self.runner.run_full_test_suite:
222222
# Permit 0.02% variation in results -- otherwise small code changes become a pain
223223
fudge_factor = 0.0002 # 0.02% -- a small change in the last digit we show
224-
self.assertGreaterEqual(test_coverage, master_coverage-fudge_factor,
224+
self.assertGreaterEqual(test_coverage, master_coverage - fudge_factor,
225225
msg = "The %s coverage percentage is now lower (%.2f%%) than for version %s (%.2f%%)" %
226226
( test, test_coverage*100, latest_coverage_version, master_coverage*100, ))
227227
self.assertLessEqual(len(test_missing), len(master_missing),
@@ -331,14 +331,17 @@ def setup_test_environment(self, **kwargs):
331331
"template": {
332332
"coverage": 0.0,
333333
"covered": {},
334+
"format": 1, # default format, coverage data in 'covered' are just fractions
334335
},
335336
"url": {
336337
"coverage": 0.0,
337338
"covered": {},
339+
"format": 1,
338340
},
339341
"code": {
340342
"coverage": 0.0,
341343
"covered": {},
344+
"format": 1,
342345
},
343346
}
344347

@@ -355,10 +358,6 @@ def setup_test_environment(self, **kwargs):
355358
print " Changing TEMPLATE_STRING_IF_INVALID to '' during testing."
356359
settings.TEMPLATE_STRING_IF_INVALID = ''
357360

358-
if settings.SERVE_CDN_FILES_LOCALLY_IN_DEV_MODE != True:
359-
print " Changing SERVE_CDN_FILES_LOCALLY_IN_DEV_MODE to 'True' during testing."
360-
settings.SERVE_CDN_FILES_LOCALLY_IN_DEV_MODE = True
361-
362361
assert not settings.IDTRACKER_BASE_URL.endswith('/')
363362

364363
# Try to set up an SMTP test server. In case other test runs are

0 commit comments

Comments
 (0)