busybox/util-linux/mkfs_ext2_test.sh
<<
>>
Prefs
   1#!/bin/sh
   2
   3# Disabling features we do not match exactly:
   4system_mke2fs='/sbin/mke2fs -O ^resize_inode'
   5bbox_mke2fs='./busybox mke2fs'
   6
   7gen_image() { # params: mke2fs_invocation image_name
   8    >$2
   9    dd seek=$((kilobytes-1)) bs=1K count=1 </dev/zero of=$2 >/dev/null 2>&1 || exit 1
  10    $1 -F $2 $kilobytes >$2.raw_out 2>&1 || return 1
  11    cat $2.raw_out \
  12    | grep -v '^mke2fs [0-9]*\.[0-9]*\.[0-9]* ' \
  13    | grep -v '^Maximum filesystem' \
  14    | grep -v '^Writing inode tables' \
  15    | grep -v '^Writing superblocks and filesystem accounting information' \
  16    | grep -v '^This filesystem will be automatically checked every' \
  17    | grep -v '^180 days, whichever comes first' \
  18    | sed 's/blocks* unused./blocks unused/' \
  19    | sed 's/block groups*/block groups/' \
  20    | sed 's/ *$//' \
  21    | sed 's/blocks (.*%) reserved/blocks reserved/' \
  22    | grep -v '^$' \
  23    >$2.out
  24}
  25
  26test_mke2fs() {
  27    echo Testing $kilobytes
  28
  29    gen_image "$system_mke2fs" image_std || return 1
  30    gen_image "$bbox_mke2fs"   image_bb  || return 1
  31
  32    diff -ua image_bb.out image_std.out >image.out.diff || {
  33        cat image.out.diff
  34        return 1
  35    }
  36
  37    e2fsck -f -n image_bb >image_bb_e2fsck.out 2>&1 || {
  38        echo "e2fsck error on image_bb"
  39        cat image_bb_e2fsck.out
  40        exit 1
  41    }
  42}
  43
  44# -:bbox +:standard
  45
  46# kilobytes=60 is the minimal allowed size
  47kilobytes=60
  48while true; do
  49    test_mke2fs || exit 1
  50    kilobytes=$((kilobytes+1))
  51    test $kilobytes = 200 && break
  52done
  53
  54# Transition from one block group to two
  55# fails in [8378..8410] range unless -O ^resize_inode
  56kilobytes=$((1 * 8*1024 - 50))
  57while true; do
  58    test_mke2fs || exit 1
  59    kilobytes=$((kilobytes+1))
  60    test $kilobytes = $((1 * 8*1024 + 300)) && break
  61done
  62
  63# Transition from 2 block groups to 3
  64# works
  65kilobytes=$((2 * 8*1024 - 50))
  66while true; do
  67    test_mke2fs || exit 1
  68    kilobytes=$((kilobytes+1))
  69    test $kilobytes = $((2 * 8*1024 + 400)) && break
  70done
  71
  72# Transition from 3 block groups to 4
  73# fails in [24825..24922] range unless -O ^resize_inode
  74kilobytes=$((3 * 8*1024 - 50))
  75while true; do
  76    test_mke2fs || exit 1
  77    kilobytes=$((kilobytes+1))
  78    test $kilobytes = $((3 * 8*1024 + 500)) && break
  79done
  80
  81# Transition from 4 block groups to 5
  82# works
  83kilobytes=$((4 * 8*1024 - 50))
  84while true; do
  85    test_mke2fs || exit 1
  86    kilobytes=$((kilobytes+1))
  87    test $kilobytes = $((4 * 8*1024 + 600)) && break
  88done
  89
  90# Transition from 5 block groups to 6
  91# fails in [41230..41391] range unless -O ^resize_inode
  92kilobytes=$((5 * 8*1024 - 50))
  93while true; do
  94    test_mke2fs || exit 1
  95    kilobytes=$((kilobytes+1))
  96    test $kilobytes = $((5 * 8*1024 + 700)) && break
  97done
  98exit
  99
 100# Random sizes
 101while true; do
 102    kilobytes=$(( (RANDOM*RANDOM) % 5000000 + 60))
 103    test_mke2fs || exit 1
 104done
 105