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
RevLine 
[1564]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
[1587]11# In order for this script to run well, you should have sudo access
[1564]12
13# You may have multiple distros here
[1597]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"
[1564]15# Only one VM is tested for now.
16TESTVMDIST="fedora-16-i386"
17TESTVMISO="/users/bruno/iso/Fedora-16-i386-DVD.iso"
[1597]18PBUSER=pbtest
19PBTEST="/home/$PBUSER"
[1587]20export PBPROJ=afio
[1564]21
[1587]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
[1581]24sudopbtest() {
25
26cmd=$1
[1587]27msg=$2
[1581]28
[1587]29if [ _"$cmd" == _"/tmp/pbtestcmd" ]; then
[1597]30 echo "INFO (as $PBUSER): Now running `head -1 $cmd` [$msg]"
[1587]31else
[1597]32 echo "INFO (as $PBUSER): Now running $cmd [$msg]"
[1587]33fi
[1597]34sudo -n -E su - $PBUSER -c "$cmd"
[1587]35ret=$?
36if [ $ret -ne 0 ] && [ _"$msg" == _"" ]; then
37 echo "================================"
38 echo "ERROR: Command $cmd failed: $ret"
39 echo "================================"
40fi
41echo " "
[1581]42}
43
[1587]44sudocmd() {
45cmd=$1
[1581]46
[1587]47echo "INFO (as root): Now running $cmd"
[1590]48sudo -n $cmd
[1587]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/.??*"
[1597]60sudocmd "killall -u $PBUSER"
61sudocmd "userdel $PBUSER"
62#sudocmd "groupdel $PBUSER" 1
63sudocmd "useradd $PBUSER"
64sudocmd "grep -q $PBUSER /etc/sudoers"
[1565]65if [ $? -ne 0 ]; then
[1577]66 cat > /tmp/sudoers << EOF
[1587]67Defaults env_keep += "PBPROJ"
[1597]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
[1564]78EOF
[1587]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"
[1567]83 rm -f /tmp/sudoers /tmp/sudoers2
[1565]84fi
[1597]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"
[1594]87sudopbtest "echo export PBPROJ=$PBPROJ >> $PBTEST/.bash_profile"
[1587]88sudopbtest "env | grep PBPROJ"
[1564]89
[1565]90#Taken from Lab document originally
91# SVN repo setup
[1580]92sudopbtest "svnadmin create $PBTEST/svn"
[1577]93cat > /tmp/authz << EOF
[1565]94[/]
[1597]95$PBUSER = rw
[1565]96* = r
97EOF
[1587]98sudocmd "mv /tmp/authz $PBTEST/svn/conf/authz"
[1577]99cat > /tmp/passwd << EOF
[1574]100[users]
[1597]101$PBUSER = $PBUSER
[1565]102EOF
[1587]103sudocmd "mv /tmp/passwd $PBTEST/svn/conf/passwd"
[1567]104cat > /tmp/svnserve.conf << EOF
[1565]105[general]
[1573]106password-db = $PBTEST/svn/conf/passwd
[1565]107authz-db = authz
[1573]108anon-access = read
109auth-access = write
[1575]110realm = pb
[1565]111EOF
[1587]112sudocmd "mv /tmp/svnserve.conf $PBTEST/svn/conf/svnserve.conf"
[1597]113sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/svn/conf/authz $PBTEST/svn/conf/passwd $PBTEST/svn/conf/svnserve.conf"
[1587]114sudopbtest "killall svnserve" 1
115sudopbtest "svnserve -d -r $PBTEST/svn"
116sudopbtest "mkdir -p $PBTEST/{ftp,ve,vm,.ssh,pb}"
117sudopbtest "chmod 700 $PBTEST/.ssh"
[1565]118
[1587]119sudopbtest "pb -h"
[1580]120sudopbtest "pbdistrocheck"
[1587]121sudopbtest "pb clean 2>&1 > /dev/null" 1
[1577]122
[1567]123cat > /tmp/.pbrc << EOF
[1564]124# Projects
[1565]125pbconfurl afio = svn://localhost/pb/afio/pbconf
[1567]126pbdefdir default = \$ENV{'HOME'}/pb
[1580]127pbconfurl pb = svn://svn.project-builder.org/pb/pbconf
[1567]128pbconfdir pb = \$ENV{'HOME'}/pb/pbconf
[1580]129pburl pb = svn://svn.project-builder.org/pb
[1565]130pburl mondorescue = svn://svn.mondorescue.org/mondorescue/branches
[1587]131sshhost pb = localhost
[1597]132sshlogin pb = $PBUSER
[1587]133sshdir pb = \$ENV{'HOME'}/ftp
[1564]134#
[1565]135pbpackager default = Big Chief <bigchief@hp.com>
[1564]136vmport pb = 2200
137pbparallel pb = 6
[1593]138vepath default = $PBTEST/ve
[1594]139vmpath default = $PBTEST/vm
[1587]140EOF
141sudocmd "mv /tmp/.pbrc $PBTEST/.pbrc"
142
143cat > /tmp/.pbrc << EOF
[1565]144vmtype default = kvm
145vmcmd default = qemu-kvm
[1564]146vmsize fedora = 10G
[1565]147vmmonport default = 4000
[1564]148EOF
[1594]149echo "vmlist default = `echo $TESTVMDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
[1587]150sudocmd "mv /tmp/.pbrc $PBTEST/vm/.pbrc"
[1564]151
[1567]152cat > /tmp/.pbrc << EOF
[1565]153vetype default = chroot
154verpmtype default = rpmbootstrap
155vedebtype default = debootstrap
156verebuild default = false
157veopt default =
158vesnap default = false
[1597]159velogin default = $PBUSER
[1565]160EOF
[1587]161echo "velist default = `echo $TESTVEDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
162sudocmd "mv /tmp/.pbrc $PBTEST/ve/.pbrc"
[1597]163sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.pbrc $PBTEST/ve/.pbrc $PBTEST/vm/.pbrc"
[1565]164
[1587]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"
[1574]169
[1577]170# Create SVN conf files - doesn't work fully as it asks for a password - solved with PBVCSOPT
[1587]171sudopbtest "svn info 2>&1 > /dev/null" 1
[1574]172cat > /tmp/servers << EOF
[1575]173[global]
[1574]174store-passwords = yes
175store-plaintext-passwords = yes
[1575]176store-auth-creds = yes
[1574]177EOF
[1587]178sudocmd "mv /tmp/servers $PBTEST/.subversion/servers"
[1597]179sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.subversion/servers"
[1574]180
[1597]181VCSOPT='--username $PBUSER --password $PBUSER'
[1577]182
[1587]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"
[1590]187sudopbtest "svn ci $VCSOPT -m 'add readme' $PBTEST/pb/README"
[1587]188sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 newproj afio"
[1577]189
[1587]190grep -vE '^defpkgdir|^projver|^projtag|^pburl|^pbrepo|^shh' $PBTEST/pb/afio/pbconf/2.5/afio.pb > /tmp/afio.pb
[1567]191cat >> /tmp/afio.pb << EOF
[1565]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
[1597]198sshlogin afio = $PBUSER
[1567]199sshdir afio = \$ENV{'HOME'}/ftp
[1565]200EOF
[1587]201sudocmd "mv /tmp/afio.pb $PBTEST/pb/afio/pbconf/2.5/afio.pb"
[1597]202sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio.pb"
[1587]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
[1565]208
[1587]209grep -vE 'PBSRC|PBDESC|PBSUMMARY|PBURL|PBLOG' $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf > /tmp/all.pbf
[1567]210cat >> /tmp/all.pbf << EOF
[1565]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
[1587]217sudocmd "mv /tmp/all.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
[1597]218sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
[1577]219
[1587]220grep -vE 'PBGRP|PBLIC' $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf > /tmp/rpm.pbf
[1567]221cat >> /tmp/rpm.pbf << EOF
[1565]222filter PBGRP = Applications/Archiving
223filter PBLIC = Afio
[1596]224filter PBDEP = gcc
[1565]225EOF
[1587]226sudocmd "mv /tmp/rpm.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf"
[1597]227sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf "
[1577]228
[1597]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
[1577]236# First build
[1587]237sudopbtest "pb -r 2.5 sbx2build"
[1565]238
[1587]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
[1590]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
[1587]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
[1596]246perl -pi -e 's|^#Requires:|Requires:|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
[1587]247EOF
248chmod 755 /tmp/pbtestcmd
249sudopbtest /tmp/pbtestcmd
[1565]250
[1577]251cat > /tmp/pbcl << EOF
[1565]252# $Id$
[1564]253
[1565]254AFIO CHANGES
255
2562.5 (2009-12-03)
257- First packages created
258EOF
[1587]259sudocmd "mv /tmp/pbcl $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
[1597]260sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
[1587]261sudopbtest "svn add $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
262sudopbtest "svn ci -m 'Adding pbcl for afio' $VCSOPT $PBTEST/pb"
[1565]263
[1587]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
[1597]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
[1587]272EOF
273chmod 755 /tmp/pbtestcmd
274sudopbtest /tmp/pbtestcmd
275
[1567]276cat > /tmp/afio.docs << EOF
[1565]277HISTORY
278PORTING
279README
280SCRIPTS
281ANNOUNCE-2.5
282perl.artistic.license
283afio.lsm
284script1
285script2
286script3
287script4
288EOF
[1587]289sudocmd "mv /tmp/afio.docs $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs"
[1597]290sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs "
[1567]291
[1587]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
[1597]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
[1587]298sed -i -e '/\.\/configure /d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
299EOF
300chmod 755 /tmp/pbtestcmd
301sudopbtest /tmp/pbtestcmd
[1565]302
[1587]303
[1565]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
[1587]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
[1564]314for d in $TESTVEDIST; do
[1593]315 sudopbtest "PATH=${PATH}:/sbin:/usr/sbin pb -p pb -m $d newve"
[1580]316 sudopbtest "pb -p pb -m $d sbx2setupve"
317 sudopbtest "pb -p pb -m $d snapve"
[1587]318 sudopbtest "pb -m $d sbx2ve"
[1564]319 # Cleaning VE to use the snapshot
320 dd=`echo $d | cut -d'-' -f1`
[1596]321 vv=`echo $d | cut -d'-' -f2`
322 aa=`echo $d | cut -d'-' -f3`
[1597]323 if [ -f "$PBTEST/ve/$dd/$vv/$aa/proc/cpuinfo" ]; then
[1596]324 sudocmd "umount $PBTEST/ve/$dd/$vv/$aa/proc"
325 fi
326 sudocmd "rm -rf $PBTEST/ve/$dd/$vv/$aa"
[1587]327 sudopbtest "pb -S -m $d sbx2ve"
[1564]328done
329
[1590]330sudopbtest "svn ci $VCSOPT -m 'sync before newver' $PBTEST/pb"
331sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 -V 2.6 newver"
[1587]332sudopbtest "pb clean"
[1565]333
[1597]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"
[1580]345
346
[1577]347# test also with MOndoRescue
348pb -p mondorescue -r branches/3.0 cms2pkg
349
[1580]350# cleanup
[1587]351sudopbtest "killall svnserve" 1
[1580]352
Note: See TracBrowser for help on using the repository browser.