source: ProjectBuilder/devel/pb/t/pbtest@ 1597

Last change on this file since 1597 was 1597, checked in by Bruno Cornec, 12 years ago
  • Adds option pbshowsudo (false by default) to check whether we display the detail of sudo commands (to match security requiremetns) or not (to have a nicer output)
  • Fix a template generation error in Env.pm for deb rules file (line was split)
  • In VE.pm fix modes of the chroot after the snapshot phase detection to avoid error which make the code die
  • In pb create the RPM build dirs before entering in the parallel loop as sometimes 2 identical were created simultaneously, leading to an error leading to a die
  • In pb revert the code added by Eric to check deb content creation as it was failing in my environement (naming issues). Could be added after 0.12.1 is out as an additional check, but anyway as the files are copied after, it's not that important.
  • Use full path of chown in sudo for pb
  • Make the test account a variable in pbtest
  • Start to add test case for a VM in pbtest
  • This patch makes pb build back in a debian 6 VE.
  • Property svn:executable set to *
File size: 12.1 KB
Line 
1#!/bin/bash
2#
3# Project Builder test suite
4#
5# $Id$
6#
7# Copyright B. Cornec 2007-2012
8# Provided under the GPL v2
9
10# First create a dummy account for testing
11# In order for this script to run well, you should have sudo access
12
13# You may have multiple distros here
14TESTVEDIST="debian-6-x86_64 ubuntu-12.04-i386 fedora-16-x86_64 opensuse-12.1-x86_64 mageia-2-i386 mandriva-2010.0-i386"
15# Only one VM is tested for now.
16TESTVMDIST="fedora-16-i386"
17TESTVMISO="/users/bruno/iso/Fedora-16-i386-DVD.iso"
18PBUSER=pbtest
19PBTEST="/home/$PBUSER"
20export PBPROJ=afio
21
22# Sub function to handle execution as pbtest
23# doesn't change to the home dir of the user as su - can't be used to get env var correct
24sudopbtest() {
25
26cmd=$1
27msg=$2
28
29if [ _"$cmd" == _"/tmp/pbtestcmd" ]; then
30 echo "INFO (as $PBUSER): Now running `head -1 $cmd` [$msg]"
31else
32 echo "INFO (as $PBUSER): Now running $cmd [$msg]"
33fi
34sudo -n -E su - $PBUSER -c "$cmd"
35ret=$?
36if [ $ret -ne 0 ] && [ _"$msg" == _"" ]; then
37 echo "================================"
38 echo "ERROR: Command $cmd failed: $ret"
39 echo "================================"
40fi
41echo " "
42}
43
44sudocmd() {
45cmd=$1
46
47echo "INFO (as root): Now running $cmd"
48sudo -n $cmd
49ret=$?
50if [ $ret -ne 0 ]; then
51 echo "================================"
52 echo "ERROR: Command $cmd failed: $ret"
53 echo "================================"
54fi
55echo " "
56}
57
58
59sudocmd "rm -rf $PBTEST/* $PBTEST/.??*"
60sudocmd "killall -u $PBUSER"
61sudocmd "userdel $PBUSER"
62#sudocmd "groupdel $PBUSER" 1
63sudocmd "useradd $PBUSER"
64sudocmd "grep -q $PBUSER /etc/sudoers"
65if [ $? -ne 0 ]; then
66 cat > /tmp/sudoers << EOF
67Defaults env_keep += "PBPROJ"
68# This is for the $PBUSER account in the VE only
69$PBUSER ALL=NOPASSWD:/usr/sbin/chroot
70$PBUSER ALL=NOPASSWD:/usr/bin/rpmbootstrap
71$PBUSER ALL=NOPASSWD:/usr/sbin/debootstrap
72$PBUSER ALL=NOPASSWD:/bin/chmod
73$PBUSER ALL=NOPASSWD:/bin/cp
74$PBUSER ALL=NOPASSWD:/bin/rm
75$PBUSER ALL=NOPASSWD:/bin/tar
76$PBUSER ALL=NOPASSWD:/bin/mkdir
77$PBUSER ALL=NOPASSWD:/bin/chown
78EOF
79 sudocmd "cat /etc/sudoers /tmp/sudoers > /tmp/sudoers2"
80 sudocmd "chmod 440 /tmp/sudoers2"
81 sudocmd "chown root:root /tmp/sudoers2"
82 sudocmd "mv /tmp/sudoers2 /etc/sudoers"
83 rm -f /tmp/sudoers /tmp/sudoers2
84fi
85# Force $PBUSER account passwd is $PBUSER
86sudocmd "perl -pi -e 's|^$PBUSER:.*|$PBUSER:$2a$08$2Q.tEty4v/fU0RyPeDelk.AjLAtXUXU3DpSs/l/8YrFmau1LJRCqC:15483:0:99999:7:::|' /etc/shadow"
87sudopbtest "echo export PBPROJ=$PBPROJ >> $PBTEST/.bash_profile"
88sudopbtest "env | grep PBPROJ"
89
90#Taken from Lab document originally
91# SVN repo setup
92sudopbtest "svnadmin create $PBTEST/svn"
93cat > /tmp/authz << EOF
94[/]
95$PBUSER = rw
96* = r
97EOF
98sudocmd "mv /tmp/authz $PBTEST/svn/conf/authz"
99cat > /tmp/passwd << EOF
100[users]
101$PBUSER = $PBUSER
102EOF
103sudocmd "mv /tmp/passwd $PBTEST/svn/conf/passwd"
104cat > /tmp/svnserve.conf << EOF
105[general]
106password-db = $PBTEST/svn/conf/passwd
107authz-db = authz
108anon-access = read
109auth-access = write
110realm = pb
111EOF
112sudocmd "mv /tmp/svnserve.conf $PBTEST/svn/conf/svnserve.conf"
113sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/svn/conf/authz $PBTEST/svn/conf/passwd $PBTEST/svn/conf/svnserve.conf"
114sudopbtest "killall svnserve" 1
115sudopbtest "svnserve -d -r $PBTEST/svn"
116sudopbtest "mkdir -p $PBTEST/{ftp,ve,vm,.ssh,pb}"
117sudopbtest "chmod 700 $PBTEST/.ssh"
118
119sudopbtest "pb -h"
120sudopbtest "pbdistrocheck"
121sudopbtest "pb clean 2>&1 > /dev/null" 1
122
123cat > /tmp/.pbrc << EOF
124# Projects
125pbconfurl afio = svn://localhost/pb/afio/pbconf
126pbdefdir default = \$ENV{'HOME'}/pb
127pbconfurl pb = svn://svn.project-builder.org/pb/pbconf
128pbconfdir pb = \$ENV{'HOME'}/pb/pbconf
129pburl pb = svn://svn.project-builder.org/pb
130pburl mondorescue = svn://svn.mondorescue.org/mondorescue/branches
131sshhost pb = localhost
132sshlogin pb = $PBUSER
133sshdir pb = \$ENV{'HOME'}/ftp
134#
135pbpackager default = Big Chief <bigchief@hp.com>
136vmport pb = 2200
137pbparallel pb = 6
138vepath default = $PBTEST/ve
139vmpath default = $PBTEST/vm
140EOF
141sudocmd "mv /tmp/.pbrc $PBTEST/.pbrc"
142
143cat > /tmp/.pbrc << EOF
144vmtype default = kvm
145vmcmd default = qemu-kvm
146vmsize fedora = 10G
147vmmonport default = 4000
148EOF
149echo "vmlist default = `echo $TESTVMDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
150sudocmd "mv /tmp/.pbrc $PBTEST/vm/.pbrc"
151
152cat > /tmp/.pbrc << EOF
153vetype default = chroot
154verpmtype default = rpmbootstrap
155vedebtype default = debootstrap
156verebuild default = false
157veopt default =
158vesnap default = false
159velogin default = $PBUSER
160EOF
161echo "velist default = `echo $TESTVEDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
162sudocmd "mv /tmp/.pbrc $PBTEST/ve/.pbrc"
163sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.pbrc $PBTEST/ve/.pbrc $PBTEST/vm/.pbrc"
164
165sudopbtest "ssh-keygen -f $PBTEST/.ssh/id_rsa -t rsa -b 768 -v -N ''"
166sudopbtest "cp $PBTEST/.ssh/id_rsa.pub $PBTEST/.ssh/authorized_keys"
167sudopbtest "chmod 600 $PBTEST/.ssh/authorized_keys $PBTEST/.ssh/id_rsa.pub"
168sudopbtest "ssh localhost touch $PBTEST/ftp/README"
169
170# Create SVN conf files - doesn't work fully as it asks for a password - solved with PBVCSOPT
171sudopbtest "svn info 2>&1 > /dev/null" 1
172cat > /tmp/servers << EOF
173[global]
174store-passwords = yes
175store-plaintext-passwords = yes
176store-auth-creds = yes
177EOF
178sudocmd "mv /tmp/servers $PBTEST/.subversion/servers"
179sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.subversion/servers"
180
181VCSOPT='--username $PBUSER --password $PBUSER'
182
183sudopbtest "svn import $PBTEST/pb svn://localhost/pb -m 'Initial creation of pb repo' $VCSOPT"
184sudopbtest "svn co svn://localhost/pb $PBTEST/pb"
185sudopbtest "touch $PBTEST/pb/README"
186sudopbtest "svn add $PBTEST/pb/README"
187sudopbtest "svn ci $VCSOPT -m 'add readme' $PBTEST/pb/README"
188sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 newproj afio"
189
190grep -vE '^defpkgdir|^projver|^projtag|^pburl|^pbrepo|^shh' $PBTEST/pb/afio/pbconf/2.5/afio.pb > /tmp/afio.pb
191cat >> /tmp/afio.pb << EOF
192defpkgdir afio = dummy
193projver afio = 2.5
194projtag afio = 1
195pburl afio = ftp://ftp.project-builder.org/src/afio-2.5.tar.gz
196pbrepo afio = ftp://ftp.project-builder.org
197sshhost afio = localhost
198sshlogin afio = $PBUSER
199sshdir afio = \$ENV{'HOME'}/ftp
200EOF
201sudocmd "mv /tmp/afio.pb $PBTEST/pb/afio/pbconf/2.5/afio.pb"
202sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio.pb"
203cat > /tmp/pbtestcmd << EOF
204perl -pi -e 's|testver\s+afio\s+=\s+true|testver\ afio\ =\ false|' $PBTEST/pb/afio/pbconf/2.5/afio.pb
205EOF
206chmod 755 /tmp/pbtestcmd
207sudopbtest /tmp/pbtestcmd
208
209grep -vE 'PBSRC|PBDESC|PBSUMMARY|PBURL|PBLOG' $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf > /tmp/all.pbf
210cat >> /tmp/all.pbf << EOF
211filter PBSRC = src/%{name}-%{version}.tar.gz
212filter PBDESC = afio is a cpio compatible archiver with extended features$/It can compress on a file by file basis.
213filter PBSUMMARY = afio is a cpio compatible archiver with extended features
214filter PBURL = http://www.boutell.com/lsm/lsmbyid.cgi/000462
215filter PBLOG = no
216EOF
217sudocmd "mv /tmp/all.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
218sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
219
220grep -vE 'PBGRP|PBLIC' $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf > /tmp/rpm.pbf
221cat >> /tmp/rpm.pbf << EOF
222filter PBGRP = Applications/Archiving
223filter PBLIC = Afio
224filter PBDEP = gcc
225EOF
226sudocmd "mv /tmp/rpm.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf"
227sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf "
228
229cat >> /tmp/deb.pbf << EOF
230filter PBGRP = utils
231filter PBLIC = Afio
232EOF
233sudocmd "mv /tmp/deb.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/deb.pbf"
234sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf "
235
236# First build
237sudopbtest "pb -r 2.5 sbx2build"
238
239cat > /tmp/pbtestcmd << EOF
240# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
241perl -pi -e 's|%configure||' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
242perl -pi -e 's|make %{\?_smp_mflags}|make %{\?_smp_mflags}\nchmod 644 script*/*|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
243perl -pi -e 's|make DESTDIR=.*|mkdir -p %{buildroot}%{_bindir}\nmkdir -p %{buildroot}%{_mandir}/man1\ninstall -p -m 755 afio %{buildroot}%{_bindir}\ninstall -p -m 644 afio.1 %{buildroot}%{_mandir}/man1|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
244perl -pi -e 's|%doc ChangeLog|%doc HISTORY PORTING README SCRIPTS ANNOUNCE-2.5 perl.artistic.license|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
245perl -pi -e 's|%doc INSTALL COPYING README AUTHORS NEWS|%doc afio.lsm script1 script2 script3 script4\n%{_bindir}/%{name}\n%{_mandir}/man1/%{name}.1*|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
246perl -pi -e 's|^#Requires:|Requires:|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
247EOF
248chmod 755 /tmp/pbtestcmd
249sudopbtest /tmp/pbtestcmd
250
251cat > /tmp/pbcl << EOF
252# $Id$
253
254AFIO CHANGES
255
2562.5 (2009-12-03)
257- First packages created
258EOF
259sudocmd "mv /tmp/pbcl $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
260sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
261sudopbtest "svn add $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
262sudopbtest "svn ci -m 'Adding pbcl for afio' $VCSOPT $PBTEST/pb"
263
264sudopbtest "pb sbx2pkg"
265rpm -qilvp $PBTEST/pb/afio/build/RPMS/x86_64/afio-2.5*
266
267cat > /tmp/pbtestcmd << EOF
268# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
269perl -pi -e 's|,\s*PBDEP||' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
270sed -i '/Recommends: PBREC/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
271sed -i '/Suggests: PBSUG/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
272EOF
273chmod 755 /tmp/pbtestcmd
274sudopbtest /tmp/pbtestcmd
275
276cat > /tmp/afio.docs << EOF
277HISTORY
278PORTING
279README
280SCRIPTS
281ANNOUNCE-2.5
282perl.artistic.license
283afio.lsm
284script1
285script2
286script3
287script4
288EOF
289sudocmd "mv /tmp/afio.docs $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs"
290sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs "
291
292cat > /tmp/pbtestcmd << EOF
293# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
294perl -pi -e 's|config.status: configure|config.status: Makefile|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
295perl -pi -e 's|dh_installchangelogs ChangeLog|dh_installchangelogs debian/changelog|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
296perl -pi -e 's|\\\$(MAKE) install.*|mkdir -p \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/bin \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/share/man/man1|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
297perl -pi -e 's|# - copy html manual to temporary location for renaming|install -p -m 755 afio \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/bin ; install -p -m 644 afio.1 \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/share/man/man1|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
298sed -i -e '/\.\/configure /d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
299EOF
300chmod 755 /tmp/pbtestcmd
301sudopbtest /tmp/pbtestcmd
302
303
304#dpkg -I ~ftp/pub/afio/test/debian/5.0/afio_2.5-0.20091204131057_i386.deb
305#dpkg -x ~ftp/pub/afio/test/debian/5.0/afio_2.5-0.20091204131057_i386.deb /tmp/x ; ls -lR /tmp/x
306
307sudopbtest "pb getconf"
308# test also with pb
309sudopbtest "pb -p pb -r devel getconf"
310sudopbtest "pb -p pb -r devel sbx2pkg"
311sudopbtest "pb -p pb build2ssh"
312sudopbtest "pb -p pb pkg2ssh"
313
314for d in $TESTVEDIST; do
315 sudopbtest "PATH=${PATH}:/sbin:/usr/sbin pb -p pb -m $d newve"
316 sudopbtest "pb -p pb -m $d sbx2setupve"
317 sudopbtest "pb -p pb -m $d snapve"
318 sudopbtest "pb -m $d sbx2ve"
319 # Cleaning VE to use the snapshot
320 dd=`echo $d | cut -d'-' -f1`
321 vv=`echo $d | cut -d'-' -f2`
322 aa=`echo $d | cut -d'-' -f3`
323 if [ -f "$PBTEST/ve/$dd/$vv/$aa/proc/cpuinfo" ]; then
324 sudocmd "umount $PBTEST/ve/$dd/$vv/$aa/proc"
325 fi
326 sudocmd "rm -rf $PBTEST/ve/$dd/$vv/$aa"
327 sudopbtest "pb -S -m $d sbx2ve"
328done
329
330sudopbtest "svn ci $VCSOPT -m 'sync before newver' $PBTEST/pb"
331sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 -V 2.6 newver"
332sudopbtest "pb clean"
333
334# need tobe part of group video for KVM
335sudocmd "grep -q $PBUSER /etc/group"
336if [ $? -ne 0 ]; then
337 sudocmd "perl -pi -e 's|^(video:.*)$|$1,|' /etc/shadow"
338fi
339d=mageia-2-i386
340sudopbtest "qemu-img create -f qcow2 $PBTEST/vm/$d.qemu 72G"
341sudopbtest "qemu-kvm -m 1024 -kernel /pub/mageia/distrib/2/i586/isolinux/alt0/vmlinuz -initrd /pub/mageia/distrib/2/i586/isolinux/alt0/all.rdz -append "ramdisk_size=128000 root=/dev/ram3 kickstart=http://192.168.8.55/pub/ks/guerrero/ks.pl automatic=method:http,server:192.168.8.55,directory:/pub/mageia/distrib/2/i586,network:dhcp" -drive file=$PBTEST/vm/$d.qemu,if=virtio,media=disk -redir tcp:2200:10.0.2.15:22"
342sudopbtest "pb -p pb -m $d sbx2setupvm"
343sudopbtest "pb -p pb -m $d snapvm"
344sudopbtest "pb -m $d sbx2vm"
345
346
347# test also with MOndoRescue
348pb -p mondorescue -r branches/3.0 cms2pkg
349
350# cleanup
351sudopbtest "killall svnserve" 1
352
Note: See TracBrowser for help on using the repository browser.