From patchwork Thu Jun 2 07:22:50 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qu Wenruo X-Patchwork-Id: 9149385 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 2AEA460467 for ; Thu, 2 Jun 2016 07:23:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1859A20499 for ; Thu, 2 Jun 2016 07:23:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0A30E2823A; Thu, 2 Jun 2016 07:23:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00, NORMAL_HTTP_TO_IP, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 370C820499 for ; Thu, 2 Jun 2016 07:23:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751700AbcFBHXV (ORCPT ); Thu, 2 Jun 2016 03:23:21 -0400 Received: from cn.fujitsu.com ([222.73.24.84]:1184 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1750938AbcFBHXE (ORCPT ); Thu, 2 Jun 2016 03:23:04 -0400 X-IronPort-AV: E=Sophos;i="5.20,367,1444665600"; d="scan'208";a="581124" Received: from unknown (HELO cn.fujitsu.com) ([10.167.250.3]) by song.cn.fujitsu.com with ESMTP; 02 Jun 2016 15:22:54 +0800 Received: from adam-work.localdomain (unknown [10.167.226.34]) by cn.fujitsu.com (Postfix) with ESMTP id E9AB04056404; Thu, 2 Jun 2016 15:22:50 +0800 (CST) From: Qu Wenruo To: dsterba@suse.com, linux-btrfs@vger.kernel.org Subject: [PATCH 2/2] btrfs-progs: convert-test: Add specially built test cases for new convert Date: Thu, 2 Jun 2016 15:22:50 +0800 Message-Id: <20160602072250.25214-2-quwenruo@cn.fujitsu.com> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20160602072250.25214-1-quwenruo@cn.fujitsu.com> References: <20160602072250.25214-1-quwenruo@cn.fujitsu.com> MIME-Version: 1.0 X-yoursite-MailScanner-ID: E9AB04056404.AE279 X-yoursite-MailScanner: Found to be clean X-yoursite-MailScanner-From: quwenruo@cn.fujitsu.com Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP New convert introduced simpler chunk/extent allocation algorithm, at the cost of complex backup superblock migration codes. Use specially built ext2 images to test if btrfs-convert can convert and rollback images without problem. All these special ext2 image have blocks across 2nd btrfs backup super block. The naming is like the following: |<------superblock migration range----->| 64M 64M + 64K |-Data--|-Data--|/Hole//|-Data--|/Hole//|-Data--|--Data--| = drdhdhdrd These test cases should check all typical layouts and make sure new convert works. Signed-off-by: Qu Wenruo --- tests/common | 8 ++++ tests/convert-tests.sh | 30 ++++++++++++++ .../drdhdhdrd.e2image.raw.xz | Bin 0 -> 84564 bytes .../drdhdhrh.e2image.raw.xz | Bin 0 -> 84568 bytes .../hrhdhdrd.e2image.raw.xz | Bin 0 -> 84556 bytes .../hrhdhrh.e2image.raw.xz | Bin 0 -> 84568 bytes .../001-ext-backup-super-range/test.sh | 43 +++++++++++++++++++++ 7 files changed, 81 insertions(+) create mode 100644 tests/convert-tests/001-ext-backup-super-range/drdhdhdrd.e2image.raw.xz create mode 100644 tests/convert-tests/001-ext-backup-super-range/drdhdhrh.e2image.raw.xz create mode 100644 tests/convert-tests/001-ext-backup-super-range/hrhdhdrd.e2image.raw.xz create mode 100644 tests/convert-tests/001-ext-backup-super-range/hrhdhrh.e2image.raw.xz create mode 100755 tests/convert-tests/001-ext-backup-super-range/test.sh diff --git a/tests/common b/tests/common index 91682ef..fed9ede 100644 --- a/tests/common +++ b/tests/common @@ -94,6 +94,14 @@ check_prereq() fi } +check_global_prereq() +{ + which $1 &> /dev/null + if [ $? -ne 0 ]; then + _fail "Failed system wide prerequisities: $1"; + fi +} + check_image() { local image diff --git a/tests/convert-tests.sh b/tests/convert-tests.sh index 06d8419..39115b3 100755 --- a/tests/convert-tests.sh +++ b/tests/convert-tests.sh @@ -15,6 +15,11 @@ DATASET_SIZE=50 source $TOP/tests/common +# Allow child test to use $TOP and $RESULTS +export TOP +export RESULTS +export LANG + rm -f $RESULTS setup_root_helper @@ -22,6 +27,26 @@ prepare_test_dev 512M CHECKSUMTMP=$(mktemp --tmpdir btrfs-progs-convert.XXXXXXXXXX) +run_one_test() { + local testname + + testname="$1" + echo " [TEST/conv] $testname" + cd $testname + echo "=== Entering $testname" >> $RESULTS + if [ -x test.sh ]; then + # Difference convert test case needs different + # tools to restore image, so only support custom + # test scripts + ./test.sh + if [ $? -ne 0 ]; then + _fail "test failed for case $(basename $testname)" + fi + else + _fail "custom test script not found" + fi +} + generate_dataset() { dataset_type="$1" @@ -163,4 +188,9 @@ for feature in '' 'extref' 'skinny-metadata' 'no-holes'; do convert_test "$feature" "ext4 64k nodesize" 65536 mke2fs -t ext4 -b 4096 done +for i in $(find $TOP/tests/convert-tests -maxdepth 1 -mindepth 1 -type d \ + ${TEST:+-name "$TEST"} | sort) +do + run_one_test "$i" +done rm $CHECKSUMTMP diff --git a/tests/convert-tests/001-ext-backup-super-range/drdhdhdrd.e2image.raw.xz b/tests/convert-tests/001-ext-backup-super-range/drdhdhdrd.e2image.raw.xz new file mode 100644 index 0000000000000000000000000000000000000000..73e2309c4bd6991424962c3bc53ad74171b52268 GIT binary patch literal 84564 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 G{l5S!=1U#` literal 0 HcmV?d00001 diff --git a/tests/convert-tests/001-ext-backup-super-range/test.sh b/tests/convert-tests/001-ext-backup-super-range/test.sh new file mode 100755 index 0000000..fa41cca --- /dev/null +++ b/tests/convert-tests/001-ext-backup-super-range/test.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Specially created e2image dump to test backup superblock migration for +# new convert. +# These images will cause the following problem if convert doesn't handle +# backup superblock well: +# 1) Assert while building free space tree +# 2) Error copying inodes +# 3) Discontinuous file extents after convert +# 4) Overlap file extents +# 5) Unable to rollback + +source $TOP/tests/common + +check_prereq btrfs-convert +check_prereq btrfs +check_prereq btrfs-show-super +check_global_prereq e2fsck +check_global_prereq xzcat + +prepare_test_dev 512M +for src in $(find . -iname "*.e2image.raw.xz"); do + image=${src%%.xz} + rm $image -f &> /dev/null + + xz --decompress --keep $src || + _fail "failed to decompress image $image" >&2 + + run_check $SUDO_HELPER e2fsck -n -f $image + run_check $SUDO_HELPER $TOP/btrfs-convert $image + run_check $SUDO_HELPER $TOP/btrfs check $image + run_check $SUDO_HELPER $TOP/btrfs-show-super $image + + run_check $SUDO_HELPER mount -o loop $image $TEST_MNT + run_check $SUDO_HELPER e2fsck -n -f $TEST_MNT/ext2_saved/image + run_check $SUDO_HELPER umount $TEST_MNT + + run_check $SUDO_HELPER $TOP/btrfs check $image + run_check $SUDO_HELPER $TOP/btrfs-convert -r $image + run_check $SUDO_HELPER e2fsck -n -f $image + rm $image -f +done +