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