toybox/tests/mv.test
<<
>>
Prefs
   1#!/bin/bash
   2
   3# TODO: needs root to mount tmpfs to test moving across filesystems.
   4# check handling of chattr +i immutable bit
   5# "touch two; chmod -w two; mv one two" shouldn't prompt to delete two if
   6#   one doesn't exist.
   7
   8# Copyright 2013 Robin Mittal <robinmittal.it@gmail.com>
   9# Copyright 2013 Divya Kothari <divya.s.kothari@gmail.com>
  10
  11[ -f testing.sh ] && . testing.sh
  12
  13#testing "name" "command" "result" "infile" "stdin"
  14
  15touch file
  16testing "file to file" \
  17  "mv file file1 && [ ! -e file -a -f file1 ] && echo yes" \
  18  "yes\n" "" ""
  19rm -f file*
  20
  21touch file
  22mkdir dir
  23testing "file to dir" \
  24  "mv file dir && [ ! -e file -a -f dir/file ] && echo yes" \
  25  "yes\n" "" ""
  26rm -rf file* dir*
  27
  28mkdir dir
  29testing "dir to dir" \
  30  "mv dir dir1 && [ ! -e dir -a -d dir1 ] && echo yes" \
  31  "yes\n" "" ""
  32rm -rf dir*
  33
  34mkdir dir1 dir2
  35touch file1 file2 dir1/file3
  36ln -s file1 link1
  37testing "multiple files/dirs to a dir" \
  38  "mv file1 file2 link1 dir1 dir2 &&
  39  [ ! -e file1 -a ! -e file2 -a ! -e link1 -a ! -e dir1 ] &&
  40  [ -f dir2/file1 -a -f dir2/file2 -a -L dir2/link1 -a -d dir2/dir1 ] &&
  41  [ -f dir2/dir1/file3 ] && readlink dir2/link1" \
  42  "file1\n" "" ""
  43rm -rf file* link* dir*
  44
  45dd if=/dev/zero of=file1 seek=10k count=1 >/dev/null 2>&1
  46testing "random file to new file" \
  47  "mv file1 file2 && [ ! -e file1 -a -f file2 ] && stat -c %s file2" \
  48  "5243392\n" "" ""
  49rm -f file*
  50
  51touch file1
  52ln -s file1 link1
  53testing "symlink to new symlink" \
  54  "mv link1 link2 && [ ! -e link1 -a -L link2 ] && readlink link2" \
  55  "file1\n" "" ""
  56unlink tLink2 &>/dev/null
  57rm -f file* link*
  58
  59touch file1
  60ln file1 link1
  61testing "hard link to new hardlink" \
  62  "mv link1 link2 && [ ! -e link1 -a -f link2 -a file1 -ef link2 ] && echo yes" \
  63  "yes\n" "" ""
  64unlink link2 &>/dev/null
  65rm -f file* link*
  66
  67touch file1
  68chmod a-r file1
  69testing "file to unreadable file" \
  70  "mv file1 file2 && [ ! -e file1 -a -f file2 ] && echo yes" \
  71  "yes\n" "" ""
  72rm -f file*
  73
  74touch file1
  75ln file1 link1
  76mkdir dir1
  77testing "file hardlink dir" \
  78  "mv file1 link1 dir1 &&
  79  [ ! -e file1 -a ! -e link1 -a -f dir1/file1 -a -f dir1/link1 ] &&
  80  [ dir1/file1 -ef dir1/link1 ] && echo yes" \
  81  "yes\n" "" ""
  82rm -rf file* link* dir*
  83
  84mkdir -p dir1/dir2 dir3
  85touch dir1/dir2/file1 dir1/dir2/file2
  86testing "dir to new dir" \
  87  "mv dir1/dir2 dir3/new &&
  88  [ ! -e dir1/dir2 -a -d dir3/new -a -f dir3/new/file1 ] &&
  89  [ -f dir3/new/file2 ] && echo yes" \
  90  "yes\n" "" ""
  91rm -rf file* dir*
  92
  93mkdir dir1 dir2
  94testing "dir to existing dir" \
  95  "mv dir1 dir2 && [ ! -e dir1 -a -d dir2/dir1 ] && echo yes" \
  96  "yes\n" "" ""
  97rm -rf dir*
  98
  99# Trailing slash was once throwing: bad 'dir1/dir2/': Resource busy
 100mkdir -p dir1/dir2
 101testing "dir1/dir2 to ." \
 102  "mv dir1/dir2 . && [ ! -e dir1/dir2 -a -d dir2 ] && echo yes" \
 103  "yes\n" "" ""
 104rm -rf dir*
 105mkdir -p dir1/dir2
 106testing "dir1/dir2/ to ." \
 107  "mv dir1/dir2/ . && [ ! -e dir1/dir2 -a -d dir2 ] && echo yes" \
 108  "yes\n" "" ""
 109rm -rf dir*
 110mkdir -p dir1/dir2
 111testing "dir1/dir2/ to ./" \
 112  "mv dir1/dir2/ ./ && [ ! -e dir1/dir2 -a -d dir2 ] && echo yes" \
 113  "yes\n" "" ""
 114rm -rf dir*
 115testing "not/exists/ to ./" \
 116  "mv not/exists/ ./ 2>&1 | grep -o not/exists/" \
 117  "not/exists/\n" "" ""
 118
 119touch file1 file2
 120chmod 400 file1 file2
 121testing "force over unwritable" \
 122  "mv -f file1 file2 && [ ! -e file1 -a -e file2 ] && echo yes" \
 123  "yes\n" "" ""
 124rm -f file*
 125
 126touch file1 file2
 127testing "no clobber (dest exists)" \
 128  "mv -n file1 file2 && [ -e file1 -a -e file2 ] && echo yes"\
 129  "yes\n" "" ""
 130rm -f file*
 131
 132touch file1
 133testing "no clobber (dest doesn't exist)" \
 134  "mv -n file1 new-dest && [ ! -e file1 -a -e new-dest ] && echo yes"\
 135  "yes\n" "" ""
 136rm -f file*
 137
 138touch file1 file2
 139chmod 400 file1 file2
 140testing "over unwritable file only prompts when stdin is a terminal" \
 141  "mv file2 file1 2>/dev/null && [ -e file1 -a ! -e file2 ] && echo yes" \
 142  "yes\n" "" ""
 143rm -f file*
 144
 145touch file1 file2
 146testing "interactive: no stdin" \
 147  "mv -i file2 file1 2>/dev/null && [ -e file1 -a -e file2 ] && echo yes" \
 148  "yes\n" "" ""
 149rm -f file*
 150
 151touch file1 file2
 152testing "interactive: answered YES" \
 153  "mv -i file2 file1 2>/dev/null && [ -e file1 -a ! -e file2 ] && echo yes" \
 154  "yes\n" "" "y\n"
 155rm -f file*
 156
 157touch file1 file2
 158testing "interactive: answered NO" \
 159  "mv -i file2 file1 2>/dev/null && [ -e file1 -a -e file2 ] && echo yes" \
 160  "yes\n" "" "n\n"
 161rm -f file*
 162