#!/bin/bash

# Copyright 2014 Neha Maggu <maggu.neha@gmail.com>

[ -f testing.sh ] && . testing.sh
#testing "name" "command" "result" "infile" "stdin"

# TODO:Option rereadpt not automated in this script 	


# Requires root permissions
if [ "$(id -u)" -ne 0 ]
  then
    echo "SKIPPED: Blockdev (not root)"
    continue 2>/dev/null
    exit
fi

#Identify OS
OS=$(tr -s ' \011' '\012' < /etc/issue | head -n 1)

maj=1
min=1
dev=my
for  each_proc in 0 1 2 3 4
  do
    devname=$dev$maj$min
    mknod $devname b $maj $min
    min=`expr $min + 1`
    blockdev --setrw $devname
done

Blockdev()
{
   for i in 1 2 3 4 5
     do
      if [ $1 -eq 1 ]
        then 
          blockdev --getro my1$i
      elif [ $1 -eq 2 ]
        then 
          blockdev --setro my1$i         
     	  blockdev --getro my1$i
      elif  [ $1 -eq 3 ]
        then 
          blockdev --setrw my1$i
          blockdev --getro my1$i
      elif [ $1 -eq 4 ]
        then 
          blockdev --getss my1$i
      elif [ $1 -eq 5 ]
        then
          blockdev --getbsz my1$i
      elif [ $1 -eq 6 ]
        then
          blockdev --setbsz 4096 my1$i
          blockdev --getbsz my1$i
      elif [ $1 -eq 7 ]
        then                
          blockdev --getsz my1$i
      elif [ $1 -eq 8 ]
        then
          blockdev --getsize64 my1$i
      elif [ $1 -eq 9 ]
        then
          blockdev --flushbufs my1$i 
	  status=$(echo $?)
 	    if [ $status -eq 0 ]
	      then echo 'yes'
            fi
      elif [ $1 -eq 10 ]
        then
          blockdev  --getbsz --setbsz  512 --getbsz my1$i
      fi
    done
}

###Test Scenarios####

testing "Get ReadOnly     -getro"     "Blockdev 1 && echo yes " "0\n0\n0\n0\n0\nyes\n" "" ""

testing "Set ReadOnly     -setro"     "Blockdev 2 && echo yes " "1\n1\n1\n1\n1\nyes\n" "" ""

testing "Set ReadWrite    -setrw"     "Blockdev 3 && echo yes " "0\n0\n0\n0\n0\nyes\n" "" ""

testing "Get SectorSize   -getss"     "Blockdev 4 && echo yes " "512\n512\n512\n512\n512\nyes\n" "" ""

testing "Get BlockSize    -getbsz"    "Blockdev 5 && echo yes " "4096\n4096\n4096\n4096\n4096\nyes\n" "" ""

testing "Set BlockSize    -getbsz"    "Blockdev 6 && echo yes " "4096\n4096\n4096\n4096\n4096\nyes\n" "" ""


if [ "$OS" = "Fedora" ] 
  then 
    testing "Get SizeinSector -getsz"     "Blockdev 7 && echo yes " "32768\n32768\n32768\n32768\n32768\nyes\n" "" ""
    testing "Get SizeinBytes  -getsize64" "Blockdev 8 && echo yes " "16777216\n16777216\n16777216\n16777216\n16777216\nyes\n" "" ""
  else
    testing "Get SizeinSector -getsz"     "Blockdev 7 && echo yes " "131072\n131072\n131072\n131072\n131072\nyes\n" "" ""
    testing "Get SizeinBytes  -getsize64" "Blockdev 8 && echo yes " "67108864\n67108864\n67108864\n67108864\n67108864\nyes\n" "" ""
fi

testing "Flush Buffers    -flushbufs" "Blockdev 9  " "yes\nyes\nyes\nyes\nyes\n" "" "" 

testing "Blockdev - Existing block device" "blockdev --setro /dev/loop0 ;  blockdev --getro /dev/loop0 ; blockdev --setrw /dev/loop0 ; \
  blockdev --getro /dev/loop0  " "1\n0\n" "" ""

testing "Blockdev - Invalid Device " " blockdev --getbsz /dev/looasd0 2> /dev/null " "" "" ""

testing "Blockdev - Invalid Size" "  blockdev --setbsz 2374634 /dev/loop0 2> /dev/null " "" "" "" 

testing "Blockdev - getbsz and setbsz together " "Blockdev 10 && echo yes " "512\n512\n512\n512\n512\nyes\n" "" ""

rm -rf my*

