# SPDX-License-Identifier: CDDL-1.0
#
# 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 https://opensource.org/licenses/CDDL-1.0.
# 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 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

#
# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
#

. $STF_SUITE/include/libtest.shlib

#
# A function that verifies sort order. It takes as input
# a command, which gets executed. We then iterate over the results
# comparing that the sort order passed in via the list
#
function verify_sort { # command list name

	# now verify we've sorted by creation date:
	typeset CMD=$1
	typeset list=$2
	typeset name=$3

	typeset -i RET=0
	typeset -i index=1

	# run the command to verify that it works
	log_must eval "$CMD > /dev/null"

	# Now check the sort order
	for dataset in $( $CMD )
	do
		ACTUAL=$(basename $dataset)
		if [ "$dataset" != "$TESTPOOL/$TESTFS" ]
		then
			EXPECTED=$(echo $list | awk "{print \$$index}")
			if [ "$ACTUAL" != "$EXPECTED" ]
			then
				log_note "WARNING:" \
					"'$ACTUAL' does not equal '$EXPECTED'"
				log_fail "ERROR: Sort by $name fails."
			fi

			((index = index + 1))
		fi
	done

	# finally check to see if we have the expected number of elements
	if [ $index -ne $(echo $list | awk '{print split($0,arr)+1}') ]
	then
		log_fail "Warning: " \
			"unexpected number of filesystems found in list output!"
	fi
}

# A function that verifies reverse sort order. It takes as input
# a command, which gets executed. We then iterate over the results
# comparing that the sort order passed in via the list
#
function verify_reverse_sort { # command list name

	typeset CMD=$1
	typeset list=$2
	typeset name=$3

	# set our index to the be number of elements in the list
	typeset -i index=$(echo $list | awk '{print split($0,arr)}')

	log_note "Checking reverse sort by '$name'," \
		"expecting the reverse of '$list'"
	log_must eval "$CMD > /dev/null"

	for dataset in $( $CMD )
	do
		ACTUAL=$(basename $dataset)
		if [ "$dataset" != "$TESTPOOL/$TESTFS" ]
		then
			EXPECTED=$(echo $list | awk "{print \$$index}")
			if [ "$ACTUAL" != "$EXPECTED" ]
			then
				log_note "Warning:" \
					"'$ACTUAL' does not equal to" \
					"the reverse of '$EXPECTED'"
				log_fail "ERROR: Reverse sort by '$name' fails."
			fi

			((index = index - 1))
		fi
	done

	# finally check to see if we have the expected number of elements
	if [ $index -ne 0 ]
	then
		log_fail "Warning: " \
			"unexpected number of filesystems found in list output!"
	fi
}

function is_fs_type_zfs {

    typeset dirname=$1
    typeset fs="$(df $dirname | awk 'END {print $NF}')"

    if is_freebsd; then
        fs_type=$(mount | awk -v fs=$fs '{if ($3 == fs) print $4}' \
            | sed -n 's/(\(.*\),/\1/p')
    elif is_linux; then
        fs_type=$(mount | awk -v fs=$fs '{if ($3 == fs) print $5}')
    fi

    if [[ $fs_type == "zfs" ]]; then
        true
    else
        false
    fi
}
