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

Last change on this file since 1606 was 1606, checked in by Bruno Cornec, 12 years ago
  • Adds pbstoponerr option in conf file to allow to overwrite the default which is back to not stopping on errors as it perturbates VE and VM build for themoment, as not all commands are expected to succeed systematically.
  • Property svn:executable set to *
File size: 12.6 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.0-x86_64 ubuntu-12.04-i386 fedora-16-x86_64 opensuse-12.1-x86_64 mageia-2-i386 mandriva-2010.1-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
29echo " "
30if [ _"$cmd" == _"/tmp/pbtestcmd" ]; then
31 echo "INFO (as $PBUSER): Now running `head -1 $cmd` [$msg]"
32else
33 echo "INFO (as $PBUSER): Now running $cmd [$msg]"
34fi
35sudo -n -E su - $PBUSER -c "$cmd"
36ret=$?
37if [ $ret -ne 0 ] && [ _"$msg" == _"" ]; then
38 echo "================================"
39 echo "ERROR: Command $cmd failed: $ret"
40 echo "================================"
41fi
42}
43
44sudocmd() {
45cmd=$1
46
47echo " "
48echo "INFO (as root): Now running $cmd"
49sudo -n $cmd
50ret=$?
51if [ $ret -ne 0 ]; then
52 echo "================================"
53 echo "ERROR: Command $cmd failed: $ret"
54 echo "================================"
55fi
56}
57
58
59for d in $TESTVEDIST; do
60 # umount /proc in VE in case
61 dd=`echo $d | cut -d'-' -f1`
62 vv=`echo $d | cut -d'-' -f2`
63 aa=`echo $d | cut -d'-' -f3`
64 if [ -f "$PBTEST/ve/$dd/$vv/$aa/proc/cpuinfo" ]; then
65 sudocmd "umount $PBTEST/ve/$dd/$vv/$aa/proc"
66 fi
67done
68sudocmd "rm -rf $PBTEST/* $PBTEST/.??*"
69sudocmd "rmdir $PBTEST"
70sudocmd "killall -u $PBUSER"
71sudocmd "userdel $PBUSER"
72#sudocmd "groupdel $PBUSER" 1
73sudocmd "useradd $PBUSER"
74sudocmd "grep -q $PBUSER /etc/sudoers"
75if [ $? -ne 0 ]; then
76 cat > /tmp/sudoers << EOF
77Defaults env_keep += "PBPROJ"
78# This is for the $PBUSER account for the VE and VM only
79$PBUSER ALL=NOPASSWD:/usr/sbin/chroot
80$PBUSER ALL=NOPASSWD:/usr/bin/rpmbootstrap
81$PBUSER ALL=NOPASSWD:/usr/sbin/debootstrap
82$PBUSER ALL=NOPASSWD:/bin/chmod
83$PBUSER ALL=NOPASSWD:/bin/cp
84$PBUSER ALL=NOPASSWD:/bin/rm
85$PBUSER ALL=NOPASSWD:/bin/tar
86$PBUSER ALL=NOPASSWD:/bin/mkdir
87$PBUSER ALL=NOPASSWD:/usr/bin/qemu-kvm
88EOF
89 sudocmd "cat /etc/sudoers /tmp/sudoers > /tmp/sudoers2"
90 sudocmd "chmod 440 /tmp/sudoers2"
91 sudocmd "chown root:root /tmp/sudoers2"
92 sudocmd "mv /tmp/sudoers2 /etc/sudoers"
93 rm -f /tmp/sudoers /tmp/sudoers2
94fi
95# Force $PBUSER (for now pbuser hardcoded!) account passwd is $PBUSER
96sudocmd "perl -pi -e 's|^pbtest:.*|pbtest:$2a$08$2Q.tEty4v/fU0RyPeDelk.AjLAtXUXU3DpSs/l/8YrFmau1LJRCqC:15483:0:99999:7:::|' /etc/shadow"
97sudopbtest "echo export PBPROJ=$PBPROJ >> $PBTEST/.bash_profile"
98sudopbtest "env | grep PBPROJ"
99
100#Taken from Lab document originally
101# SVN repo setup
102sudopbtest "svnadmin create $PBTEST/svn"
103cat > /tmp/authz << EOF
104[/]
105$PBUSER = rw
106* = r
107EOF
108sudocmd "mv /tmp/authz $PBTEST/svn/conf/authz"
109cat > /tmp/passwd << EOF
110[users]
111$PBUSER = $PBUSER
112EOF
113sudocmd "mv /tmp/passwd $PBTEST/svn/conf/passwd"
114cat > /tmp/svnserve.conf << EOF
115[general]
116password-db = $PBTEST/svn/conf/passwd
117authz-db = authz
118anon-access = read
119auth-access = write
120realm = pb
121EOF
122sudocmd "mv /tmp/svnserve.conf $PBTEST/svn/conf/svnserve.conf"
123sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/svn/conf/authz $PBTEST/svn/conf/passwd $PBTEST/svn/conf/svnserve.conf"
124sudopbtest "killall svnserve" 1
125sudopbtest "svnserve -d -r $PBTEST/svn"
126sudopbtest "mkdir -p $PBTEST/{ftp,ve,vm,.ssh,pb}"
127sudopbtest "chmod 700 $PBTEST/.ssh"
128
129sudopbtest "pb -h"
130sudopbtest "pbdistrocheck"
131sudopbtest "pb clean 2>&1 > /dev/null" 1
132
133cat > /tmp/.pbrc << EOF
134# Projects
135pbconfurl afio = svn://localhost/pb/afio/pbconf
136pbdefdir default = \$ENV{'HOME'}/pb
137pbconfurl pb = svn://svn.project-builder.org/pb/pbconf
138pbconfdir pb = \$ENV{'HOME'}/pb/pbconf
139pburl pb = svn://svn.project-builder.org/pb
140pburl mondorescue = svn://svn.mondorescue.org/mondorescue/branches
141sshhost pb = localhost
142sshlogin pb = $PBUSER
143sshdir pb = \$ENV{'HOME'}/ftp
144#
145pbpackager default = Big Chief <bigchief@hp.com>
146vmport pb = 2200
147pbparallel pb = 6
148vepath default = $PBTEST/ve
149vmpath default = $PBTEST/vm
150EOF
151sudocmd "mv /tmp/.pbrc $PBTEST/.pbrc"
152
153cat > /tmp/.pbrc << EOF
154vmtype default = kvm
155vmcmd default = qemu-kvm
156vmsize fedora = 10G
157vmmonport default = 4000
158vmlogin default = $PBUSER
159EOF
160echo "vmlist default = `echo $TESTVMDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
161sudocmd "mv /tmp/.pbrc $PBTEST/vm/.pbrc"
162
163cat > /tmp/.pbrc << EOF
164vetype default = chroot
165verpmtype default = rpmbootstrap
166vedebtype default = debootstrap
167verebuild default = false
168veopt default =
169vesnap default = false
170velogin default = $PBUSER
171EOF
172echo "velist default = `echo $TESTVEDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
173sudocmd "mv /tmp/.pbrc $PBTEST/ve/.pbrc"
174sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.pbrc $PBTEST/ve/.pbrc $PBTEST/vm/.pbrc"
175
176sudopbtest "ssh-keygen -f $PBTEST/.ssh/id_rsa -t rsa -b 768 -v -N ''"
177sudopbtest "cp $PBTEST/.ssh/id_rsa.pub $PBTEST/.ssh/authorized_keys"
178sudopbtest "chmod 600 $PBTEST/.ssh/authorized_keys $PBTEST/.ssh/id_rsa.pub"
179sudopbtest "ssh localhost touch $PBTEST/ftp/README"
180
181# Create SVN conf files - doesn't work fully as it asks for a password - solved with PBVCSOPT
182sudopbtest "svn info 2>&1 > /dev/null" 1
183cat > /tmp/servers << EOF
184[global]
185store-passwords = yes
186store-plaintext-passwords = yes
187store-auth-creds = yes
188EOF
189sudocmd "mv /tmp/servers $PBTEST/.subversion/servers"
190sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.subversion/servers"
191
192VCSOPT="--username $PBUSER --password $PBUSER"
193
194sudopbtest "svn import $PBTEST/pb svn://localhost/pb -m 'Initial creation of pb repo' $VCSOPT"
195sudopbtest "svn co svn://localhost/pb $PBTEST/pb"
196sudopbtest "touch $PBTEST/pb/README"
197sudopbtest "svn add $PBTEST/pb/README"
198sudopbtest "svn ci $VCSOPT -m 'add readme' $PBTEST/pb/README"
199sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 newproj afio"
200
201grep -vE '^defpkgdir|^projver|^projtag|^pburl|^pbrepo|^shh' $PBTEST/pb/afio/pbconf/2.5/afio.pb > /tmp/afio.pb
202cat >> /tmp/afio.pb << EOF
203defpkgdir afio = dummy
204projver afio = 2.5
205projtag afio = 1
206pburl afio = ftp://ftp.project-builder.org/src/afio-2.5.tar.gz
207pbrepo afio = ftp://ftp.project-builder.org
208sshhost afio = localhost
209sshlogin afio = $PBUSER
210sshdir afio = \$ENV{'HOME'}/ftp
211EOF
212sudocmd "mv /tmp/afio.pb $PBTEST/pb/afio/pbconf/2.5/afio.pb"
213sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio.pb"
214cat > /tmp/pbtestcmd << EOF
215perl -pi -e 's|testver\s+afio\s+=\s+true|testver\ afio\ =\ false|' $PBTEST/pb/afio/pbconf/2.5/afio.pb
216EOF
217chmod 755 /tmp/pbtestcmd
218sudopbtest /tmp/pbtestcmd
219
220grep -vE 'PBSRC|PBDESC|PBSUMMARY|PBURL|PBLOG' $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf > /tmp/all.pbf
221cat >> /tmp/all.pbf << EOF
222filter PBSRC = src/%{name}-%{version}.tar.gz
223filter PBDESC = afio is a cpio compatible archiver with extended features$/It can compress on a file by file basis.
224filter PBSUMMARY = afio is a cpio compatible archiver with extended features
225filter PBURL = http://www.boutell.com/lsm/lsmbyid.cgi/000462
226filter PBLOG = no
227EOF
228sudocmd "mv /tmp/all.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
229sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
230
231grep -vE 'PBGRP|PBLIC' $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf > /tmp/rpm.pbf
232cat >> /tmp/rpm.pbf << EOF
233filter PBGRP = Applications/Archiving
234filter PBLIC = Afio
235filter PBBDEP = gcc
236EOF
237sudocmd "mv /tmp/rpm.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf"
238sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf "
239
240cat > /tmp/deb.pbf << EOF
241filter PBGRP = utils
242filter PBLIC = Afio
243filter PBBDEP = gcc
244EOF
245sudocmd "mv /tmp/deb.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/deb.pbf"
246sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/deb.pbf "
247
248# First build
249sudopbtest "pb -r 2.5 sbx2build"
250
251cat > /tmp/pbtestcmd << EOF
252# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
253perl -pi -e 's|%configure||' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
254perl -pi -e 's|make %{\?_smp_mflags}|make %{\?_smp_mflags}\nchmod 644 script*/*|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
255perl -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
256perl -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
257perl -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
258perl -pi -e 's|^#BuildRequires:|BuildRequires:|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
259EOF
260chmod 755 /tmp/pbtestcmd
261sudopbtest /tmp/pbtestcmd
262
263cat > /tmp/pbcl << EOF
264# $Id$
265
266AFIO CHANGES
267
2682.5 (2009-12-03)
269- First packages created
270EOF
271sudocmd "mv /tmp/pbcl $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
272sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
273sudopbtest "svn add $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
274sudopbtest "svn ci -m 'Adding pbcl for afio' $VCSOPT $PBTEST/pb"
275
276sudopbtest "pb sbx2pkg"
277rpm -qilvp $PBTEST/pb/afio/build/RPMS/x86_64/afio-2.5*
278
279cat > /tmp/pbtestcmd << EOF
280# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
281perl -pi -e 's|,\s*PBDEP||' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
282sed -i '/Recommends: PBREC/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
283sed -i '/Suggests: PBSUG/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
284EOF
285chmod 755 /tmp/pbtestcmd
286sudopbtest /tmp/pbtestcmd
287
288cat > /tmp/afio.docs << EOF
289HISTORY
290PORTING
291README
292SCRIPTS
293ANNOUNCE-2.5
294perl.artistic.license
295afio.lsm
296script1
297script2
298script3
299script4
300EOF
301sudocmd "mv /tmp/afio.docs $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs"
302sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs "
303
304cat > /tmp/pbtestcmd << EOF
305# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
306perl -pi -e 's|config.status: configure|config.status: Makefile|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
307perl -pi -e 's|dh_installchangelogs ChangeLog|dh_installchangelogs debian/changelog|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
308perl -pi -e 's|# - copy html manual to temporary location for renaming|mkdir -p \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/bin \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/share/man/man1 ; 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
309sed -i -e '/\.\/configure /d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
310sed -i -e '/ install prefix=/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
311EOF
312chmod 755 /tmp/pbtestcmd
313sudopbtest /tmp/pbtestcmd
314
315
316#dpkg -I ~ftp/pub/afio/test/debian/5.0/afio_2.5-0.20091204131057_i386.deb
317#dpkg -x ~ftp/pub/afio/test/debian/5.0/afio_2.5-0.20091204131057_i386.deb /tmp/x ; ls -lR /tmp/x
318
319sudopbtest "pb getconf"
320# test also with pb
321sudopbtest "pb -p pb -r devel getconf"
322sudopbtest "pb -p pb -r devel sbx2pkg"
323sudopbtest "pb -p pb build2ssh"
324sudopbtest "pb -p pb pkg2ssh"
325
326for d in $TESTVEDIST; do
327 sudopbtest "PATH=${PATH}:/sbin:/usr/sbin pb -p pb -m $d newve"
328 sudopbtest "pb -p pb -m $d sbx2setupve"
329 sudopbtest "pb -p pb -m $d snapve"
330 sudopbtest "pb -m $d sbx2ve"
331 # Cleaning VE to use the snapshot
332 dd=`echo $d | cut -d'-' -f1`
333 vv=`echo $d | cut -d'-' -f2`
334 aa=`echo $d | cut -d'-' -f3`
335 if [ -f "$PBTEST/ve/$dd/$vv/$aa/proc/cpuinfo" ]; then
336 sudocmd "umount $PBTEST/ve/$dd/$vv/$aa/proc"
337 fi
338 sudocmd "rm -rf $PBTEST/ve/$dd/$vv/$aa"
339 sudopbtest "pb -S -m $d sbx2ve"
340done
341
342sudopbtest "svn ci $VCSOPT -m 'sync before newver' $PBTEST/pb"
343sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 -V 2.6 newver"
344# We now need to adapt tar file,log ... to a 2.6 content
345#sudopbtest "pb -r 2.6 sbx2pkg"
346
347# need tobe part of group video for KVM
348sudocmd "grep -Eq '^video:' /etc/group" | grep $PBUSER
349if [ $? -ne 0 ]; then
350 sudocmd "perl -pi -e 's|^(video:.*)$|$1,$ENV{'PBUSER'}|' /etc/shadow"
351fi
352d=mageia-2-i386
353sudopbtest "qemu-img create -f qcow2 $PBTEST/vm/$d.qemu 72G"
354sudopbtest "sudo 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"
355sudopbtest "pb -p pb -r devel -m $d sbx2setupvm"
356sudopbtest "pb -p pb -m $d snapvm"
357sudopbtest "pb -m $d sbx2vm"
358
359# test also with MondoRescue
360pb -p mondorescue -r branches/3.0 cms2pkg
361
362# cleanup
363sudopbtest "pb clean"
364sudopbtest "killall svnserve" 1
365exit
Note: See TracBrowser for help on using the repository browser.