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