1a629ded1SLOLi#!/bin/ksh -p
2a629ded1SLOLi#
3a629ded1SLOLi# This file and its contents are supplied under the terms of the
4a629ded1SLOLi# Common Development and Distribution License ("CDDL"), version 1.0.
5a629ded1SLOLi# You may only use this file in accordance with the terms of version
6a629ded1SLOLi# 1.0 of the CDDL.
7a629ded1SLOLi#
8a629ded1SLOLi# A full copy of the text of the CDDL should have accompanied this
9a629ded1SLOLi# source.  A copy of the CDDL is also available via the Internet at
10a629ded1SLOLi# http://www.illumos.org/license/CDDL.
11a629ded1SLOLi#
12a629ded1SLOLi
13a629ded1SLOLi#
14a629ded1SLOLi# Copyright 2018, Datto Inc.
15a629ded1SLOLi#
16a629ded1SLOLi
17a629ded1SLOLi. $STF_SUITE/include/libtest.shlib
18a629ded1SLOLi
19a629ded1SLOLi#
20a629ded1SLOLi# DESCRIPTION:
21a629ded1SLOLi# 'zfs diff' should work with encrypted datasets
22a629ded1SLOLi#
23a629ded1SLOLi# STRATEGY:
24a629ded1SLOLi# 1. Create an encrypted dataset
25a629ded1SLOLi# 2. Create two snapshots of the dataset
26a629ded1SLOLi# 3. Perform 'zfs diff -Ft' and verify no errors occur
27a629ded1SLOLi# 4. Perform the same test on a dataset with large dnodes
28a629ded1SLOLi#
29a629ded1SLOLi
30a629ded1SLOLiverify_runnable "both"
31a629ded1SLOLi
32a629ded1SLOLifunction cleanup
33a629ded1SLOLi{
34*99d3b4e2Sloli	destroy_dataset "$TESTPOOL/$TESTFS1" "-r"
35*99d3b4e2Sloli	destroy_dataset "$TESTPOOL/$TESTFS2" "-r"
36a629ded1SLOLi}
37a629ded1SLOLi
38a629ded1SLOLilog_assert "'zfs diff' should work with encrypted datasets"
39a629ded1SLOLilog_onexit cleanup
40a629ded1SLOLi
41a629ded1SLOLi# 1. Create an encrypted dataset
42a629ded1SLOLilog_must eval "echo 'password' | zfs create -o encryption=on \
43a629ded1SLOLi	-o keyformat=passphrase $TESTPOOL/$TESTFS1"
44a629ded1SLOLiMNTPOINT="$(get_prop mountpoint $TESTPOOL/$TESTFS1)"
45a629ded1SLOLi
46a629ded1SLOLi# 2. Create two snapshots of the dataset
47a629ded1SLOLilog_must zfs snapshot $TESTPOOL/$TESTFS1@snap1
48a629ded1SLOLilog_must touch "$MNTPOINT/file"
49a629ded1SLOLilog_must zfs snapshot $TESTPOOL/$TESTFS1@snap2
50a629ded1SLOLi
51a629ded1SLOLi# 3. Perform 'zfs diff' and verify no errors occur
52a629ded1SLOLilog_must zfs diff -Ft $TESTPOOL/$TESTFS1@snap1 $TESTPOOL/$TESTFS1@snap2
53a629ded1SLOLi
54*99d3b4e2Sloli# 4. Perform the same test on a dataset with large dnodes
55*99d3b4e2Slolilog_must eval "echo 'password' | zfs create -o dnodesize=4k \
56*99d3b4e2Sloli	-o encryption=on -o keyformat=passphrase $TESTPOOL/$TESTFS2"
57*99d3b4e2SloliMNTPOINT="$(get_prop mountpoint $TESTPOOL/$TESTFS2)"
58*99d3b4e2Slolilog_must zfs snapshot $TESTPOOL/$TESTFS2@snap1
59*99d3b4e2Slolilog_must touch "$MNTPOINT/file"
60*99d3b4e2Slolilog_must zfs snapshot $TESTPOOL/$TESTFS2@snap2
61*99d3b4e2Slolilog_must zfs diff -Ft $TESTPOOL/$TESTFS2@snap1 $TESTPOOL/$TESTFS2@snap2
62*99d3b4e2Sloli
63a629ded1SLOLilog_pass "'zfs diff' works with encrypted datasets"
64