view scripts/test/chmod.test @ 1456:5d51c5d6df72 draft

chmod testsuite and link testsuite. Chmod ? In this testsuite after change file mode bits, we are comparing file mode with expected ones. One additional "." is coming with modes (actual result). That?s why test cases are getting failed. This patch will remove additional "." from actual result. Link ? Added more test cases.
author Divya Kothari <divya.s.kothari@gmail.com>
date Wed, 03 Sep 2014 13:32:32 -0500
parents 6c54196fce62
children
line wrap: on
line source

#!/bin/bash

# Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com>
# Copyright 2013 Robin Mittal <robinmittal.it@gmail.com>

#testing "name" "command" "result" "infile" "stdin"

PERM="---""--x""-w-""-wx""r--""r-x""rw-""rwx"

num2perm()
{
  for i in 0 1 2
  do
    num=${1:$i:1}
    printf "%s" ${PERM:$(($num*3)):3}
  done
  echo
}

# Creating test files to test chmod command
mkdir dir
touch file

# We don't need to test all 511 permissions
for u in 0 1 2 3 4 5 6 7
do
  for g in 0 3 6
  do
    for o in 0 7
    do
      if [ "$type" == file ]
      then
        type=dir
        rm -rf "./$type" && mkdir $type
        DASH=d
      else
        type=file
        rm -f "./$type" && touch $type
        DASH=-
      fi
      DASHES=$(num2perm $u$g$o)
      testing "chmod $u$g$o $type" "chmod $u$g$o $type && 
        ls -ld $type | cut -d' ' -f 1 | cut -d. -f 1" "$DASH$DASHES\n" "" ""
    done
  done
done

rm -rf dir file && mkdir dir && touch file
testing "chmod 750 dir 640 file" \
  "chmod 750 dir 640 file 2>/dev/null ||
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-x---\n-rwxr-x---\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod 666 dir file" \
  "chmod 666 dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drw-rw-rw-\n-rw-rw-rw-\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod 765 *" "chmod 765 * &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxrw-r-x\n-rwxrw-r-x\n" "" ""

##### u,g,o,a=r,w,x
rm -rf dir file && mkdir dir && touch file
testing "chmod u=r dir file" "chmod u=r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "dr--r-xr-x\n-r--r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u=w dir file" "chmod u=w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d-w-r-xr-x\n--w-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u=x dir file" "chmod u=x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d--xr-xr-x\n---xr--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u+r dir file" "chmod u+r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u+w dir file" "chmod u+w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u+x dir file" "chmod u+x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rwxr--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u-r dir file" "chmod u-r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d-wxr-xr-x\n--w-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u-w dir file" "chmod u-w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "dr-xr-xr-x\n-r--r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod u-x dir file" "chmod u-x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drw-r-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g=r dir file" "chmod g=r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr--r-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g=w dir file" "chmod g=w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwx-w-r-x\n-rw--w-r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g=x dir file" "chmod g=x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwx--xr-x\n-rw---xr--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g+r dir file" "chmod g+r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g+w dir file" "chmod g+w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxrwxr-x\n-rw-rw-r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g+x dir file" "chmod g+x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r-xr--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g-r dir file" "chmod g-r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwx--xr-x\n-rw----r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g-w dir file" "chmod g-w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod g-x dir file" "chmod g-x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr--r-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o=r dir file" "chmod o=r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr--\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o=w dir file" "chmod o=w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-x-w-\n-rw-r---w-\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o=x dir file" "chmod o=x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-x--x\n-rw-r----x\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o+r dir file" "chmod o+r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o+w dir file" "chmod o+w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xrwx\n-rw-r--rw-\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o+x dir file" "chmod o+x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r-x\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o-r dir file" "chmod o-r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-x--x\n-rw-r-----\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o-w dir file" "chmod o-w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod o-x dir file" "chmod o-x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr--\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a=r dir file" "chmod a=r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "dr--r--r--\n-r--r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a=w dir file" "chmod a=w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d-w--w--w-\n--w--w--w-\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a=x dir file" "chmod a=x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d--x--x--x\n---x--x--x\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a+r dir file" "chmod a+r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a+w dir file" "chmod a+w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxrwxrwx\n-rw-rw-rw-\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a+x dir file" "chmod a+x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rwxr-xr-x\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a-r dir file" "chmod a-r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d-wx--x--x\n--w-------\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a-w dir file" "chmod a-w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "dr-xr-xr-x\n-r--r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod a-x dir file" "chmod a-x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drw-r--r--\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod =r dir file" "chmod =r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "dr--r--r--\n-r--r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod =w dir file" "chmod =w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d-w-------\n--w-------\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod =x dir file" "chmod =x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d--x--x--x\n---x--x--x\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod +r dir file" "chmod +r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod +w dir file" "chmod +w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rw-r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod +x dir file" "chmod +x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drwxr-xr-x\n-rwxr-xr-x\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod -r dir file" "chmod -r dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "d-wx--x--x\n--w-------\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod -w dir file" "chmod -w dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "dr-xr-xr-x\n-r--r--r--\n" "" ""

rm -rf dir file && mkdir dir && touch file
testing "chmod -x dir file" "chmod -x dir file &&
   ls -ld dir file | cut -d' ' -f 1 | cut -d. -f 1" "drw-r--r--\n-rw-r--r--\n" "" ""

# Removing test files for cleanup purpose
rm -rf dir file