xref: /aosp_15_r20/external/toybox/tests/ln.test (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash
2*cf5a6c84SAndroid Build Coastguard Worker
3*cf5a6c84SAndroid Build Coastguard Worker# Copyright 2013 Robin Mittal <[email protected]>
4*cf5a6c84SAndroid Build Coastguard Worker# Copyright 2013 Divya Kothari <[email protected]>
5*cf5a6c84SAndroid Build Coastguard Worker
6*cf5a6c84SAndroid Build Coastguard Worker[ -f testing.sh ] && . testing.sh
7*cf5a6c84SAndroid Build Coastguard Worker
8*cf5a6c84SAndroid Build Coastguard Worker#testing "name" "command" "result" "infile" "stdin"
9*cf5a6c84SAndroid Build Coastguard Worker#set -x
10*cf5a6c84SAndroid Build Coastguard Worker
11*cf5a6c84SAndroid Build Coastguard Workerecho file1 > file
12*cf5a6c84SAndroid Build Coastguard Workertesting "create_hardlink" "ln file hlink && [ file -ef hlink ] &&
13*cf5a6c84SAndroid Build Coastguard Worker          echo 'yes'" "yes\n" "" ""
14*cf5a6c84SAndroid Build Coastguard Workertesting "create_softlink" "ln -s file slink && [ -L slink ] &&
15*cf5a6c84SAndroid Build Coastguard Worker          readlink slink" "file\n" "" ""
16*cf5a6c84SAndroid Build Coastguard Workerrm slink hlink
17*cf5a6c84SAndroid Build Coastguard Worker
18*cf5a6c84SAndroid Build Coastguard Workerecho hlink1 > hlink
19*cf5a6c84SAndroid Build Coastguard Workertesting "force_create_hardlink" "ln -f file hlink &&
20*cf5a6c84SAndroid Build Coastguard Worker          [ file -ef hlink ] && cat hlink 2>/dev/null" "file1\n" "" ""
21*cf5a6c84SAndroid Build Coastguard Worker
22*cf5a6c84SAndroid Build Coastguard Workerecho slink1 > slink
23*cf5a6c84SAndroid Build Coastguard Workertesting "force_create_symlink" "ln -f -s file slink &&
24*cf5a6c84SAndroid Build Coastguard Worker          [ -L slink ] && readlink slink" "file\n" "" ""
25*cf5a6c84SAndroid Build Coastguard Workerrm slink hlink
26*cf5a6c84SAndroid Build Coastguard Worker
27*cf5a6c84SAndroid Build Coastguard Workerecho hlink1 > hlink
28*cf5a6c84SAndroid Build Coastguard Workerset +e
29*cf5a6c84SAndroid Build Coastguard Workertesting "preserves_hardlinks" "ln file hlink 2>/dev/null || echo 'yes'" \
30*cf5a6c84SAndroid Build Coastguard Worker          "yes\n" "" ""
31*cf5a6c84SAndroid Build Coastguard Worker
32*cf5a6c84SAndroid Build Coastguard Workerecho slink1 > slink
33*cf5a6c84SAndroid Build Coastguard Workerset +e
34*cf5a6c84SAndroid Build Coastguard Workertesting "preserves_symlinks" "ln -s file slink 2>/dev/null || echo 'yes'" \
35*cf5a6c84SAndroid Build Coastguard Worker          "yes\n" "" ""
36*cf5a6c84SAndroid Build Coastguard Workerrm slink hlink
37*cf5a6c84SAndroid Build Coastguard Worker
38*cf5a6c84SAndroid Build Coastguard Workermkdir dir
39*cf5a6c84SAndroid Build Coastguard Workertesting "multilevel_symbolic_links" "ln -s dir slink &&
40*cf5a6c84SAndroid Build Coastguard Worker          ln -s file slink && [ -L slink -a -L slink/file ] &&
41*cf5a6c84SAndroid Build Coastguard Worker          readlink slink && readlink slink/file" "dir\nfile\n" "" ""
42*cf5a6c84SAndroid Build Coastguard Workerrm slink
43*cf5a6c84SAndroid Build Coastguard Worker
44*cf5a6c84SAndroid Build Coastguard Workertesting "no_dereference" "ln -s dir slink &&
45*cf5a6c84SAndroid Build Coastguard Worker          ln -n -s file slink 2>/dev/null || [ -L slink ] && readlink slink" \
46*cf5a6c84SAndroid Build Coastguard Worker          "dir\n" "" ""
47*cf5a6c84SAndroid Build Coastguard Workerrm slink
48*cf5a6c84SAndroid Build Coastguard Worker
49*cf5a6c84SAndroid Build Coastguard Workertesting "-T acts like -n" "ln -s dir slink &&
50*cf5a6c84SAndroid Build Coastguard Worker          ln -Tsf file slink || [ -L slink ] && readlink slink" "file\n" "" ""
51*cf5a6c84SAndroid Build Coastguard Workerrm slink
52*cf5a6c84SAndroid Build Coastguard Worker
53*cf5a6c84SAndroid Build Coastguard Workertesting "-T with dir" "ln -Ts file dir 2>/dev/null || echo yes" "yes\n" "" ""
54*cf5a6c84SAndroid Build Coastguard Workerrm -rf file dir slink
55*cf5a6c84SAndroid Build Coastguard Worker
56*cf5a6c84SAndroid Build Coastguard Workertesting "-t" "ln -st . one/two three && readlink two three" "one/two\nthree\n" \
57*cf5a6c84SAndroid Build Coastguard Worker  "" ""
58*cf5a6c84SAndroid Build Coastguard Workerrm -f two three
59*cf5a6c84SAndroid Build Coastguard Worker
60*cf5a6c84SAndroid Build Coastguard Workertouch file1 file2 && mkdir dir
61*cf5a6c84SAndroid Build Coastguard Workertesting "create_multiple_hardlinks" "ln file* dir/ &&
62*cf5a6c84SAndroid Build Coastguard Worker   [ file1 -ef dir/file1 -a file2 -ef dir/file2 ] && echo 'yes'" "yes\n" "" ""
63*cf5a6c84SAndroid Build Coastguard Workerrm -rf file* dir
64*cf5a6c84SAndroid Build Coastguard Worker
65*cf5a6c84SAndroid Build Coastguard Workertouch file1 file2 && mkdir dir
66*cf5a6c84SAndroid Build Coastguard Workertesting "create_multiple_softlinks" "ln -s file* dir/ &&
67*cf5a6c84SAndroid Build Coastguard Worker          [ -L dir/file1 -a -L dir/file2 ] && readlink dir/file1 &&
68*cf5a6c84SAndroid Build Coastguard Worker          readlink dir/file2" "file1\nfile2\n" "" ""
69*cf5a6c84SAndroid Build Coastguard Workerrm -rf file* dir
70*cf5a6c84SAndroid Build Coastguard Worker
71*cf5a6c84SAndroid Build Coastguard Workerecho file1 > file
72*cf5a6c84SAndroid Build Coastguard Workertesting "create_softlink_and_remove_sourcefile" "ln -s file slink &&
73*cf5a6c84SAndroid Build Coastguard Worker          [ -L slink ] && rm file && cat slink 2>/dev/null || echo 'yes' " \
74*cf5a6c84SAndroid Build Coastguard Worker          "yes\n" "" ""
75*cf5a6c84SAndroid Build Coastguard Workerrm -f file slink
76*cf5a6c84SAndroid Build Coastguard Worker
77*cf5a6c84SAndroid Build Coastguard Workerecho file1 > file
78*cf5a6c84SAndroid Build Coastguard Workertesting "create_hardlink_and_remove_sourcefile" "ln file hlink &&
79*cf5a6c84SAndroid Build Coastguard Worker          [ file -ef hlink ] && rm file && [ -f hlink ] && echo 'yes'" \
80*cf5a6c84SAndroid Build Coastguard Worker          "yes\n" "" ""
81*cf5a6c84SAndroid Build Coastguard Workerrm -f file hlink
82*cf5a6c84SAndroid Build Coastguard Worker
83*cf5a6c84SAndroid Build Coastguard Workermkdir -p one/two
84*cf5a6c84SAndroid Build Coastguard Workerln -s . circular
85*cf5a6c84SAndroid Build Coastguard Workermkdir -p three
86*cf5a6c84SAndroid Build Coastguard Workerecho hello > three/four
87*cf5a6c84SAndroid Build Coastguard Workertesting "ln -r" \
88*cf5a6c84SAndroid Build Coastguard Worker  "ln -sr circular/three/../three/four one/two/five && cat one/two/five" \
89*cf5a6c84SAndroid Build Coastguard Worker  "hello\n" "" ""
90*cf5a6c84SAndroid Build Coastguard Workerrm -rf one three circular
91