Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F153415425
D49492.id155195.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
12 KB
Referenced Files
None
Subscribers
None
D49492.id155195.diff
View Options
diff --git a/usr.sbin/makefs/tests/Makefile b/usr.sbin/makefs/tests/Makefile
--- a/usr.sbin/makefs/tests/Makefile
+++ b/usr.sbin/makefs/tests/Makefile
@@ -3,6 +3,8 @@
ATF_TESTS_SH+= makefs_cd9660_tests
TEST_METADATA.makefs_cd9660_tests+= required_files="/sbin/mount_cd9660"
ATF_TESTS_SH+= makefs_ffs_tests
+ATF_TESTS_SH+= makefs_msdos_tests
+TEST_METADATA.makefs_msdos_tests+= required_files="/sbin/mount_msdosfs"
.if ${MK_ZFS} != "no"
ATF_TESTS_SH+= makefs_zfs_tests
# ZFS pools created by makefs always have the same GUID, so OpenZFS
diff --git a/usr.sbin/makefs/tests/makefs_cd9660_tests.sh b/usr.sbin/makefs/tests/makefs_cd9660_tests.sh
--- a/usr.sbin/makefs/tests/makefs_cd9660_tests.sh
+++ b/usr.sbin/makefs/tests/makefs_cd9660_tests.sh
@@ -374,6 +374,81 @@
common_cleanup
}
+atf_test_case T_flag_dir cleanup
+T_flag_dir_body()
+{
+ timestamp=1742574909
+ check_cd9660_support
+ create_test_dirs
+
+ mkdir -p $TEST_INPUTS_DIR/dir1
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -T $timestamp -o rockridge $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_dir_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_F_flag cleanup
+T_flag_F_flag_body()
+{
+ atf_expect_fail "-F doesn't take precedence over -T"
+ timestamp_F=1742574909
+ timestamp_T=1742574910
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type,time" -p $TEST_INPUTS_DIR
+ change_mtree_timestamp $TEST_SPEC_FILE $timestamp_F
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -T $timestamp_T -o rockridge $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp_F
+ atf_check_equal $st_mtime $timestamp_F
+ atf_check_equal $st_ctime $timestamp_F
+}
+
+T_flag_F_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_mtree cleanup
+T_flag_mtree_body()
+{
+ timestamp=1742574909
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type" -p $TEST_INPUTS_DIR
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -T $timestamp -o rockridge $TEST_IMAGE $TEST_SPEC_FILE
+
+ check_cd9660_support
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_mtree_cleanup()
+{
+ common_cleanup
+}
+
atf_test_case duplicate_names cleanup
duplicate_names_head()
{
@@ -425,6 +500,9 @@
atf_add_test_case o_flag_publisher
atf_add_test_case o_flag_rockridge
atf_add_test_case o_flag_rockridge_dev_nodes
+ atf_add_test_case T_flag_dir
+ atf_add_test_case T_flag_F_flag
+ atf_add_test_case T_flag_mtree
atf_add_test_case duplicate_names
}
diff --git a/usr.sbin/makefs/tests/makefs_ffs_tests.sh b/usr.sbin/makefs/tests/makefs_ffs_tests.sh
--- a/usr.sbin/makefs/tests/makefs_ffs_tests.sh
+++ b/usr.sbin/makefs/tests/makefs_ffs_tests.sh
@@ -241,6 +241,80 @@
common_cleanup
}
+
+atf_test_case T_flag_dir cleanup
+T_flag_dir_body()
+{
+ timestamp=1742574909
+ create_test_dirs
+
+ mkdir -p $TEST_INPUTS_DIR/dir1
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -M 1m -T $timestamp $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_dir_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_F_flag cleanup
+T_flag_F_flag_body()
+{
+ atf_expect_fail "-F doesn't take precedence over -T"
+ timestamp_F=1742574909
+ timestamp_T=1742574910
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type,time" -p $TEST_INPUTS_DIR
+ change_mtree_timestamp $TEST_SPEC_FILE $timestamp_F
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -T $timestamp_T -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp_F
+ atf_check_equal $st_mtime $timestamp_F
+ atf_check_equal $st_ctime $timestamp_F
+}
+
+T_flag_F_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_mtree cleanup
+T_flag_mtree_body()
+{
+ timestamp=1742574909
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type" -p $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -M 1m -T $timestamp $TEST_IMAGE $TEST_SPEC_FILE
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_mtree_cleanup()
+{
+ common_cleanup
+}
+
atf_init_test_cases()
{
@@ -255,4 +329,7 @@
atf_add_test_case o_flag_version_1
atf_add_test_case o_flag_version_2
+ atf_add_test_case T_flag_dir
+ atf_add_test_case T_flag_F_flag
+ atf_add_test_case T_flag_mtree
}
diff --git a/usr.sbin/makefs/tests/makefs_msdos_tests.sh b/usr.sbin/makefs/tests/makefs_msdos_tests.sh
new file mode 100644
--- /dev/null
+++ b/usr.sbin/makefs/tests/makefs_msdos_tests.sh
@@ -0,0 +1,136 @@
+#-
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2025 The FreeBSD Foundation
+#
+# This software was developed by Klara, Inc.
+# under sponsorship from the FreeBSD Foundation and the Sovereign Tech Agency.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+
+MAKEFS="makefs -t msdos"
+MOUNT="mount_msdosfs"
+. "$(dirname "$0")/makefs_tests_common.sh"
+
+common_cleanup()
+{
+ if ! test_md_device=$(cat $TEST_MD_DEVICE_FILE); then
+ echo "$TEST_MD_DEVICE_FILE could not be opened; has an md(4) device been attached?"
+ return
+ fi
+
+ umount -f /dev/$test_md_device || :
+ mdconfig -d -u $test_md_device || :
+}
+
+check_msdosfs_support()
+{
+ kldstat -m msdosfs || \
+ atf_skip "Requires msdosfs filesystem support to be present in the kernel"
+}
+
+atf_test_case T_flag_dir cleanup
+T_flag_dir_body()
+{
+ atf_expect_fail \
+ "The msdos backend saves the wrong timestamp value" \
+ "(possibly due to the 2s resolution for FAT timestamp)"
+ timestamp=1742574909
+ check_msdosfs_support
+
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -T $timestamp -s 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_dir_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_F_flag cleanup
+T_flag_F_flag_body()
+{
+ atf_expect_fail "-F doesn't take precedence over -T"
+ timestamp_F=1742574909
+ timestamp_T=1742574910
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type,time" -p $TEST_INPUTS_DIR
+ change_mtree_timestamp $TEST_SPEC_FILE $timestamp_F
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -T $timestamp_T -s 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp_F
+ atf_check_equal $st_mtime $timestamp_F
+ atf_check_equal $st_ctime $timestamp_F
+}
+
+T_flag_F_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_mtree cleanup
+T_flag_mtree_body()
+{
+ timestamp=1742574908 # Even value, timestamp precision is 2s.
+ check_msdosfs_support
+
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type" -p $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -T $timestamp -s 1m $TEST_IMAGE $TEST_SPEC_FILE
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ # FAT directory entries don't have an access time, just a date.
+ #atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_mtree_cleanup()
+{
+ common_cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case T_flag_dir
+ atf_add_test_case T_flag_F_flag
+ atf_add_test_case T_flag_mtree
+}
diff --git a/usr.sbin/makefs/tests/makefs_tests_common.sh b/usr.sbin/makefs/tests/makefs_tests_common.sh
--- a/usr.sbin/makefs/tests/makefs_tests_common.sh
+++ b/usr.sbin/makefs/tests/makefs_tests_common.sh
@@ -141,3 +141,10 @@
$MOUNT ${1} /dev/$(cat $TEST_MD_DEVICE_FILE) $TEST_MOUNT_DIR
}
+change_mtree_timestamp()
+{
+ filename="$1"
+ timestamp="$2"
+
+ sed -i "" "s/time=.*$/time=${timestamp}.0/g" "$filename"
+}
diff --git a/usr.sbin/makefs/tests/makefs_zfs_tests.sh b/usr.sbin/makefs/tests/makefs_zfs_tests.sh
--- a/usr.sbin/makefs/tests/makefs_zfs_tests.sh
+++ b/usr.sbin/makefs/tests/makefs_zfs_tests.sh
@@ -858,6 +858,83 @@
common_cleanup
}
+#
+# Verify that -T timestamps are honored.
+#
+atf_test_case T_flag_dir cleanup
+T_flag_dir_body()
+{
+ timestamp=1742574909
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check $MAKEFS -T $timestamp -s 10g -o rootpath=/ -o poolname=$ZFS_POOL_NAME \
+ $TEST_IMAGE $TEST_INPUTS_DIR
+
+ import_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_dir_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_F_flag cleanup
+T_flag_F_flag_body()
+{
+ atf_expect_fail "-F doesn't take precedence over -T"
+ timestamp_F=1742574909
+ timestamp_T=1742574910
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type,time" -p $TEST_INPUTS_DIR
+ change_mtree_timestamp $TEST_SPEC_FILE $timestamp_F
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -T $timestamp_T -s 10g -o rootpath=/ \
+ -o poolname=$ZFS_POOL_NAME $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp_F
+ atf_check_equal $st_mtime $timestamp_F
+ atf_check_equal $st_ctime $timestamp_F
+}
+
+T_flag_F_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case T_flag_mtree cleanup
+T_flag_mtree_body()
+{
+ timestamp=1742574909
+ create_test_dirs
+ mkdir -p $TEST_INPUTS_DIR/dir1
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k "type" -p $TEST_INPUTS_DIR
+ atf_check $MAKEFS -T $timestamp -s 10g -o rootpath=/ -o poolname=$ZFS_POOL_NAME \
+ $TEST_IMAGE $TEST_SPEC_FILE
+
+ import_image
+ eval $(stat -s $TEST_MOUNT_DIR/dir1)
+ atf_check_equal $st_atime $timestamp
+ atf_check_equal $st_mtime $timestamp
+ atf_check_equal $st_ctime $timestamp
+}
+
+T_flag_mtree_cleanup()
+{
+ common_cleanup
+}
+
atf_init_test_cases()
{
atf_add_test_case autoexpand
@@ -883,6 +960,9 @@
atf_add_test_case root_props
atf_add_test_case used_space_props
atf_add_test_case perms
+ atf_add_test_case T_flag_dir
+ atf_add_test_case T_flag_F_flag
+ atf_add_test_case T_flag_mtree
# XXXMJ tests:
# - test with different ashifts (at least, 9 and 12), different image sizes
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Apr 22, 1:09 AM (9 h, 47 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31943846
Default Alt Text
D49492.id155195.diff (12 KB)
Attached To
Mode
D49492: makefs: Add tests for the -T flag
Attached
Detach File
Event Timeline
Log In to Comment