Module Name:    src
Committed By:   pooka
Date:           Tue Jul  6 14:06:22 UTC 2010

Modified Files:
        src/tests/fs: Makefile
Added Files:
        src/tests/fs/psshfs: Atffile Makefile h_have_puffs.c ssh_config.in
            ssh_host_key ssh_host_key.pub sshd_config.in t_psshfs.sh
Removed Files:
        src/tests/fs/puffs: Makefile h_have_puffs.c ssh_config.in ssh_host_key
            ssh_host_key.pub sshd_config.in t_psshfs.sh

Log Message:
Move tests psshfs from fs/puffs to fs/psshfs.  The former is going
to be populated by tests which actually test puffs soon.

jmmv ok


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/tests/fs/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/fs/psshfs/Atffile \
    src/tests/fs/psshfs/Makefile src/tests/fs/psshfs/h_have_puffs.c \
    src/tests/fs/psshfs/ssh_config.in src/tests/fs/psshfs/ssh_host_key \
    src/tests/fs/psshfs/ssh_host_key.pub src/tests/fs/psshfs/sshd_config.in \
    src/tests/fs/psshfs/t_psshfs.sh
cvs rdiff -u -r1.2 -r0 src/tests/fs/puffs/Makefile \
    src/tests/fs/puffs/h_have_puffs.c
cvs rdiff -u -r1.1 -r0 src/tests/fs/puffs/ssh_config.in \
    src/tests/fs/puffs/ssh_host_key src/tests/fs/puffs/ssh_host_key.pub
cvs rdiff -u -r1.3 -r0 src/tests/fs/puffs/sshd_config.in
cvs rdiff -u -r1.7 -r0 src/tests/fs/puffs/t_psshfs.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/fs/Makefile
diff -u src/tests/fs/Makefile:1.12 src/tests/fs/Makefile:1.13
--- src/tests/fs/Makefile:1.12	Mon Jul  5 12:53:58 2010
+++ src/tests/fs/Makefile	Tue Jul  6 14:06:21 2010
@@ -1,10 +1,10 @@
-# $NetBSD: Makefile,v 1.12 2010/07/05 12:53:58 njoly Exp $
+# $NetBSD: Makefile,v 1.13 2010/07/06 14:06:21 pooka Exp $
 
 .include <bsd.own.mk>
 
 TESTSDIR=	${TESTSBASE}/fs
 
-SUBDIR+=	ffs kernfs lfs msdosfs nullfs ptyfs puffs tmpfs umapfs union
+SUBDIR+=	ffs kernfs lfs msdosfs nullfs psshfs ptyfs tmpfs umapfs union
 SUBDIR+=	vfs
 
 FILES= h_funcs.subr

Added files:

Index: src/tests/fs/psshfs/Atffile
diff -u /dev/null src/tests/fs/psshfs/Atffile:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/Atffile	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,6 @@
+Content-Type: application/X-atf-atffile; version="1"
+X-NetBSD-Id: "$NetBSD: Atffile,v 1.1 2010/07/06 14:06:22 pooka Exp $"
+
+prop: test-suite = "NetBSD"
+
+tp-glob: t_*
Index: src/tests/fs/psshfs/Makefile
diff -u /dev/null src/tests/fs/psshfs/Makefile:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/Makefile	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,18 @@
+# $NetBSD: Makefile,v 1.1 2010/07/06 14:06:22 pooka Exp $
+
+TESTSDIR=	${TESTSBASE}/fs/puffs
+
+PROGS=			h_have_puffs
+SRCS.h_have_puffs=	h_have_puffs.c
+MAN.h_have_puffs=	# empty
+BINDIR.h_have_puffs=	${TESTSDIR}
+
+TESTS_SH=	t_psshfs
+
+FILESDIR=	${TESTSDIR}
+FILES=		ssh_config.in
+FILES+=		ssh_host_key
+FILES+=		ssh_host_key.pub
+FILES+=		sshd_config.in
+
+.include <bsd.test.mk>
Index: src/tests/fs/psshfs/h_have_puffs.c
diff -u /dev/null src/tests/fs/psshfs/h_have_puffs.c:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/h_have_puffs.c	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,58 @@
+/* $NetBSD: h_have_puffs.c,v 1.1 2010/07/06 14:06:22 pooka Exp $ */
+/*
+ * Copyright (c) 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.
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(void)
+{
+	int exitcode, fd;
+
+	fd = open("/dev/puffs", O_RDWR);
+	if (fd != -1) {
+		printf("yes\n");
+		close(fd);
+		exitcode = EXIT_SUCCESS;
+	} else {
+		if (errno == ENXIO) {
+			printf("enxio\n");
+			exitcode = EXIT_SUCCESS;
+		} else if (errno == EACCES) {
+			printf("eacces\n");
+			exitcode = EXIT_SUCCESS;
+		} else {
+			printf("failed\n");
+			exitcode = EXIT_FAILURE;
+		}
+	}
+
+	return exitcode;
+}
Index: src/tests/fs/psshfs/ssh_config.in
diff -u /dev/null src/tests/fs/psshfs/ssh_config.in:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/ssh_config.in	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,14 @@
+# $NetBSD: ssh_config.in,v 1.1 2010/07/06 14:06:22 pooka Exp $
+
+# Basic settings.
+Port 10000
+Protocol 2
+
+# The temporary key used for login.
+IdentityFile @WORKDIR@/ssh_user_key
+
+# Prevent the client from complaining about unknown host keys.
+GlobalKnownHostsFile @WORKDIR@/known_hosts
+
+# Do not attempt password authentication in case keys fail.
+IdentitiesOnly yes
Index: src/tests/fs/psshfs/ssh_host_key
diff -u /dev/null src/tests/fs/psshfs/ssh_host_key:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/ssh_host_key	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQDJnMpSG1lGmApk8F7ZH7TGtjjP/WUs+vqHyFsyS2lilJzereen
+a/ME6S0d0HTOeCdKldjbtDpfNXbh+XnJMlJMEgEs4Mg1jluuEV0GOJoMt7cGzku2
+gAYGx++2+wqYw6Y+M8Tb1M4AO+PcxD/3BkdUyIKO63v6STl2VQn1BzsTQwIBIwKB
+gAuFTWPHDGpvFols0jhK9GMgWwSSIwnidLdNRwowMehgQ3pwVmFWoCwqlN0h2sn4
+PMJu9nL0WxtiJAzprzARgQuPI25t9LiKTF7scC/cNUiHPplUjvoDXA9ccY1eIf4R
+e6wwZz1jfCWen0eRsvMyoYvFmEH8hILAk1bY9heymOGLAkEA/WhC49n+gtloVMow
+iKQOO6+u3ouxTOTQ3sV2wCaLaO2pEbHP2//5SlUJLp6QrjC7bg9Kr+f56+zT2he9
+f6GCwwJBAMus3XizmZdJyJLnkCJRiT0/3Kf57fhWKRdnFkuRLyjET9MEWavRdJmr
+bx/lxmILi1iKwXiFEDM6MqYfmNImJYECQQCtw9YYlXtSaTGZOi/oqwJyEhGCqO6b
+II85q/moVPHhjQY4BOZNttbT4on0FPV+wlSjPa+OkHDcSp/mAaaDZ2+bAkEAujel
+6rLVkaKLfv+ZuPoXE22WivMityo0Mqdk12ArHfVQS+a4YpOdzlOYzLTSosi56o19
+sAShGOTAl+Jf1hQ/iwJAKpPviX5w292H/m5T0m4l0NRdQ3pRujOLMSVmY+/HFZTW
+GJMYLr1eBKNfLsKzJgB88GzuF2O/O8hNi3XSiOP+9w==
+-----END RSA PRIVATE KEY-----
Index: src/tests/fs/psshfs/ssh_host_key.pub
diff -u /dev/null src/tests/fs/psshfs/ssh_host_key.pub:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/ssh_host_key.pub	Tue Jul  6 14:06:22 2010
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyZzKUhtZRpgKZPBe2R+0xrY4z/1lLPr6h8hbMktpYpSc3q3np2vzBOktHdB0zngnSpXY27Q6XzV24fl5yTJSTBIBLODINY5brhFdBjiaDLe3Bs5LtoAGBsfvtvsKmMOmPjPE29TOADvj3MQ/9wZHVMiCjut7+kk5dlUJ9Qc7E0M= [email protected]
Index: src/tests/fs/psshfs/sshd_config.in
diff -u /dev/null src/tests/fs/psshfs/sshd_config.in:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/sshd_config.in	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,40 @@
+# $NetBSD: sshd_config.in,v 1.1 2010/07/06 14:06:22 pooka Exp $
+
+# Basic settings.
+Port 10000
+Protocol 2
+
+# Provide information to the user in case something goes wrong.
+LogLevel DEBUG1
+
+# The host key.  It lives in the work directory because we need to set
+# very strict permissions on it and cannot modify the copy on the source
+# directory.
+HostKey @WORKDIR@/ssh_host_key
+
+# The authorized keys file we set up during the test to allow the client
+# to safely log in.  We need to disable strict modes because ATF_WORKDIR
+# usually lives in /tmp, which has 1777 permissions and are not liked by
+# sshd.
+AuthorizedKeysFile @WORKDIR@/authorized_keys
+StrictModes no
+
+# Some settings to allow user runs of sshd.
+PidFile @WORKDIR@/sshd.pid.2
+Subsystem sftp @WORKDIR@/sftp-server
+UsePam no
+UsePrivilegeSeparation no
+
+# The root user should also be able to run the tests.
+PermitRootLogin yes
+
+# Be restrictive about access to the temporary server.  Only allow key-based
+# authentication.
+ChallengeResponseAuthentication no
+GSSAPIAuthentication no
+HostbasedAuthentication no
+KerberosAuthentication no
+MaxAuthTries 1
+MaxStartups 1
+PasswordAuthentication no
+PubkeyAuthentication yes
Index: src/tests/fs/psshfs/t_psshfs.sh
diff -u /dev/null src/tests/fs/psshfs/t_psshfs.sh:1.1
--- /dev/null	Tue Jul  6 14:06:22 2010
+++ src/tests/fs/psshfs/t_psshfs.sh	Tue Jul  6 14:06:22 2010
@@ -0,0 +1,205 @@
+# $NetBSD: t_psshfs.sh,v 1.1 2010/07/06 14:06:22 pooka Exp $
+#
+# Copyright (c) 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.
+#
+
+# -------------------------------------------------------------------------
+# Auxiliary functions.
+# -------------------------------------------------------------------------
+
+#
+# Skips the calling test case if puffs is not supported in the kernel
+# or if the calling user does not have the necessary permissions to mount
+# file systems.
+#
+require_puffs() {
+	case "$($(atf_get_srcdir)/h_have_puffs)" in
+		eacces)
+			atf_skip "Cannot open /dev/puffs for read/write access"
+			;;
+		enxio)
+			atf_skip "puffs support not built into the kernel"
+			;;
+		failed)
+			atf_skip "Unknown error trying to access /dev/puffs"
+			;;
+		yes)
+			;;
+		*)
+			atf_fail "Unknown value returned by h_have_puffs"
+			;;
+	esac
+
+	if [ $(id -u) -ne 0 -a $(sysctl -n vfs.generic.usermount) -eq 0 ]
+	then
+		atf_skip "Regular users cannot mount file systems" \
+		    "(vfs.generic.usermount is set to 0)"
+	fi
+}
+
+#
+# Starts a SSH server and sets up the client to access it.
+# Authentication is allowed and done using an RSA key exclusively, which
+# is generated on the fly as part of the test case.
+# XXX: Ideally, all the tests in this test program should be able to share
+# the generated key, because creating it can be a very slow process on some
+# machines.
+#
+start_ssh() {
+	echo "Setting up SSH server configuration"
+	sed -e "s,@SRCDIR@,$(atf_get_srcdir),g" -e "s,@WORKDIR@,$(pwd),g" \
+	    $(atf_get_srcdir)/sshd_config.in >sshd_config || \
+	    atf_fail "Failed to create sshd_config"
+	atf_check -s eq:0 -o empty -e empty cp /usr/libexec/sftp-server .
+	atf_check -s eq:0 -o empty -e empty \
+	    cp $(atf_get_srcdir)/ssh_host_key .
+	atf_check -s eq:0 -o empty -e empty \
+	    cp $(atf_get_srcdir)/ssh_host_key.pub .
+	atf_check -s eq:0 -o empty -e empty chmod 400 ssh_host_key
+	atf_check -s eq:0 -o empty -e empty chmod 444 ssh_host_key.pub
+
+	/usr/sbin/sshd -e -D -f ./sshd_config >sshd.log 2>&1 &
+	echo $! >sshd.pid
+	echo "SSH server started (pid $(cat sshd.pid))"
+
+	echo "Setting up SSH client configuration"
+	atf_check -s eq:0 -o empty -e empty \
+	    ssh-keygen -f ssh_user_key -t rsa -b 1024 -N "" -q
+	atf_check -s eq:0 -o empty -e empty \
+	    cp ssh_user_key.pub authorized_keys
+	echo "[localhost]:10000,[127.0.0.1]:10000,[::1]:10000" \
+	    "$(cat $(atf_get_srcdir)/ssh_host_key.pub)" >known_hosts || \
+	    atf_fail "Failed to create known_hosts"
+	atf_check -s eq:0 -o empty -e empty chmod 600 authorized_keys
+	sed -e "s,@SRCDIR@,$(atf_get_srcdir),g" -e "s,@WORKDIR@,$(pwd),g" \
+	    $(atf_get_srcdir)/ssh_config.in >ssh_config || \
+	    atf_fail "Failed to create ssh_config"
+}
+
+#
+# Stops the SSH server spawned by start_ssh and prints diagnosis data.
+#
+stop_ssh() {
+	if [ -f sshd.pid ]; then
+		echo "Stopping SSH server (pid $(cat sshd.pid))"
+		kill $(cat sshd.pid)
+	fi
+	if [ -f sshd.log ]; then
+		echo "Server output was:"
+		sed -e 's,^,    ,' sshd.log
+	fi
+}
+
+#
+# Mounts the given source directory on the target directory using psshfs.
+# Both directories are supposed to live on the current directory.
+#
+mount_psshfs() {
+	atf_check -s eq:0 -o empty -e empty \
+	    mount -t psshfs -o -F=$(pwd)/ssh_config localhost:$(pwd)/${1} ${2}
+}
+
+# -------------------------------------------------------------------------
+# The test cases.
+# -------------------------------------------------------------------------
+
+atf_test_case inode_nos cleanup
+inode_nos_head() {
+	atf_set "descr" "Checks that different files get different inode" \
+	    "numbers"
+	atf_set "use.fs" "true"
+}
+inode_nos_body() {
+	require_puffs
+
+	start_ssh
+
+	mkdir root
+	mkdir root/dir
+	touch root/dir/file1
+	touch root/dir/file2
+	touch root/file3
+	touch root/file4
+
+	cat >ne_inodes.sh <<EOF
+#! $(atf-config -t atf_shell)
+#
+# Compares the inodes of the two given files and returns true if they are
+# different; false otherwise.
+#
+test \$(stat -f %i \${1}) -ne \$(stat -f %i \${2})
+EOF
+	chmod +x ne_inodes.sh
+
+	mkdir mnt
+	mount_psshfs root mnt
+	atf_check -s eq:0 -o empty -e empty \
+	    ./ne_inodes.sh root/dir root/dir/file1
+	atf_check -s eq:0 -o empty -e empty \
+	    ./ne_inodes.sh root/dir root/dir/file2
+	atf_check -s eq:0 -o empty -e empty \
+	    ./ne_inodes.sh root/dir/file1 root/dir/file2
+	atf_check -s eq:0 -o empty -e empty \
+	    ./ne_inodes.sh root/file3 root/file4
+}
+inode_nos_cleanup() {
+	umount mnt
+	stop_ssh
+}
+
+atf_test_case pwd cleanup
+pwd_head() {
+	atf_set "descr" "Checks that pwd works correctly"
+	atf_set "use.fs" "true"
+}
+pwd_body() {
+	require_puffs
+
+	start_ssh
+
+	mkdir root
+	mkdir root/dir
+
+	mkdir mnt
+	atf_check -s eq:0 -o save:stdout -e empty \
+	    -x 'echo $(cd mnt && /bin/pwd)/dir'
+	mv stdout expout
+	mount_psshfs root mnt
+	atf_check -s eq:0 -o file:expout -e empty \
+	    -x 'cd mnt/dir && ls .. >/dev/null && /bin/pwd'
+}
+pwd_cleanup() {
+	umount mnt
+	stop_ssh
+}
+
+# -------------------------------------------------------------------------
+# Initialization.
+# -------------------------------------------------------------------------
+
+atf_init_test_cases() {
+	atf_add_test_case inode_nos
+	atf_add_test_case pwd
+}

Reply via email to