From nobody Fri Nov 14 16:56:43 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1762279397; cv=none; d=zohomail.com; s=zohoarc; b=mKxSjczVItTuP6S10bq+0t3A0bgXfQmsMI3Z7u40o4q9r+uT6LAKCSWoNy7UL0H6L4+js60OmGh1ckA48bbOO+Cy45NQEX7brVkkzcjxdZa2OvYs6awxNHd5UcbEKRxP5QFSVGIU67Tq/VO1e1OLgNwntYnKMQxt3JVJMQ6eLwI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762279397; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=p5/pNDPxmWXSW9ibWFFaeN5+HXMRwTQf4MumZt267PQ=; b=Bm0DA2uBP8OdQdaM+6BoZ+afpoFTizE4/t/1NIxZhbHsuO5Azi+MJIEqj0wTSLdk3HlCoCYveEqkafv/LKXaAJmNaSqZElVMhgzgmcz7XTF6QHDwHY4EAeWxtowdQ7JEzySpQoYsGOpW3+OCbl98nWYSfb5jS8N4Lo8OlivrcW8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1762279397794972.0008955363724; Tue, 4 Nov 2025 10:03:17 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vGLLd-0007ck-6b; Tue, 04 Nov 2025 13:01:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vGLFW-0001QR-Sn for qemu-devel@nongnu.org; Tue, 04 Nov 2025 12:55:20 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vGLFT-00074g-7n for qemu-devel@nongnu.org; Tue, 04 Nov 2025 12:55:17 -0500 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-587-XA6iXqirP1eFep0VDbqN3w-1; Tue, 04 Nov 2025 12:55:08 -0500 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A159B1956050; Tue, 4 Nov 2025 17:55:07 +0000 (UTC) Received: from merkur.fritz.box (unknown [10.45.226.47]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4D8C8180045B; Tue, 4 Nov 2025 17:55:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1762278912; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=p5/pNDPxmWXSW9ibWFFaeN5+HXMRwTQf4MumZt267PQ=; b=D1J1wdimSffNnqKnnQQ4UdqHwtt3hsoKaRa3sLbBffAhDo/iS3lUtquvCUM+0sMW7U1iiq yYzqMxau0yHRKLodA/n4khNhyG5mV8FtXz4SEaqxkpMhh+JlgHUr26CWZkr8gcRgr/z26o BPliHB67R276cHgDxWPaR5lJUuOxPJ8= X-MC-Unique: XA6iXqirP1eFep0VDbqN3w-1 X-Mimecast-MFC-AGG-ID: XA6iXqirP1eFep0VDbqN3w_1762278907 From: Kevin Wolf To: qemu-block@nongnu.org Cc: kwolf@redhat.com, qemu-devel@nongnu.org Subject: [PULL 24/27] tests/qemu-iotests: Improve the dry run list to speed up thorough testing Date: Tue, 4 Nov 2025 18:54:12 +0100 Message-ID: <20251104175415.525388-25-kwolf@redhat.com> In-Reply-To: <20251104175415.525388-1-kwolf@redhat.com> References: <20251104175415.525388-1-kwolf@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.788, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1762279400633158500 Content-Type: text/plain; charset="utf-8" From: Thomas Huth When running the tests in thorough mode, e.g. with: make -j$(nproc) check SPEED=3Dthorough we currently always get a huge amount of total tests that the test runner tries to execute (2457 in my case), but a big bunch of them are only skipped (1099 in my case, meaning that only 1358 got executed). This happens because we try to run the whole set of iotests for multiple image formats while a lot of the tests can only run with one certain format only and thus are marked as SKIP during execution. This is quite a waste of time during each test run, and also unnecessarily blows up the displayed list of executed tests in the console output. Thus let's try to be a little bit smarter: If the "check" script is run with "-n" and an image format switch (like "-qed") at the same time (which is what we do for discovering the tests for the meson test runner already), only report the tests that likely support the given format instead of providing the whole list of all tests. We can determine whether a test supports a format or not by looking at the lines in the file that contain a "supported_fmt" or "unsupported_fmt" statement. This is only heuristics, of course, but it is good enough for running the iotests via "make check-block" - I double-checked that the list of executed tests does not get changed by this patch, it's only the tests that are skipped anyway that are now not run anymore. This way the amount of total tests drops from 2457 to 1432 for me, and the amount of skipped tests drops from 1099 to just 74 (meaning that we still properly run 1432 - 74 =3D 1358 tests as we did before). Signed-off-by: Thomas Huth Message-ID: <20251014104142.1281028-3-thuth@redhat.com> Reviewed-by: Kevin Wolf Signed-off-by: Kevin Wolf --- tests/qemu-iotests/check | 42 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check index d9b7c1d598..3941eac8e2 100755 --- a/tests/qemu-iotests/check +++ b/tests/qemu-iotests/check @@ -17,6 +17,7 @@ # along with this program. If not, see . =20 import os +import re import sys import argparse import shutil @@ -82,7 +83,7 @@ def make_argparser() -> argparse.ArgumentParser: g_env.add_argument('-i', dest=3D'aiomode', default=3D'threads', help=3D'sets AIOMODE environment variable') =20 - p.set_defaults(imgfmt=3D'raw', imgproto=3D'file') + p.set_defaults(imgproto=3D'file') =20 format_list =3D ['raw', 'bochs', 'cloop', 'parallels', 'qcow', 'qcow2', 'qed', 'vdi', 'vpc', 'vhdx', 'vmdk', 'luks', 'dmg', 'vv= fat'] @@ -137,15 +138,50 @@ def make_argparser() -> argparse.ArgumentParser: return p =20 =20 +def dry_run_list(test_dir, imgfmt, testlist): + for t in testlist: + if not imgfmt: + print('\n'.join([os.path.basename(t)])) + continue + # If a format has been given, we look for the "supported_fmt" + # and the "unsupported_fmt" lines in the test and try to find out + # whether the format is supported or not. This is only heuristics + # (it can e.g. fail if the "unsupported_fmts" and "supported_fmts" + # statements are in the same line), but it should be good enough + # to get a proper list for "make check-block" + with open(os.path.join(test_dir, t), 'r', encoding=3D'utf-8') as f= h: + supported =3D True + check_next_line =3D False + sd =3D "[ \t'\"]" # Start delimiter + ed =3D "([ \t'\"]|$)" # End delimiter + for line in fh: + if 'unsupported_fmt' in line: + if re.search(sd + imgfmt + ed, line): + supported =3D False + break + elif 'supported_fmt' in line or check_next_line: + if re.search(sd + 'generic' + ed, line): + continue # Might be followed by "unsupported"= line + supported =3D re.search(sd + imgfmt + ed, line) + check_next_line =3D not ']' in line and \ + ('supported_fmts=3D[' in line or check_next_li= ne) + if supported or not check_next_line: + break + if supported: + print('\n'.join([os.path.basename(t)])) + + if __name__ =3D=3D '__main__': warnings.simplefilter("default") os.environ["PYTHONWARNINGS"] =3D "default" =20 args =3D make_argparser().parse_args() =20 + image_format =3D args.imgfmt or 'raw' + env =3D TestEnv(source_dir=3Dargs.source_dir, build_dir=3Dargs.build_dir, - imgfmt=3Dargs.imgfmt, imgproto=3Dargs.imgproto, + imgfmt=3Dimage_format, imgproto=3Dargs.imgproto, aiomode=3Dargs.aiomode, cachemode=3Dargs.cachemode, imgopts=3Dargs.imgopts, misalign=3Dargs.misalign, debug=3Dargs.debug, valgrind=3Dargs.valgrind, @@ -189,7 +225,7 @@ if __name__ =3D=3D '__main__': =20 if args.dry_run: with env: - print('\n'.join([os.path.basename(t) for t in tests])) + dry_run_list(env.source_iotests, args.imgfmt, tests) else: with TestRunner(env, tap=3Dargs.tap, color=3Dargs.color) as tr: --=20 2.51.1