Home | History | Annotate | Line # | Download | only in api
      1  1.1  haad /*	$NetBSD: vgtest.c,v 1.1.1.1 2009/12/02 00:26:03 haad Exp $	*/
      2  1.1  haad 
      3  1.1  haad /*
      4  1.1  haad  * Copyright (C) 2009 Red Hat, Inc. All rights reserved.
      5  1.1  haad  *
      6  1.1  haad  * This file is part of LVM2.
      7  1.1  haad  *
      8  1.1  haad  * This copyrighted material is made available to anyone wishing to use,
      9  1.1  haad  * modify, copy, or redistribute it subject to the terms and conditions
     10  1.1  haad  * of the GNU Lesser General Public License v.2.1.
     11  1.1  haad  *
     12  1.1  haad  * You should have received a copy of the GNU Lesser General Public License
     13  1.1  haad  * along with this program; if not, write to the Free Software Foundation,
     14  1.1  haad  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     15  1.1  haad  */
     16  1.1  haad /*
     17  1.1  haad  * Unit test case for vgcreate and related APIs.
     18  1.1  haad  * # gcc -g vgcreate.c -I../../liblvm -I../../include -L../../liblvm \
     19  1.1  haad  *   -L../../libdm -ldevmapper -llvm2app
     20  1.1  haad  * # export LD_LIBRARY_PATH=`pwd`/../../libdm:`pwd`/../../liblvm
     21  1.1  haad  */
     22  1.1  haad #include <stdio.h>
     23  1.1  haad #include <unistd.h>
     24  1.1  haad #include <inttypes.h>
     25  1.1  haad 
     26  1.1  haad #include "lvm2app.h"
     27  1.1  haad 
     28  1.1  haad lvm_t handle;
     29  1.1  haad vg_t vg;
     30  1.1  haad const char *vg_name;
     31  1.1  haad #define MAX_DEVICES 16
     32  1.1  haad const char *device[MAX_DEVICES];
     33  1.1  haad uint64_t size = 1024;
     34  1.1  haad 
     35  1.1  haad #define vg_create(vg_name) \
     36  1.1  haad 	printf("Creating VG %s\n", vg_name); \
     37  1.1  haad 	vg = lvm_vg_create(handle, vg_name); \
     38  1.1  haad 	if (!vg) { \
     39  1.1  haad 		fprintf(stderr, "Error creating volume group %s\n", vg_name); \
     40  1.1  haad 		goto bad; \
     41  1.1  haad 	}
     42  1.1  haad #define vg_extend(vg, dev) \
     43  1.1  haad 	printf("Extending VG %s by %s\n", vg_name, dev); \
     44  1.1  haad 	status = lvm_vg_extend(vg, dev); \
     45  1.1  haad 	if (status) { \
     46  1.1  haad 		fprintf(stderr, "Error extending volume group %s " \
     47  1.1  haad 			"with device %s\n", vg_name, dev); \
     48  1.1  haad 		goto bad; \
     49  1.1  haad 	}
     50  1.1  haad #define vg_commit(vg) \
     51  1.1  haad 	printf("Committing VG %s to disk\n", vg_name); \
     52  1.1  haad 	status = lvm_vg_write(vg); \
     53  1.1  haad 	if (status) { \
     54  1.1  haad 		fprintf(stderr, "Commit of volume group '%s' failed\n", \
     55  1.1  haad 			lvm_vg_get_name(vg)); \
     56  1.1  haad 		goto bad; \
     57  1.1  haad 	}
     58  1.1  haad #define vg_open(vg_name, mode) \
     59  1.1  haad 	printf("Opening VG %s %s\n", vg_name, mode); \
     60  1.1  haad 	vg = lvm_vg_open(handle, vg_name, mode, 0); \
     61  1.1  haad 	if (!vg) { \
     62  1.1  haad 		fprintf(stderr, "Error opening volume group %s\n", vg_name); \
     63  1.1  haad 		goto bad; \
     64  1.1  haad 	}
     65  1.1  haad #define vg_close(vg) \
     66  1.1  haad 	printf("Closing VG %s\n", vg_name); \
     67  1.1  haad 	if (lvm_vg_close(vg)) { \
     68  1.1  haad 		fprintf(stderr, "Error closing volume group %s\n", vg_name); \
     69  1.1  haad 		goto bad; \
     70  1.1  haad 	}
     71  1.1  haad #define vg_reduce(vg, dev) \
     72  1.1  haad 	printf("Reducing VG %s by %s\n", vg_name, dev); \
     73  1.1  haad 	status = lvm_vg_reduce(vg, dev); \
     74  1.1  haad 	if (status) { \
     75  1.1  haad 		fprintf(stderr, "Error reducing volume group %s " \
     76  1.1  haad 			"by device %s\n", vg_name, dev); \
     77  1.1  haad 		goto bad; \
     78  1.1  haad 	}
     79  1.1  haad #define vg_remove(vg) \
     80  1.1  haad 	printf("Removing VG %s from system\n", vg_name); \
     81  1.1  haad 	status = lvm_vg_remove(vg); \
     82  1.1  haad 	if (status) { \
     83  1.1  haad 		fprintf(stderr, "Revmoval of volume group '%s' failed\n", \
     84  1.1  haad 			vg_name); \
     85  1.1  haad 		goto bad; \
     86  1.1  haad 	}
     87  1.1  haad 
     88  1.1  haad static int init_vgtest(int argc, char *argv[])
     89  1.1  haad {
     90  1.1  haad 	int i;
     91  1.1  haad 
     92  1.1  haad 	if (argc < 4) {
     93  1.1  haad 		fprintf(stderr, "Usage: %s <vgname> <pv1> <pv2> [... <pvN> ]",
     94  1.1  haad 			argv[0]);
     95  1.1  haad 		return -1;
     96  1.1  haad 	}
     97  1.1  haad 	vg_name = argv[1];
     98  1.1  haad 	for(i=2; i<MAX_DEVICES && i < argc; i++) {
     99  1.1  haad 		device[i-2] = argv[i];
    100  1.1  haad 	}
    101  1.1  haad 	return 0;
    102  1.1  haad }
    103  1.1  haad 
    104  1.1  haad int main(int argc, char *argv[])
    105  1.1  haad {
    106  1.1  haad 	int status;
    107  1.1  haad 
    108  1.1  haad 	if (init_vgtest(argc, argv) < 0)
    109  1.1  haad 		goto bad;
    110  1.1  haad 
    111  1.1  haad 	/* FIXME: make the below messages verbose-only and print PASS/FAIL*/
    112  1.1  haad 	printf("Opening LVM\n");
    113  1.1  haad 	handle = lvm_init(NULL);
    114  1.1  haad 	if (!handle) {
    115  1.1  haad 		fprintf(stderr, "Unable to lvm_init\n");
    116  1.1  haad 		goto bad;
    117  1.1  haad 	}
    118  1.1  haad 
    119  1.1  haad 	printf("Library version: %s\n", lvm_library_get_version());
    120  1.1  haad 	vg_create(vg_name);
    121  1.1  haad 	vg_extend(vg, device[0]);
    122  1.1  haad 
    123  1.1  haad 	printf("Setting VG %s extent_size to %"PRIu64"\n", vg_name, size);
    124  1.1  haad 	status = lvm_vg_set_extent_size(vg, size);
    125  1.1  haad 	if (status) {
    126  1.1  haad 		fprintf(stderr, "Can not set physical extent "
    127  1.1  haad 			"size '%"PRIu64"' for '%s'\n",
    128  1.1  haad 			size, vg_name);
    129  1.1  haad 		goto bad;
    130  1.1  haad 	}
    131  1.1  haad 
    132  1.1  haad 	vg_commit(vg);
    133  1.1  haad 	vg_close(vg);
    134  1.1  haad 
    135  1.1  haad 	vg_open(vg_name, "r");
    136  1.1  haad 	vg_close(vg);
    137  1.1  haad 
    138  1.1  haad 	vg_open(vg_name, "w");
    139  1.1  haad 	vg_extend(vg, device[1]);
    140  1.1  haad 	vg_reduce(vg, device[0]);
    141  1.1  haad 	vg_commit(vg);
    142  1.1  haad 	vg_close(vg);
    143  1.1  haad 
    144  1.1  haad 	vg_open(vg_name, "w");
    145  1.1  haad 	vg_extend(vg, device[0]);
    146  1.1  haad 	vg_commit(vg);
    147  1.1  haad 	vg_close(vg);
    148  1.1  haad 
    149  1.1  haad 	vg_open(vg_name, "w");
    150  1.1  haad 	vg_remove(vg);
    151  1.1  haad 	vg_commit(vg);
    152  1.1  haad 	vg_close(vg);
    153  1.1  haad 
    154  1.1  haad 	lvm_quit(handle);
    155  1.1  haad 	printf("liblvm vgcreate unit test PASS\n");
    156  1.1  haad 	_exit(0);
    157  1.1  haad bad:
    158  1.1  haad 	printf("liblvm vgcreate unit test FAIL\n");
    159  1.1  haad 	if (handle && lvm_errno(handle))
    160  1.1  haad 		fprintf(stderr, "LVM Error: %s\n", lvm_errmsg(handle));
    161  1.1  haad 	if (vg)
    162  1.1  haad 		lvm_vg_close(vg);
    163  1.1  haad 	if (handle)
    164  1.1  haad 		lvm_quit(handle);
    165  1.1  haad 	_exit(-1);
    166  1.1  haad }
    167