Skip to content

Commit a41a1ad

Browse files
author
ag
committed
process the raw coverage files after test run
1 parent b1fb8e8 commit a41a1ad

3 files changed

Lines changed: 20 additions & 5 deletions

File tree

test.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,8 @@ if [[ "${RUN[@]}" =~ "$STAGE" ]] ; then
265265

266266
# Add coverage settings if enabled
267267
if [ "$COVERAGE" == "true" ]; then
268-
export GOFLAGS="-cover -covermode=atomic -coverprofile=${COVERAGE_DIR}/integration.coverprofile -coverpkg=./..."
269-
INTEGRATION_ARGS+=("--coverage" "--coveragedir=${COVERAGE_DIR}")
268+
# export GOFLAGS="-cover -covermode=atomic -coverprofile=${COVERAGE_DIR}/integration.coverprofile -coverpkg=./..."
269+
INTEGRATION_ARGS+=("--coverage" "--coverage-dir=${COVERAGE_DIR}")
270270
fi
271271

272272
# Add any filters

test/integration-test.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def main():
5555
help="run integration tests using chisel")
5656
parser.add_argument('--coverage', dest="coverage", action="store_true",
5757
help="run integration tests with coverage")
58-
parser.add_argument('--coveragedir', dest="coverage_dir", action="store",
58+
parser.add_argument('--coverage-dir', dest="coverage_dir", action="store",
5959
default=f"test/coverage/{datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}",
6060
help="directory to store coverage data")
6161
parser.add_argument('--gotest', dest="run_go", action="store_true",
@@ -74,7 +74,7 @@ def main():
7474
if not os.path.exists(args.coverage_dir):
7575
os.makedirs(args.coverage_dir)
7676
if not os.path.isdir(args.coverage_dir):
77-
raise(Exception("coveragedir must be a directory"))
77+
raise(Exception("coverage-dir must be a directory"))
7878

7979
if not (args.run_chisel or args.custom or args.run_go is not None):
8080
raise(Exception("must run at least one of the letsencrypt or chisel tests with --chisel, --gotest, or --custom"))
@@ -118,6 +118,10 @@ def main():
118118
run_cert_checker()
119119
check_balance()
120120

121+
# If coverage is enabled, process the coverage data
122+
if args.coverage:
123+
process_covdata(args.coverage_dir)
124+
121125
if not startservers.check():
122126
raise(Exception("startservers.check failed"))
123127

@@ -159,5 +163,17 @@ def check_balance():
159163
def run_cert_checker():
160164
run(["./bin/boulder", "cert-checker", "-config", "%s/cert-checker.json" % config_dir])
161165

166+
def process_covdata(coverage_dir):
167+
"""Process coverage data and generate reports."""
168+
if not os.path.exists(coverage_dir):
169+
raise(Exception("Coverage directory does not exist: %s" % coverage_dir))
170+
171+
# Generate text report
172+
coverage_dir = os.path.abspath(coverage_dir)
173+
cov_text = os.path.join(coverage_dir, "integration.coverprofile")
174+
# this works, but if it takes a long time consider merging with `go tool covdata merge` first
175+
# https://go.dev/blog/integration-test-coverage#merging-raw-profiles-with-go-tool-covdata-merge
176+
subprocess.check_call(["go", "tool", "covdata", "textfmt", "-i", coverage_dir, "-o", cov_text])
177+
162178
if __name__ == "__main__":
163179
main()

test/startservers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ def run(cmd, fakeclock, coverage_dir=None):
203203
e.setdefault("GORACE", "halt_on_error=1")
204204
if coverage_dir:
205205
abs_coverage_dir = os.path.abspath(coverage_dir)
206-
#FIXME warning: GOCOVERDIR not set, no coverage data emitted - for a few binaries inspite of the environment variable being set
207206
e.setdefault("GOCOVERDIR", abs_coverage_dir)
208207
e.setdefault("GOCOVERMODE", "atomic")
209208
if fakeclock:

0 commit comments

Comments
 (0)