#
# 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 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

#
# Copyright (c) 2016 by Delphix. All rights reserved.
# Copyright (c) 2017 Lawrence Livermore National Security, LLC.
#

. $STF_SUITE/include/commands.cfg
. $STF_SUITE/include/libtest.shlib

# ZFS Directories
export ZEDLET_ETC_DIR=${ZEDLET_ETC_DIR:-@sysconfdir@/zfs/zed.d}
export ZEDLET_LIBEXEC_DIR=${ZEDLET_LIBEXEC_DIR:-@zfsexecdir@/zed.d}
export ZPOOL_SCRIPT_DIR=${ZPOOL_SCRIPT_DIR:-@sysconfdir@/zfs/zpool.d}

# Define run length constants
export RT_LONG="3"
export RT_MEDIUM="2"
export RT_SHORT="1"

# Define macro for zone test
export ZONE_POOL="zonepool"
export ZONE_CTR="zonectr"

# ensure we're running in the C locale, since
# localised messages may result in test failures
export LC_ALL="C"
export LANG="C"

#
# pattern to ignore from 'zpool list'.
#
export NO_POOLS="no pools available"

# pattern to ignore from 'zfs list'.
export NO_DATASETS="no datasets available"

# Default directory used for test files
# NOTE: remove trailing "/", some functions rely on this to do pattern matching
export TEST_BASE_DIR="$(dirname ${FILEDIR:-/var/tmp}/.)"

# Default to compression ON
export COMPRESSION_PROP=on

# Default to using the checksum
export CHECKSUM_PROP=on

# some common variables used by test scripts :
export FIO_SCRIPTS=$STF_SUITE/tests/perf/fio
export PERF_SCRIPTS=$STF_SUITE/tests/perf/scripts

# some test pool names
export TESTPOOL=testpool
export TESTPOOL1=testpool1
export TESTPOOL2=testpool2
export TESTPOOL3=testpool3
export PERFPOOL=perfpool

# some test file system names
export TESTFS=testfs
export TESTFS1=testfs1
export TESTFS2=testfs2
export TESTFS3=testfs3

# some test directory names
export TESTDIR=${TEST_BASE_DIR%%/}/testdir
export TESTDIR0=${TEST_BASE_DIR%%/}/testdir0
export TESTDIR1=${TEST_BASE_DIR%%/}/testdir1
export TESTDIR2=${TEST_BASE_DIR%%/}/testdir2

# some test sub file system names
export TESTSUBFS=subfs
export TESTSUBFS1=subfs1
export TESTSUBFS2=subfs2

# some temp files
export TEMPFILE=${TEST_BASE_DIR%%/}/tempfile$$
export TEMPFILE0=${TEST_BASE_DIR%%/}/tempfile0$$
export TEMPFILE1=${TEST_BASE_DIR%%/}/tempfile1$$
export TEMPFILE2=${TEST_BASE_DIR%%/}/tempfile2$$

export ZFSROOT=

export TESTSNAP=testsnap
export TESTSNAP1=testsnap1
export TESTSNAP2=testsnap2
export TESTCLONE=testclone
export TESTCLONE1=testclone1
export TESTCLONE2=testclone2
export TESTCLCT=testclct
export TESTCTR=testctr
export TESTCTR1=testctr1
export TESTCTR2=testctr2
export TESTVOL=testvol
export TESTVOL1=testvol1
export TESTVOL2=testvol2
export TESTFILE0=testfile0
export TESTFILE1=testfile1
export TESTFILE2=testfile2
export TESTBKMARK=testbkmark

export LONGPNAME="poolname50charslong_012345678901234567890123456789"
export LONGFSNAME="fsysname50charslong_012345678901234567890123456789"
export SNAPFS="$TESTPOOL/$TESTFS@$TESTSNAP"
export SNAPFS1="$TESTPOOL/$TESTVOL@$TESTSNAP"

export VOLSIZE=150m
export BIGVOLSIZE=1eb

# Default to limit disks to be checked
export MAX_FINDDISKSNUM=6

# Default minimum size for file based vdevs in the test suite
export MINVDEVSIZE=$((256 * 1024 * 1024))

# Minimum vdev size possible as defined in the OS
export SPA_MINDEVSIZE=$((64 * 1024 * 1024))

# For iscsi target support
export ISCSITGTFILE=/tmp/iscsitgt_file
export ISCSITGT_FMRI=svc:/system/iscsitgt:default
if ! is_linux; then
export AUTO_SNAP=$(svcs -a | grep auto-snapshot | grep online | awk \
    '{print $3}')
fi

#
# finally, if we're running in a local zone
# we take some additional actions
if ! is_global_zone; then
	reexport_pool
fi

export ZFS_VERSION=5
export ZFS_ALL_VERSIONS="1 2 3 4 5"

for i in $ZFS_ALL_VERSIONS; do
	eval 'export ZFS_VERSION_$i="v${i}-fs"'
done

export MAX_PARTITIONS=8

if is_linux; then
	unpack_opts="--sparse -xf"
	pack_opts="--sparse -cf"
	verbose=" -v"
	unpack_preserve=" -xpf"
	pack_preserve=" -cpf"

	ZVOL_DEVDIR="/dev/zvol"
	ZVOL_RDEVDIR="/dev/zvol"
	DEV_RDSKDIR="/dev"
	DEV_MPATHDIR="/dev/mapper"

	ZEDLET_DIR="/var/tmp/zed"
	ZED_LOG="$ZEDLET_DIR/zed.log"
	ZED_DEBUG_LOG="$ZEDLET_DIR/zed.debug.log"
	VDEVID_CONF="$ZEDLET_DIR/vdev_id.conf"
	VDEVID_CONF_ETC="/etc/zfs/vdev_id.conf"


	NEWFS_DEFAULT_FS="ext2"
else
	unpack_opts="xv"
	pack_opts="cf"
	verbose="v"
	unpack_preserve="xpf"
	pack_preserve="cpf"

	ZVOL_DEVDIR="/dev/zvol/dsk"
	ZVOL_RDEVDIR="/dev/zvol/rdsk"
	DEV_DSKDIR="/dev/dsk"
	DEV_RDSKDIR="/dev/rdsk"

	NEWFS_DEFAULT_FS="ufs"
fi
export unpack_opts pack_opts verbose unpack_preserve pack_preserve \
       ZVOL_DEVDIR ZVOL_RDEVDIR NEWFS_DEFAULT_FS DEV_RDSKDIR DEV_MPATHDIR \
       ZEDLET_DIR ZED_LOG ZED_DEBUG_LOG VDEVID_CONF VDEVID_CONF_ETC
