Fix up concurrent test zpool setup and teardown

Set up zpools with a more unique name, stash the zpool name away in a file pointed
to by `$ZPOOL_NAME_FILE` (which is relative to a per-testcase generated temporary
directory), then remove the file based on `$ZPOOL_NAME_FILE` in the cleanup
routines.

This is a more concurrency-safe solution and will allow the testcases to be safely
executed in parallel.

Reviewed by:	kevans, jtl
Approved by:	jtl (mentor)
MFC after:	1 week
Differential Revision: https://reviews.freebsd.org/D19024
This commit is contained in:
Enji Cooper 2019-02-12 23:35:46 +00:00
parent 0b0c50e1ad
commit 794022b04a

View File

@ -26,6 +26,17 @@
# #
# $FreeBSD$ # $FreeBSD$
ZPOOL_NAME_FILE=zpool_name
get_zpool_name()
{
cat $ZPOOL_NAME_FILE
}
make_zpool_name()
{
mktemp -u bectl_test_XXXXXX > $ZPOOL_NAME_FILE
get_zpool_name
}
# Establishes a bectl_create zpool that can be used for some light testing; contains # Establishes a bectl_create zpool that can be used for some light testing; contains
# a 'default' BE and not much else. # a 'default' BE and not much else.
bectl_create_setup() bectl_create_setup()
@ -34,6 +45,9 @@ bectl_create_setup()
disk=$2 disk=$2
mnt=$3 mnt=$3
# Sanity check to make sure `make_zpool_name` succeeded
atf_check test -n "$zpool"
kldload -n -q zfs || atf_skip "ZFS module not loaded on the current system" kldload -n -q zfs || atf_skip "ZFS module not loaded on the current system"
atf_check mkdir -p ${mnt} atf_check mkdir -p ${mnt}
atf_check truncate -s 1G ${disk} atf_check truncate -s 1G ${disk}
@ -48,6 +62,9 @@ bectl_create_deep_setup()
disk=$2 disk=$2
mnt=$3 mnt=$3
# Sanity check to make sure `make_zpool_name` succeeded
atf_check test -n "$zpool"
bectl_create_setup ${zpool} ${disk} ${mnt} bectl_create_setup ${zpool} ${disk} ${mnt}
atf_check mkdir -p ${root} atf_check mkdir -p ${root}
atf_check -o ignore bectl -r ${zpool}/ROOT mount default ${root} atf_check -o ignore bectl -r ${zpool}/ROOT mount default ${root}
@ -60,8 +77,9 @@ bectl_create_deep_setup()
bectl_cleanup() bectl_cleanup()
{ {
zpool=$1 zpool=$1
if [ -z "$zpool" ]; then
if zpool get health ${zpool} >/dev/null 2>&1; then echo "Skipping cleanup; zpool not set up"
elif zpool get health ${zpool} >/dev/null 2>&1; then
zpool destroy -f ${zpool} zpool destroy -f ${zpool}
fi fi
} }
@ -76,7 +94,7 @@ bectl_create_head()
bectl_create_body() bectl_create_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
@ -89,8 +107,7 @@ bectl_create_body()
} }
bectl_create_cleanup() bectl_create_cleanup()
{ {
bectl_cleanup $(get_zpool_name)
bectl_cleanup bectl_test
} }
atf_test_case bectl_destroy cleanup atf_test_case bectl_destroy cleanup
@ -103,7 +120,7 @@ bectl_destroy_head()
bectl_destroy_body() bectl_destroy_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
@ -116,7 +133,7 @@ bectl_destroy_body()
bectl_destroy_cleanup() bectl_destroy_cleanup()
{ {
bectl_cleanup bectl_test bectl_cleanup $(get_zpool_name)
} }
atf_test_case bectl_export_import cleanup atf_test_case bectl_export_import cleanup
@ -129,7 +146,7 @@ bectl_export_import_head()
bectl_export_import_body() bectl_export_import_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
@ -144,7 +161,7 @@ bectl_export_import_body()
bectl_export_import_cleanup() bectl_export_import_cleanup()
{ {
bectl_cleanup bectl_test bectl_cleanup $(get_zpool_name)
} }
atf_test_case bectl_list cleanup atf_test_case bectl_list cleanup
@ -157,7 +174,7 @@ bectl_list_head()
bectl_list_body() bectl_list_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
@ -179,7 +196,7 @@ bectl_list_body()
bectl_list_cleanup() bectl_list_cleanup()
{ {
bectl_cleanup bectl_test bectl_cleanup $(get_zpool_name)
} }
atf_test_case bectl_mount cleanup atf_test_case bectl_mount cleanup
@ -192,7 +209,7 @@ bectl_mount_head()
bectl_mount_body() bectl_mount_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
root=${mount}/root root=${mount}/root
@ -213,7 +230,7 @@ bectl_mount_body()
bectl_mount_cleanup() bectl_mount_cleanup()
{ {
bectl_cleanup bectl_test bectl_cleanup $(get_zpool_name)
} }
atf_test_case bectl_rename cleanup atf_test_case bectl_rename cleanup
@ -226,7 +243,7 @@ bectl_rename_head()
bectl_rename_body() bectl_rename_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
@ -239,7 +256,7 @@ bectl_rename_body()
bectl_rename_cleanup() bectl_rename_cleanup()
{ {
bectl_cleanup bectl_test bectl_cleanup $(get_zpool_name)
} }
atf_test_case bectl_jail cleanup atf_test_case bectl_jail cleanup
@ -252,7 +269,7 @@ bectl_jail_head()
bectl_jail_body() bectl_jail_body()
{ {
cwd=$(realpath .) cwd=$(realpath .)
zpool=bectl_test zpool=$(make_zpool_name)
disk=${cwd}/disk.img disk=${cwd}/disk.img
mount=${cwd}/mnt mount=${cwd}/mnt
root=${mount}/root root=${mount}/root
@ -327,7 +344,7 @@ bectl_jail_cleanup()
jail -r ${jailid} jail -r ${jailid}
done; done;
bectl_cleanup bectl_test bectl_cleanup $(get_zpool_name)
} }
atf_init_test_cases() atf_init_test_cases()