2009-07-14 07:08:56 +04:00
/*
* Copyright ( C ) 2009 Red Hat , Inc . All rights reserved .
*
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License v .2 .1 .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
/*
* Unit test case for vgcreate and related APIs .
* # gcc - g vgcreate . c - I . . / . . / liblvm - I . . / . . / include - L . . / . . / liblvm \
* - L . . / . . / libdm - ldevmapper - llvm2app
* # export LD_LIBRARY_PATH = ` pwd ` / . . / . . / libdm : ` pwd ` / . . / . . / liblvm
*/
# include <stdio.h>
# include <unistd.h>
2009-07-21 14:41:47 +04:00
# include <inttypes.h>
2009-07-14 07:08:56 +04:00
# include "lvm.h"
lvm_t handle ;
vg_t * vg ;
2009-07-21 14:41:47 +04:00
const char * vg_name = " my_vg " ;
const char * device = " /dev/loop3 " ;
2009-07-27 21:44:58 +04:00
const char * device2 = " /dev/loop4 " ;
2009-07-14 07:08:56 +04:00
uint64_t size = 1024 ;
2009-07-27 21:44:58 +04:00
# define vg_create(vg_name) \
printf ( " Creating VG %s \n " , vg_name ) ; \
vg = lvm_vg_create ( handle , vg_name ) ; \
if ( ! vg ) { \
fprintf ( stderr , " Error creating volume group %s \n " , vg_name ) ; \
goto bad ; \
}
# define vg_extend(vg, dev) \
printf ( " Extending VG %s by %s \n " , vg_name , dev ) ; \
status = lvm_vg_extend ( vg , dev ) ; \
if ( status ) { \
fprintf ( stderr , " Error extending volume group %s " \
" with device %s \n " , vg_name , dev ) ; \
goto bad ; \
}
# define vg_commit(vg) \
printf ( " Committing VG %s to disk \n " , vg_name ) ; \
status = lvm_vg_write ( vg ) ; \
if ( status ) { \
fprintf ( stderr , " Creation of volume group '%s' on " \
" device '%s' failed \n " , \
lvm_vg_get_name ( vg ) , device ) ; \
goto bad ; \
}
# define vg_open(vg_name, mode) \
printf ( " Opening VG %s %s \n " , vg_name , mode ) ; \
vg = lvm_vg_open ( handle , vg_name , mode , 0 ) ; \
if ( ! vg ) { \
fprintf ( stderr , " Error opening volume group %s \n " , vg_name ) ; \
goto bad ; \
}
# define vg_close(vg) \
printf ( " Closing VG %s \n " , vg_name ) ; \
if ( lvm_vg_close ( vg ) ) { \
fprintf ( stderr , " Error closing volume group %s \n " , vg_name ) ; \
goto bad ; \
}
# define vg_reduce(vg, dev) \
printf ( " Reducing VG %s by %s \n " , vg_name , dev ) ; \
status = lvm_vg_reduce ( vg , dev ) ; \
if ( status ) { \
fprintf ( stderr , " Error reducing volume group %s " \
" by device %s \n " , vg_name , dev ) ; \
goto bad ; \
}
# define vg_remove(vg) \
printf ( " Removing VG %s from system \n " , vg_name ) ; \
status = lvm_vg_remove ( vg ) ; \
if ( status ) { \
fprintf ( stderr , " Revmoval of volume group '%s' failed \n " , \
vg_name ) ; \
goto bad ; \
}
2009-07-14 07:08:56 +04:00
int main ( int argc , char * argv [ ] )
{
int status ;
/* FIXME: input vgname, etc from cmdline */
/* FIXME: make the below messages verbose-only and print PASS/FAIL*/
printf ( " Opening LVM \n " ) ;
handle = lvm_create ( NULL ) ;
if ( ! handle ) {
fprintf ( stderr , " Unable to lvm_create \n " ) ;
goto bad ;
}
2009-07-27 21:44:58 +04:00
vg_create ( vg_name ) ;
vg_extend ( vg , device ) ;
2009-07-14 07:08:56 +04:00
2009-07-21 14:41:47 +04:00
printf ( " Setting VG %s extent_size to % " PRIu64 " \n " , vg_name , size ) ;
2009-07-14 07:08:56 +04:00
status = lvm_vg_set_extent_size ( vg , size ) ;
2009-07-27 00:29:56 +04:00
if ( status ) {
2009-07-14 07:08:56 +04:00
fprintf ( stderr , " Can not set physical extent "
2009-07-21 14:41:47 +04:00
" size '% " PRIu64 " ' for '%s' \n " ,
2009-07-14 07:08:56 +04:00
size , vg_name ) ;
goto bad ;
}
2009-07-27 21:44:58 +04:00
vg_commit ( vg ) ;
vg_close ( vg ) ;
2009-07-14 07:08:56 +04:00
2009-07-27 21:44:58 +04:00
vg_open ( vg_name , " r " ) ;
vg_close ( vg ) ;
vg_open ( vg_name , " w " ) ;
vg_extend ( vg , device2 ) ;
vg_reduce ( vg , device ) ;
vg_commit ( vg ) ;
vg_close ( vg ) ;
vg_open ( vg_name , " w " ) ;
vg_extend ( vg , device ) ;
vg_commit ( vg ) ;
vg_close ( vg ) ;
vg_open ( vg_name , " w " ) ;
vg_remove ( vg ) ;
vg_close ( vg ) ;
2009-07-14 07:08:56 +04:00
lvm_destroy ( handle ) ;
printf ( " liblvm vgcreate unit test PASS \n " ) ;
_exit ( 0 ) ;
bad :
printf ( " liblvm vgcreate unit test FAIL \n " ) ;
2009-07-22 20:49:54 +04:00
if ( handle & & lvm_errno ( handle ) )
fprintf ( stderr , " LVM Error: %s \n " , lvm_errmsg ( handle ) ) ;
2009-07-14 07:08:56 +04:00
if ( vg )
lvm_vg_close ( vg ) ;
if ( handle )
lvm_destroy ( handle ) ;
_exit ( - 1 ) ;
}