#!/bin/ksh -p
#
# CDDL HEADER START
#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source.  A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
#
# CDDL HEADER END
#

#
# Copyright (c) 2020 The FreeBSD Foundation [1]
#
# [1] Portions of this software were developed by Allan Jude
#     under sponsorship from the FreeBSD Foundation.

. $STF_SUITE/include/libtest.shlib

export SIZE=1G
export VDIR=$TESTDIR/disk.persist_l2arc
export VDEV="$VDIR/a"
export VDEV_CACHE="$VDIR/b"
export PASSPHRASE="password"

# fio options
export DIRECTORY=/$TESTPOOL-l2arc/encrypted
export NUMJOBS=4
export RUNTIME=30
export PERF_RANDSEED=1234
export PERF_COMPPERCENT=66
export PERF_COMPCHUNK=0
export BLOCKSIZE=128K
export SYNC_TYPE=0
export DIRECT=1

#
# DESCRIPTION:
#	System with compressed_arc disabled succeeds at reading from L2ARC
#
# STRATEGY:
#	1. Enable compressed_arc.
#	2. Create pool with a cache device, encryption, and compression enabled.
#	3. Read the number of L2ARC checksum failures.
#	4. Create a random file in that pool and random read for 30 sec.
#	5. Read the number of L2ARC checksum failures.
#

verify_runnable "global"

log_assert "L2ARC with encryption enabled succeeds."

origin_carc_setting=$(get_tunable COMPRESSED_ARC_ENABLED)

function cleanup
{
	if poolexists $TESTPOOL-l2arc ; then
		destroy_pool $TESTPOOL-l2arc
	fi

	log_must set_tunable64 COMPRESSED_ARC_ENABLED $origin_carc_setting
}
log_onexit cleanup

# Enable Compressed ARC so that in-ARC and on-disk will match
log_must set_tunable64 COMPRESSED_ARC_ENABLED 1

log_must rm -rf $VDIR
log_must mkdir -p $VDIR
log_must mkfile $SIZE $VDEV

typeset fill_mb=800
typeset cache_sz=$(( floor($fill_mb / 2) ))
export FILE_SIZE=$(( floor($fill_mb / $NUMJOBS) ))M

log_must truncate -s ${cache_sz}M $VDEV_CACHE

log_must zpool create -O compression=zstd -f $TESTPOOL-l2arc $VDEV cache $VDEV_CACHE

log_must eval "echo $PASSPHRASE | zfs create -o compression=zstd " \
	"-o encryption=on -o keyformat=passphrase -o keylocation=prompt " \
	"$TESTPOOL-l2arc/encrypted"

l2_cksum_bad_start=$(get_arcstat l2_cksum_bad)

log_must fio $FIO_SCRIPTS/mkfiles.fio
log_must fio $FIO_SCRIPTS/random_reads.fio

l2_cksum_bad_end=$(get_arcstat l2_cksum_bad)

log_note "L2ARC Failed Checksums before: $l2_cksum_bad_start After:"\
	"$l2_cksum_bad_end"
log_must test $(( $l2_cksum_bad_end - $l2_cksum_bad_start )) -eq 0

log_must zpool destroy -f $TESTPOOL-l2arc

log_pass "L2ARC with encryption and compressed_arc enabled does not result in"\
	"checksum errors."
