1*a629ded1SLOLi#!/bin/ksh -p 2*a629ded1SLOLi# 3*a629ded1SLOLi# This file and its contents are supplied under the terms of the 4*a629ded1SLOLi# Common Development and Distribution License ("CDDL"), version 1.0. 5*a629ded1SLOLi# You may only use this file in accordance with the terms of version 6*a629ded1SLOLi# 1.0 of the CDDL. 7*a629ded1SLOLi# 8*a629ded1SLOLi# A full copy of the text of the CDDL should have accompanied this 9*a629ded1SLOLi# source. A copy of the CDDL is also available via the Internet at 10*a629ded1SLOLi# http://www.illumos.org/license/CDDL. 11*a629ded1SLOLi# 12*a629ded1SLOLi 13*a629ded1SLOLi# 14*a629ded1SLOLi# Copyright 2017, loli10K <ezomori.nozomu@gmail.com>. All rights reserved. 15*a629ded1SLOLi# Copyright 2019 Joyent, Inc. 16*a629ded1SLOLi# 17*a629ded1SLOLi 18*a629ded1SLOLi. $STF_SUITE/include/libtest.shlib 19*a629ded1SLOLi 20*a629ded1SLOLi# 21*a629ded1SLOLi# DESCRIPTION: 22*a629ded1SLOLi# 'zfs diff -F' shows different object types correctly. 23*a629ded1SLOLi# 24*a629ded1SLOLi# STRATEGY: 25*a629ded1SLOLi# 1. Prepare a dataset 26*a629ded1SLOLi# 2. Create different objects and verify 'zfs diff -F' shows the correct type 27*a629ded1SLOLi# 28*a629ded1SLOLi 29*a629ded1SLOLiverify_runnable "both" 30*a629ded1SLOLi 31*a629ded1SLOLifunction cleanup 32*a629ded1SLOLi{ 33*a629ded1SLOLi log_must zfs destroy -r "$DATASET" 34*a629ded1SLOLi rm -f "$FILEDIFF" 35*a629ded1SLOLi} 36*a629ded1SLOLi 37*a629ded1SLOLi# 38*a629ded1SLOLi# Verify object at $path is of type $symbol using 'zfs diff -F' 39*a629ded1SLOLi# Valid types are: 40*a629ded1SLOLi# * B (Block device) 41*a629ded1SLOLi# * C (Character device) 42*a629ded1SLOLi# * / (Directory) 43*a629ded1SLOLi# * > (Door) 44*a629ded1SLOLi# * | (Named pipe) 45*a629ded1SLOLi# * @ (Symbolic link) 46*a629ded1SLOLi# * P (Event port) 47*a629ded1SLOLi# * = (Socket) 48*a629ded1SLOLi# * F (Regular file) 49*a629ded1SLOLi# 50*a629ded1SLOLifunction verify_object_class # <path> <symbol> 51*a629ded1SLOLi{ 52*a629ded1SLOLi path="$1" 53*a629ded1SLOLi symbol="$2" 54*a629ded1SLOLi 55*a629ded1SLOLi log_must eval "zfs diff -F $TESTSNAP1 $TESTSNAP2 > $FILEDIFF" 56*a629ded1SLOLi diffsym="$(nawk -v path="$path" '$NF == path { print $2 }' < $FILEDIFF)" 57*a629ded1SLOLi if [[ "$diffsym" != "$symbol" ]]; then 58*a629ded1SLOLi log_fail "Unexpected type for $path ('$diffsym' != '$symbol')" 59*a629ded1SLOLi else 60*a629ded1SLOLi log_note "Object $path type is correctly displayed as '$symbol'" 61*a629ded1SLOLi fi 62*a629ded1SLOLi 63*a629ded1SLOLi log_must zfs destroy "$TESTSNAP1" 64*a629ded1SLOLi log_must zfs destroy "$TESTSNAP2" 65*a629ded1SLOLi} 66*a629ded1SLOLi 67*a629ded1SLOLilog_assert "'zfs diff -F' should show different object types correctly." 68*a629ded1SLOLilog_onexit cleanup 69*a629ded1SLOLi 70*a629ded1SLOLiDATASET="$TESTPOOL/$TESTFS/fs" 71*a629ded1SLOLiTESTSNAP1="$DATASET@snap1" 72*a629ded1SLOLiTESTSNAP2="$DATASET@snap2" 73*a629ded1SLOLiFILEDIFF="$TESTDIR/zfs-diff.txt" 74*a629ded1SLOLiMAJOR=$(stat -c %t /dev/null) 75*a629ded1SLOLiMINOR=$(stat -c %T /dev/null) 76*a629ded1SLOLi 77*a629ded1SLOLi# 1. Prepare a dataset 78*a629ded1SLOLilog_must zfs create $DATASET 79*a629ded1SLOLiMNTPOINT="$(get_prop mountpoint $DATASET)" 80*a629ded1SLOLilog_must zfs set devices=on $DATASET 81*a629ded1SLOLilog_must zfs set xattr=on $DATASET 82*a629ded1SLOLi 83*a629ded1SLOLi# 2. Create different objects and verify 'zfs diff -F' shows the correct type 84*a629ded1SLOLi# 2. F (Regular file) 85*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 86*a629ded1SLOLilog_must touch "$MNTPOINT/file" 87*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 88*a629ded1SLOLiverify_object_class "$MNTPOINT/file" "F" 89*a629ded1SLOLi 90*a629ded1SLOLi# 2. @ (Symbolic link) 91*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 92*a629ded1SLOLilog_must ln -s "$MNTPOINT/file" "$MNTPOINT/link" 93*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 94*a629ded1SLOLiverify_object_class "$MNTPOINT/link" "@" 95*a629ded1SLOLi 96*a629ded1SLOLi# 2. B (Block device) 97*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 98*a629ded1SLOLilog_must mknod "$MNTPOINT/bdev" b $MAJOR $MINOR 99*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 100*a629ded1SLOLiverify_object_class "$MNTPOINT/bdev" "B" 101*a629ded1SLOLi 102*a629ded1SLOLi# 2. C (Character device) 103*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 104*a629ded1SLOLilog_must mknod "$MNTPOINT/cdev" c $MAJOR $MINOR 105*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 106*a629ded1SLOLiverify_object_class "$MNTPOINT/cdev" "C" 107*a629ded1SLOLi 108*a629ded1SLOLi# 2. | (Named pipe) 109*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 110*a629ded1SLOLilog_must mknod "$MNTPOINT/fifo" p 111*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 112*a629ded1SLOLiverify_object_class "$MNTPOINT/fifo" "|" 113*a629ded1SLOLi 114*a629ded1SLOLi# 2. / (Directory) 115*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 116*a629ded1SLOLilog_must mkdir "$MNTPOINT/dir" 117*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 118*a629ded1SLOLiverify_object_class "$MNTPOINT/dir" "/" 119*a629ded1SLOLi 120*a629ded1SLOLi# 2. = (Socket) 121*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP1" 122*a629ded1SLOLilog_must $STF_SUITE/tests/functional/cli_root/zfs_diff/socket "$MNTPOINT/sock" 123*a629ded1SLOLilog_must zfs snapshot "$TESTSNAP2" 124*a629ded1SLOLiverify_object_class "$MNTPOINT/sock" "=" 125*a629ded1SLOLi 126*a629ded1SLOLilog_pass "'zfs diff -F' shows different object types correctly." 127