[pkg-kolab] r1376 - / pkg-kolab_testsuite
Mathieu Parent
sathieu at alioth.debian.org
Sun Oct 18 11:26:47 UTC 2009
Author: sathieu
Date: 2009-10-18 11:26:47 +0000 (Sun, 18 Oct 2009)
New Revision: 1376
Added:
pkg-kolab_testsuite/
pkg-kolab_testsuite/testsuite
Log:
Script to test Debian native kolab packages using virtual machines.
Added: pkg-kolab_testsuite/testsuite
===================================================================
--- pkg-kolab_testsuite/testsuite (rev 0)
+++ pkg-kolab_testsuite/testsuite 2009-10-18 11:26:47 UTC (rev 1376)
@@ -0,0 +1,284 @@
+#!/usr/bin/perl
+
+# Script to test Debian native kolab packages using virtual machines.
+#
+# Usage: testsuite
+
+# Written by Mathieu Parent <sathieu at debian.org>, 2009.
+#
+# This program is made available under the same license as the
+# kolabd package it applies to.
+
+use strict;
+use warnings;
+
+use UUID;
+use Sys::Virt;
+
+my %config = (
+ 'slave_count' => 1,
+ 'storagepooldir' => '/var/tmp/pkg-kolab_testsuite',
+
+ 'vmmemory' => "128Mb",
+ 'vmsize' => "1Gb",
+ 'vmswap' => "128Mb",
+ 'vmdist' => 'sid',
+
+ 'virt_uri' => 'vbox:///session',
+ 'virt_type' => 'vbox',
+
+ 'bridge' => 'br0',
+ 'dnsdomain' => 'local.tld',
+
+);
+
+#disable buffer
+$| = 1;
+
+my $vmm;
+my @domains;
+my @domain_names;
+my %test_domains;
+
+#-------------------------------------------------------
+sub initial_check
+{
+ my $groups = `groups`;
+ die 'The current user should be in group "libvirt".' if not $groups =~ /(^| )libvirt($| )/;
+ if($config{'virt_type'} eq 'vbox') {
+ die 'The current user should be in group "vboxusers".' if not $groups =~ /(^| )vboxusers($| )/;
+ die 'The current user should be in group "disk".' if not $groups =~ /(^| )disk($| )/;
+ }
+}
+
+#-------------------------------------------------------
+sub domain_ip
+{
+ my $domid = shift;
+ my $domname = shift;
+ return "192.168.0.".($domid+10);
+}
+#-------------------------------------------------------
+sub domain_bootstrap
+{
+ my $domid = shift;
+ my $domname = shift;
+
+ my $size = $config{'vmsize'};
+ my $memory = $config{'vmmemory'};
+ my $swap = $config{'vmswap'};
+ my $dist = $config{'vmdist'};
+ my $storagepooldir = $config{'storagepooldir'};
+
+ print "* Bootstraping:\n";
+ system("sudo xen-create-image --hostname $domname ".
+ "--ip ".domain_ip($domid, $domname)." ".
+ "--dist $dist --install-method debootstrap ".
+ "--dir '$storagepooldir' ".
+ "--memory $memory --size $size --swap $swap ".
+ "--fs ext3 --image sparse ".
+ "--force ".
+ "--cache --output '$storagepooldir' --no-hosts ");
+}
+
+#-------------------------------------------------------
+sub domain_make_bootable
+{
+ my $domid = shift;
+ my $domname = shift;
+
+ my $storagepooldir = $config{'storagepooldir'};
+ my $CHROOT = "$storagepooldir/domains/$domname/disk";
+ my $DEVICE = '/dev/loop0';
+
+ #extlinux
+ system("sudo extlinux --install $CHROOT");
+ system("cat <<EOF > /tmp/pkg-kolab-extlinux.conf
+default linux
+prompt 1
+timeout 50
+label linux
+kernel vmlinuz
+append root=/dev/hda initrd=./initrd.img
+EOF
+");
+ system("sudo mv /tmp/pkg-kolab-extlinux.conf '$CHROOT/extlinux.conf'");
+
+ #linux kernel
+ system("cat <<EOF > $storagepooldir/kernel-img.conf
+do_symlinks = yes
+relative_links = yes
+do_bootloader = no
+do_bootfloppy = no
+do_initrd = yes
+link_in_boot = no
+postinst_hook = #update-grub
+postrm_hook = #update-grub
+EOF
+");
+ system("sudo mv $storagepooldir/kernel-img.conf '$CHROOT/etc/kernel-img.conf'");
+ system("sudo chroot $CHROOT apt-get install -q linux-image-2.6.30-2-686");
+
+ #remove xen specific
+ system("sudo chroot $CHROOT aptitude -y purge libc6-xen");
+ system("sudo sed -i s/hvc0/tty1/ $CHROOT/etc/inittab");
+}
+
+#-------------------------------------------------------
+sub domain_preboot_install
+{
+ my $domid = shift;
+ my $domname = shift;
+
+ my $storagepooldir = $config{'storagepooldir'};
+
+ print "* Installing:\n";
+ system("sudo mkdir '$storagepooldir/domains/$domname/disk'");
+ system("sudo mount -o loop '$storagepooldir/domains/$domname/disk.img' '$storagepooldir/domains/$domname/disk'");
+
+ if($config{'virt_type'} eq 'vbox') {
+ domain_make_bootable($domid, $domname);
+ }
+ #copy ssh key
+ system("sudo mkdir '$storagepooldir/domains/$domname/disk/root/.ssh'");
+ system("sudo cp '$storagepooldir/key.pub' '$storagepooldir/domains/$domname/disk/root/.ssh/authorized_keys'");
+
+ system("sudo umount '$storagepooldir/domains/$domname/disk'");
+ system("sudo rmdir '$storagepooldir/domains/$domname/disk'");
+}
+
+#-------------------------------------------------------
+sub domain_boot
+{
+ my $domid = shift;
+ my $domname = shift;
+
+ my $size = $config{'vmsize'};
+ my $memory = $config{'vmmemory'};
+ my $swap = $config{'vmswap'};
+ my $storagepooldir = $config{'storagepooldir'};
+ my $bridge = $config{'bridge'};
+
+ print "* Preparing:\n";
+ if($config{'virt_type'} eq 'vbox') {
+ #volume
+ my $loopdev = `sudo losetup --find --show '$storagepooldir/domains/$domname/disk.img'`;
+ $loopdev =~ s/\s+$//;
+ system("sudo VBoxManage internalcommands createrawvmdk ".
+ "-filename '$storagepooldir/domains/$domname/disk.vmdk' ".
+ "-rawdisk '$loopdev' ");
+ system("sudo chmod go+rw '$storagepooldir/domains/$domname/disk.vmdk'");
+ system("VBoxManage openmedium disk '$storagepooldir/domains/$domname/disk.vmdk'");
+ #vm
+ print "* Defining:\n";
+ UUID::generate(my $uuid);
+ UUID::unparse($uuid, my $uuid_string);
+ my $xml = "<domain type='vbox'>
+ <name>$domname</name>
+ <uuid>$uuid_string</uuid>
+ <os>
+ <type>hvm</type>
+ <!-- boot from hd -->
+ <boot dev='hd'/>
+ </os>
+
+ <memory>$memory</memory>
+ <features>
+ <pae/>
+ <acpi/>
+ <apic/>
+ </features>
+ <devices>
+ <disk type='file' device='disk'>
+ <source file='$storagepooldir/domains/$domname/disk.vmdk'/>
+ <target dev='hda'/>
+ </disk>
+ <interface type='bridge'>
+ <source bridge='$bridge'/>
+ <!-- <mac address='00:16:3e:5d:c7:9e'/> -->
+ <model type='am79c973'/>
+ </interface>
+ </devices>
+ </domain>";
+ $test_domains{$domid} = $vmm->define_domain($xml);
+ } elsif($config{'virt_type'} eq 'xen') {
+ $test_domains{$domid} = $vmm->get_domain_by_name($domname);
+ #TODO: test
+ } else {
+ print "Unsupported virt_type: ".$config{'virt_type'}."\n";
+ exit 1;
+ }
+ print "* Starting:\n";
+ $test_domains{$domid}->create();
+}
+#-------------------------------------------------------
+initial_check();
+$vmm = Sys::Virt->new(address => $config{'virt_uri'});
+ at domains = $vmm->list_domains();
+while (my $dom = pop @domains) {
+ push @domain_names, $dom->get_name();
+}
+#-------------------------------------------------------
+
+system("mkdir -p '".$config{'storagepooldir'}."'");
+
+#generate ssh key
+system("ssh-keygen -f '".$config{'storagepooldir'}."/key' -N ''");
+
+my $hosts = "127.0.0.1 localhost\n";
+
+for(my $domid = 0; $domid<=$config{'slave_count'}; $domid++) {
+ my $domname = "kolab_test_slave$domid";
+ $domname = "kolab_test_master" if $domid == 0;
+ print "Domain $domname:\n";
+ my $domip = domain_ip($domid, $domname);
+ $host .= "$domip $domname.".$config{'storagepooldir'}." $domname\n"
+ #Cleaning:
+ if($domname ~~ @domain_names) {
+ print "* Domain already exists.\n";
+ my $dominfo = $vmm->get_domain_by_name($domname)->get_info();
+ if($dominfo->{'state'} == Sys::Virt::Domain::STATE_RUNNING) {
+ print "* Domain is running. Trying to shutdown";
+ $vmm->get_domain_by_name($domname)->shutdown();
+ print ".\n";
+ };
+ if($dominfo->{'state'} != Sys::Virt::Domain::STATE_SHUTOFF) {
+ print "* Domain is not shutoff, exiting.\n";
+ exit 1;
+ }
+ print "* Trying to undefine";
+ $vmm->get_domain_by_name($domname)->undefine();
+ print ".\n";
+ }
+ domain_bootstrap($domid, $domname);
+ domain_preboot_install($domid, $domname);
+ domain_boot($domid, $domname);
+}
+
+print "Phase 2:\n";
+for(my $domid = 0; $domid<=$config{'slave_count'}; $domid++) {
+ my $domname = "kolab_test_slave$domid";
+ $domname = "kolab_test_master" if $domid == 0;
+ print "Domain $domname:\n";
+ my $domip = domain_ip($domid, $domname);
+ #/etc/hosts file
+ system("ssh -i '".$config{'storagepooldir'}."/key' root\@$domip 'cat <<EOF >> /etc/hosts
+$hosts
+EOF'");
+ #package repository
+ system("ssh -i '".$config{'storagepooldir'}."/key' root\@$domip 'cat <<EOF >> /etc/apt/sources.list
+#kolab
+deb http://pkg-kolab.alioth.debian.org/packages kolab-snapshots/
+EOF'");
+ system("ssh -i '".$config{'storagepooldir'}."/key' root\@$domip 'apt-get update'");
+
+}
+
+#then, on each VM:
+# follow https://wiki.kolab.org/index.php/Debian_-_Administrators_-_Kolab_Installation
+
+#apt-get install phpunit
+#php /usr/share/php/tests/Kolab_Filter/Horde/Kolab/Filter/AllTests.php
+#php /usr/share/php/tests/Kolab_FreeBusy/Horde/Kolab/FreeBusy/AllTests.php
+
+
Property changes on: pkg-kolab_testsuite/testsuite
___________________________________________________________________
Added: svn:executable
+ *
More information about the pkg-kolab-devel
mailing list