Branch
Hash :
bc638bf0
Author :
Date :
2025-10-17T20:04:59
savedir tests: Check the length of the file names. Suggested by Bruno Haible in <https://lists.gnu.org/archive/html/bug-gnulib/2025-10/msg00049.html>. * tests/test-savedir.c (test_savedir_sort_none) (test_savedir_sort_name): Check that the file names are only one character long.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
/* Test the savedir module.
Copyright (C) 2025 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
by the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* Written by Collin Funk <collin.funk1@gmail.com>, 2025. */
#include <config.h>
/* Specification. */
#include "savedir.h"
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include "ignore-value.h"
#include "macros.h"
/* Base directory. */
#define BASE "test-savedir.t"
static void
test_savedir_sort_none (void)
{
bool seen[('z' - 'a') + 1];
char *name_space = savedir (BASE, SAVEDIR_SORT_NONE);
ASSERT (name_space != NULL);
/* Set the table of file names we have seen to false. */
memset (seen, 0, sizeof seen);
/* Scan through the file names. */
for (char *namep = name_space; *namep != '\0'; namep += strlen (namep) + 1)
{
int index = *namep - 'a';
ASSERT (strlen (namep) == 1);
ASSERT (index < sizeof seen);
seen[index] = true;
}
/* Make sure all of them have been seen. */
for (int i = 0; i < sizeof seen; ++i)
ASSERT (seen[i]);
free (name_space);
}
static void
test_savedir_sort_name (void)
{
int i = 0;
char *name_space = savedir (BASE, SAVEDIR_SORT_NAME);
ASSERT (name_space != NULL);
/* Check that files "a" to "z" appear in order. */
for (char *namep = name_space; *namep != '\0';
namep += strlen (namep) + 1, i += 1)
{
ASSERT (strlen (namep) == 1);
ASSERT (*namep - 'a' == i);
}
/* Make sure no extra files were seen. */
ASSERT (i == ('z' - 'a') + 1);
free (name_space);
}
int
main (void)
{
char buffer[sizeof BASE + 2];
/* Clean up any trash from prior testsuite runs. */
ignore_value (system ("rm -rf " BASE "*"));
/* Setup a directory with files "a" to "z". */
strcpy (buffer, BASE);
ASSERT (mkdir (buffer, 0700) == 0);
buffer[sizeof buffer - 1] = '\0';
for (int i = 'a'; i <= 'z'; ++i)
{
buffer[sizeof buffer - 3] = '/';
buffer[sizeof buffer - 2] = i;
int fd = creat (buffer, 0600);
ASSERT (0 <= fd);
ASSERT (close (fd) == 0);
}
test_savedir_sort_none ();
test_savedir_sort_name ();
/* Cleanup files created during the test. */
ignore_value (system ("rm -rf " BASE "*"));
return test_exit_status;
}