All of lore.kernel.org
 help / color / mirror / Atom feed
From: wysochanski@sourceware.org <wysochanski@sourceware.org>
To: lvm-devel@redhat.com
Subject: LVM2 ./WHATS_NEW tools/vgcreate.c test/t-vgcre ...
Date: 11 Jan 2008 07:02:35 -0000	[thread overview]
Message-ID: <20080111070235.17096.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	wysochanski at sourceware.org	2008-01-11 07:02:35

Modified files:
	.              : WHATS_NEW 
	tools          : vgcreate.c 
Added files:
	test           : t-vgcreate-usage.sh 

Log message:
	Refactor vgcreate for parameter validation and add tests

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.757&r2=1.758
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/vgcreate.c.diff?cvsroot=lvm2&r1=1.52&r2=1.53
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/test/t-vgcreate-usage.sh.diff?cvsroot=lvm2&r1=NONE&r2=1.1

--- LVM2/WHATS_NEW	2008/01/10 22:21:44	1.757
+++ LVM2/WHATS_NEW	2008/01/11 07:02:34	1.758
@@ -1,5 +1,6 @@
 Version 2.02.30 -
 ===================================
+  Refactor vgcreate for parameter validation and add tests.
   Add new convert_lv field to lvs output.
   Print warning when lvm tools are running as non-root.
   Add snapshot dmeventd library (enables dmeventd snapshot monitoring).
--- LVM2/tools/vgcreate.c	2007/11/14 00:08:25	1.52
+++ LVM2/tools/vgcreate.c	2008/01/11 07:02:34	1.53
@@ -17,6 +17,43 @@
 
 #define DEFAULT_EXTENT 4096	/* In KB */
 
+static int validate_vg_create_params(struct cmd_context *cmd,
+				     const char *vg_name,
+				     const uint32_t extent_size,
+				     size_t *max_pv,
+				     size_t *max_lv,
+				     const alloc_policy_t alloc)
+{
+	if (!validate_new_vg_name(cmd, vg_name)) {
+		log_error("New volume group name \"%s\" is invalid", vg_name);
+		return 0;
+	}
+
+	if (alloc == ALLOC_INHERIT) {
+		log_error("Volume Group allocation policy cannot inherit "
+			  "from anything");
+		return 0;
+	}
+
+	if (!extent_size) {
+		log_error("Physical extent size may not be zero");
+		return 0;
+	}
+
+	if (!(cmd->fmt->features & FMT_UNLIMITED_VOLS)) {
+		if (!*max_lv)
+			*max_lv = 255;
+		if (!*max_pv)
+			*max_pv = 255;
+		if (*max_lv > 255 || *max_pv > 255) {
+			log_error("Number of volumes may not exceed 255");
+			return 0;
+		}
+	}
+
+	return 1;
+}
+
 int vgcreate(struct cmd_context *cmd, int argc, char **argv)
 {
 	size_t max_lv, max_pv;
@@ -43,23 +80,6 @@
 	max_pv = arg_uint_value(cmd, maxphysicalvolumes_ARG, 0);
 	alloc = arg_uint_value(cmd, alloc_ARG, ALLOC_NORMAL);
 
-	if (alloc == ALLOC_INHERIT) {
-		log_error("Volume Group allocation policy cannot inherit "
-			  "from anything");
-		return EINVALID_CMD_LINE;
-	}
-
-	if (!(cmd->fmt->features & FMT_UNLIMITED_VOLS)) {
-		if (!max_lv)
-			max_lv = 255;
-		if (!max_pv)
-			max_pv = 255;
-		if (max_lv > 255 || max_pv > 255) {
-			log_error("Number of volumes may not exceed 255");
-			return EINVALID_CMD_LINE;
-		}
-	}
-
 	if (arg_sign_value(cmd, physicalextentsize_ARG, 0) == SIGN_MINUS) {
 		log_error("Physical extent size may not be negative");
 		return EINVALID_CMD_LINE;
@@ -79,15 +99,9 @@
 	extent_size =
 	    arg_uint_value(cmd, physicalextentsize_ARG, DEFAULT_EXTENT);
 
-	if (!extent_size) {
-		log_error("Physical extent size may not be zero");
-		return EINVALID_CMD_LINE;
-	}
-
-	if (!validate_new_vg_name(cmd, vg_name)) {
-		log_error("New volume group name \"%s\" is invalid", vg_name);
-		return ECMD_FAILED;
-	}
+	if (!validate_vg_create_params(cmd, vg_name, extent_size,
+				       &max_pv, &max_lv, alloc))
+	    return EINVALID_CMD_LINE;
 
 	/* Create the new VG */
 	if (!(vg = vg_create(cmd, vg_name, extent_size, max_pv, max_lv, alloc,
/cvs/lvm2/LVM2/test/t-vgcreate-usage.sh,v  -->  standard output
revision 1.1
--- LVM2/test/t-vgcreate-usage.sh
+++ -	2008-01-11 07:02:35.770804000 +0000
@@ -0,0 +1,75 @@
+#!/bin/sh
+# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
+#
+# 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 General Public License v.2.
+#
+# You should have received a copy of the GNU 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
+
+test_description='Exercise some vgcreate diagnostics'
+privileges_required_=1
+
+. ./test-lib.sh
+
+cleanup_()
+{
+  test -n "$d1" && losetup -d "$d1"
+  test -n "$d2" && losetup -d "$d2"
+  rm -f "$f1" "$f2"
+}
+
+test_expect_success \
+  'set up temp files, loopback devices, PVs, vgname' \
+  'f1=$(pwd)/1 && d1=$(loop_setup_ "$f1") &&
+   f2=$(pwd)/2 && d2=$(loop_setup_ "$f2") &&
+   vg=$(this_test_)-test-vg-$$            &&
+   pvcreate $d1 $d2'
+
+lv=vgcreate-usage-$$
+
+test_expect_success \
+  'vgcreate rejects a zero physical extent size' \
+  'vgcreate --physicalextentsize 0 $vg $d1 $d2 2>err;
+   status=$?; echo status=$?; test $status = 3 &&
+   grep "^  Physical extent size may not be zero\$" err'
+
+test_expect_success \
+  'vgcreate rejects "inherit" allocation policy' \
+  'vgcreate --alloc inherit $vg $d1 $d2 2>err;
+   status=$?; echo status=$?; test $status = 3 &&
+   grep "^  Volume Group allocation policy cannot inherit from anything\$" err'
+
+test_expect_success \
+  'vgcreate rejects vgname "."' \
+  'vg=.; vgcreate $vg $d1 $d2 2>err;
+   status=$?; echo status=$?; test $status = 3 &&
+   grep "New volume group name \"$vg\" is invalid\$" err'
+
+test_expect_success \
+  'vgcreate rejects vgname greater than 128 characters' \
+  'vg=thisnameisridiculouslylongtotestvalidationcodecheckingmaximumsizethisiswhathappenswhenprogrammersgetboredandorarenotcreativedonttrythisathome;
+   vgcreate $vg $d1 $d2 2>err;
+   status=$?; echo status=$?; test $status = 3 &&
+   grep "New volume group name \"$vg\" is invalid\$" err'
+
+test_expect_success \
+  'vgcreate rejects already existing vgname "/dev/fd0"' \
+  'vg=/dev/fd0; vgcreate $vg $d1 $d2 2>err;
+   status=$?; echo status=$?; test $status = 3 &&
+   grep "New volume group name \"$vg\" is invalid\$" err'
+
+# FIXME: Not sure why this fails
+#test_expect_success \
+#  'vgcreate rejects MaxLogicalVolumes > 255' \
+#  'vgcreate --metadatatype 1 --maxlogicalvolumes 1024 $vg $d1 $d2 2>err;
+#   cp err save;
+#   status=$?; echo status=$?; test $status = 3 &&
+#   grep "^  Number of volumes may not exceed 255\$" err'
+
+test_done
+# Local Variables:
+# indent-tabs-mode: nil
+# End:



                 reply	other threads:[~2008-01-11  7:02 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080111070235.17096.qmail@sourceware.org \
    --to=wysochanski@sourceware.org \
    --cc=lvm-devel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.