All of lore.kernel.org
 help / color / mirror / Atom feed
* test/t1000-lvcreate-usage.sh: exercise lvcreate
@ 2007-09-17 14:42 Jim Meyering
  2007-09-17 19:20 ` Alasdair G Kergon
  0 siblings, 1 reply; 4+ messages in thread
From: Jim Meyering @ 2007-09-17 14:42 UTC (permalink / raw)
  To: lvm-devel

Dave and I were talking last week about the lack of
integration tests, and since he was working on lvcreate
and I'd just created this test framework, he sent me a bunch
of commands he'd been using to test lvcreate;  Today I
made them work with the new framework.

When I run the new test by itself, it does this:

    # cd test && ./t1000-lvcreate-usage.sh
    *   ok 1: set up temp files, loopback devices, PVs, and a VG
    *   ok 2: lvcreate w/negative stripesize must fail
    *   ok 3: lvcreate w/too-large stripesize must fail
    *   ok 4: lvcreate w/single stripe succeeds with diagnostics to stdout
    *   ok 5: lvcreate w/no stripe size succeeds with diagnostics to stdout
    *   ok 6: lvcreate w/invalid number of stripes must fail
    *   ok 7: lvcreate w/invalid stripe size must fail
    * passed all 7 test(s)

[Remember, I'm new to LVM, so if there are better/cleaner ways to test
 these things, please let me know, soon.  Otherwise, anything that's ugly
 or plain wrong in this test may end up being copy/pasted into new tests.
 Of course, if there's too much commonality, things will be factored out
 into shell functions that are shared, but still... ]

Here's the patch:

	Test how lvcreate handles its command-line options.

	* test/t1000-lvcreate-usage.sh: New tests.
	* test/Makefile.in (T): Add it.
	Derived from test cases by Dave Wysochanski.

Signed-off-by: Jim Meyering <jim@meyering.net>
---
 test/Makefile.in             |    1 +
 test/t1000-lvcreate-usage.sh |   70 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+), 0 deletions(-)
 create mode 100755 test/t1000-lvcreate-usage.sh

diff --git a/test/Makefile.in b/test/Makefile.in
index a7f2876..b54560f 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -32,6 +32,7 @@ SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH))
 # T = $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)
 T = \
   t0000-basic.sh \
+  t1000-lvcreate-usage.sh \
   t3000-lvcreate-pvtags.sh \
   t4000-pv-range-overflow.sh

diff --git a/test/t1000-lvcreate-usage.sh b/test/t1000-lvcreate-usage.sh
new file mode 100755
index 0000000..5f04b3e
--- /dev/null
+++ b/test/t1000-lvcreate-usage.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+test_description='Exercise some lvcreate diagnostics'
+privileges_required_=1
+
+. ./test-lib.sh
+
+cleanup_()
+{
+  test -n "$vg" && {
+    vgchange -an "$vg"
+    lvremove -ff "$vg"
+    vgremove "$vg"
+  } > /dev/null
+  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, and a VG' \
+  'f1="$(pwd)/1" && d1=$(loop_setup_ "$f1") &&
+   f2="$(pwd)/2" && d2=$(loop_setup_ "$f2") &&
+   pvcreate $d1 $d2      &&
+   vg=$(this_test_)-test-vg-$$  &&
+   vgcreate $vg $d1 $d2'
+
+lv=lvcreate-usage-$$
+
+test_expect_success \
+  'lvcreate w/negative stripesize must fail' \
+  'lvcreate -L 64M -n $lv -i2 --stripesize -4 $vg 2>err; test $? = 3 &&
+   grep "^  Negative stripesize is invalid\$" err'
+
+test_expect_success \
+  'lvcreate w/too-large stripesize must fail' \
+  'lvcreate -L 64M -n $lv -i2 --stripesize 4294967291 $vg 2>err; test $? = 3 &&
+   grep "^  Stripe size cannot be larger than 512.00 GB\$" err'
+
+test_expect_success \
+  'lvcreate w/single stripe succeeds with diagnostics to stdout' \
+  'lvcreate -L 64M -n $lv -i1 --stripesize 4 $vg >out 2>err &&
+   grep "^  Redundant stripes argument: default is 1\$" out &&
+   grep "^  Ignoring stripesize argument with single stripe\$" out &&
+   lvdisplay $vg &&
+   lvremove -ff $vg'
+
+test_expect_success \
+  'lvcreate w/no stripe size succeeds with diagnostics to stdout' \
+  'lvcreate -L 64M -n $lv -i2 $vg > out &&
+   grep "^  Using default stripesize" out &&
+   lvdisplay $vg &&
+   lvremove -ff $vg'
+
+test_expect_success \
+  'lvcreate w/invalid number of stripes must fail' \
+  'lvcreate -L 64M -n $lv -i129 $vg 2>err; test $? = 3 &&
+   grep "^  Number of stripes (129) must be between 1 and 128\$" err'
+
+# The case on lvdisplay output is to verify that the LV was not created.
+test_expect_success \
+  'lvcreate w/invalid stripe size must fail' \
+  'lvcreate -L 64M -n $lv -i2 --stripesize 3 $vg 2>err; test $? = 3 &&
+   grep "^  Invalid stripe size 3\.00 KB\$" err &&
+   case "$(lvdisplay $vg)" in "") true ;; *) false ;; esac'
+
+test_done
+# Local Variables:
+# indent-tabs-mode: nil
+# End:
--
1.5.3.1.19.gb5ef6-dirty



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* test/t1000-lvcreate-usage.sh: exercise lvcreate
  2007-09-17 14:42 test/t1000-lvcreate-usage.sh: exercise lvcreate Jim Meyering
@ 2007-09-17 19:20 ` Alasdair G Kergon
  2007-09-17 19:39   ` Jim Meyering
  0 siblings, 1 reply; 4+ messages in thread
From: Alasdair G Kergon @ 2007-09-17 19:20 UTC (permalink / raw)
  To: lvm-devel

On Mon, Sep 17, 2007 at 04:42:59PM +0200, Jim Meyering wrote:
> When I run the new test by itself, it does this:
>     # cd test && ./t1000-lvcreate-usage.sh
>     *   ok 1: set up temp files, loopback devices, PVs, and a VG
>     *   ok 2: lvcreate w/negative stripesize must fail
>     *   ok 3: lvcreate w/too-large stripesize must fail
>     *   ok 4: lvcreate w/single stripe succeeds with diagnostics to stdout
>     *   ok 5: lvcreate w/no stripe size succeeds with diagnostics to stdout
>     *   ok 6: lvcreate w/invalid number of stripes must fail
>     *   ok 7: lvcreate w/invalid stripe size must fail
>     * passed all 7 test(s)
 
Can you make that easier to parse?
Should every test have a reference number (perhaps derived from its
filename?) that is not going to change and appears on the output line?
Should each test belong to a defined category, e.g. 'lvcreate' above.
What role do the *s serve?  Would a wider range of characters make
the output more readable?
Can the version of the test also appear in the test logs along with
complete command output?  [I noticed a '>/dev/null' earlier that ought
to disappear:-) ]

'ok' with 'must fail' is misleading - try inverting the descriptions
e.g. 'rejects negative stripesizes'  (plural as I'd assume a range of
values are being tested each time)

Alasdair
-- 
agk at redhat.com



^ permalink raw reply	[flat|nested] 4+ messages in thread

* test/t1000-lvcreate-usage.sh: exercise lvcreate
  2007-09-17 19:20 ` Alasdair G Kergon
@ 2007-09-17 19:39   ` Jim Meyering
  2007-09-17 19:49     ` Alasdair G Kergon
  0 siblings, 1 reply; 4+ messages in thread
From: Jim Meyering @ 2007-09-17 19:39 UTC (permalink / raw)
  To: lvm-devel

Alasdair G Kergon <agk@redhat.com> wrote:

> On Mon, Sep 17, 2007 at 04:42:59PM +0200, Jim Meyering wrote:
>> When I run the new test by itself, it does this:
>>     # cd test && ./t1000-lvcreate-usage.sh
>>     *   ok 1: set up temp files, loopback devices, PVs, and a VG
>>     *   ok 2: lvcreate w/negative stripesize must fail
>>     *   ok 3: lvcreate w/too-large stripesize must fail
>>     *   ok 4: lvcreate w/single stripe succeeds with diagnostics to stdout
>>     *   ok 5: lvcreate w/no stripe size succeeds with diagnostics to stdout
>>     *   ok 6: lvcreate w/invalid number of stripes must fail
>>     *   ok 7: lvcreate w/invalid stripe size must fail
>>     * passed all 7 test(s)
>
> Can you make that easier to parse?

The idea is that you don't bother to parse it unless something fails :)
But see proposed rewordings below.

> Should every test have a reference number (perhaps derived from its

All of those tests come from the same file: t1000-lvcreate-usage.
Currently, I have these files:

  $ ls -1 t[0-9]*.sh
  t0000-basic.sh*
  t1000-lvcreate-usage.sh*
  t3000-lvcreate-pvtags.sh*
  t4000-pv-range-overflow.sh*

The numbers are pretty arbitrary, now.
Ideally, you'd put simplest tests early and ones that rely on
more and more functionality/tools later.

> filename?) that is not going to change and appears on the output line?

IMHO, the combination of the file name, t1000-lvcreate-usage,
and the textual "title" of each test within that file is sufficient
to identify it.

> Should each test belong to a defined category, e.g. 'lvcreate' above.
> What role do the *s serve?  Would a wider range of characters make
> the output more readable?

The output format is from that of git's tests.

> Can the version of the test also appear in the test logs along with
> complete command output?

If you want more output, you can run the test with --debug --verbose.
Or set those options in test/Makefile.in.  This is the first line of
that file:

    #TEST_OPTS=--verbose --debug

> [I noticed a '>/dev/null' earlier that ought
> to disappear:-) ]

If you mean the one in t1000*'s cleanup_ function, then
I'd rather not remove it.  Otherwise, currently you'd see
this at the end of the test:

    0 logical volume(s) in volume group "t1000-test-vg-11070" now active
    Volume group "t1000-test-vg-11070" successfully removed

> 'ok' with 'must fail' is misleading - try inverting the descriptions
> e.g. 'rejects negative stripesizes'  (plural as I'd assume a range of
> values are being tested each time)

How about these rewordings:

    ./t1000-lvcreate-usage.sh
    *   ok 1: set up temp files, loopback devices, PVs, and a VG
    *   ok 2: lvcreate rejects a negative stripesize
    *   ok 3: lvcreate rejects a too-large stripesize
    *   ok 4: lvcreate w/single stripe succeeds with diagnostics to stdout
    *   ok 5: lvcreate w/no stripe size succeeds with diagnostics to stdout
    *   ok 6: lvcreate rejects an invalid number of stripes
    *   ok 7: lvcreate rejects an invalid stripe size



^ permalink raw reply	[flat|nested] 4+ messages in thread

* test/t1000-lvcreate-usage.sh: exercise lvcreate
  2007-09-17 19:39   ` Jim Meyering
@ 2007-09-17 19:49     ` Alasdair G Kergon
  0 siblings, 0 replies; 4+ messages in thread
From: Alasdair G Kergon @ 2007-09-17 19:49 UTC (permalink / raw)
  To: lvm-devel

> > [I noticed a '>/dev/null' earlier that ought
> > to disappear:-) ]
> If you mean the one in t1000*'s cleanup_ function, then
> I'd rather not remove it.  

What I mean is no output should be discarded anywhere.  It should all
be captured into log files in case someone wants to refer to it.

Alasdair
-- 
agk at redhat.com



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2007-09-17 19:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-17 14:42 test/t1000-lvcreate-usage.sh: exercise lvcreate Jim Meyering
2007-09-17 19:20 ` Alasdair G Kergon
2007-09-17 19:39   ` Jim Meyering
2007-09-17 19:49     ` Alasdair G Kergon

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.