| Index: rootdev_test.sh
|
| diff --git a/rootdev_test.sh b/rootdev_test.sh
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..8c188c30c4fcfed30e9b08a1b7f7a63a69150761
|
| --- /dev/null
|
| +++ b/rootdev_test.sh
|
| @@ -0,0 +1,291 @@
|
| +#!/bin/sh
|
| +# Copyright (C) 2010 The Chromium OS Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +#
|
| +# Simple functional test harness for rootdev
|
| +# TODO(wad) rootdev should be rewritten in C++ and gmocked.
|
| +
|
| +set -u
|
| +
|
| +warn () {
|
| + echo "WARN: $@" 1>&2
|
| +}
|
| +
|
| +error () {
|
| + echo "ERROR: $@" 1>&2
|
| + exit 1
|
| +}
|
| +
|
| +PASS_COUNT=0
|
| +pass () {
|
| + echo "PASS:$1" 1>&2
|
| + PASS_COUNT=$((PASS_COUNT + 1))
|
| + return 0
|
| +}
|
| +
|
| +FAIL_COUNT=0
|
| +fail () {
|
| + echo "FAIL:$1" 1>&2
|
| + FAIL_COUNT=$((FAIL_COUNT + 1))
|
| + return 0
|
| +}
|
| +
|
| +WORKDIR=
|
| +cleanup () {
|
| + if [ -n "$WORKDIR" ]; then
|
| + rm -rf "$WORKDIR"
|
| + fi
|
| + trap - EXIT
|
| +}
|
| +
|
| +setup () {
|
| + WORKDIR=$(mktemp -d rootdev_test.XXXXXXX)
|
| + if [ ! -d "$WORKDIR" ]; then
|
| + error "Failed to create temporary work dir"
|
| + fi
|
| + trap cleanup EXIT
|
| +}
|
| +
|
| +run_test () {
|
| + setup
|
| + echo "RUN:$1" 1>&2
|
| + eval $1
|
| + ret=$?
|
| + cleanup
|
| + if [ $ret -eq 0 ]; then
|
| + pass $1
|
| + else
|
| + fail $1
|
| + fi
|
| +}
|
| +
|
| +expect () {
|
| + cond="$1"
|
| + eval test $1
|
| + if [ $? -ne 0 ]; then
|
| + warn "expect: $1"
|
| + return 1
|
| + fi
|
| + return 0
|
| +}
|
| +
|
| +if [ ! -e ./rootdev ]; then
|
| + error "rootdev must be in the cwd"
|
| +fi
|
| +
|
| +if [ "$USER" != "root" ]; then
|
| + error "Must be run as root to use mknod ($USER)"
|
| +fi
|
| +
|
| +t00_bad_sys_dir () {
|
| + out=$(./rootdev --block $WORKDIR 2>/dev/null)
|
| + expect "$? -ne 0" || return 1
|
| + expect "-z '$out'" || return 1
|
| +}
|
| +run_test t00_bad_sys_dir
|
| +
|
| +h00_setup_sda_tree() {
|
| + local block=$1
|
| + local dev=$2
|
| + mkdir -p $block
|
| + mkdir -p $dev
|
| + mkdir -p $block/sda/sda1
|
| + mkdir -p $block/sda/sda2
|
| + echo "10:0" > $block/sda/dev
|
| + echo "10:1" > $block/sda/sda1/dev
|
| + echo "10:2" > $block/sda/sda2/dev
|
| + mknod $dev/sda1 b 10 1
|
| + mknod $dev/sda2 b 10 2
|
| + mknod $dev/sda b 10 0
|
| +}
|
| +
|
| +t01_sys_dev_match () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| +
|
| + out=$(./rootdev --dev $dev --block $block --major 10 --minor 1 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda1' = '$out'" || return 1
|
| +}
|
| +run_test t01_sys_dev_match
|
| +
|
| +t02_sys_dev_match_block () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| +
|
| + out=$(./rootdev --dev $dev --block $block --major 10 --minor 0 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda' = '$out'" || return 1
|
| +}
|
| +run_test t02_sys_dev_match_block
|
| +
|
| +t03_sys_dev_match_block_no_dev () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + rm $dev/sda
|
| +
|
| + out=$(./rootdev --dev $dev --block $block --major 10 --minor 0 2>/dev/null)
|
| + expect "$? -eq 1" || return 1
|
| + expect "'$dev/sda' = '$out'" || return 1
|
| +}
|
| +run_test t03_sys_dev_match_block_no_dev
|
| +
|
| +t04_sys_dev_match_block_no_dev_ignore () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + rm $dev/sda
|
| +
|
| + out=$(./rootdev -i --dev $dev --block $block --major 10 --minor 0 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda' = '$out'" || return 1
|
| +}
|
| +run_test t04_sys_dev_match_block_no_dev_ignore
|
| +
|
| +
|
| +h01_setup_dm_tree() {
|
| + local block=$1
|
| + local dev=$2
|
| + mkdir -p $block
|
| + mkdir -p $dev
|
| + mkdir -p $block/dm-0
|
| + mkdir -p $block/dm-0/slaves/sda1
|
| + echo "254:0" > $block/dm-0/dev
|
| + echo "10:1" > $block/dm-0/slaves/sda1/dev
|
| + mknod $dev/dm-0 b 254 0
|
| +}
|
| +
|
| +t05_match_dm () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + h01_setup_dm_tree $block $dev
|
| +
|
| + out=$(./rootdev --dev $dev --block $block --major 254 --minor 0 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/dm-0' = '$out'" || return 1
|
| +}
|
| +run_test t05_match_dm
|
| +
|
| +t06_match_dm_slave () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + h01_setup_dm_tree $block $dev
|
| +
|
| + out=$(./rootdev -s --dev $dev --block $block --major 254 --minor 0 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda1' = '$out'" || return 1
|
| +}
|
| +run_test t06_match_dm_slave
|
| +
|
| +t07_safe_fail_on_no_slave () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + h01_setup_dm_tree $block $dev
|
| +
|
| + out=$(./rootdev -s --dev $dev --block $block --major 10 --minor 1 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda1' = '$out'" || return 1
|
| +}
|
| +run_test t07_safe_fail_on_no_slave
|
| +
|
| +t08_safe_fail_on_no_slave_dev () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + h01_setup_dm_tree $block $dev
|
| + # If the matching dev node is missing, an error code will be returned
|
| + # but the path will still represent the slave.
|
| + rm $dev/sda1
|
| +
|
| + out=$(./rootdev -s --dev $dev --block $block --major 254 --minor 0 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 1" || return 1
|
| + expect "'$dev/sda1' = '$out'" || return 1
|
| +}
|
| +run_test t08_safe_fail_on_no_slave_dev
|
| +
|
| +t09_safe_fail_on_no_slave_dev_ignore () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + h01_setup_dm_tree $block $dev
|
| + # If the matching dev node is missing, an error code will be returned
|
| + # but the path will still represent the slave.
|
| + rm $dev/sda1
|
| +
|
| + out=$(./rootdev -i -s --dev $dev --block $block --major 254 --minor 0 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda1' = '$out'" || return 1
|
| +}
|
| +run_test t09_safe_fail_on_no_slave_dev_ignore
|
| +
|
| +h02_setup_mmc_tree() {
|
| + local block=$1
|
| + local dev=$2
|
| + mkdir -p $block
|
| + mkdir -p $dev
|
| + mkdir -p $block/mmcblk0/mmcblk0p1
|
| + mkdir -p $block/mmcblk0/mmcblk0p2
|
| + echo "11:0" > $block/mmcblk0/dev
|
| + echo "11:1" > $block/mmcblk0/mmcblk0p1/dev
|
| + echo "11:2" > $block/mmcblk0/mmcblk0p2/dev
|
| + mknod $dev/mmcblk0 b 11 0
|
| + mknod $dev/mmcblk0p1 b 11 1
|
| + mknod $dev/mmcblk0p2 b 11 2
|
| +}
|
| +
|
| +t10_mmcdev () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h02_setup_mmc_tree $block $dev
|
| + out=$(./rootdev --dev $dev --block $block --major 11 --minor 2 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/mmcblk0p2' = '$out'" || return 1
|
| +}
|
| +run_test t10_mmcdev
|
| +
|
| +t11_mmcdev_strip () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h02_setup_mmc_tree $block $dev
|
| + out=$(./rootdev -d --dev $dev --block $block --major 11 --minor 2 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/mmcblk0' = '$out'" || return 1
|
| +}
|
| +run_test t11_mmcdev_strip
|
| +
|
| +t12_sda_strip () {
|
| + local block=$WORKDIR/sys/block
|
| + local dev=$WORKDIR/dev
|
| + h00_setup_sda_tree $block $dev
|
| + out=$(./rootdev -d --dev $dev --block $block --major 10 --minor 2 \
|
| + 2>/dev/null)
|
| + expect "$? -eq 0" || return 1
|
| + expect "'$dev/sda' = '$out'" || return 1
|
| +}
|
| +run_test t12_sda_strip
|
| +
|
| +# TODO(wad) add node creation tests
|
| +
|
| +TEST_COUNT=$((PASS_COUNT + FAIL_COUNT))
|
| +
|
| +echo "----"
|
| +echo "Test passed: $PASS_COUNT / $TEST_COUNT"
|
| +echo "Test failed: $FAIL_COUNT / $TEST_COUNT"
|
| +
|
| +if [ $FAIL_COUNT -ne 0 ]; then
|
| + exit 1
|
| +fi
|
|
|