From patchwork Thu Dec 7 14:36:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= X-Patchwork-Id: 35856 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6D39C10F07 for ; Thu, 7 Dec 2023 14:36:18 +0000 (UTC) Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by mx.groups.io with SMTP id smtpd.web10.85709.1701959772350562197 for ; Thu, 07 Dec 2023 06:36:12 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=lrTKigY3; spf=pass (domain: baylibre.com, ip: 209.85.128.43, mailfrom: pidge@baylibre.com) Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-40c2718a768so10599155e9.0 for ; Thu, 07 Dec 2023 06:36:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1701959771; x=1702564571; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=67zKYmsG/lnBx+spYtLneoN2o4qPjs2GIW29SUpfLKY=; b=lrTKigY3KXf8wmEvEgDcApkuwI4885Nnd/M+rjSJVJJOeKA0jusxCaVcH58jP0aixX Q5Hzvxm+HIGoWf+NTOos8kouXrb6J9WJUJiPv6V/bFxgJQ/0zyws8eUkm6ujcEv7FXDw vifRhkHyFT3bbb0bLHMbfy/aiTGSD7pV5emvBVdWkznoe8xCd/du79v3D6RrKo9P3hj3 uXdTgjQc7/IO0f/QsFmVgg5kmG7s24esqRmTRfQmVh/zYv8sQuw2dfoTK5TTTFmIKFf6 V0XPKdffPWz5d3bDqmuBp+2Zaj4zHl1+GyhPXuK/tEFDvR4uX/sBLed1F4qKVPWYWVC8 fo0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701959771; x=1702564571; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=67zKYmsG/lnBx+spYtLneoN2o4qPjs2GIW29SUpfLKY=; b=WDxsnUMklBnAK3WsrN6/LNiUx/VRv9kAvo/uH3+HAykv+QUiatqKK73HQlh6KdCKS7 mpnxxaNJ1VMMDVGsZXDMkYSnHVy432aGnq5Mo/q8PyQxrNfCE7qkEnw38DeXXj/Ek+dQ Zg6OG2m5pLtsovvyqPLPLYvd03/hUERgEq4CO8raYKwTzPUUEccjFQqZCE5bouimA7zq 0cmqRkR2dZifastOhVmQVTv1btRcQcIfIGVidPc+XNTKnzbexHe3AApKXu5uvfRx8big yjyLMc1fEXHsoKlJmbVfv24ZFOJ+me1UqLgAGo8uEii3IPh3kfNxKHoOQr6ywSaLVdDa 73CQ== X-Gm-Message-State: AOJu0Yy1i4iKEC/+zCNnXEk338xnq18K27+4e2me9vRVnMoYPo+s+wrG R+4g2SIurfV7ximfWqLVNMiHqj1BiQ0+FwD9fkcuUQ== X-Google-Smtp-Source: AGHT+IFqaB6WEnHfxWW7RpHIAgGwOCp6aoJOU/T9JymKHB8qKvOculo2KIRZBHcWpNWRg/OqOdKnnA== X-Received: by 2002:a05:600c:502c:b0:40c:256a:489e with SMTP id n44-20020a05600c502c00b0040c256a489emr1153659wmr.124.1701959770841; Thu, 07 Dec 2023 06:36:10 -0800 (PST) Received: from orm.fritz.box ([194.110.145.184]) by smtp.gmail.com with ESMTPSA id v14-20020a05600c444e00b0040b47c53610sm2072570wmn.14.2023.12.07.06.36.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 06:36:10 -0800 (PST) From: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= To: openembedded-core@lists.openembedded.org Cc: Ross Burton , =?utf-8?b?RWlsw61zICdwaWRnZScgTsOt?= =?utf-8?b?IEZobGFubmFnw6Fpbg==?= Subject: [PATCH 1/4] qemurunner: remove unused import Date: Thu, 7 Dec 2023 14:36:04 +0000 Message-Id: <27bcb91d7b8a70d8ebe85b91d89d44d99d729846.1701959631.git.pidge@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 07 Dec 2023 14:36:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/191959 From: Ross Burton Removes unused logging import Signed-off-by: Ross Burton Signed-off-by: Eilís 'pidge' Ní Fhlannagáin --- meta/lib/oeqa/utils/qemurunner.py | 1 - 1 file changed, 1 deletion(-) diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 29fe2719762..ee367078000 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -19,7 +19,6 @@ import errno import string import threading import codecs -import logging import tempfile from collections import defaultdict import importlib From patchwork Thu Dec 7 14:36:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= X-Patchwork-Id: 35857 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 896CAC10F05 for ; Thu, 7 Dec 2023 14:36:18 +0000 (UTC) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mx.groups.io with SMTP id smtpd.web10.85711.1701959773155398541 for ; Thu, 07 Dec 2023 06:36:13 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=vqUAeI//; spf=pass (domain: baylibre.com, ip: 209.85.221.51, mailfrom: pidge@baylibre.com) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-332c46d5988so1039900f8f.1 for ; Thu, 07 Dec 2023 06:36:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1701959771; x=1702564571; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QfiVc2MKaS5cW844ETfhIGlWvofp8nKVnvJPp3prqEU=; b=vqUAeI//eDgr2iXI+Kgbzf9EsRgDDyHLFEamQpYSCynyNzRpBJ1vg3rOvPEEKwIQl0 6PcR+USR3c1anJc2HLCobjrtAc4rGsNSF9updEaQ2onSReSk4lZ6qbBOFuLM/Wg7dw5V PnLRMOAek369fW3wMV9PXfC/pyS9weR9Q9hXq8np9gh72auPsTtNIMy4V95ElCt/soM/ qTrvb6ygBbQsIOu+pt0COXZ1lOaIqLeLkiBkMwYcsQ5Cov7iN/JAVOM0VPS3QLpwxouT 26r6Nteo/E424WziEqUhZwZ6QezvXJSPk38q+jFP2RbxEAeqprNFcjMf8sugDBV6wgwN BCrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701959771; x=1702564571; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QfiVc2MKaS5cW844ETfhIGlWvofp8nKVnvJPp3prqEU=; b=ca5qGx4d3ubZW97cR/ZCIViOB+Df9qSfrIdMNrQsr5RymY/V8D64LjJ4l+B5Zz0xB2 Aoy3YPeV1EbYkSFed3lhukQIcQJsvkgDxhBirllSxHbd1k0HyF/bCiZXNOsokxIKwZS3 1g/GOB9bS+8I6BKQNtf1TNKucmfzklcWXCSyEXYWvStdx7ZczX74UQGS05lXt0A+LpMI QAGp1+4eKmGhONrbXno/dpqCzkszjKHqvzvf+sghU99TYJQItYP6N9wkohORXLlV3yvN TEqZERy9MOUPhgGqysu8Yd6g/WJ8oW9WG+EU5SCEuHKzktq+UpT7fNS/pmvfzrlut3jm Vouw== X-Gm-Message-State: AOJu0YzutlbRIauvchOCkKvPzAtInrU3dBdl9Xda25DXVCn2bbcCW7R/ 5K00DAoKGKtZzwO7GEMC9Esbj02s0A+kl5ZI0yD2Tg== X-Google-Smtp-Source: AGHT+IGNAfonuC8yRVWgijVuwlHTXhgnamMFTtQgIv92WbqqrYr4SEucTfddrIOYd2iS3H6csr8q0w== X-Received: by 2002:a05:600c:c15:b0:40c:2339:9cca with SMTP id fm21-20020a05600c0c1500b0040c23399ccamr1472442wmb.41.1701959771616; Thu, 07 Dec 2023 06:36:11 -0800 (PST) Received: from orm.fritz.box ([194.110.145.184]) by smtp.gmail.com with ESMTPSA id v14-20020a05600c444e00b0040b47c53610sm2072570wmn.14.2023.12.07.06.36.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 06:36:11 -0800 (PST) From: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= To: openembedded-core@lists.openembedded.org Cc: Ross Burton , =?utf-8?b?RWlsw61zICdwaWRnZScgTsOt?= =?utf-8?b?IEZobGFubmFnw6Fpbg==?= Subject: [PATCH 2/4] python3-qemu-qmp: Add recipe Date: Thu, 7 Dec 2023 14:36:05 +0000 Message-Id: <25d25aac54efcb8afe5a6d17f70800b57a0d0a21.1701959631.git.pidge@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 07 Dec 2023 14:36:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/191960 From: Ross Burton Add a recipe for python QEMU Monitor Protocol. This will be needed for qemu screendumps for qemu screendump testing. Signed-off-by: Ross Burton Signed-off-by: Eilís 'pidge' Ní Fhlannagáin --- .../python/python3-qemu-qmp_0.0.2.bb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 meta/recipes-devtools/python/python3-qemu-qmp_0.0.2.bb diff --git a/meta/recipes-devtools/python/python3-qemu-qmp_0.0.2.bb b/meta/recipes-devtools/python/python3-qemu-qmp_0.0.2.bb new file mode 100644 index 00000000000..faa0cc69738 --- /dev/null +++ b/meta/recipes-devtools/python/python3-qemu-qmp_0.0.2.bb @@ -0,0 +1,14 @@ +SUMMARY = "asyncio library for communicating with QEMU Monitor Protocol (QMP) servers" +LICENSE = "LGPLv2+ & GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=4cf66a4984120007c9881cc871cf49db \ + file://LICENSE_GPL2;md5=441c28d2cf86e15a37fa47e15a72fbac" + +SRC_URI[sha256sum] = "c918e9e3ae09abdf70c7ece67637a93ac4583d940bbf48d24ff77987f74f1b8b" + +inherit pypi python_setuptools_build_meta + +PYPI_PACKAGE = "qemu.qmp" + +DEPENDS += "python3-setuptools-scm-native" + +BBCLASSEXTEND = "native nativesdk" From patchwork Thu Dec 7 14:36:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= X-Patchwork-Id: 35855 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 93B6BC10DC3 for ; Thu, 7 Dec 2023 14:36:18 +0000 (UTC) Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by mx.groups.io with SMTP id smtpd.web10.85712.1701959773854172800 for ; Thu, 07 Dec 2023 06:36:14 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=OTuIhJXB; spf=pass (domain: baylibre.com, ip: 209.85.128.41, mailfrom: pidge@baylibre.com) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-40c09f4bea8so11233685e9.1 for ; Thu, 07 Dec 2023 06:36:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1701959772; x=1702564572; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0D995P5tXxmICE12H8lX0ufijPEAuOzHgGQJYBY5Wmo=; b=OTuIhJXBMRJ0lrZ17NBVfWdSa/u4ybcHTV6gGfigfFko5PZJdTprhUw2LUAwH1uyIP 6nUYIx9fBpWUj67PZqTvQUiCah3NhSUIPuyagIR0w/YFMuh2XLK0Sxgy/TFphBpp5ZH1 QLi8uqAObulVAm+9Mpss7FhuF/kbgAi8oIiSRMwgWClW87ykL/a7jzIIRlNVuZQj7cyr vhzjxTwW/qiOXgLXC4PmteLWo2nBgJD5R749IJvhhbotvXY/VomWoKg1Oy/z25XhLvbl zDlGKP/BpWaqBgKDZkvcZompybZeRzkrK93mi/ltbXROcIxWoGm1bYqT48XkWqNgGsDc jdsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701959772; x=1702564572; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0D995P5tXxmICE12H8lX0ufijPEAuOzHgGQJYBY5Wmo=; b=HxXu6Ve55rP/yd6qboqgHLmBJ4/xtrgEqjHwO1KZyiOYGPHFVK0gocVeVM/2wkHizw AG3aXxTWc7GJkMqzWDqY+O0pjcOxqcijSCLIrq1E469W8K0dBUZxwQlDqhkFYxFGsXzx 054T2r2yD2NlFoOdszIK4t6bcx1LPLcJ7VQlhgLRu78N0sqLXL4GtDlSxU61VmY8vRck h3kgBmzfpC7hJ55I1PWB88vooFlEHOROOuZRz7APsyi/GjJDXxOExuxXfLwc+ZtCBYwE 2t6uhiqrzvUHS1BlYBnLc6fd9kNSlm5/ZeK8Vzp4F+qD9lRP+gfHgwGGdt54aa/zg95l s+Gw== X-Gm-Message-State: AOJu0Yyl4FAjBDjNIK7lDbP5f+iYuscd3OphMu1+C/ksXBOoLH/jiS+1 vRDQYda8BQeJqLBLV9VCx9jKkAO4VeLyQWczx6mfBg== X-Google-Smtp-Source: AGHT+IFAtPymCKnUXF8CvGDboNNC0t/ilytVg47fGkoT5XPoFeSrrS3oGwQY9CPmrJeXlsFKdQyy4w== X-Received: by 2002:a05:600c:331b:b0:40b:5e59:da7d with SMTP id q27-20020a05600c331b00b0040b5e59da7dmr1628680wmp.144.1701959772403; Thu, 07 Dec 2023 06:36:12 -0800 (PST) Received: from orm.fritz.box ([194.110.145.184]) by smtp.gmail.com with ESMTPSA id v14-20020a05600c444e00b0040b47c53610sm2072570wmn.14.2023.12.07.06.36.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 06:36:12 -0800 (PST) From: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= To: openembedded-core@lists.openembedded.org Cc: Ross Burton , =?utf-8?b?RWlsw61zICdwaWRnZScgTsOt?= =?utf-8?b?IEZobGFubmFnw6Fpbg==?= Subject: [PATCH 3/4] runqemu: add qmp socket support Date: Thu, 7 Dec 2023 14:36:06 +0000 Message-Id: <1aca04f39524aa1716280c888d99de1ff226b0dc.1701959631.git.pidge@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 07 Dec 2023 14:36:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/191961 From: Ross Burton Add support for qmp sockets and defaults to unix:qmp.sock if unspecified Signed-off-by: Ross Burton Signed-off-by: Eilís 'pidge' Ní Fhlannagáin --- scripts/runqemu | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/runqemu b/scripts/runqemu index 18aeb7f5f0c..6a5a6451daf 100755 --- a/scripts/runqemu +++ b/scripts/runqemu @@ -84,6 +84,7 @@ of the following environment variables (in any order): publicvnc - enable a VNC server open to all hosts audio - enable audio guestagent - enable guest agent communication + qmp= - create a QMP socket (defaults to unix:qmp.sock if unspecified) [*/]ovmf* - OVMF firmware file or base name for booting with UEFI tcpserial= - specify tcp serial port number qemuparams= - specify custom parameters to QEMU @@ -221,6 +222,7 @@ class BaseConfig(object): self.cleaned = False # Files to cleanup after run self.cleanup_files = [] + self.qmp = None self.guest_agent = False self.guest_agent_sockpath = '/tmp/qga.sock' @@ -536,6 +538,10 @@ to your build configuration. self.qemu_opt_script += ' -vnc :0' elif arg == 'guestagent': self.guest_agent = True + elif arg == "qmp": + self.qmp = "unix:qmp.sock" + elif arg.startswith("qmp="): + self.qmp = arg[len('qmp='):] elif arg.startswith('guestagent-sockpath='): self.guest_agent_sockpath = '%s' % arg[len('guestagent-sockpath='):] elif arg.startswith('tcpserial='): @@ -1406,6 +1412,10 @@ to your build configuration. self.qemu_opt += ' -device virtio-serial ' self.qemu_opt += ' -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 ' + def setup_qmp(self): + if self.qmp: + self.qemu_opt += " -qmp %s,server,nowait" % self.qmp + def setup_vga(self): if self.nographic == True: if self.sdl == True: @@ -1547,6 +1557,7 @@ to your build configuration. self.qemu_opt += " -snapshot" self.setup_guest_agent() + self.setup_qmp() self.setup_serial() self.setup_vga() From patchwork Thu Dec 7 14:36:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= X-Patchwork-Id: 35858 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id A779AC46CA0 for ; Thu, 7 Dec 2023 14:36:18 +0000 (UTC) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by mx.groups.io with SMTP id smtpd.web11.85400.1701959775238474505 for ; Thu, 07 Dec 2023 06:36:16 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@baylibre-com.20230601.gappssmtp.com header.s=20230601 header.b=OxqiA8cU; spf=pass (domain: baylibre.com, ip: 209.85.128.45, mailfrom: pidge@baylibre.com) Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-40c0f3a7717so11896155e9.1 for ; Thu, 07 Dec 2023 06:36:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1701959774; x=1702564574; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MY1P7KHG6XNNAe7s0iOr7fvvySv0Ok9AviDrNG58Zqw=; b=OxqiA8cU19hElaX3FHmNmUyNaOti0DIjsowRgmRu1YLiwOPOxz/ljnDGh7tb+vAkiZ LJtqpxh9wWDJsXQ1efR4PvCetzFpDggMAf4HlzJbxaPLRAPebmfvowBDtMnOi6bpgG1b LgtBzhzW/XiqBGVTY5jX2IpcPNgBXmw7vVSkaVnutqb0VKkhAr6v2PP3efe18EvGwL+/ Lis/Sc4QpbDEYC0YkQu015SrrLfl4p3i0PHil60kSlXlMp4iGsMGx9jcf/6uZHCx8Djk kpHaelSkCHlWkyZ9xcr1sidSkL4fqyBVhP8YC29vMTjuY/0ZAXB4XRPk+XnTYAndjZBw 3/tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701959774; x=1702564574; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MY1P7KHG6XNNAe7s0iOr7fvvySv0Ok9AviDrNG58Zqw=; b=onoyA/UI6sFEyZdZFh1rVN1Ff5Qe5Od1B5ZddP4gMRkg2vxEJ3BC808S85JZB/FXnl ZC62piZxk/cEALaMW0V0gD6HLVFY1Gif0Hxb/kyn9162mjuCZBqhU7pEgXEDy0vzmrC7 PcizLDAihcrPPSGrgO9Ehv91q1yJTxamq0wYMOFvKaR/T9Eshq+k37G7NEjHftI7CxzH rfrdmz7Y7YfUktszPAH7DBav1RaaAnyniZnFU1qvVVSjyh7lHDv7jwkLssVI1wHMUyLv 9JL71X8xhfm1Hwc8j8Lrhf91ZEBKXIGqHE2A5L+15o68F1JiTeqQ1tv+z2LBbIwQTB/5 Uzfg== X-Gm-Message-State: AOJu0YzFR8DEj5Td6IOMRWe5KihvAbWGuu5PSN4HcV7PsnpR78leqXDT VFuqZxL0zvscTENrsDzYpGmuIW+3n0PQFa8/T53osg== X-Google-Smtp-Source: AGHT+IEPIeBP0HJOdkjrmBp2MbNthUvrIcYNUQQl2B7oYbphbP8maq5fbu/45JORBXumtcIhN7XyKA== X-Received: by 2002:a05:600c:444e:b0:40b:5e1c:2f9e with SMTP id v14-20020a05600c444e00b0040b5e1c2f9emr834739wmn.46.1701959773371; Thu, 07 Dec 2023 06:36:13 -0800 (PST) Received: from orm.fritz.box ([194.110.145.184]) by smtp.gmail.com with ESMTPSA id v14-20020a05600c444e00b0040b47c53610sm2072570wmn.14.2023.12.07.06.36.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Dec 2023 06:36:12 -0800 (PST) From: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= To: openembedded-core@lists.openembedded.org Cc: =?utf-8?b?RWlsw61zICdwaWRnZScgTsOtIEZobGFubmFnw6Fpbg==?= , Ross Burton Subject: [PATCH 4/4] login.py: Proof of concept for screenshot testcases Date: Thu, 7 Dec 2023 14:36:07 +0000 Message-Id: <1eff2a5204cfdb0015e920562b8d48bbc7a15ac7.1701959631.git.pidge@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 07 Dec 2023 14:36:18 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/191962 This takes the work rburton did on image screenshot testing and expands it. The two caveats here: 1. We expect ImageMagick as a host tool for the time being. There is a question as to do we bring ImageMagick into core for this or do we require meta-oe for these tests. 2. Right now this only works for qemux86-64. Some standardization of screensize/resolution needs to happen with runqemu params for other machines. This test takes a screendump of a qemu image (for now, just core-image-sato for qemux86-64), and compares it to an image we have on record. Some normalisation of the different qemu configs need to happen to be able to support all machines. Example, the qemuarm64 screen size is much larger than the qemux86-64. The image we have on record contains a blanked out clock. We do the same blanking out process for the screenshot, so the images should have zero differences. If they do, we fail. Signed-off-by: Eilís 'pidge' Ní Fhlannagáin Co-authored-by: Ross Burton Co-authored-by: Eilís 'pidge' Ní Fhlannagáin --- .../core-image-sato-qemux86-64.png | Bin 0 -> 46986 bytes meta/lib/oeqa/runtime/cases/login.py | 39 ++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 meta/files/image-tests/core-image-sato-qemux86-64.png create mode 100644 meta/lib/oeqa/runtime/cases/login.py diff --git a/meta/files/image-tests/core-image-sato-qemux86-64.png b/meta/files/image-tests/core-image-sato-qemux86-64.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3e46169dca6d118c003d29a59c59588cee7463 GIT binary patch literal 46986 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

NDN`?&t~ZU0@F1AbiNX7 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