1f38cb554SJohn Wren Kennedy#
2f38cb554SJohn Wren Kennedy# CDDL HEADER START
3f38cb554SJohn Wren Kennedy#
4f38cb554SJohn Wren Kennedy# The contents of this file are subject to the terms of the
5f38cb554SJohn Wren Kennedy# Common Development and Distribution License (the "License").
6f38cb554SJohn Wren Kennedy# You may not use this file except in compliance with the License.
7f38cb554SJohn Wren Kennedy#
8f38cb554SJohn Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9f38cb554SJohn Wren Kennedy# or http://www.opensolaris.org/os/licensing.
10f38cb554SJohn Wren Kennedy# See the License for the specific language governing permissions
11f38cb554SJohn Wren Kennedy# and limitations under the License.
12f38cb554SJohn Wren Kennedy#
13f38cb554SJohn Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
14f38cb554SJohn Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15f38cb554SJohn Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
16f38cb554SJohn Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
17f38cb554SJohn Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
18f38cb554SJohn Wren Kennedy#
19f38cb554SJohn Wren Kennedy# CDDL HEADER END
20f38cb554SJohn Wren Kennedy#
21f38cb554SJohn Wren Kennedy
22f38cb554SJohn Wren Kennedy#
23f38cb554SJohn Wren Kennedy# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24f38cb554SJohn Wren Kennedy# Use is subject to license terms.
25f38cb554SJohn Wren Kennedy#
26f38cb554SJohn Wren Kennedy
27f38cb554SJohn Wren Kennedy#
281d32ba66SJohn Wren Kennedy# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
29f38cb554SJohn Wren Kennedy#
30f38cb554SJohn Wren Kennedy
31f38cb554SJohn Wren Kennedy. $STF_SUITE/tests/functional/mv_files/mv_files.cfg
32f38cb554SJohn Wren Kennedy
33f38cb554SJohn Wren Kennedy#
34f38cb554SJohn Wren Kennedy# Determine whether this version of the ksh being
35f38cb554SJohn Wren Kennedy# executed has a bug where the limit of background
36f38cb554SJohn Wren Kennedy# processes of 25.
37f38cb554SJohn Wren Kennedy#
38f38cb554SJohn Wren Kennedyfunction check_bg_procs_limit_num
39f38cb554SJohn Wren Kennedy{
401d32ba66SJohn Wren Kennedyecho "#!/usr/bin/ksh" > /var/tmp/exitsZero.ksh
411d32ba66SJohn Wren Kennedyecho  "exit 0" >> /var/tmp/exitsZero.ksh
421d32ba66SJohn Wren Kennedychmod 777 /var/tmp/exitsZero.ksh
43f38cb554SJohn Wren Kennedy
441d32ba66SJohn Wren Kennedycat <<EOF > /var/tmp/testbackgprocs.ksh
45f38cb554SJohn Wren Kennedy#!/usr/bin/ksh
46f38cb554SJohn Wren Kennedy#
47f38cb554SJohn Wren Kennedy# exitsZero.ksh is a one line script
48f38cb554SJohn Wren Kennedy# that exit with status of "0"
49f38cb554SJohn Wren Kennedy#
50f38cb554SJohn Wren Kennedy
51f38cb554SJohn Wren KennedyPIDS=""
52f38cb554SJohn Wren Kennedytypeset -i i=1
53f38cb554SJohn Wren Kennedywhile [ \$i -le 50 ]
54f38cb554SJohn Wren Kennedydo
55f38cb554SJohn Wren Kennedy	/var/tmp/exitsZero.ksh &
56f38cb554SJohn Wren Kennedy        PIDS="\$PIDS \$!"
57f38cb554SJohn Wren Kennedy        (( i = i + 1 ))
58f38cb554SJohn Wren Kennedydone
59f38cb554SJohn Wren Kennedy
60*f5fb56deSJohn Wren Kennedysleep 1
61f38cb554SJohn Wren Kennedy
62f38cb554SJohn Wren Kennedyfor pid in \$PIDS
63f38cb554SJohn Wren Kennedydo
64*f5fb56deSJohn Wren Kennedy	wait \$pid
65f38cb554SJohn Wren Kennedy        (( \$? == 127 )) && exit 1
66f38cb554SJohn Wren Kennedydone
67f38cb554SJohn Wren Kennedyexit 0
68f38cb554SJohn Wren KennedyEOF
69f38cb554SJohn Wren Kennedy
701d32ba66SJohn Wren Kennedyksh /var/tmp/testbackgprocs.ksh
71f38cb554SJohn Wren Kennedyif [[ $? -eq 1 ]]; then
72f38cb554SJohn Wren Kennedy#
73f38cb554SJohn Wren Kennedy# Current ksh being executed has a limit
74f38cb554SJohn Wren Kennedy# of 25 background processes.
75f38cb554SJohn Wren Kennedy#
76f38cb554SJohn Wren Kennedy	return 1
77f38cb554SJohn Wren Kennedyelse
78f38cb554SJohn Wren Kennedy        return 0
79f38cb554SJohn Wren Kennedyfi
80f38cb554SJohn Wren Kennedy}
81f38cb554SJohn Wren Kennedy
82f38cb554SJohn Wren Kennedyfunction init_setup
83f38cb554SJohn Wren Kennedy{
84f38cb554SJohn Wren Kennedy
85f38cb554SJohn Wren Kennedy	typeset disklist=$1
86f38cb554SJohn Wren Kennedy
87f38cb554SJohn Wren Kennedy        create_pool $TESTPOOL "$disklist"
88f38cb554SJohn Wren Kennedy
89f38cb554SJohn Wren Kennedy	if ! is_global_zone ; then
90f38cb554SJohn Wren Kennedy		reexport_pool
91f38cb554SJohn Wren Kennedy	fi
92f38cb554SJohn Wren Kennedy
931d32ba66SJohn Wren Kennedy        rm -rf $TESTDIR  || log_unresolved Could not remove $TESTDIR
941d32ba66SJohn Wren Kennedy        mkdir -p $TESTDIR || log_unresolved Could not create $TESTDIR
95f38cb554SJohn Wren Kennedy
961d32ba66SJohn Wren Kennedy        rm -rf $TESTDIR_TGT  || log_unresolved Could not remove $TESTDIR_TGT
971d32ba66SJohn Wren Kennedy        mkdir -p $TESTDIR_TGT || log_unresolved Could not create $TESTDIR_TGT
98f38cb554SJohn Wren Kennedy
991d32ba66SJohn Wren Kennedy        log_must zfs create $TESTPOOL/$TESTFS
1001d32ba66SJohn Wren Kennedy        log_must zfs set mountpoint=$TESTDIR $TESTPOOL/$TESTFS
101f38cb554SJohn Wren Kennedy
1021d32ba66SJohn Wren Kennedy        log_must zfs create $TESTPOOL/$TESTFS_TGT
1031d32ba66SJohn Wren Kennedy        log_must zfs set mountpoint=$TESTDIR_TGT $TESTPOOL/$TESTFS_TGT
104f38cb554SJohn Wren Kennedy
1051d32ba66SJohn Wren Kennedy        mkdir -p $OLDDIR || log_unresolved Could not create $OLDDIR
1061d32ba66SJohn Wren Kennedy        mkdir -p $NEWDIR_IN_FS || log_unresolved Could not create $NEWDIR_IN_FS
1071d32ba66SJohn Wren Kennedy        mkdir -p $NEWDIR_ACROSS_FS || log_unresolved Could not create $NEWDIR_ACROSS_FS
108f38cb554SJohn Wren Kennedy
109f38cb554SJohn Wren Kennedy}
110f38cb554SJohn Wren Kennedy
111f38cb554SJohn Wren Kennedyfunction wait_pid
112f38cb554SJohn Wren Kennedy{
113f38cb554SJohn Wren Kennedy	for pid in $1
114f38cb554SJohn Wren Kennedy	do
1151d32ba66SJohn Wren Kennedy		ps -e | grep $pid >/dev/null 2>&1
1161d32ba66SJohn Wren Kennedy		(( $? == 0 )) && wait $pid
117f38cb554SJohn Wren Kennedy        done
118f38cb554SJohn Wren Kennedy}
119f38cb554SJohn Wren Kennedy
120f38cb554SJohn Wren Kennedy
121f38cb554SJohn Wren Kennedy#
122f38cb554SJohn Wren Kennedy# Generate given number files in a
123f38cb554SJohn Wren Kennedy# directory of zfs file system
124f38cb554SJohn Wren Kennedy# $1 - the directory holds the generated files
125f38cb554SJohn Wren Kennedy# $2 - number of to-be-generated files
126f38cb554SJohn Wren Kennedy#
127f38cb554SJohn Wren Kennedy
128f38cb554SJohn Wren Kennedyfunction generate_files
129f38cb554SJohn Wren Kennedy{
130f38cb554SJohn Wren Kennedy	typeset -i count
131f38cb554SJohn Wren Kennedy        typeset -i proc_num=0
132f38cb554SJohn Wren Kennedy
133f38cb554SJohn Wren Kennedy	if (( $2 == $MVNUMFILES )); then
134f38cb554SJohn Wren Kennedy		count=1
135f38cb554SJohn Wren Kennedy	else
136f38cb554SJohn Wren Kennedy		count=$MVNUMFILES+1
137f38cb554SJohn Wren Kennedy	fi
138f38cb554SJohn Wren Kennedy
139f38cb554SJohn Wren Kennedy        while (( count <= $2 ))
140f38cb554SJohn Wren Kennedy        do
1411d32ba66SJohn Wren Kennedy                cp /etc/passwd $1/file_$count \
142f38cb554SJohn Wren Kennedy                         > /dev/null 2>&1 &
143f38cb554SJohn Wren Kennedy
144f38cb554SJohn Wren Kennedy                PIDS="$PIDS $!"
145f38cb554SJohn Wren Kennedy
1461d32ba66SJohn Wren Kennedy                proc_num=`echo $PIDS | wc -w`
147f38cb554SJohn Wren Kennedy                if (( proc_num >= GANGPIDS )); then
148f38cb554SJohn Wren Kennedy                        wait_pid "$PIDS"
149f38cb554SJohn Wren Kennedy                        proc_num=0
150f38cb554SJohn Wren Kennedy                        PIDS=""
151f38cb554SJohn Wren Kennedy                fi
152f38cb554SJohn Wren Kennedy
153f38cb554SJohn Wren Kennedy               (( count = count + 1 ))
154f38cb554SJohn Wren Kennedy        done
155f38cb554SJohn Wren Kennedy
156f38cb554SJohn Wren Kennedy}
157f38cb554SJohn Wren Kennedy
158f38cb554SJohn Wren Kennedy#
159f38cb554SJohn Wren Kennedy# Move given number files from one directory to
160f38cb554SJohn Wren Kennedy# another directory in parallel
161f38cb554SJohn Wren Kennedy# $1 - source directory
162f38cb554SJohn Wren Kennedy# $2 - target directory
163f38cb554SJohn Wren Kennedy#
164f38cb554SJohn Wren Kennedyfunction mv_files
165f38cb554SJohn Wren Kennedy{
166f38cb554SJohn Wren Kennedy
1671d32ba66SJohn Wren Kennedy        find $1 -type f -print | xargs -i \
1681d32ba66SJohn Wren Kennedy                mv {} $2 > /dev/null 2>&1
169f38cb554SJohn Wren Kennedy}
170f38cb554SJohn Wren Kennedy
171f38cb554SJohn Wren Kennedy#
172f38cb554SJohn Wren Kennedy# Count the files number after moving, and
173f38cb554SJohn Wren Kennedy# compare it with the original number
174f38cb554SJohn Wren Kennedy# $1 - directory that to be operated
175f38cb554SJohn Wren Kennedy# $2 - original files number
176f38cb554SJohn Wren Kennedy#
177f38cb554SJohn Wren Kennedyfunction count_files
178f38cb554SJohn Wren Kennedy{
179f38cb554SJohn Wren Kennedy        typeset -i file_num
1801d32ba66SJohn Wren Kennedy        file_num=`find $1  -type f -print | \
181f38cb554SJohn Wren Kennedy                wc -l`
182f38cb554SJohn Wren Kennedy        (( file_num != $2 )) && \
183f38cb554SJohn Wren Kennedy                log_fail "The file number of target directory"\
184f38cb554SJohn Wren Kennedy                        "$2 is not equal to that of the source "\
185f38cb554SJohn Wren Kennedy                        "directory $1"
186f38cb554SJohn Wren Kennedy
187f38cb554SJohn Wren Kennedy}
188f38cb554SJohn Wren Kennedy
189f38cb554SJohn Wren Kennedy#
190f38cb554SJohn Wren Kennedy# Running the 'mv' test
191f38cb554SJohn Wren Kennedy# $1 - old directory
192f38cb554SJohn Wren Kennedy# $2 - new directory
193f38cb554SJohn Wren Kennedy#
194f38cb554SJohn Wren Kennedyfunction mv_test
195f38cb554SJohn Wren Kennedy{
196f38cb554SJohn Wren Kennedy        typeset old=$1
197f38cb554SJohn Wren Kennedy        typeset new=$2
198f38cb554SJohn Wren Kennedy
199f38cb554SJohn Wren Kennedy        typeset -i inc_num=$(( MVNUMFILES + MVNUMINCR ))
200f38cb554SJohn Wren Kennedy        typeset -i num=0
201f38cb554SJohn Wren Kennedy
202f38cb554SJohn Wren Kennedy        for num in $MVNUMFILES $inc_num
203f38cb554SJohn Wren Kennedy        do
204f38cb554SJohn Wren Kennedy                generate_files $old $num
205f38cb554SJohn Wren Kennedy
206f38cb554SJohn Wren Kennedy                mv_files $old $new
207f38cb554SJohn Wren Kennedy                count_files $new $num
208f38cb554SJohn Wren Kennedy
209f38cb554SJohn Wren Kennedy                mv_files $new $old
210f38cb554SJohn Wren Kennedy                count_files $old $num
211f38cb554SJohn Wren Kennedy        done
212f38cb554SJohn Wren Kennedy
213f38cb554SJohn Wren Kennedy	typeset dir=$(get_device_dir $DISKS)
214f38cb554SJohn Wren Kennedy        verify_filesys "$TESTPOOL" "$TESTPOOL/$TESTFS" "$dir"
215f38cb554SJohn Wren Kennedy
216f38cb554SJohn Wren Kennedy        return 0
217f38cb554SJohn Wren Kennedy}
218