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