From patchwork Mon Feb 18 16:21:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Opaniuk X-Patchwork-Id: 1044155 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=linaro.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="hjj4wCh5"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 4438Lh3zmXz9s7h for ; Tue, 19 Feb 2019 03:23:40 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id F2C1EC21F4E; Mon, 18 Feb 2019 16:23:05 +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=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 BBA12C21FA5; Mon, 18 Feb 2019 16:22:18 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E2886C21FCB; Mon, 18 Feb 2019 16:22:16 +0000 (UTC) Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by lists.denx.de (Postfix) with ESMTPS id 4948EC21FA2 for ; Mon, 18 Feb 2019 16:22:10 +0000 (UTC) Received: by mail-lj1-f171.google.com with SMTP id f24-v6so14891056ljk.0 for ; Mon, 18 Feb 2019 08:22:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Dzfy02iReedKweuG4iGVsm7T7fn6HaZLo/H0hMipXD0=; b=hjj4wCh5zpWysYe1dTYn8qRR9cwBt9OaytUFbpKaFAOgqlMkBW8p8cNmhHLvcW5+ST SbFuuFK+Kf5y/wLAO9XeaHR/wyep+GD5aJq5Q0I6dPrbw0eSLpJtwJsKY59YUZdCjP8S JjGk3EHKdEiXDAEUGjwhAXZ27Rr/5rCSNsBC+9SDFSSWZ5p2UEf4hB7GTL8VY0MTRiRi Ksh1/kebOBGU7u+bwlbAy9aQtYtNNbaKt+kwEYTmzqnOl5xubmIYfj5UvSQLYDDAnNqG rF8XwCot9GgQSZ8JiGRUm7eP0lQUYvFaqY3zM3QK8ZvXcvAiYHXEEbgx6+rrLhDVuKE4 MAQA== 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=Dzfy02iReedKweuG4iGVsm7T7fn6HaZLo/H0hMipXD0=; b=FIEms1Bu/dt5Susg0/28pM0KbTq9aGYPOArEuce6B5mAuCW1FlApNsf5KrF38YFmyG 0Thgi8HClKlhAb9Bo2cPFYzkc2eEDIgpbZIW/Rn99GoH+2ledd9XHcu6OaQwlF350IHs Pa8gIFGgJJl3oeCMkal+eczqTmRxLS6sbg+QsG+gCgpdYDxjgw3EYTXfVm4aWUsSX//P bgrsZgmAjKrCZMYWTghNy4lbyRvk8OLMZAj5K4/n8mMeaggimQGS2XkVxVdvhjOgLdw9 zBTJqymAVKW+TOrmLFYGNbbk9z47McodK08Tqw9/luT9pt96asr896IKXnenzyRKnibL 7obw== X-Gm-Message-State: AHQUAubPMjLUzn1hqzPRUz77s/KUtXqlMNIkweXAp70NIPVh4m2ETbs8 UmpkIXpqk5difQawt12SOMeZuhZRH6o= X-Google-Smtp-Source: AHgI3IYCa2hIVIAP+0tlaQ6Lbz34ehSR5J3tqRzJfN08JQzpJ6l86uvgJPtRViHxTVdPcbQvrsQ2iw== X-Received: by 2002:a2e:2c0d:: with SMTP id s13mr1308462ljs.96.1550506929386; Mon, 18 Feb 2019 08:22:09 -0800 (PST) Received: from localhost ([195.238.92.223]) by smtp.gmail.com with ESMTPSA id u10sm3354689lfl.6.2019.02.18.08.22.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 18 Feb 2019 08:22:08 -0800 (PST) From: Igor Opaniuk To: u-boot@lists.denx.de Date: Mon, 18 Feb 2019 18:21:55 +0200 Message-Id: <1550506917-25547-6-git-send-email-igor.opaniuk@linaro.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550506917-25547-1-git-send-email-igor.opaniuk@linaro.org> References: <1550506917-25547-1-git-send-email-igor.opaniuk@linaro.org> Cc: trini@konsulko.com, deymo@google.com, praneeth@ti.com, astrachan@google.com, semen.protsenko@linaro.org Subject: [U-Boot] [PATCH v3 5/7] 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 Reviewed-by: Alistair Strachan Reviewed-by: Sam Protsenko Reviewed-by: Simon Glass --- Changes in v3: None Changes in v2: * Changes related to command renaming (android_ab_select->ab_select). * Assertion condition was clarified. Full command output is controlled. configs/sandbox_defconfig | 2 ++ test/py/tests/test_ab.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 test/py/tests/test_ab.py diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 193e418..31c18ad 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -20,6 +20,7 @@ CONFIG_PRE_CON_BUF_ADDR=0x100000 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 @@ -48,6 +49,7 @@ CONFIG_CMD_SF=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_ab.py b/test/py/tests/test_ab.py new file mode 100644 index 0000000..b90ca87 --- /dev/null +++ b/test/py/tests/test_ab.py @@ -0,0 +1,74 @@ +# 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', '-c 1:misc', persistent) + u_boot_utils.run_and_log(u_boot_console, cmd) + cmd = ('sgdisk', '-l', 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