Importing NetBSD "Kyua" test framework
To do so, a few dependencies have been imported: * external/bsd/lutok * external/mit/lua * external/public-domain/sqlite * external/public-domain/xz The Kyua framework is the new generation of ATF (Automated Test Framework), it is composed of: * external/bsd/atf * external/bsd/kyua-atf-compat * external/bsd/kyua-cli * external/bsd/kyua-tester * tests Kyua/ATF being written in C++, it depends on libstdc++ which is provided by GCC. As this is not part of the sources, Kyua is only compiled when the native GCC utils are installed. To install Kyua do the following: * In a cross-build enviromnent, add the following to the build.sh commandline: -V MKBINUTILS=yes -V MKGCCCMDS=yes WARNING: At this point the import is still experimental, and not supported on native builds (a.k.a make build). Change-Id: I26aee23c5bbd2d64adcb7c1beb98fe0d479d7ada
This commit is contained in:
43
tests/fs/tmpfs/Makefile
Normal file
43
tests/fs/tmpfs/Makefile
Normal file
@@ -0,0 +1,43 @@
|
||||
# $NetBSD: Makefile,v 1.6 2010/06/07 03:43:51 riz Exp $
|
||||
|
||||
TESTSDIR= ${TESTSBASE}/fs/tmpfs
|
||||
WARNS= 4
|
||||
|
||||
TESTS_SH= t_create
|
||||
TESTS_SH+= t_devices
|
||||
TESTS_SH+= t_dots
|
||||
TESTS_SH+= t_exec
|
||||
TESTS_SH+= t_link
|
||||
TESTS_SH+= t_mkdir
|
||||
TESTS_SH+= t_mknod
|
||||
TESTS_SH+= t_mount
|
||||
TESTS_SH+= t_pipes
|
||||
TESTS_SH+= t_read_write
|
||||
TESTS_SH+= t_readdir
|
||||
TESTS_SH+= t_remove
|
||||
TESTS_SH+= t_rename
|
||||
TESTS_SH+= t_rmdir
|
||||
TESTS_SH+= t_setattr
|
||||
TESTS_SH+= t_sizes
|
||||
TESTS_SH+= t_sockets
|
||||
TESTS_SH+= t_statvfs
|
||||
TESTS_SH+= t_symlink
|
||||
TESTS_SH+= t_times
|
||||
TESTS_SH+= t_trail_slash
|
||||
TESTS_SH+= t_truncate
|
||||
TESTS_SH+= t_vnd
|
||||
TESTS_SH+= t_vnode_leak
|
||||
|
||||
TESTS_C+= t_renamerace
|
||||
|
||||
LDADD.t_renamerace+= -lrumpfs_tmpfs -lrumpvfs -lrump -lrumpuser -lpthread
|
||||
|
||||
FILES= h_funcs.subr
|
||||
FILESDIR= ${TESTSDIR}
|
||||
|
||||
PROGS= h_tools
|
||||
SRCS.h_tools= h_tools.c
|
||||
MAN.h_tools= # empty
|
||||
BINDIR.h_tools= ${TESTSDIR}
|
||||
|
||||
.include <bsd.test.mk>
|
||||
17
tests/fs/tmpfs/README
Normal file
17
tests/fs/tmpfs/README
Normal file
@@ -0,0 +1,17 @@
|
||||
The tests in this directory where written at the same time tmpfs was
|
||||
developed. This is why, if you follow the order of tests in the Atffile,
|
||||
you will notice that they start checking the most basic things and end
|
||||
checking the less common ones. Furthermore, tests try not to use features
|
||||
tested by further tests in the lists.
|
||||
|
||||
However, the above is not the most appropriate testing procedure when you
|
||||
have a working file system because some separation in test programs does
|
||||
not make sense afterwards.
|
||||
|
||||
Many of the tests here are applicable to any file system. They should be
|
||||
refactored to be reusable on any mounted file system, which could also
|
||||
remove the need to do the mount/unmount steps in each and every test case.
|
||||
|
||||
Possibly take a look at the file system tests in FreeBSD. They seem to be
|
||||
much more complete, even though they are written in Perl and therefore not
|
||||
directly usable.
|
||||
96
tests/fs/tmpfs/h_funcs.subr
Normal file
96
tests/fs/tmpfs/h_funcs.subr
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $NetBSD: h_funcs.subr,v 1.5 2013/03/17 01:16:45 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
Mount_Point=
|
||||
|
||||
#
|
||||
# test_mount [args]
|
||||
#
|
||||
# Mounts tmpfs over ${Mount_Point} and changes the current directory
|
||||
# to the mount point. Optional arguments may be passed to the
|
||||
# mount command.
|
||||
#
|
||||
test_mount() {
|
||||
require_fs tmpfs
|
||||
|
||||
Mount_Point=$(pwd)/mntpt
|
||||
atf_check -s eq:0 -o empty -e empty mkdir "${Mount_Point}"
|
||||
echo "mount -t tmpfs ${*} tmpfs ${Mount_Point}"
|
||||
mount -t tmpfs "${@}" tmpfs "${Mount_Point}" 2>mounterr
|
||||
if [ "${?}" -ne 0 ]; then
|
||||
cat mounterr 1>&2
|
||||
if grep 'Operation not supported' mounterr > /dev/null; then
|
||||
atf_skip "tmpfs not supported"
|
||||
fi
|
||||
atf_fail "Failed to mount a tmpfs file system"
|
||||
fi
|
||||
cd "${Mount_Point}"
|
||||
}
|
||||
|
||||
#
|
||||
# test_unmount
|
||||
#
|
||||
# Unmounts the file system mounted by test_mount.
|
||||
#
|
||||
test_unmount() {
|
||||
cd - >/dev/null
|
||||
atf_check -s eq:0 -o empty -e empty umount ${Mount_Point}
|
||||
atf_check -s eq:0 -o empty -e empty rmdir ${Mount_Point}
|
||||
Mount_Point=
|
||||
}
|
||||
|
||||
#
|
||||
# kqueue_monitor expected_nevents file1 [.. fileN]
|
||||
#
|
||||
# Monitors the commands given through stdin (one per line) using
|
||||
# kqueue and stores the events raised in a log that can be later
|
||||
# verified with kqueue_check.
|
||||
#
|
||||
kqueue_monitor() {
|
||||
nev=${1}; shift
|
||||
echo "Running kqueue-monitored commands and expecting" \
|
||||
"${nev} events"
|
||||
$(atf_get_srcdir)/h_tools kqueue ${*} >kqueue.log || \
|
||||
atf_fail "Could not launch kqueue monitor"
|
||||
got=$(wc -l kqueue.log | awk '{ print $1 }')
|
||||
test ${got} -eq ${nev} || \
|
||||
atf_fail "Got ${got} events but expected ${nev}"
|
||||
}
|
||||
|
||||
#
|
||||
# kqueue_check file event
|
||||
#
|
||||
# Checks if kqueue raised the given event when monitoring the
|
||||
# given file.
|
||||
#
|
||||
kqueue_check() {
|
||||
echo "Checking if ${1} received ${2}"
|
||||
grep "^${1} - ${2}$" kqueue.log >/dev/null || \
|
||||
atf_fail "${1} did not receive ${2}"
|
||||
}
|
||||
299
tests/fs/tmpfs/h_tools.c
Normal file
299
tests/fs/tmpfs/h_tools.c
Normal file
@@ -0,0 +1,299 @@
|
||||
/* $NetBSD: h_tools.c,v 1.4 2011/06/11 18:03:17 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2005, 2006 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Helper tools for several tests. These are kept in a single file due
|
||||
* to the limitations of bsd.prog.mk to build a single program in a
|
||||
* given directory.
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/event.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/statvfs.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
static int getfh_main(int, char **);
|
||||
static int kqueue_main(int, char **);
|
||||
static int rename_main(int, char **);
|
||||
static int sockets_main(int, char **);
|
||||
static int statvfs_main(int, char **);
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
getfh_main(int argc, char **argv)
|
||||
{
|
||||
int error;
|
||||
void *fh;
|
||||
size_t fh_size;
|
||||
|
||||
if (argc < 2)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
fh_size = 0;
|
||||
fh = NULL;
|
||||
for (;;) {
|
||||
if (fh_size) {
|
||||
fh = malloc(fh_size);
|
||||
if (fh == NULL) {
|
||||
fprintf(stderr, "out of memory");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* The kernel provides the necessary size in fh_size -
|
||||
* but it may change if someone moves things around,
|
||||
* so retry untill we have enough memory.
|
||||
*/
|
||||
error = getfh(argv[1], fh, &fh_size);
|
||||
if (error == 0) {
|
||||
break;
|
||||
} else {
|
||||
if (fh != NULL)
|
||||
free(fh);
|
||||
if (errno != E2BIG) {
|
||||
warn("getfh");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
error = write(STDOUT_FILENO, fh, fh_size);
|
||||
if (error == -1) {
|
||||
warn("write");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
free(fh);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
kqueue_main(int argc, char **argv)
|
||||
{
|
||||
char *line;
|
||||
int i, kq;
|
||||
size_t len;
|
||||
struct kevent *changes, event;
|
||||
|
||||
if (argc < 2)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
|
||||
changes = malloc(sizeof(struct kevent) * argc);
|
||||
if (changes == NULL)
|
||||
errx(EXIT_FAILURE, "not enough memory");
|
||||
|
||||
for (i = 0; i < argc; i++) {
|
||||
int fd;
|
||||
|
||||
fd = open(argv[i], O_RDONLY);
|
||||
if (fd == -1)
|
||||
err(EXIT_FAILURE, "cannot open %s", argv[i]);
|
||||
|
||||
EV_SET(&changes[i], fd, EVFILT_VNODE,
|
||||
EV_ADD | EV_ENABLE | EV_ONESHOT,
|
||||
NOTE_ATTRIB | NOTE_DELETE | NOTE_EXTEND | NOTE_LINK |
|
||||
NOTE_RENAME | NOTE_REVOKE | NOTE_WRITE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
kq = kqueue();
|
||||
if (kq == -1)
|
||||
err(EXIT_FAILURE, "kqueue");
|
||||
|
||||
while ((line = fgetln(stdin, &len)) != NULL) {
|
||||
int ec, nev;
|
||||
struct timespec to;
|
||||
|
||||
to.tv_sec = 0;
|
||||
to.tv_nsec = 100000;
|
||||
|
||||
(void)kevent(kq, changes, argc, &event, 1, &to);
|
||||
|
||||
assert(len > 0);
|
||||
assert(line[len - 1] == '\n');
|
||||
line[len - 1] = '\0';
|
||||
ec = system(line);
|
||||
if (ec != EXIT_SUCCESS)
|
||||
errx(ec, "%s returned %d", line, ec);
|
||||
|
||||
do {
|
||||
nev = kevent(kq, changes, argc, &event, 1, &to);
|
||||
if (nev == -1)
|
||||
err(EXIT_FAILURE, "kevent");
|
||||
else if (nev > 0) {
|
||||
for (i = 0; i < argc; i++)
|
||||
if (event.ident == changes[i].ident)
|
||||
break;
|
||||
|
||||
if (event.fflags & NOTE_ATTRIB)
|
||||
printf("%s - NOTE_ATTRIB\n", argv[i]);
|
||||
if (event.fflags & NOTE_DELETE)
|
||||
printf("%s - NOTE_DELETE\n", argv[i]);
|
||||
if (event.fflags & NOTE_EXTEND)
|
||||
printf("%s - NOTE_EXTEND\n", argv[i]);
|
||||
if (event.fflags & NOTE_LINK)
|
||||
printf("%s - NOTE_LINK\n", argv[i]);
|
||||
if (event.fflags & NOTE_RENAME)
|
||||
printf("%s - NOTE_RENAME\n", argv[i]);
|
||||
if (event.fflags & NOTE_REVOKE)
|
||||
printf("%s - NOTE_REVOKE\n", argv[i]);
|
||||
if (event.fflags & NOTE_WRITE)
|
||||
printf("%s - NOTE_WRITE\n", argv[i]);
|
||||
}
|
||||
} while (nev > 0);
|
||||
}
|
||||
|
||||
for (i = 0; i < argc; i++)
|
||||
close(changes[i].ident);
|
||||
free(changes);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
rename_main(int argc, char **argv)
|
||||
{
|
||||
|
||||
if (argc < 3)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
if (rename(argv[1], argv[2]) == -1) {
|
||||
warn("rename");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
sockets_main(int argc, char **argv)
|
||||
{
|
||||
int error, fd;
|
||||
struct sockaddr_un addr;
|
||||
|
||||
if (argc < 2)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
fd = socket(PF_LOCAL, SOCK_STREAM, 0);
|
||||
if (fd == -1) {
|
||||
warn("socket");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
(void)strlcpy(addr.sun_path, argv[1], sizeof(addr.sun_path));
|
||||
addr.sun_family = PF_UNIX;
|
||||
|
||||
error = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
|
||||
if (error == -1) {
|
||||
warn("connect");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
statvfs_main(int argc, char **argv)
|
||||
{
|
||||
int error;
|
||||
struct statvfs buf;
|
||||
|
||||
if (argc < 2)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
error = statvfs(argv[1], &buf);
|
||||
if (error != 0) {
|
||||
warn("statvfs");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
(void)printf("f_bsize=%lu\n", buf.f_bsize);
|
||||
(void)printf("f_blocks=%" PRId64 "\n", buf.f_blocks);
|
||||
(void)printf("f_bfree=%" PRId64 "\n", buf.f_bfree);
|
||||
(void)printf("f_files=%" PRId64 "\n", buf.f_files);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (argc < 2)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
argc -= 1;
|
||||
argv += 1;
|
||||
|
||||
if (strcmp(argv[0], "getfh") == 0)
|
||||
error = getfh_main(argc, argv);
|
||||
else if (strcmp(argv[0], "kqueue") == 0)
|
||||
error = kqueue_main(argc, argv);
|
||||
else if (strcmp(argv[0], "rename") == 0)
|
||||
error = rename_main(argc, argv);
|
||||
else if (strcmp(argv[0], "sockets") == 0)
|
||||
error = sockets_main(argc, argv);
|
||||
else if (strcmp(argv[0], "statvfs") == 0)
|
||||
error = statvfs_main(argc, argv);
|
||||
else
|
||||
error = EXIT_FAILURE;
|
||||
|
||||
return error;
|
||||
}
|
||||
122
tests/fs/tmpfs/t_create.sh
Normal file
122
tests/fs/tmpfs/t_create.sh
Normal file
@@ -0,0 +1,122 @@
|
||||
# $NetBSD: t_create.sh,v 1.8 2011/03/05 07:41:11 pooka Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the create operation works.
|
||||
#
|
||||
|
||||
atf_test_case create
|
||||
create_head() {
|
||||
atf_set "descr" "Verifies that files can be created"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
create_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:1 -o empty -e empty test -f a
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty test -f a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case attrs
|
||||
attrs_head() {
|
||||
atf_set "descr" "Verifies that a new file gets the correct" \
|
||||
"attributes"
|
||||
atf_set "require.config" "unprivileged-user"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
attrs_body() {
|
||||
user=$(atf_config_get unprivileged-user)
|
||||
# Allow the unprivileged user to access the work directory.
|
||||
chown ${user} .
|
||||
|
||||
test_mount
|
||||
|
||||
umask 022
|
||||
atf_check -s eq:1 -o empty -e empty test -f a
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty test -f a
|
||||
|
||||
eval $(stat -s . | sed -e 's|st_|dst_|g')
|
||||
eval $(stat -s a)
|
||||
test ${st_flags} -eq 0 || atf_fail "Incorrect flags"
|
||||
test ${st_size} -eq 0 || atf_fail "Incorrect size"
|
||||
test ${st_uid} -eq $(id -u) || atf_fail "Incorrect uid"
|
||||
test ${st_gid} -eq ${dst_gid} || atf_fail "Incorrect gid"
|
||||
test ${st_mode} = 0100644 || atf_fail "Incorrect mode"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b c
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty chown ${user}:0 b
|
||||
eval $(stat -s b)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 0 ] || atf_fail "Incorrect group"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty chown ${user}:100 c
|
||||
eval $(stat -s c)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 100 ] || atf_fail "Incorrect group"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty su -m ${user} -c 'touch b/a'
|
||||
eval $(stat -s b/a)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 0 ] || atf_fail "Incorrect group"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty su -m ${user} -c 'touch c/a'
|
||||
eval $(stat -s c/a)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 100 ] || atf_fail "Incorrect group"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Verifies that creating a file raises the correct" \
|
||||
"kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo 'touch dir/a' | kqueue_monitor 1 dir
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case create
|
||||
atf_add_test_case attrs
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
60
tests/fs/tmpfs/t_devices.sh
Normal file
60
tests/fs/tmpfs/t_devices.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
# $NetBSD: t_devices.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Tests that special devices work"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o ignore -e ignore /dev/MAKEDEV std
|
||||
atf_check -s eq:0 -o empty -e empty test -e zero
|
||||
atf_check -s eq:0 -o empty -e empty test -e null
|
||||
|
||||
echo "Reading from the 'zero' character device"
|
||||
atf_check -s eq:0 -o ignore -e ignore dd if=zero of=a bs=10k count=1
|
||||
[ $(md5 a | cut -d ' ' -f 4) = 1276481102f218c981e0324180bafd9f ] || \
|
||||
atf_fail "Data read is invalid"
|
||||
|
||||
echo "Writing to the 'null' device"
|
||||
echo foo >null
|
||||
eval $(stat -s null)
|
||||
[ ${st_size} -eq 0 ] || atf_fail "Invalid size for device"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
}
|
||||
67
tests/fs/tmpfs/t_dots.sh
Normal file
67
tests/fs/tmpfs/t_dots.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
# $NetBSD: t_dots.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case topdir
|
||||
topdir_head() {
|
||||
atf_set "descr" "Verifies that looking up '.' and '..' in" \
|
||||
"top-level directories works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
topdir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty test -d ./a
|
||||
atf_check -s eq:0 -o empty -e empty test -d a/../a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case nesteddir
|
||||
nesteddir_head() {
|
||||
atf_set "descr" "Verifies that looking up '.' and '..' in" \
|
||||
"top-level directories works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
nesteddir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty test -d a/b/../b
|
||||
atf_check -s eq:0 -o empty -e empty test -d a/b/../../a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case topdir
|
||||
atf_add_test_case nesteddir
|
||||
}
|
||||
52
tests/fs/tmpfs/t_exec.sh
Normal file
52
tests/fs/tmpfs/t_exec.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
# $NetBSD: t_exec.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Verifies that binary files can be executed from" \
|
||||
"within the file system (i.e., whether getpages" \
|
||||
"works)"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty cp /bin/cp .
|
||||
echo "Verifying copied file"
|
||||
[ $(md5 cp | cut -d ' ' -f 4) = $(md5 /bin/cp | cut -d ' ' -f 4) ] || \
|
||||
atf_file "New binary file does not match original"
|
||||
atf_check -s eq:0 -o empty -e empty ./cp cp foo
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
}
|
||||
129
tests/fs/tmpfs/t_link.sh
Normal file
129
tests/fs/tmpfs/t_link.sh
Normal file
@@ -0,0 +1,129 @@
|
||||
# $NetBSD: t_link.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the link operation works.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Verifies that the link operation works on files" \
|
||||
"at the top directory"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty touch z
|
||||
eval $(stat -s a | sed -e 's|st_|sta_|g')
|
||||
eval $(stat -s z | sed -e 's|st_|stz_|g')
|
||||
test ${sta_ino} != ${stz_ino} || \
|
||||
atf_fail "Node numbers are not different"
|
||||
test ${sta_nlink} -eq 1 || atf_fail "Number of links is incorrect"
|
||||
atf_check -s eq:0 -o empty -e empty ln a b
|
||||
|
||||
echo "Checking if link count is correct after links are created"
|
||||
eval $(stat -s a | sed -e 's|st_|sta_|g')
|
||||
eval $(stat -s b | sed -e 's|st_|stb_|g')
|
||||
test ${sta_ino} = ${stb_ino} || atf_fail "Node number changed"
|
||||
test ${sta_nlink} -eq 2 || atf_fail "Link count is incorrect"
|
||||
test ${stb_nlink} -eq 2 || atf_fail "Link count is incorrect"
|
||||
|
||||
echo "Checking if link count is correct after links are deleted"
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
eval $(stat -s b | sed -e 's|st_|stb_|g')
|
||||
test ${stb_nlink} -eq 1 || atf_fail "Link count is incorrect"
|
||||
atf_check -s eq:0 -o empty -e empty rm b
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case subdirs
|
||||
subdirs_head() {
|
||||
atf_set "descr" "Verifies that the link operation works if used" \
|
||||
"in subdirectories"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
subdirs_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir c
|
||||
atf_check -s eq:0 -o empty -e empty ln a c/b
|
||||
|
||||
echo "Checking if link count is correct after links are created"
|
||||
eval $(stat -s a | sed -e 's|st_|sta_|g')
|
||||
eval $(stat -s c/b | sed -e 's|st_|stb_|g')
|
||||
test ${sta_ino} = ${stb_ino} || atf_fail "Node number changed"
|
||||
test ${sta_nlink} -eq 2 || atf_fail "Link count is incorrect"
|
||||
test ${stb_nlink} -eq 2 || atf_fail "Link count is incorrect"
|
||||
|
||||
echo "Checking if link count is correct after links are deleted"
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
eval $(stat -s c/b | sed -e 's|st_|stb_|g')
|
||||
test ${stb_nlink} -eq 1 || atf_fail "Link count is incorrect"
|
||||
atf_check -s eq:0 -o empty -e empty rm c/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir c
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Verifies that creating a link raises the correct" \
|
||||
"kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
atf_check -s eq:0 -o empty -e empty touch dir/a
|
||||
echo 'ln dir/a dir/b' | kqueue_monitor 2 dir dir/a
|
||||
kqueue_check dir/a NOTE_LINK
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
echo 'rm dir/a' | kqueue_monitor 2 dir dir/b
|
||||
# XXX According to the (short) kqueue(2) documentation, the following
|
||||
# should raise a NOTE_LINK but FFS raises a NOTE_DELETE...
|
||||
kqueue_check dir/b NOTE_LINK
|
||||
kqueue_check dir NOTE_WRITE
|
||||
atf_check -s eq:0 -o empty -e empty rm dir/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
atf_add_test_case subdirs
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
159
tests/fs/tmpfs/t_mkdir.sh
Normal file
159
tests/fs/tmpfs/t_mkdir.sh
Normal file
@@ -0,0 +1,159 @@
|
||||
# $NetBSD: t_mkdir.sh,v 1.8 2011/03/05 07:41:11 pooka Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that mkdir works by creating some nested directories. It also
|
||||
# checks, in part, the lookup operation.
|
||||
#
|
||||
|
||||
atf_test_case single
|
||||
single_head() {
|
||||
atf_set "descr" "Creates a single directory and checks the" \
|
||||
"mount point's hard link count"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
single_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:1 -o empty -e empty test -d a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty test -d a
|
||||
test -d a
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_nlink} = 3 ] || atf_fail "Link count is not 3"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case many
|
||||
many_head() {
|
||||
atf_set "descr" "Creates multiple directories and checks the" \
|
||||
"mount point's hard link count"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
many_body() {
|
||||
test_mount
|
||||
|
||||
for d in $(jot 100); do
|
||||
atf_check -s eq:1 -o empty -e empty test -d ${d}
|
||||
atf_check -s eq:0 -o empty -e empty mkdir ${d}
|
||||
atf_check -s eq:0 -o empty -e empty test -d ${d}
|
||||
done
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_nlink} = 102 ] || atf_fail "Link count is not 102"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case nested
|
||||
nested_head() {
|
||||
atf_set "descr" "Checks if nested directories can be created"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
nested_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:1 -o empty -e empty test -d a/b/c/d/e
|
||||
atf_check -s eq:0 -o empty -e empty mkdir -p a/b/c/d/e
|
||||
atf_check -s eq:0 -o empty -e empty test -d a/b/c/d/e
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case attrs
|
||||
attrs_head() {
|
||||
atf_set "descr" "Checks that new directories get the proper" \
|
||||
"attributes (owner and group)"
|
||||
atf_set "require.config" "unprivileged-user"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
attrs_body() {
|
||||
user=$(atf_config_get unprivileged-user)
|
||||
# Allow the unprivileged user to access the work directory.
|
||||
chown ${user} .
|
||||
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b c
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty chown ${user}:0 b
|
||||
eval $(stat -s b)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 0 ] || atf_fail "Incorrect group"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty chown ${user}:100 c
|
||||
eval $(stat -s c)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 100 ] || atf_fail "Incorrect group"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty su -m ${user} -c 'mkdir b/a'
|
||||
eval $(stat -s b/a)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 0 ] || atf_fail "Incorrect group"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty su -m ${user} -c 'mkdir c/a'
|
||||
eval $(stat -s c/a)
|
||||
[ ${st_uid} -eq $(id -u ${user}) ] || atf_fail "Incorrect owner"
|
||||
[ ${st_gid} -eq 100 ] || atf_fail "Incorrect group"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Creates a directory and checks the kqueue events" \
|
||||
"raised"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo 'mkdir dir/a' | kqueue_monitor 2 dir
|
||||
|
||||
# Creating a directory raises NOTE_LINK on the parent directory
|
||||
kqueue_check dir NOTE_LINK
|
||||
|
||||
# Creating a directory raises NOTE_WRITE on the parent directory
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir/a
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case single
|
||||
atf_add_test_case many
|
||||
atf_add_test_case nested
|
||||
atf_add_test_case attrs
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
143
tests/fs/tmpfs/t_mknod.sh
Normal file
143
tests/fs/tmpfs/t_mknod.sh
Normal file
@@ -0,0 +1,143 @@
|
||||
# $NetBSD: t_mknod.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the mknod operation works.
|
||||
#
|
||||
|
||||
atf_test_case block
|
||||
block_head() {
|
||||
atf_set "descr" "Tests that block devices can be created"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
block_body() {
|
||||
test_mount
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mknod fd0a b 2 0
|
||||
eval $(stat -s fd0a)
|
||||
[ ${st_mode} = 060644 ] || atf_fail "Invalid mode"
|
||||
[ ${st_rdev} -eq 512 ] || atf_fail "Invalid device"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case block_kqueue
|
||||
block_kqueue_head() {
|
||||
atf_set "descr" "Tests that creating a block device raises the" \
|
||||
"appropriate kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
block_kqueue_body() {
|
||||
test_mount
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo 'mknod dir/fd0a b 2 0' | kqueue_monitor 1 dir
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case char
|
||||
char_head() {
|
||||
atf_set "descr" "Tests that character devices can be created"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
char_body() {
|
||||
test_mount
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mknod null c 2 2
|
||||
eval $(stat -s null)
|
||||
[ ${st_mode} = 020644 ] || atf_fail "Invalid mode"
|
||||
[ ${st_rdev} -eq 514 ] || atf_fail "Invalid device"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case char_kqueue
|
||||
char_kqueue_head() {
|
||||
atf_set "descr" "Tests that creating a character device raises the" \
|
||||
"appropriate kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
char_kqueue_body() {
|
||||
test_mount
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo 'mknod dir/null c 2 2' | kqueue_monitor 1 dir
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case pipe
|
||||
pipe_head() {
|
||||
atf_set "descr" "Tests that named pipes can be created"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
pipe_body() {
|
||||
test_mount
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mknod pipe p
|
||||
eval $(stat -s pipe)
|
||||
[ ${st_mode} = 010644 ] || atf_fail "Invalid mode"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case pipe_kqueue
|
||||
pipe_kqueue_head() {
|
||||
atf_set "descr" "Tests that creating a named pipe raises the" \
|
||||
"appropriate kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
pipe_kqueue_body() {
|
||||
test_mount
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo 'mknod dir/pipe p' | kqueue_monitor 1 dir
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case block
|
||||
atf_add_test_case block_kqueue
|
||||
atf_add_test_case char
|
||||
atf_add_test_case char_kqueue
|
||||
atf_add_test_case pipe
|
||||
atf_add_test_case pipe_kqueue
|
||||
}
|
||||
140
tests/fs/tmpfs/t_mount.sh
Normal file
140
tests/fs/tmpfs/t_mount.sh
Normal file
@@ -0,0 +1,140 @@
|
||||
# $NetBSD: t_mount.sh,v 1.6 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that an execution of mount and umount works correctly without
|
||||
# causing errors and that the root node gets correct attributes.
|
||||
# Also verifies command line parsing from mount_tmpfs.
|
||||
#
|
||||
|
||||
atf_test_case plain
|
||||
plain_head() {
|
||||
atf_set "descr" "Tests a mount and unmount without any options"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
plain_body() {
|
||||
test_mount
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case links
|
||||
links_head() {
|
||||
atf_set "descr" "Tests that the mount point has two hard links"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
links_body() {
|
||||
test_mount
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_nlink} = 2 ] || \
|
||||
atf_fail "Root directory does not have two hard links"
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case options
|
||||
options_head() {
|
||||
atf_set "descr" "Tests the read-only mount option"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
options_body() {
|
||||
test_mount -o ro
|
||||
mount | grep ${Mount_Point} | grep -q read-only || \
|
||||
atf_fail "read-only option (ro) does not work"
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case attrs
|
||||
attrs_head() {
|
||||
atf_set "descr" "Tests that root directory attributes are set" \
|
||||
"correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
attrs_body() {
|
||||
test_mount -o -u1000 -o -g100 -o -m755
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_uid} = 1000 ] || atf_fail "uid is incorrect"
|
||||
[ ${st_gid} = 100 ] || atf_fail "gid is incorrect"
|
||||
[ ${st_mode} = 040755 ] || atf_fail "mode is incorrect"
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case negative
|
||||
negative_head() {
|
||||
atf_set "descr" "Tests that negative values passed to to -s are" \
|
||||
"handled correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
negative_body() {
|
||||
mkdir tmp
|
||||
test_mount -o -s-10
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case large
|
||||
large_head() {
|
||||
atf_set "descr" "Tests that extremely long values passed to -s" \
|
||||
"are handled correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
large_body() {
|
||||
test_mount -o -s9223372036854775807
|
||||
test_unmount
|
||||
|
||||
mkdir tmp
|
||||
atf_check -s eq:1 -o empty -e ignore \
|
||||
mount -t tmpfs -o -s9223372036854775808 tmpfs tmp
|
||||
atf_check -s eq:1 -o empty -e ignore \
|
||||
mount -t tmpfs -o -s9223372036854775808g tmpfs tmp
|
||||
rmdir tmp
|
||||
}
|
||||
|
||||
atf_test_case mntpt
|
||||
mntpt_head() {
|
||||
atf_set "descr" "Tests that the error messages printed when the" \
|
||||
"mount point is invalid do not show the source" \
|
||||
"unused parameter"
|
||||
}
|
||||
mntpt_body() {
|
||||
mount_tmpfs unused $(pwd)/mnt >out 2>&1
|
||||
atf_check -s eq:1 -o empty -e empty grep unused out
|
||||
atf_check -s eq:0 -o ignore -e empty grep "$(pwd)/mnt" out
|
||||
|
||||
mount_tmpfs unused mnt >out 2>&1
|
||||
atf_check -s eq:1 -o empty -e empty grep unused out
|
||||
atf_check -s eq:0 -o ignore -e empty grep mnt out
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case plain
|
||||
atf_add_test_case options
|
||||
atf_add_test_case attrs
|
||||
atf_add_test_case negative
|
||||
atf_add_test_case large
|
||||
atf_add_test_case mntpt
|
||||
}
|
||||
52
tests/fs/tmpfs/t_pipes.sh
Normal file
52
tests/fs/tmpfs/t_pipes.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
# $NetBSD: t_pipes.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Verifies that pipes work"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
umask 022
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mknod pipe p
|
||||
|
||||
echo "Writing to pipe and waiting for response"
|
||||
echo -n foo >pipe &
|
||||
[ "$(cat pipe)" = foo ] || atf_fail "Received data is incorrect"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
}
|
||||
87
tests/fs/tmpfs/t_read_write.sh
Normal file
87
tests/fs/tmpfs/t_read_write.sh
Normal file
@@ -0,0 +1,87 @@
|
||||
# $NetBSD: t_read_write.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the read and write operations work.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Checks that file removal works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
echo "Testing write to a small file"
|
||||
echo foo >a || atf_fail "Failed to write to file"
|
||||
[ $(md5 a | cut -d ' ' -f 4) = d3b07384d113edec49eaa6238ad5ff00 ] || \
|
||||
atf_fail "Invalid file contents"
|
||||
|
||||
echo "Testing appending to a small file"
|
||||
echo bar >>a || atf_fail "Failed to append data to file"
|
||||
[ $(md5 a | cut -d ' ' -f 4) = f47c75614087a8dd938ba4acff252494 ] || \
|
||||
atf_fail "Invalid file contents"
|
||||
|
||||
echo "Testing write to a big file (bigger than a page)"
|
||||
jot 10000 >b || atf_fail "Failed to create a big file"
|
||||
[ $(md5 b | cut -d ' ' -f 4) = 72d4ff27a28afbc066d5804999d5a504 ] || \
|
||||
atf_fail "Invalid file contents"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Checks that writing to a file raises the" \
|
||||
"appropriate kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o ignore -e ignore \
|
||||
dd if=/dev/zero of=c bs=1k count=10
|
||||
echo 'dd if=/dev/zero of=c seek=2 bs=1k count=1 conv=notrunc' \
|
||||
'>/dev/null 2>&1' | kqueue_monitor 1 c
|
||||
kqueue_check c NOTE_WRITE
|
||||
|
||||
echo foo >d
|
||||
echo 'echo bar >>d' | kqueue_monitor 2 d
|
||||
kqueue_check d NOTE_EXTEND
|
||||
kqueue_check d NOTE_WRITE
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
116
tests/fs/tmpfs/t_readdir.sh
Normal file
116
tests/fs/tmpfs/t_readdir.sh
Normal file
@@ -0,0 +1,116 @@
|
||||
# $NetBSD: t_readdir.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the readdir operation works.
|
||||
#
|
||||
|
||||
atf_test_case dots
|
||||
dots_head() {
|
||||
atf_set "descr" "Verifies that readdir returns the '.' and '..'" \
|
||||
"entries"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dots_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o save:stdout -e empty /bin/ls -a
|
||||
atf_check -s eq:0 -o ignore -e empty grep '^\.$' stdout
|
||||
atf_check -s eq:0 -o ignore -e empty grep '^\..$' stdout
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case types
|
||||
types_head() {
|
||||
atf_set "descr" "Verifies that readdir works for all different" \
|
||||
"file types"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
types_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
atf_check -s eq:0 -o empty -e empty touch reg
|
||||
atf_check -s eq:0 -o empty -e empty ln -s reg lnk
|
||||
atf_check -s eq:0 -o empty -e empty mknod blk b 0 0
|
||||
atf_check -s eq:0 -o empty -e empty mknod chr c 0 0
|
||||
atf_check -s eq:0 -o empty -e empty mknod fifo p
|
||||
atf_check -s eq:0 -o empty -e empty \
|
||||
$(atf_get_srcdir)/h_tools sockets sock
|
||||
|
||||
atf_check -s eq:0 -o ignore -e empty ls
|
||||
atf_check -s eq:0 -o empty -e empty rm -rf *
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case caching
|
||||
caching_head() {
|
||||
atf_set "descr" "Catch a bug caused by incorrect invalidation of" \
|
||||
"readdir caching variables"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
caching_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch $(jot 10)
|
||||
atf_check -s eq:0 -o empty -e empty rm *
|
||||
atf_check -s eq:0 -o empty -e empty touch $(jot 20)
|
||||
atf_check -s eq:0 -o empty -e empty -x "ls >/dev/null"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case many
|
||||
many_head() {
|
||||
atf_set "descr" "Verifies that readdir works with many files"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
many_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
echo "Creating 500 files"
|
||||
for f in $(jot 500); do
|
||||
touch a/$f
|
||||
done
|
||||
atf_check -s eq:0 -o empty -e empty rm a/*
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case dots
|
||||
atf_add_test_case types
|
||||
atf_add_test_case caching
|
||||
atf_add_test_case many
|
||||
}
|
||||
110
tests/fs/tmpfs/t_remove.sh
Normal file
110
tests/fs/tmpfs/t_remove.sh
Normal file
@@ -0,0 +1,110 @@
|
||||
# $NetBSD: t_remove.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the remove operation works.
|
||||
#
|
||||
|
||||
atf_test_case single
|
||||
single_head() {
|
||||
atf_set "descr" "Checks that file removal works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
single_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:1 -o empty -e empty test -f a
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty test -f a
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
atf_check -s eq:1 -o empty -e empty test -f a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case uchg
|
||||
uchg_head() {
|
||||
atf_set "descr" "Checks that files with the uchg flag set cannot" \
|
||||
"be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
uchg_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty chflags uchg a
|
||||
atf_check -s eq:1 -o empty -e ignore rm -f a
|
||||
atf_check -s eq:0 -o empty -e empty chflags nouchg a
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
atf_check -s eq:1 -o empty -e empty test -f a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dot
|
||||
dot_head() {
|
||||
atf_set "descr" "Checks that '.' cannot be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dot_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:1 -o empty -e ignore unlink a/.
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Removes a file and checks the kqueue events" \
|
||||
"raised"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
atf_check -s eq:0 -o empty -e empty touch dir/a
|
||||
echo 'rm dir/a' | kqueue_monitor 2 dir dir/a
|
||||
kqueue_check dir/a NOTE_DELETE
|
||||
kqueue_check dir NOTE_WRITE
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case single
|
||||
atf_add_test_case uchg
|
||||
atf_add_test_case dot
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
278
tests/fs/tmpfs/t_rename.sh
Normal file
278
tests/fs/tmpfs/t_rename.sh
Normal file
@@ -0,0 +1,278 @@
|
||||
# $NetBSD: t_rename.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the rename operation works (either by renaming entries or
|
||||
# by moving them).
|
||||
#
|
||||
|
||||
atf_test_case dots
|
||||
dots_head() {
|
||||
atf_set "descr" "Tests that '.' and '..' cannot be renamed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dots_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:1 -o empty -e ignore mv a/. c
|
||||
atf_check -s eq:1 -o empty -e ignore mv a/.. c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case crossdev
|
||||
crossdev_head() {
|
||||
atf_set "descr" "Tests that cross-device renames do not work"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
crossdev_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:1 -o empty -e save:stderr \
|
||||
$(atf_get_srcdir)/h_tools rename a /var/tmp/a
|
||||
atf_check -s eq:0 -o ignore -e empty grep "Cross-device link" stderr
|
||||
atf_check -s eq:0 -o empty -e empty test -d a
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Tests that basic renames work"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mv a c
|
||||
atf_check -s eq:1 -o empty -e empty test -d a
|
||||
atf_check -s eq:0 -o empty -e empty test -d c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir c
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dotdot
|
||||
dotdot_head() {
|
||||
atf_set "descr" "Tests that the '..' entry is properly updated" \
|
||||
"during moves"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dotdot_body() {
|
||||
test_mount
|
||||
|
||||
echo "Checking if the '..' entry is updated after moves"
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b
|
||||
atf_check -s eq:0 -o empty -e empty mv b a
|
||||
atf_check -s eq:0 -o empty -e empty test -d a/b/../b
|
||||
atf_check -s eq:0 -o empty -e empty test -d a/b/../../a
|
||||
eval $(stat -s a/b)
|
||||
[ ${st_nlink} = 2 ] || atf_fail "Incorrect number of links"
|
||||
eval $(stat -s a)
|
||||
[ ${st_nlink} = 3 ] || atf_fail "Incorrect number of links"
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
echo "Checking if the '..' entry is correct after renames"
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b
|
||||
atf_check -s eq:0 -o empty -e empty mv b a
|
||||
atf_check -s eq:0 -o empty -e empty mv a c
|
||||
atf_check -s eq:0 -o empty -e empty test -d c/b/../b
|
||||
atf_check -s eq:0 -o empty -e empty test -d c/b/../../c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir c/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir c
|
||||
|
||||
echo "Checking if the '..' entry is correct after multiple moves"
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b
|
||||
atf_check -s eq:0 -o empty -e empty mv b a
|
||||
atf_check -s eq:0 -o empty -e empty mv a c
|
||||
atf_check -s eq:0 -o empty -e empty mv c/b d
|
||||
atf_check -s eq:0 -o empty -e empty test -d d/../c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir d
|
||||
atf_check -s eq:0 -o empty -e empty rmdir c
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dir_to_emptydir
|
||||
dir_to_emptydir_head() {
|
||||
atf_set "descr" "Tests that renaming a directory to override an" \
|
||||
"empty directory works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dir_to_emptydir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty touch a/c
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b
|
||||
atf_check -s eq:0 -o empty -e empty \
|
||||
$(atf_get_srcdir)/h_tools rename a b
|
||||
atf_check -s eq:1 -o empty -e empty test -e a
|
||||
atf_check -s eq:0 -o empty -e empty test -d b
|
||||
atf_check -s eq:0 -o empty -e empty test -f b/c
|
||||
rm b/c
|
||||
rmdir b
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dir_to_fulldir
|
||||
dir_to_fulldir_head() {
|
||||
atf_set "descr" "Tests that renaming a directory to override a" \
|
||||
"non-empty directory fails"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dir_to_fulldir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty touch a/c
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b
|
||||
atf_check -s eq:0 -o empty -e empty touch b/d
|
||||
atf_check -s eq:1 -o empty -e save:stderr \
|
||||
$(atf_get_srcdir)/h_tools rename a b
|
||||
atf_check -s eq:0 -o ignore -e empty grep "Directory not empty" stderr
|
||||
atf_check -s eq:0 -o empty -e empty test -d a
|
||||
atf_check -s eq:0 -o empty -e empty test -f a/c
|
||||
atf_check -s eq:0 -o empty -e empty test -d b
|
||||
atf_check -s eq:0 -o empty -e empty test -f b/d
|
||||
rm a/c
|
||||
rm b/d
|
||||
rmdir a
|
||||
rmdir b
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dir_to_file
|
||||
dir_to_file_head() {
|
||||
atf_set "descr" "Tests that renaming a directory to override a" \
|
||||
"file fails"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dir_to_file_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty touch b
|
||||
atf_check -s eq:1 -o empty -e save:stderr \
|
||||
$(atf_get_srcdir)/h_tools rename a b
|
||||
atf_check -s eq:0 -o ignore -e empty grep "Not a directory" stderr
|
||||
atf_check -s eq:0 -o empty -e empty test -d a
|
||||
atf_check -s eq:0 -o empty -e empty test -f b
|
||||
rmdir a
|
||||
rm b
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case file_to_dir
|
||||
file_to_dir_head() {
|
||||
atf_set "descr" "Tests that renaming a file to override a" \
|
||||
"directory fails"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
file_to_dir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir b
|
||||
atf_check -s eq:1 -o empty -e save:stderr \
|
||||
$(atf_get_srcdir)/h_tools rename a b
|
||||
atf_check -s eq:0 -o ignore -e empty grep "Is a directory" stderr
|
||||
atf_check -s eq:0 -o empty -e empty test -f a
|
||||
atf_check -s eq:0 -o empty -e empty test -d b
|
||||
rm a
|
||||
rmdir b
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Tests that moving and renaming files raise the" \
|
||||
"correct kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
atf_check -s eq:0 -o empty -e empty touch dir/a
|
||||
echo 'mv dir/a dir/b' | kqueue_monitor 2 dir dir/a
|
||||
kqueue_check dir/a NOTE_RENAME
|
||||
kqueue_check dir NOTE_WRITE
|
||||
atf_check -s eq:0 -o empty -e empty rm dir/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
atf_check -s eq:0 -o empty -e empty touch dir/a
|
||||
atf_check -s eq:0 -o empty -e empty touch dir/b
|
||||
echo 'mv dir/a dir/b' | kqueue_monitor 3 dir dir/a dir/b
|
||||
kqueue_check dir/a NOTE_RENAME
|
||||
kqueue_check dir NOTE_WRITE
|
||||
kqueue_check dir/b NOTE_DELETE
|
||||
atf_check -s eq:0 -o empty -e empty rm dir/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir1
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir2
|
||||
atf_check -s eq:0 -o empty -e empty touch dir1/a
|
||||
echo 'mv dir1/a dir2/a' | kqueue_monitor 3 dir1 dir1/a dir2
|
||||
kqueue_check dir1/a NOTE_RENAME
|
||||
kqueue_check dir1 NOTE_WRITE
|
||||
kqueue_check dir2 NOTE_WRITE
|
||||
atf_check -s eq:0 -o empty -e empty rm dir2/a
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir1
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir2
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case dots
|
||||
atf_add_test_case crossdev
|
||||
atf_add_test_case basic
|
||||
atf_add_test_case dotdot
|
||||
atf_add_test_case dir_to_emptydir
|
||||
atf_add_test_case dir_to_fulldir
|
||||
atf_add_test_case dir_to_file
|
||||
atf_add_test_case file_to_dir
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
115
tests/fs/tmpfs/t_renamerace.c
Normal file
115
tests/fs/tmpfs/t_renamerace.c
Normal file
@@ -0,0 +1,115 @@
|
||||
/* $NetBSD: t_renamerace.c,v 1.13 2011/08/18 21:44:55 riastradh Exp $ */
|
||||
|
||||
/*
|
||||
* Modified for rump and atf from a program supplied
|
||||
* by Nicolas Joly in kern/40948
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include <atf-c.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <rump/rump.h>
|
||||
#include <rump/rump_syscalls.h>
|
||||
|
||||
#include <fs/tmpfs/tmpfs_args.h>
|
||||
|
||||
#include "../../h_macros.h"
|
||||
|
||||
ATF_TC(renamerace2);
|
||||
ATF_TC_HEAD(renamerace2, tc)
|
||||
{
|
||||
atf_tc_set_md_var(tc, "descr", "rename(2) lock order inversion");
|
||||
atf_tc_set_md_var(tc, "timeout", "6");
|
||||
}
|
||||
|
||||
static volatile int quittingtime = 0;
|
||||
static pid_t wrkpid;
|
||||
|
||||
static void *
|
||||
r2w1(void *arg)
|
||||
{
|
||||
int fd;
|
||||
|
||||
rump_pub_lwproc_newlwp(wrkpid);
|
||||
|
||||
fd = rump_sys_open("/file", O_CREAT | O_RDWR, 0777);
|
||||
if (fd == -1)
|
||||
atf_tc_fail_errno("creat");
|
||||
rump_sys_close(fd);
|
||||
|
||||
while (!quittingtime) {
|
||||
if (rump_sys_rename("/file", "/dir/file") == -1)
|
||||
atf_tc_fail_errno("rename 1");
|
||||
if (rump_sys_rename("/dir/file", "/file") == -1)
|
||||
atf_tc_fail_errno("rename 2");
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void *
|
||||
r2w2(void *arg)
|
||||
{
|
||||
int fd;
|
||||
|
||||
rump_pub_lwproc_newlwp(wrkpid);
|
||||
|
||||
while (!quittingtime) {
|
||||
fd = rump_sys_open("/dir/file1", O_RDWR);
|
||||
if (fd != -1)
|
||||
rump_sys_close(fd);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ATF_TC_BODY(renamerace2, tc)
|
||||
{
|
||||
struct tmpfs_args args;
|
||||
pthread_t pt[2];
|
||||
|
||||
/*
|
||||
* Force SMP regardless of how many host CPUs there are.
|
||||
* Deadlock is highly unlikely to trigger otherwise.
|
||||
*/
|
||||
setenv("RUMP_NCPU", "2", 1);
|
||||
|
||||
rump_init();
|
||||
memset(&args, 0, sizeof(args));
|
||||
args.ta_version = TMPFS_ARGS_VERSION;
|
||||
args.ta_root_mode = 0777;
|
||||
if (rump_sys_mount(MOUNT_TMPFS, "/", 0, &args, sizeof(args)) == -1)
|
||||
atf_tc_fail_errno("could not mount tmpfs");
|
||||
|
||||
if (rump_sys_mkdir("/dir", 0777) == -1)
|
||||
atf_tc_fail_errno("cannot create directory");
|
||||
|
||||
RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG));
|
||||
RL(wrkpid = rump_sys_getpid());
|
||||
pthread_create(&pt[0], NULL, r2w1, NULL);
|
||||
pthread_create(&pt[1], NULL, r2w2, NULL);
|
||||
|
||||
/* usually triggers in <<1s for me */
|
||||
sleep(4);
|
||||
quittingtime = 1;
|
||||
|
||||
pthread_join(pt[0], NULL);
|
||||
pthread_join(pt[1], NULL);
|
||||
}
|
||||
|
||||
ATF_TP_ADD_TCS(tp)
|
||||
{
|
||||
ATF_TP_ADD_TC(tp, renamerace2);
|
||||
|
||||
return atf_no_error();
|
||||
}
|
||||
204
tests/fs/tmpfs/t_rmdir.sh
Normal file
204
tests/fs/tmpfs/t_rmdir.sh
Normal file
@@ -0,0 +1,204 @@
|
||||
# $NetBSD: t_rmdir.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that rmdir works by creating and removing directories. Also
|
||||
# checks multiple error conditions.
|
||||
#
|
||||
|
||||
atf_test_case mntpt
|
||||
mntpt_head() {
|
||||
atf_set "descr" "Checks that the mount point cannot be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
mntpt_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:1 -o empty -e ignore rmdir ${Mount_Point}
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case non_existent
|
||||
non_existent_head() {
|
||||
atf_set "descr" "Checks that non-existent directories cannot" \
|
||||
"be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
non_existent_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:1 -o empty -e ignore rmdir non-existent
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case single
|
||||
single_head() {
|
||||
atf_set "descr" "Checks that removing a single directory works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
single_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_nlink} = 3 ] || \
|
||||
atf_fail "Incorrect number of links after creation"
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_nlink} = 2 ] || \
|
||||
atf_fail "Incorrect number of links after removal"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case nested
|
||||
nested_head() {
|
||||
atf_set "descr" "Checks that removing nested directories works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
nested_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir -p a/b/c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/b/c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dots
|
||||
dots_head() {
|
||||
atf_set "descr" "Checks that '.' and '..' cannot be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dots_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:1 -o empty -e ignore rmdir a/.
|
||||
atf_check -s eq:1 -o empty -e ignore rmdir a/..
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case non_empty
|
||||
non_empty_head() {
|
||||
atf_set "descr" "Checks that non-empty directories cannot be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
non_empty_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a/c
|
||||
atf_check -s eq:1 -o empty -e ignore rmdir a
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case links
|
||||
links_head() {
|
||||
atf_set "descr" "Checks the root directory's links after removals"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
links_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty mkdir c
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty rmdir c
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a
|
||||
|
||||
eval $(stat -s ${Mount_Point})
|
||||
[ ${st_nlink} = 2 ] || atf_fail "Incorrect number of links"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case curdir
|
||||
curdir_head() {
|
||||
atf_set "descr" "Checks that the current directory cannot be removed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
curdir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a
|
||||
# Catch a bug that would panic the system when accessing the
|
||||
# current directory after being deleted: vop_open cannot assume
|
||||
# that open files are still linked to a directory.
|
||||
atf_check -s eq:1 -o empty -e ignore -x '( cd a && rmdir ../a && ls )'
|
||||
atf_check -s eq:1 -o empty -e empty test -e a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Checks that removing a directory raises the" \
|
||||
"correct kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir/a
|
||||
echo 'rmdir dir/a' | kqueue_monitor 3 dir dir/a
|
||||
kqueue_check dir/a NOTE_DELETE
|
||||
kqueue_check dir NOTE_LINK
|
||||
kqueue_check dir NOTE_WRITE
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case mntpt
|
||||
atf_add_test_case non_existent
|
||||
atf_add_test_case single
|
||||
atf_add_test_case nested
|
||||
atf_add_test_case dots
|
||||
atf_add_test_case non_empty
|
||||
atf_add_test_case links
|
||||
atf_add_test_case curdir
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
216
tests/fs/tmpfs/t_setattr.sh
Normal file
216
tests/fs/tmpfs/t_setattr.sh
Normal file
@@ -0,0 +1,216 @@
|
||||
# $NetBSD: t_setattr.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the setattr vnode operation works, using several commands
|
||||
# that require this function.
|
||||
#
|
||||
|
||||
atf_test_case chown
|
||||
chown_head() {
|
||||
atf_set "descr" "Tests that the file owner can be changed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chown_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir own
|
||||
eval $(stat -s own | sed -e 's|st_|ost_|g')
|
||||
atf_check -s eq:0 -o empty -e empty chown 1234 own
|
||||
eval $(stat -s own)
|
||||
[ ${st_uid} -eq 1234 ] || atf_fail "uid was not set"
|
||||
[ ${st_gid} -eq ${ost_gid} ] || atf_fail "gid was modified"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chown_kqueue
|
||||
chown_kqueue_head() {
|
||||
atf_set "descr" "Tests that changing the file owner raises" \
|
||||
"NOTE_ATTRIB on it"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chown_kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir ownq
|
||||
echo 'chown 1234 ownq' | kqueue_monitor 1 ownq
|
||||
kqueue_check ownq NOTE_ATTRIB
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chgrp
|
||||
chgrp_head() {
|
||||
atf_set "descr" "Tests that the file group can be changed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chgrp_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir grp
|
||||
eval $(stat -s grp | sed -e 's|st_|ost_|g')
|
||||
atf_check -s eq:0 -o empty -e empty chgrp 5678 grp
|
||||
eval $(stat -s grp)
|
||||
[ ${st_uid} -eq ${ost_uid} ] || atf_fail "uid was modified"
|
||||
[ ${st_gid} -eq 5678 ] || atf_fail "gid was not set"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chgrp_kqueue
|
||||
chgrp_kqueue_head() {
|
||||
atf_set "descr" "Tests that changing the file group raises" \
|
||||
"NOTE_ATTRIB on it"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chgrp_kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir grpq
|
||||
echo 'chgrp 1234 grpq' | kqueue_monitor 1 grpq
|
||||
kqueue_check grpq NOTE_ATTRIB
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chowngrp
|
||||
chowngrp_head() {
|
||||
atf_set "descr" "Tests that the file owner and group can be" \
|
||||
"changed at once"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chowngrp_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir owngrp
|
||||
atf_check -s eq:0 -o empty -e empty chown 1234:5678 owngrp
|
||||
eval $(stat -s owngrp)
|
||||
[ ${st_uid} -eq 1234 ] || atf_fail "uid was not modified"
|
||||
[ ${st_gid} -eq 5678 ] || atf_fail "gid was not modified"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chowngrp_kqueue
|
||||
chowngrp_kqueue_head() {
|
||||
atf_set "descr" "Tests that changing the file owner and group" \
|
||||
"raises NOTE_ATTRIB on it"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chowngrp_kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir owngrpp
|
||||
echo 'chown 1234:5678 owngrpp' | kqueue_monitor 1 owngrpp
|
||||
kqueue_check owngrpp NOTE_ATTRIB
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chmod
|
||||
chmod_head() {
|
||||
atf_set "descr" "Tests that the file mode can be changed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chmod_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir mode
|
||||
atf_check -s eq:0 -o empty -e empty chmod 0000 mode
|
||||
eval $(stat -s mode)
|
||||
[ ${st_mode} -eq 40000 ] || af_fail "mode was not set"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chmod_kqueue
|
||||
chmod_kqueue_head() {
|
||||
atf_set "descr" "Tests that changing the file mode raises" \
|
||||
"NOTE_ATTRIB on it"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chmod_kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir modeq
|
||||
echo 'chmod 0000 modeq' | kqueue_monitor 1 modeq
|
||||
kqueue_check modeq NOTE_ATTRIB
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chtimes
|
||||
chtimes_head() {
|
||||
atf_set "descr" "Tests that file times can be changed"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chtimes_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir times
|
||||
atf_check -s eq:0 -o empty -e empty \
|
||||
-x 'TZ=GMT touch -t 200501010101 times'
|
||||
eval $(stat -s times)
|
||||
[ ${st_atime} = ${st_mtime} ] || \
|
||||
atf_fail "atime does not match mtime"
|
||||
[ ${st_atime} = 1104541260 ] || atf_fail "atime does not match"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case chtimes_kqueue
|
||||
chtimes_kqueue_head() {
|
||||
atf_set "descr" "Tests that changing the file times raises" \
|
||||
"NOTE_ATTRIB on it"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
chtimes_kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir timesq
|
||||
echo 'touch timesq' | kqueue_monitor 1 timesq
|
||||
kqueue_check timesq NOTE_ATTRIB
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case chown
|
||||
atf_add_test_case chown_kqueue
|
||||
atf_add_test_case chgrp
|
||||
atf_add_test_case chgrp_kqueue
|
||||
atf_add_test_case chowngrp
|
||||
atf_add_test_case chowngrp_kqueue
|
||||
atf_add_test_case chmod
|
||||
atf_add_test_case chmod_kqueue
|
||||
atf_add_test_case chtimes
|
||||
atf_add_test_case chtimes_kqueue
|
||||
}
|
||||
131
tests/fs/tmpfs/t_sizes.sh
Normal file
131
tests/fs/tmpfs/t_sizes.sh
Normal file
@@ -0,0 +1,131 @@
|
||||
# $NetBSD: t_sizes.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the file system controls memory usage correctly.
|
||||
#
|
||||
|
||||
atf_test_case small
|
||||
small_head() {
|
||||
atf_set "descr" "Checks the status after creating a small file"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
small_body() {
|
||||
test_mount -o -s10M
|
||||
|
||||
echo a >a || atf_fail "Could not create file"
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs .)
|
||||
f_bused=$((${f_blocks} - ${f_bfree}))
|
||||
[ ${f_bused} -gt 1 ] || atf_fail "Incorrect bused count"
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case big
|
||||
big_head() {
|
||||
atf_set "descr" "Checks the status after creating a big file"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
big_body() {
|
||||
test_mount -o -s10M
|
||||
|
||||
pagesize=$(sysctl hw.pagesize | cut -d ' ' -f 3)
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs . | sed -e 's|^f_|cf_|')
|
||||
cf_bused=$((${cf_blocks} - ${cf_bfree}))
|
||||
|
||||
atf_check -s eq:0 -o ignore -e ignore \
|
||||
dd if=/dev/zero of=a bs=1m count=5
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs .)
|
||||
f_bused=$((${f_blocks} - ${f_bfree}))
|
||||
[ ${f_bused} -ne ${cf_bused} ] || atf_fail "bused did not change"
|
||||
[ ${f_bused} -gt $((5 * 1024 * 1024 / ${pagesize})) ] || \
|
||||
atf_fail "bused too big"
|
||||
of_bused=${f_bused}
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs .)
|
||||
f_bused=$((${f_blocks} - ${f_bfree}))
|
||||
[ ${f_bused} -lt ${of_bused} ] || \
|
||||
atf_fail "bused was not correctly restored"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case overflow
|
||||
overflow_head() {
|
||||
atf_set "descr" "Checks the status after creating a big file that" \
|
||||
"overflows the file system limits"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
overflow_body() {
|
||||
test_mount -o -s10M
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs .)
|
||||
of_bused=$((${f_blocks} - ${f_bfree}))
|
||||
atf_check -s eq:1 -o ignore -e ignore \
|
||||
dd if=/dev/zero of=a bs=1m count=15
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs .)
|
||||
f_bused=$((${f_blocks} - ${f_bfree}))
|
||||
[ ${f_bused} -ge ${of_bused} -a ${f_bused} -le $((${of_bused} + 1)) ] \
|
||||
|| atf_fail "Incorrect bused"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case overwrite
|
||||
overwrite_head() {
|
||||
atf_set "descr" "Checks that writing to the middle of a file" \
|
||||
"does not change its size"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
overwrite_body() {
|
||||
test_mount -o -s10M
|
||||
|
||||
atf_check -s eq:0 -o ignore -e ignore \
|
||||
dd if=/dev/zero of=a bs=1024 count=10
|
||||
sync
|
||||
atf_check -s eq:0 -o ignore -e ignore \
|
||||
dd if=/dev/zero of=a bs=1024 conv=notrunc seek=1 count=1
|
||||
sync
|
||||
eval $(stat -s a)
|
||||
[ ${st_size} -eq 10240 ] || atf_fail "Incorrect file size"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case small
|
||||
atf_add_test_case big
|
||||
atf_add_test_case overflow
|
||||
atf_add_test_case overwrite
|
||||
}
|
||||
52
tests/fs/tmpfs/t_sockets.sh
Normal file
52
tests/fs/tmpfs/t_sockets.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
# $NetBSD: t_sockets.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Verifies that sockets can be created using" \
|
||||
"socket/bind"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty $(atf_get_srcdir)/h_tools sockets a
|
||||
atf_check -s eq:0 -o empty -e empty rm a
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo "$(atf_get_srcdir)/h_tools sockets dir/a" | kqueue_monitor 1 dir
|
||||
kqueue_check dir NOTE_WRITE
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
}
|
||||
59
tests/fs/tmpfs/t_statvfs.sh
Normal file
59
tests/fs/tmpfs/t_statvfs.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
# $NetBSD: t_statvfs.sh,v 1.4 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the statvfs system call works properly (returning the
|
||||
# correct values) over a tmpfs mount point.
|
||||
#
|
||||
|
||||
atf_test_case values
|
||||
values_head() {
|
||||
atf_set "descr" "Tests that statvfs(2) returns correct values"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
values_body() {
|
||||
test_mount -o -s10M
|
||||
|
||||
pagesize=$(sysctl hw.pagesize | cut -d ' ' -f 3)
|
||||
eval $($(atf_get_srcdir)/h_tools statvfs .)
|
||||
[ ${pagesize} -eq ${f_bsize} ] || \
|
||||
atf_fail "Invalid bsize"
|
||||
[ $((${f_bsize} * ${f_blocks})) -ge $((10 * 1024 * 1024)) ] || \
|
||||
atf_file "bsize * blocks too small"
|
||||
[ $((${f_bsize} * ${f_blocks})) -le \
|
||||
$((10 * 1024 * 1024 + ${pagesize})) ] || \
|
||||
atf_fail "bsize * blocks too big"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case values
|
||||
}
|
||||
114
tests/fs/tmpfs/t_symlink.sh
Normal file
114
tests/fs/tmpfs/t_symlink.sh
Normal file
@@ -0,0 +1,114 @@
|
||||
# $NetBSD: t_symlink.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that the symlink and readlink operations work.
|
||||
#
|
||||
|
||||
atf_test_case file
|
||||
file_head() {
|
||||
atf_set "descr" "Tests that symlinks to files work"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
file_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
atf_check -s eq:0 -o empty -e empty ln -s a b
|
||||
[ $(md5 b | cut -d ' ' -f 4) = d41d8cd98f00b204e9800998ecf8427e ] || \
|
||||
atf_fail "Symlink points to an incorrect file"
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty -x 'echo foo >a'
|
||||
[ $(md5 b | cut -d ' ' -f 4) = d3b07384d113edec49eaa6238ad5ff00 ] || \
|
||||
atf_fail "Symlink points to an incorrect file"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case exec
|
||||
exec_head() {
|
||||
atf_set "descr" "Tests symlinking to a known system binary and" \
|
||||
"executing it through the symlink"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
exec_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch b
|
||||
atf_check -s eq:0 -o empty -e empty ln -s /bin/cp cp
|
||||
atf_check -s eq:0 -o empty -e empty ./cp b c
|
||||
atf_check -s eq:0 -o empty -e empty test -f c
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case dir
|
||||
dir_head() {
|
||||
atf_set "descr" "Tests that symlinks to directories work"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
dir_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir d
|
||||
atf_check -s eq:1 -o empty -e empty test -f d/foo
|
||||
atf_check -s eq:1 -o empty -e empty test -f e/foo
|
||||
atf_check -s eq:0 -o empty -e empty ln -s d e
|
||||
atf_check -s eq:0 -o empty -e empty touch d/foo
|
||||
atf_check -s eq:0 -o empty -e empty test -f d/foo
|
||||
atf_check -s eq:0 -o empty -e empty test -f e/foo
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case kqueue
|
||||
kqueue_head() {
|
||||
atf_set "descr" "Tests that creating a symlink raises the" \
|
||||
"appropriate kqueue events"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
kqueue_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir dir
|
||||
echo 'ln -s non-existent dir/a' | kqueue_monitor 1 dir
|
||||
kqueue_check dir NOTE_WRITE
|
||||
atf_check -s eq:0 -o empty -e empty rm dir/a
|
||||
atf_check -s eq:0 -o empty -e empty rmdir dir
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case file
|
||||
atf_add_test_case exec
|
||||
atf_add_test_case dir
|
||||
atf_add_test_case kqueue
|
||||
}
|
||||
141
tests/fs/tmpfs/t_times.sh
Normal file
141
tests/fs/tmpfs/t_times.sh
Normal file
@@ -0,0 +1,141 @@
|
||||
# $NetBSD: t_times.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that node times are properly handled.
|
||||
#
|
||||
|
||||
atf_test_case empty
|
||||
empty_head() {
|
||||
atf_set "descr" "Tests that creating an empty file and later" \
|
||||
"manipulating it updates times correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
empty_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty touch a
|
||||
eval $(stat -s a | sed -e 's|st_|ost_|g') || atf_fail "stat failed"
|
||||
[ ${ost_birthtime} -eq ${ost_atime} ] || atf_fail "Incorrect atime"
|
||||
[ ${ost_birthtime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime"
|
||||
[ ${ost_birthtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
|
||||
sleep 1
|
||||
atf_check -s eq:0 -o ignore -e empty cat a
|
||||
eval $(stat -s a) || atf_fail "stat failed"
|
||||
[ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime"
|
||||
[ ${st_ctime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime"
|
||||
[ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
|
||||
sleep 1
|
||||
echo foo >a || atf_fail "Write failed"
|
||||
eval $(stat -s a) || atf_fail "stat failed"
|
||||
[ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime"
|
||||
[ ${st_ctime} -gt ${ost_ctime} ] || atf_fail "Incorrect ctime"
|
||||
[ ${st_mtime} -gt ${ost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case non_empty
|
||||
non_empty_head() {
|
||||
atf_set "descr" "Tests that creating a non-empty file and later" \
|
||||
"manipulating it updates times correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
non_empty_body() {
|
||||
test_mount
|
||||
|
||||
echo foo >b || atf_fail "Non-empty creation failed"
|
||||
eval $(stat -s b | sed -e 's|st_|ost_|g') || atf_fail "stat failed"
|
||||
|
||||
sleep 1
|
||||
atf_check -s eq:0 -o ignore -e empty cat b
|
||||
eval $(stat -s b) || atf_fail "stat failed"
|
||||
[ ${st_atime} -gt ${ost_atime} ] || atf_fail "Incorrect atime"
|
||||
[ ${st_ctime} -eq ${ost_ctime} ] || atf_fail "Incorrect ctime"
|
||||
[ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case link
|
||||
link_head() {
|
||||
atf_set "descr" "Tests that linking to an existing file updates" \
|
||||
"times correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
link_body() {
|
||||
test_mount
|
||||
|
||||
echo foo >c || atf_fail "Non-empty creation failed"
|
||||
eval $(stat -s c | sed -e 's|st_|ost_|g') || atf_fail "stat failed"
|
||||
|
||||
sleep 1
|
||||
atf_check -s eq:0 -o empty -e empty ln c d
|
||||
eval $(stat -s c) || atf_fail "stat failed"
|
||||
[ ${st_atime} -eq ${ost_atime} ] || atf_fail "Incorrect atime"
|
||||
[ ${st_ctime} -gt ${ost_ctime} ] || atf_fail "Incorrect ctime"
|
||||
[ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_test_case rename
|
||||
rename_head() {
|
||||
atf_set "descr" "Tests that renaming an existing file updates" \
|
||||
"times correctly"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
rename_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir e
|
||||
echo foo >e/a || atf_fail "Creation failed"
|
||||
eval $(stat -s e | sed -e 's|st_|dost_|g') || atf_fail "stat failed"
|
||||
eval $(stat -s e/a | sed -e 's|st_|ost_|g') || atf_fail "stat failed"
|
||||
sleep 1
|
||||
atf_check -s eq:0 -o empty -e empty mv e/a e/b
|
||||
eval $(stat -s e | sed -e 's|st_|dst_|g') || atf_fail "stat failed"
|
||||
eval $(stat -s e/b) || atf_fail "stat failed"
|
||||
[ ${st_atime} -eq ${ost_atime} ] || atf_fail "Incorrect atime"
|
||||
[ ${st_ctime} -gt ${ost_ctime} ] || atf_fail "Incorrect ctime"
|
||||
[ ${st_mtime} -eq ${ost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
[ ${dst_mtime} -gt ${dost_mtime} ] || atf_fail "Incorrect mtime"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case empty
|
||||
atf_add_test_case non_empty
|
||||
atf_add_test_case link
|
||||
atf_add_test_case rename
|
||||
}
|
||||
52
tests/fs/tmpfs/t_trail_slash.sh
Normal file
52
tests/fs/tmpfs/t_trail_slash.sh
Normal file
@@ -0,0 +1,52 @@
|
||||
# $NetBSD: t_trail_slash.sh,v 1.5 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case main
|
||||
main_head() {
|
||||
atf_set "descr" "Verifies that trailing slashes are not stored" \
|
||||
"in directory names and that they do not cause" \
|
||||
"crashes"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
main_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir a/
|
||||
atf_check -s eq:0 -o empty -e empty touch a/b
|
||||
atf_check -s eq:0 -o empty -e empty test -f a/b
|
||||
atf_check -s eq:0 -o empty -e empty rm a/b
|
||||
atf_check -s eq:0 -o empty -e empty rmdir a/
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case main
|
||||
}
|
||||
56
tests/fs/tmpfs/t_truncate.sh
Normal file
56
tests/fs/tmpfs/t_truncate.sh
Normal file
@@ -0,0 +1,56 @@
|
||||
# $NetBSD: t_truncate.sh,v 1.4 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case basic
|
||||
basic_head() {
|
||||
atf_set "descr" "Verifies that the truncate operation works"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
echo "Creating big file"
|
||||
jot 10000 >a || atf_fail "Failed to create big file"
|
||||
echo "Trunctaing the file to a smaller size"
|
||||
echo foo >a || atf_fail "Failed to truncate file to a smaller size"
|
||||
[ $(md5 a | cut -d ' ' -f 4) = d3b07384d113edec49eaa6238ad5ff00 ] || \
|
||||
echo "Truncated file is incorrect"
|
||||
|
||||
echo "Truncating to zero bytes"
|
||||
>a || atf_fail "Failed to truncate to 0"
|
||||
echo "Truncating to zero bytes, second try"
|
||||
>a || atf_fail "Failed to re-truncate to 0"
|
||||
|
||||
test_unmount
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
}
|
||||
78
tests/fs/tmpfs/t_vnd.sh
Normal file
78
tests/fs/tmpfs/t_vnd.sh
Normal file
@@ -0,0 +1,78 @@
|
||||
# $NetBSD: t_vnd.sh,v 1.8 2011/04/21 22:26:46 haad Exp $
|
||||
#
|
||||
# Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
#
|
||||
# Verifies that vnd works with files stored in tmpfs.
|
||||
#
|
||||
|
||||
atf_test_case basic cleanup
|
||||
basic_head() {
|
||||
atf_set "descr" "Verifies that vnd works with files stored in tmpfs"
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
basic_body() {
|
||||
test_mount
|
||||
|
||||
atf_check -s eq:0 -o ignore -e ignore \
|
||||
dd if=/dev/zero of=disk.img bs=1m count=10
|
||||
atf_check -s eq:0 -o empty -e empty vnconfig /dev/vnd3 disk.img
|
||||
|
||||
atf_check -s eq:0 -o ignore -e ignore newfs /dev/rvnd3a
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty mkdir mnt
|
||||
atf_check -s eq:0 -o empty -e empty mount /dev/vnd3a mnt
|
||||
|
||||
echo "Creating test files"
|
||||
for f in $(jot -w %u 100 | uniq); do
|
||||
jot 1000 >mnt/${f} || atf_fail "Failed to create file ${f}"
|
||||
done
|
||||
|
||||
echo "Verifying created files"
|
||||
for f in $(jot -w %u 100 | uniq); do
|
||||
[ $(md5 mnt/${f} | cut -d ' ' -f 4) = \
|
||||
53d025127ae99ab79e8502aae2d9bea6 ] || \
|
||||
atf_fail "Invalid checksum for file ${f}"
|
||||
done
|
||||
|
||||
atf_check -s eq:0 -o empty -e empty umount mnt
|
||||
atf_check -s eq:0 -o empty -e empty vnconfig -u /dev/vnd3
|
||||
|
||||
test_unmount
|
||||
touch done
|
||||
}
|
||||
basic_cleanup() {
|
||||
if [ ! -f done ]; then
|
||||
umount mnt 2>/dev/null 1>&2
|
||||
vnconfig -u /dev/vnd3 2>/dev/null 1>&2
|
||||
fi
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case basic
|
||||
}
|
||||
60
tests/fs/tmpfs/t_vnode_leak.sh
Normal file
60
tests/fs/tmpfs/t_vnode_leak.sh
Normal file
@@ -0,0 +1,60 @@
|
||||
# $NetBSD: t_vnode_leak.sh,v 1.6 2010/11/07 17:51:18 jmmv Exp $
|
||||
#
|
||||
# Copyright (c) 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
#
|
||||
|
||||
atf_test_case main cleanup
|
||||
main_head() {
|
||||
atf_set "descr" "Verifies that vnodes are not leaked and that" \
|
||||
"their reclaim operation works as expected: i.e.," \
|
||||
"when all free vnodes are exhausted, unused ones" \
|
||||
"have to be recycled, which is what the reclaim" \
|
||||
"operation does."
|
||||
atf_set "require.user" "root"
|
||||
}
|
||||
main_body() {
|
||||
echo "Lowering kern.maxvnodes to 2000"
|
||||
sysctl kern.maxvnodes | awk '{ print $3; }' >oldvnodes
|
||||
atf_check -s eq:0 -o ignore -e empty sysctl -w kern.maxvnodes=2000
|
||||
|
||||
test_mount -o -s$(((4000 + 2) * 4096))
|
||||
echo "Creating 4000 directories"
|
||||
for f in $(jot 4000); do
|
||||
mkdir ${f}
|
||||
done
|
||||
test_unmount
|
||||
}
|
||||
main_cleanup() {
|
||||
oldvnodes=$(cat oldvnodes)
|
||||
echo "Restoring kern.maxvnodes to ${oldvnodes}"
|
||||
sysctl -w kern.maxvnodes=${oldvnodes}
|
||||
}
|
||||
|
||||
atf_init_test_cases() {
|
||||
. $(atf_get_srcdir)/../h_funcs.subr
|
||||
. $(atf_get_srcdir)/h_funcs.subr
|
||||
|
||||
atf_add_test_case main
|
||||
}
|
||||
Reference in New Issue
Block a user