From patchwork Fri Jul 5 12:37:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Opaniuk X-Patchwork-Id: 1128013 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="jUNeZex5"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45gDvS1T4jz9sN4 for ; Fri, 5 Jul 2019 22:40:04 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id C363FC21E1B; Fri, 5 Jul 2019 12:39:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_MSPIKE_H2, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 28056C21E38; Fri, 5 Jul 2019 12:38:08 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 88009C21DF3; Fri, 5 Jul 2019 12:37:56 +0000 (UTC) Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by lists.denx.de (Postfix) with ESMTPS id 01D82C21E0D for ; Fri, 5 Jul 2019 12:37:53 +0000 (UTC) Received: by mail-wr1-f44.google.com with SMTP id b2so8557582wrx.11 for ; Fri, 05 Jul 2019 05:37:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZK7DDikxzm3vyGNyQnXPrdbxiXT0G2W0Kgn0AhA8v1U=; b=jUNeZex5PJfADT/pDA2PJAWTXTkFh6izorHkJQPRJGGn/yCVLA3GdLzCZCC5zQKmBA s1XvR/MkRErVGbgLeV/kwiq+dv2xsWqlx8oetXykz0lhH6qrppValbmlSKNZVdyEigLd +wllnwUGvADMDMsLWUGzjxj/xNJtTPi7YZ7GTVL6OmEJdVW68+ttOwbZsPMcpIKeG9XS wzCz9D9oJDMCS2hlUpoGPisGs7C+HfuB0z2JzSl0e4xGVYgoE8gRx4Qki5azw9z0AiJ2 EY3+YDNbIsA1s+xld5dZaPoatNfEJIvAyHCyMqxF9jeaB4PTxNLXJgam5eywQn6hH5u/ BpBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZK7DDikxzm3vyGNyQnXPrdbxiXT0G2W0Kgn0AhA8v1U=; b=krvi+sCcNJ3sTxNP3eU2V24ppLZOBeuNCa/JAMMfIYxcQF+O9WyvWCSCG1RqtpsOl0 LNOTwnq6RQRTOebhnKmG0qh+iqrDtD1dXt2AOqr0+jDhV/U2+KFFGY3fCdx48eiLm2L8 ZuqB263D0diqwgl5y89pa9bO36nf7UPT9+te3/dk9d07olQR2qksQaP9AhWriMUf7y0Q T1f4QZx6j4rCvX3j2Ht5SNR434qmKfclK8JFOOzCbIu7uss/IlLv5/Z2+qnO93fflWu7 LgcGU2qWH6FT1gnZPeSXBWpuWcJNQujeqE/6T+NaZ7ksjtLER7vYhlscU7MzBgIMdsgC okrA== X-Gm-Message-State: APjAAAWEy7QQpzv65B8nOedOsVpwWIL4m2pksxkk9V0YpnsqXnT4NfyP cgmGg16zt/h0FAtD8ecALeuOYMx5 X-Google-Smtp-Source: APXvYqwbvVCLzmsAcUT3GKn0PehjdQTie7YwdxDQFxCWdjGIocEerus1dRrBnjrD3VlqoCxVV+zCcw== X-Received: by 2002:adf:8061:: with SMTP id 88mr3321629wrk.127.1562330272294; Fri, 05 Jul 2019 05:37:52 -0700 (PDT) Received: from localhost ([194.105.145.90]) by smtp.gmail.com with ESMTPSA id t24sm4328597wmj.14.2019.07.05.05.37.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 05 Jul 2019 05:37:51 -0700 (PDT) From: Igor Opaniuk To: u-boot@lists.denx.de Date: Fri, 5 Jul 2019 15:37:34 +0300 Message-Id: <20190705123736.3498-5-igor.opaniuk@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190705123736.3498-1-igor.opaniuk@gmail.com> References: <20190705123736.3498-1-igor.opaniuk@gmail.com> Cc: Alex Deymo , Praneeth Bajjuri , astrachan@google.com, Ruslan Trofymenko , Eugeniu Rosca Subject: [U-Boot] [PATCH v5 4/6] test/py: Add base test case for A/B updates X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Ruslan Trofymenko Add sandbox test for 'ab_select' command. Test: ./test/py/test.py --bd sandbox --build -k test_ab Signed-off-by: Ruslan Trofymenko Signed-off-by: Igor Opaniuk Signed-off-by: Sam Protsenko Reviewed-by: Alistair Strachan Reviewed-by: Sam Protsenko Reviewed-by: Simon Glass --- configs/sandbox_defconfig | 2 + test/py/tests/test_android/test_ab.py | 75 +++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 test/py/tests/test_android/test_ab.py diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 6894262b89..fd51a75b01 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -20,6 +20,7 @@ CONFIG_PRE_CON_BUF_ADDR=0xf0000 CONFIG_LOG_MAX_LEVEL=6 CONFIG_LOG_ERROR_RETURN=y CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_ANDROID_AB=y CONFIG_CMD_CPU=y CONFIG_CMD_LICENSE=y CONFIG_CMD_BOOTZ=y @@ -47,6 +48,7 @@ CONFIG_CMD_REMOTEPROC=y CONFIG_CMD_SPI=y CONFIG_CMD_USB=y CONFIG_CMD_AXI=y +CONFIG_CMD_AB_SELECT=y CONFIG_CMD_TFTPPUT=y CONFIG_CMD_TFTPSRV=y CONFIG_CMD_RARP=y diff --git a/test/py/tests/test_android/test_ab.py b/test/py/tests/test_android/test_ab.py new file mode 100644 index 0000000000..c79cb07fda --- /dev/null +++ b/test/py/tests/test_android/test_ab.py @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: GPL-2.0 +# (C) Copyright 2018 Texas Instruments, + +# Test A/B update commands. + +import os +import pytest +import u_boot_utils + +class ABTestDiskImage(object): + """Disk Image used by the A/B tests.""" + + def __init__(self, u_boot_console): + """Initialize a new ABTestDiskImage object. + + Args: + u_boot_console: A U-Boot console. + + Returns: + Nothing. + """ + + filename = 'test_ab_disk_image.bin' + + persistent = u_boot_console.config.persistent_data_dir + '/' + filename + self.path = u_boot_console.config.result_dir + '/' + filename + + with u_boot_utils.persistent_file_helper(u_boot_console.log, persistent): + if os.path.exists(persistent): + u_boot_console.log.action('Disk image file ' + persistent + + ' already exists') + else: + u_boot_console.log.action('Generating ' + persistent) + fd = os.open(persistent, os.O_RDWR | os.O_CREAT) + os.ftruncate(fd, 524288) + os.close(fd) + cmd = ('sgdisk', persistent) + u_boot_utils.run_and_log(u_boot_console, cmd) + + cmd = ('sgdisk', '--new=1:64:512', '--change-name=1:misc', + persistent) + u_boot_utils.run_and_log(u_boot_console, cmd) + cmd = ('sgdisk', '--load-backup=' + persistent) + u_boot_utils.run_and_log(u_boot_console, cmd) + + cmd = ('cp', persistent, self.path) + u_boot_utils.run_and_log(u_boot_console, cmd) + +di = None +@pytest.fixture(scope='function') +def ab_disk_image(u_boot_console): + global di + if not di: + di = ABTestDiskImage(u_boot_console) + return di + +@pytest.mark.boardspec('sandbox') +@pytest.mark.buildconfigspec('android_ab') +@pytest.mark.buildconfigspec('cmd_ab_select') +@pytest.mark.requiredtool('sgdisk') +def test_ab(ab_disk_image, u_boot_console): + """Test the 'ab_select' command.""" + + u_boot_console.run_command('host bind 0 ' + ab_disk_image.path) + + output = u_boot_console.run_command('ab_select slot_name host 0#misc') + assert 're-initializing A/B metadata' in output + assert 'Attempting slot a, tries remaining 7' in output + output = u_boot_console.run_command('printenv slot_name') + assert 'slot_name=a' in output + + output = u_boot_console.run_command('ab_select slot_name host 0:1') + assert 'Attempting slot b, tries remaining 7' in output + output = u_boot_console.run_command('printenv slot_name') + assert 'slot_name=b' in output