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