From b4d8e2be036891dcf2fdb510571bdeb9f2c64faa Mon Sep 17 00:00:00 2001 From: Chunwei Chen Date: Fri, 16 Dec 2016 15:15:48 -0800 Subject: [PATCH] Add test for chattr Signed-off-by: Chunwei Chen --- configure.ac | 1 + tests/runfiles/linux.run | 3 + tests/zfs-tests/tests/functional/Makefile.am | 1 + .../tests/functional/chattr/Makefile.am | 6 ++ .../functional/chattr/chattr_001_pos.ksh | 75 +++++++++++++++++ .../functional/chattr/chattr_002_neg.ksh | 81 +++++++++++++++++++ .../tests/functional/chattr/cleanup.ksh | 37 +++++++++ .../tests/functional/chattr/setup.ksh | 44 ++++++++++ 8 files changed, 248 insertions(+) create mode 100644 tests/zfs-tests/tests/functional/chattr/Makefile.am create mode 100755 tests/zfs-tests/tests/functional/chattr/chattr_001_pos.ksh create mode 100755 tests/zfs-tests/tests/functional/chattr/chattr_002_neg.ksh create mode 100755 tests/zfs-tests/tests/functional/chattr/cleanup.ksh create mode 100755 tests/zfs-tests/tests/functional/chattr/setup.ksh diff --git a/configure.ac b/configure.ac index efe61305df..20a67dc4f0 100644 --- a/configure.ac +++ b/configure.ac @@ -180,6 +180,7 @@ AC_CONFIG_FILES([ tests/zfs-tests/tests/functional/cachefile/Makefile tests/zfs-tests/tests/functional/casenorm/Makefile tests/zfs-tests/tests/functional/checksum/Makefile + tests/zfs-tests/tests/functional/chattr/Makefile tests/zfs-tests/tests/functional/clean_mirror/Makefile tests/zfs-tests/tests/functional/cli_root/Makefile tests/zfs-tests/tests/functional/cli_root/zdb/Makefile diff --git a/tests/runfiles/linux.run b/tests/runfiles/linux.run index 4dd444035c..8a97859926 100644 --- a/tests/runfiles/linux.run +++ b/tests/runfiles/linux.run @@ -60,6 +60,9 @@ tests = ['cache_002_pos', 'cache_003_pos', 'cache_004_neg', [tests/functional/casenorm] tests = ['case_all_values', 'norm_all_values'] +[tests/functional/chattr] +tests = ['chattr_001_pos', 'chattr_002_neg'] + [tests/functional/checksum] tests = ['run_edonr_test', 'run_sha2_test', 'run_skein_test', 'filetest_001_pos'] diff --git a/tests/zfs-tests/tests/functional/Makefile.am b/tests/zfs-tests/tests/functional/Makefile.am index 670f994fe8..b974e59301 100644 --- a/tests/zfs-tests/tests/functional/Makefile.am +++ b/tests/zfs-tests/tests/functional/Makefile.am @@ -5,6 +5,7 @@ SUBDIRS = \ cache \ cachefile \ casenorm \ + chattr \ checksum \ clean_mirror \ cli_root \ diff --git a/tests/zfs-tests/tests/functional/chattr/Makefile.am b/tests/zfs-tests/tests/functional/chattr/Makefile.am new file mode 100644 index 0000000000..431208e587 --- /dev/null +++ b/tests/zfs-tests/tests/functional/chattr/Makefile.am @@ -0,0 +1,6 @@ +pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/chattr +dist_pkgdata_SCRIPTS = \ + setup.ksh \ + cleanup.ksh \ + chattr_001_pos.ksh \ + chattr_002_neg.ksh diff --git a/tests/zfs-tests/tests/functional/chattr/chattr_001_pos.ksh b/tests/zfs-tests/tests/functional/chattr/chattr_001_pos.ksh new file mode 100755 index 0000000000..73e4e2e5a3 --- /dev/null +++ b/tests/zfs-tests/tests/functional/chattr/chattr_001_pos.ksh @@ -0,0 +1,75 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013 by Delphix. All rights reserved. +# +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/userquota/userquota_common.kshlib + +# +# +# DESCRIPTION: +# Check whether chattr works as expected +# +# +# STRATEGY: +# 1. Create 3 files +# 2. Use chattr to make them writable, immutable and appendonly +# 3. Try to write and append to each file +# + +set -A files writable immutable append + +function cleanup +{ + for i in ${files[*]}; do + log_must chattr -ia $TESTDIR/$i + log_must rm -f $TESTDIR/$i + done +} + +log_onexit cleanup + +log_assert "Check whether chattr works as expected" + +log_must touch $TESTDIR/writable +log_must touch $TESTDIR/immutable +log_must touch $TESTDIR/append + +log_must chattr -i $TESTDIR/writable +log_must chattr +i $TESTDIR/immutable +log_must chattr +a $TESTDIR/append + +log_must echo test > $TESTDIR/writable +log_must echo test >> $TESTDIR/writable +log_mustnot echo test > $TESTDIR/immutable +log_mustnot echo test >> $TESTDIR/immutable +log_mustnot echo test > $TESTDIR/append +log_must echo test >> $TESTDIR/append + +log_pass "chattr works as expected" diff --git a/tests/zfs-tests/tests/functional/chattr/chattr_002_neg.ksh b/tests/zfs-tests/tests/functional/chattr/chattr_002_neg.ksh new file mode 100755 index 0000000000..8712b7ed2e --- /dev/null +++ b/tests/zfs-tests/tests/functional/chattr/chattr_002_neg.ksh @@ -0,0 +1,81 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013 by Delphix. All rights reserved. +# +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/userquota/userquota_common.kshlib + +# +# +# DESCRIPTION: +# Check whether unprivileged user can chattr +# +# +# STRATEGY: +# 1. Create 3 files +# 2. Use chattr to make them writable, immutable and appendonly +# 3. Try to chattr with unprivileged user +# + +set -A files writable immutable append + +function cleanup +{ + for i in ${files[*]}; do + log_must chattr -ia $TESTDIR/$i + log_must rm -f $TESTDIR/$i + done + log_must $CHMOD 0755 $TESTDIR +} + +log_onexit cleanup + +log_assert "Check whether unprivileged user can chattr" + +log_must $CHMOD 0777 $TESTDIR + +log_must user_run $QUSER1 touch $TESTDIR/writable +log_must user_run $QUSER1 touch $TESTDIR/immutable +log_must user_run $QUSER1 touch $TESTDIR/append + +log_must chattr -i $TESTDIR/writable +log_must chattr +i $TESTDIR/immutable +log_must chattr +a $TESTDIR/append + +log_must user_run $QUSER1 chattr -i $TESTDIR/writable +log_must user_run $QUSER1 chattr -a $TESTDIR/writable +log_must user_run $QUSER1 chattr +i $TESTDIR/immutable +log_must user_run $QUSER1 chattr +a $TESTDIR/append + +log_mustnot user_run $QUSER1 chattr +i $TESTDIR/writable +log_mustnot user_run $QUSER1 chattr +a $TESTDIR/writable +log_mustnot user_run $QUSER1 chattr -i $TESTDIR/immutable +log_mustnot user_run $QUSER1 chattr -a $TESTDIR/append + +log_pass "Unprivileged user cannot chattr as expected" diff --git a/tests/zfs-tests/tests/functional/chattr/cleanup.ksh b/tests/zfs-tests/tests/functional/chattr/cleanup.ksh new file mode 100755 index 0000000000..59875d609a --- /dev/null +++ b/tests/zfs-tests/tests/functional/chattr/cleanup.ksh @@ -0,0 +1,37 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/userquota/userquota_common.kshlib + +log_must clean_user_group + +default_cleanup diff --git a/tests/zfs-tests/tests/functional/chattr/setup.ksh b/tests/zfs-tests/tests/functional/chattr/setup.ksh new file mode 100755 index 0000000000..1c27075a10 --- /dev/null +++ b/tests/zfs-tests/tests/functional/chattr/setup.ksh @@ -0,0 +1,44 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2013 by Delphix. All rights reserved. +# + +. $STF_SUITE/include/libtest.shlib +. $STF_SUITE/tests/functional/userquota/userquota_common.kshlib + +verify_runnable "both" + +log_must clean_user_group + +log_must add_group $QGROUP +log_must add_user $QGROUP $QUSER1 +log_must add_user $QGROUP $QUSER2 + +DISK=${DISKS%% *} +default_setup $DISK