#!/bin/sh
# 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) 2016 by Delphix. All rights reserved.
# Copyright (c) 2017 Lawrence Livermore National Security, LLC.
#

. $STF_SUITE/include/commands.cfg

# 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}
export ZPOOL_COMPAT_DIR=${ZPOOL_COMPAT_DIR:-@datadir@/zfs/compatibility.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:-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

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 [ "@ASAN_ENABLED@" = "yes" ]; then
	export ASAN_OPTIONS=abort_on_error=true:halt_on_error=true:allocator_may_return_null=true:disable_coredump=false:detect_stack_use_after_return=true:detect_odr_violation=1

	# TODO
	# disable memory leaks detection
	# there are quite many of them and they are not as
	# destructive to CLI programs as they are to daemons
	export ASAN_OPTIONS="$ASAN_OPTIONS:detect_leaks=false"
fi

if [ "@UBSAN_ENABLED@" = "yes" ]; then
	export UBSAN_OPTIONS=abort_on_error=true:halt_on_error=true:print_stacktrace=true
fi


case $(uname) in
Linux)
	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_DSKDIR="/dev"
	DEV_RDSKDIR="/dev"
	DEV_MPATHDIR="/dev/mapper"

	ZEDLET_DIR="$TEST_BASE_DIR/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"
	SLICE_PREFIX=""
	;;
FreeBSD)
	unpack_opts="xv"
	pack_opts="cf"
	verbose="v"
	unpack_preserve="xpf"
	pack_preserve="cpf"

	ZVOL_DEVDIR="/dev/zvol"
	ZVOL_RDEVDIR="/dev/zvol"
	DEV_DSKDIR="/dev"
	DEV_RDSKDIR="/dev"
	DEV_MPATHDIR="/dev/multipath"

	NEWFS_DEFAULT_FS="ufs"
	SLICE_PREFIX="p"
	;;
*)
	export AUTO_SNAP=$(svcs -a | \
	    awk '/auto-snapshot/ && /online/ { print $3 }')
	# finally, if we're running in a local zone
	# we take some additional actions
	if [ "$(zonename 2>/dev/null)" != "global" ]; then
		reexport_pool
	fi

	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"
	SLICE_PREFIX="s"
	;;
esac
export unpack_opts pack_opts verbose unpack_preserve pack_preserve \
       ZVOL_DEVDIR ZVOL_RDEVDIR DEV_DSKDIR DEV_RDSKDIR DEV_MPATHDIR \
       ZEDLET_DIR ZED_LOG ZED_DEBUG_LOG VDEVID_CONF VDEVID_CONF_ETC \
       NEWFS_DEFAULT_FS SLICE_PREFIX
