]> pd.if.org Git - zpackage/blob - t/install.t
b1ae1138062011dbc3bf1cc0c63164c56adc9a3f
[zpackage] / t / install.t
1 #!/bin/sh
2
3 # vim: syn=sh
4
5 # test addfile
6
7 . tap.sh
8
9 plan 67
10
11 owner=$(id -un)
12 group=$(id -gn)
13
14 newpkg() {
15         pkgid=$1
16         tryrun zpm init $pkgid.zpm
17         if [ $? -eq 0 ]; then
18                 tryrun zpm newpackage -f $pkgid.zpm $pkgid
19                 if [ $? -eq 0 ]; then
20                         shift
21                         tryrun zpm add -u $owner -g $group -f $pkgid.zpm $pkgid "$@"
22                         return $?
23                 else
24                         skip 1 not adding files init failed
25                         return 1
26                 fi
27         else
28                 skip 2 "unable to init $pkgid.zpm"
29         fi
30         return 0
31 }
32
33 oktest() {
34         test $1 $2
35         okexit test $1 $2
36 }
37
38 oknottest() {
39         test $1 $2
40         failsok test $1 $2 fails
41 }
42
43 require rm -rf tmp
44 require mkdir tmp
45 cd tmp || bailout
46
47 # set up a new package
48
49 pkgid=itest-1.0-1
50 newpkg $pkgid /bin/true
51 okexit setup package $pkgid
52 PF=$pkgid.zpm
53
54 #require zpm init $PF
55 #require zpm newpackage -f $PF $pkgid
56 #require zpm add -f $PF $pkgid /bin/true
57
58 #
59 # install via syncfs
60 #
61 require zpm pkg -f $PF $pkgid status=installing
62 zpm syncfs -d $PF -R. $pkgid 2>&1 | diagstdin
63 okexit ran syncfs
64
65 test -f bin/true
66 okexit bin/true installed
67
68 require zpm pkg -f $PF $pkgid status=packaged
69 ns=$(zpm pkg -f $PF $pkgid status)
70 okstreq "$ns" "packaged" set package status
71
72 require rm -rf bin
73
74 #
75 # install via install
76 #
77
78 # TODO should probably have merge set the status to merged by default
79
80 require zpm init local.db
81 zpm install -R. -d local.db -f $PF $pkgid 2>&1 | diagstdin
82 #zpm list -f local.db -v | diagstdin
83 okexit installed
84 ns=$(zpm pkg -f local.db $pkgid status)
85 okstreq "$ns" "installed" "install set package status"
86
87 test -f bin/true
88 okexit bin/true installed via zpm-install
89
90 #
91 # upgrade package
92 #
93
94 # update the package version
95 require zpm pkg -f $PF $pkgid version=2.0
96 newver=$(zpm pkg -f $PF itest version)
97 okstreq "$newver" "2.0" "have updated version"
98
99 rm -f test.out
100 tryrun zpm add -f $PF itest /bin/false
101 if [ $? -ne 0 ]; then
102         diag h2
103         cat test.out | diagstdin
104         zpm list -f $PF | diagstdin
105         bailout add failed
106 fi
107
108 zpm install -R. -d local.db -f $PF itest-2.0-1 2>&1 | diagstdin
109 okexit installed
110 if [ $? -ne 0 ]; then
111         cat test.out | diagstdin
112         zpm list -f $PF | diagstdin
113         bailout add failed
114 fi
115 test -f bin/false
116 okexit bin/false installed via zpm-install
117
118 ns=$(zpm pkg -f local.db $pkgid status)
119 okstreq "$ns" "updated" "install set $pkgid status"
120 ns=$(zpm pkg -f local.db itest-2.0-1 status)
121 okstreq "$ns" "installed" "install set itest-2.0-1 status"
122
123 #
124 # upgrade package removing a file
125 #
126 pkgid=itest-3.0-1
127 newpkg $pkgid /bin/true
128 okexit setup package $pkgid
129 PF=$pkgid.zpm
130 zpm install -R. -d local.db -f $PF $pkgid 2>&1 | diagstdin
131 okexit upgraded to $pkgid
132
133 ns=$(zpm pkg -f local.db $pkgid status)
134 okstreq "$ns" "installed" "install set $pkgid status"
135
136 test -f bin/false
137 failsok removed bin/false
138
139 #
140 # install second package
141 #
142 require ln bin/true bin/sh
143 pkgid=second-1.0-1
144 newpkg $pkgid bin/sh
145 okexit setup package $pkgid
146 require rm bin/sh
147 PF=$pkgid.zpm
148 zpm install -R. -d local.db -f $PF $pkgid 2>&1 | diagstdin
149 okexit installed $pkgid
150 oktest -f bin/sh
151
152 #
153 # update a file
154 #
155 ohash=$(zpm hash bin/true)
156 require mv bin/true bin/save
157 require sh -c 'echo false > bin/true'
158 nhash=$(zpm hash bin/true)
159 pkgid=itest-4.0-1
160 newpkg $pkgid bin/true
161 okexit setup package $pkgid
162 require mv bin/save bin/true
163 PF=$pkgid.zpm
164 zpm install -R. -d local.db -f $PF $pkgid 2>&1 | diagstdin
165 okexit installed $pkgid
166 rhash=$(zpm hash bin/true)
167 okstreq "$rhash" "$nhash" "updated bin/true"
168
169 skiponfail() {
170         rv=$?
171         if [ $rv -ne 0 ]; then
172                 skip "$1" "$2"
173                 return 0
174         fi
175         return 1
176 }
177
178 #
179 # package with passing pre-script
180 #
181 pkgid=third-1.0-1
182 PF=$pkgid.zpm
183 newpkg $pkgid /bin/echo
184 skiponfail 3 "can't create $pkgid" || {
185         zpm script -s -f $PF -p pre-install $pkgid /bin/true
186         okexit "add true pre-install script to $pkgid"
187         skiponfail 2 "can't set $pkgid pre-install script" || {
188                 tryrun zpm install -v -R. -d local.db -f $PF $pkgid
189                 okexit installed $pkgid
190                 oktest -f bin/echo
191         }
192 }
193
194 #
195 # package with failing pre-script
196 #
197 pkgid=fourth-1.0-1
198 PF=$pkgid.zpm
199 newpkg $pkgid /bin/head
200 skiponfail 3 "can't create $pkgid" || {
201         zpm script -s -f $PF -p pre-install $pkgid /bin/false
202         okexit "add false pre-install script to $pkgid"
203         skiponfail 1 "can't set $pkgid pre-install script" || {
204                 zpm install -R. -d local.db -f $PF $pkgid 2>/dev/null
205                 failsok failed to install $pkgid
206         }
207 }
208
209 tryrun zpm uninstall -R. -d local.db third-1.0-1
210 test -f bin/echo
211 failsok bin/echo removed
212
213 pkgid=fifth-1.0-1
214 PF=$pkgid.zpm
215 newpkg $pkgid /bin/head
216 #zpm list -f $PF 2>&1 | diagstdin
217 skiponfail 1 "can't create $pkgid" || {
218         tryrun zpm install -R. -d local.db -f $PF 2>/dev/null
219         okexit "install with implicit package id"
220 }
221
222 cd .. || bailout
223 require rm -rf tmp
224
225 finish