]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: add way to control mkfs.minix time stamps
authorSami Kerola <kerolasa@iki.fi>
Sun, 2 Aug 2015 18:28:59 +0000 (19:28 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 3 Aug 2015 09:27:37 +0000 (11:27 +0200)
Needed in order to create reproducable file systems image files, so that
out come of mkfs.minix can be checksum'ed.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
disk-utils/Makemodule.am
disk-utils/mkfs.minix.c
tests/commands.sh

index 3a2b36dd040afc68f425b1c5c8440fcf42f76af9..a2e1994c6edee5a27e82ca4ae7133d043ac3a142 100644 (file)
@@ -13,6 +13,11 @@ mkfs_minix_SOURCES = \
        disk-utils/minix_programs.h \
        disk-utils/mkfs.minix.c
 mkfs_minix_LDADD = $(LDADD) libcommon.la
+
+check_PROGRAMS += test_mkfs_minix
+test_mkfs_minix_SOURCES = $(mkfs_minix_SOURCES)
+test_mkfs_minix_LDADD = $(mkfs_minix_LDADD)
+test_mkfs_minix_CFLAGS = -DTEST_SCRIPT
 endif
 
 
index 2da0e687872d607bcde243845626875097c9d12a..94ffacb359d1b54469638a587886f3e7cca71060 100644 (file)
@@ -148,6 +148,20 @@ static void __attribute__((__noreturn__)) usage(FILE *out)
        exit(out == stderr ? MKFS_EX_USAGE : MKFS_EX_OK);
 }
 
+#ifdef TEST_SCRIPT
+static inline time_t mkfs_minix_time(time_t *t)
+{
+       const char *str = getenv("MKFS_MINIX_TEST_SECOND_SINCE_EPOCH");
+       time_t sec;
+
+       if (str && sscanf(str, "%ld", &sec) == 1)
+               return sec;
+       return time(t);
+}
+#else                          /* !TEST_SCRIPT */
+# define mkfs_minix_time(x) time(x)
+#endif
+
 static void super_set_state(void)
 {
        switch (fs_version) {
@@ -251,7 +265,7 @@ static void make_bad_inode_v1(struct fs_control *ctl)
                return;
        mark_inode(MINIX_BAD_INO);
        inode->i_nlinks = 1;
-       inode->i_time = time(NULL);
+       inode->i_time = mkfs_minix_time(NULL);
        inode->i_mode = S_IFREG + 0000;
        inode->i_size = ctl->fs_bad_blocks * MINIX_BLOCK_SIZE;
        zone = next(0);
@@ -299,7 +313,7 @@ static void make_bad_inode_v2_v3 (struct fs_control *ctl)
                return;
        mark_inode (MINIX_BAD_INO);
        inode->i_nlinks = 1;
-       inode->i_atime = inode->i_mtime = inode->i_ctime = time (NULL);
+       inode->i_atime = inode->i_mtime = inode->i_ctime = mkfs_minix_time(NULL);
        inode->i_mode = S_IFREG + 0000;
        inode->i_size = ctl->fs_bad_blocks * MINIX_BLOCK_SIZE;
        zone = next (0);
@@ -351,7 +365,7 @@ static void make_root_inode_v1(struct fs_control *ctl) {
        mark_inode(MINIX_ROOT_INO);
        inode->i_zone[0] = get_free_block(ctl);
        inode->i_nlinks = 2;
-       inode->i_time = time(NULL);
+       inode->i_time = mkfs_minix_time(NULL);
        if (ctl->fs_bad_blocks)
                inode->i_size = 3 * ctl->fs_dirsize;
        else {
@@ -372,7 +386,7 @@ static void make_root_inode_v2_v3 (struct fs_control *ctl) {
        mark_inode (MINIX_ROOT_INO);
        inode->i_zone[0] = get_free_block (ctl);
        inode->i_nlinks = 2;
-       inode->i_atime = inode->i_mtime = inode->i_ctime = time (NULL);
+       inode->i_atime = inode->i_mtime = inode->i_ctime = mkfs_minix_time(NULL);
 
        if (ctl->fs_bad_blocks)
                inode->i_size = 3 * ctl->fs_dirsize;
index b5098c875e8208c1c2daadec204152d388ba483b..bb985c7e4fd4077ad294bbb16564f4bf759a44de 100644 (file)
@@ -22,6 +22,7 @@ TS_HELPER_PYLIBMOUNT_UPDATE="$top_srcdir/libmount/python/test_mount_tab_update.p
 TS_HELPER_LOGGER="$top_builddir/test_logger"
 TS_HELPER_LOGINDEFS="$top_builddir/test_logindefs"
 TS_HELPER_MD5="$top_builddir/test_md5"
+TS_HELPER_MKFS_MINIX="$top_builddir/test_mkfs_minix"
 TS_HELPER_MORE=${TS_HELPER_MORE-"$top_builddir/test_more"}
 TS_HELPER_PARTITIONS="$top_builddir/sample-partitions"
 TS_HELPER_PATHS="$top_builddir/test_pathnames"