From owner-svn-src-all@freebsd.org Sun May 8 21:11:26 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2EE7DB324B9; Sun, 8 May 2016 21:11:26 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 070A011DA; Sun, 8 May 2016 21:11:25 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u48LBPhH084092; Sun, 8 May 2016 21:11:25 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u48LBO9A084088; Sun, 8 May 2016 21:11:24 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <201605082111.u48LBO9A084088@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Sun, 8 May 2016 21:11:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r299244 - in head: etc/mtree usr.bin/xinstall usr.bin/xinstall/tests X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 May 2016 21:11:26 -0000 Author: jilles Date: Sun May 8 21:11:24 2016 New Revision: 299244 URL: https://svnweb.freebsd.org/changeset/base/299244 Log: install: Add some tests. Added: head/usr.bin/xinstall/tests/ head/usr.bin/xinstall/tests/Makefile (contents, props changed) head/usr.bin/xinstall/tests/install_test.sh (contents, props changed) Modified: head/etc/mtree/BSD.tests.dist head/usr.bin/xinstall/Makefile Modified: head/etc/mtree/BSD.tests.dist ============================================================================== --- head/etc/mtree/BSD.tests.dist Sun May 8 21:02:51 2016 (r299243) +++ head/etc/mtree/BSD.tests.dist Sun May 8 21:11:24 2016 (r299244) @@ -634,6 +634,8 @@ .. xargs .. + xinstall + .. xo .. yacc Modified: head/usr.bin/xinstall/Makefile ============================================================================== --- head/usr.bin/xinstall/Makefile Sun May 8 21:02:51 2016 (r299243) +++ head/usr.bin/xinstall/Makefile Sun May 8 21:11:24 2016 (r299244) @@ -1,6 +1,8 @@ # @(#)Makefile 8.1 (Berkeley) 6/6/93 # $FreeBSD$ +.include + PROG= xinstall PROGNAME= install SRCS= xinstall.c getid.c @@ -12,4 +14,8 @@ CFLAGS+= -I${.CURDIR}/../../lib/libnetbs LIBADD= md +.if ${MK_TESTS} != "no" +SUBDIR+= tests +.endif + .include Added: head/usr.bin/xinstall/tests/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/xinstall/tests/Makefile Sun May 8 21:11:24 2016 (r299244) @@ -0,0 +1,5 @@ +# $FreeBSD$ + +ATF_TESTS_SH+= install_test + +.include Added: head/usr.bin/xinstall/tests/install_test.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.bin/xinstall/tests/install_test.sh Sun May 8 21:11:24 2016 (r299244) @@ -0,0 +1,338 @@ +# +# Copyright (c) 2016 Jilles Tjoelker +# 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 AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +copy_to_nonexistent_with_opts() { + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install "$@" testf copyf + cmp testf copyf || atf_fail "bad copy" + [ ! testf -nt copyf ] || atf_fail "bad timestamp" + [ ! -e copyf.bak ] || atf_fail "no backup expected" +} + +atf_test_case copy_to_nonexistent +copy_to_nonexistent_body() { + copy_to_nonexistent_with_opts +} + +atf_test_case copy_to_nonexistent_safe +copy_to_nonexistent_safe_body() { + copy_to_nonexistent_with_opts -S +} + +atf_test_case copy_to_nonexistent_comparing +copy_to_nonexistent_comparing_body() { + copy_to_nonexistent_with_opts -C +} + +atf_test_case copy_to_nonexistent_safe_comparing +copy_to_nonexistent_safe_comparing_body() { + copy_to_nonexistent_with_opts -S -C +} + +atf_test_case copy_to_nonexistent_backup +copy_to_nonexistent_backup_body() { + copy_to_nonexistent_with_opts -b -B.bak +} + +atf_test_case copy_to_nonexistent_backup_safe +copy_to_nonexistent_backup_safe_body() { + copy_to_nonexistent_with_opts -b -B.bak -S +} + +copy_self_with_opts() { + printf 'test\n123\r456\r\n789\0z' >testf + printf 'test\n123\r456\r\n789\0z' >testf2 + atf_check -s not-exit:0 -o empty -e match:. install "$@" testf testf + cmp testf testf2 || atf_fail "file changed after self-copy attempt" +} + +atf_test_case copy_self +copy_self_body() { + copy_self_with_opts +} + +atf_test_case copy_self_safe +copy_self_safe_body() { + copy_self_with_opts -S +} + +atf_test_case copy_self_comparing +copy_self_comparing_body() { + copy_self_with_opts -C +} + +atf_test_case copy_self_safe_comparing +copy_self_safe_comparing_body() { + copy_self_with_opts -S -C +} + +overwrite_with_opts() { + printf 'test\n123\r456\r\n789\0z' >testf + printf 'test\n123\r456\r\n789\0w' >otherf + atf_check install "$@" testf otherf + cmp testf otherf || atf_fail "bad overwrite" + [ ! testf -nt otherf ] || atf_fail "bad timestamp" +} + +atf_test_case overwrite +overwrite_body() { + overwrite_with_opts +} + +atf_test_case overwrite_safe +overwrite_safe_body() { + overwrite_with_opts -S +} + +atf_test_case overwrite_comparing +overwrite_comparing_body() { + overwrite_with_opts -C +} + +atf_test_case overwrite_safe_comparing +overwrite_safe_comparing_body() { + overwrite_with_opts -S -C +} + +overwrite_eq_with_opts() { + printf 'test\n123\r456\r\n789\0z' >testf + printf 'test\n123\r456\r\n789\0z' >otherf + atf_check install "$@" testf otherf + cmp testf otherf || atf_fail "bad overwrite" + [ ! testf -nt otherf ] || atf_fail "bad timestamp" +} + +atf_test_case overwrite_eq +overwrite_eq_body() { + overwrite_eq_with_opts +} + +atf_test_case overwrite_eq_safe +overwrite_eq_safe_body() { + overwrite_eq_with_opts -S +} + +atf_test_case overwrite_eq_comparing +overwrite_eq_comparing_body() { + overwrite_eq_with_opts -C +} + +atf_test_case overwrite_eq_safe_comparing +overwrite_eq_safe_comparing_body() { + overwrite_eq_with_opts -S -C +} + +overwrite_backup_with_opts() { + printf 'test\n123\r456\r\n789\0z' >testf + printf 'test\n123\r456\r\n789\0w' >otherf + printf 'test\n123\r456\r\n789\0w' >otherf2 + atf_check install -b -B.bak "$@" testf otherf + cmp testf otherf || atf_fail "bad overwrite" + [ ! testf -nt otherf ] || atf_fail "bad timestamp" + cmp otherf.bak otherf2 || atf_fail "bad backup" +} + +atf_test_case overwrite_backup +overwrite_backup_body() { + overwrite_backup_with_opts +} + +atf_test_case overwrite_backup_safe +overwrite_backup_safe_body() { + overwrite_backup_with_opts -S +} + +atf_test_case overwrite_backup_comparing +overwrite_backup_comparing_body() { + overwrite_backup_with_opts -C +} + +atf_test_case overwrite_backup_safe_comparing +overwrite_backup_safe_comparing_body() { + overwrite_backup_with_opts -S -C +} + +setup_stripbin() { + cat <<\STRIPBIN >stripbin +#!/bin/sh +tr z @ <"$1" >"$1.new" && mv -- "$1.new" "$1" +STRIPBIN + chmod 755 stripbin + export STRIPBIN="$PWD/stripbin" +} + +strip_changing_with_opts() { + setup_stripbin + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install -s "$@" testf copyf + [ ! testf -nt copyf ] || atf_fail "bad timestamp" + printf 'test\n123\r456\r\n789\0@' >otherf + cmp otherf copyf || atf_fail "bad stripped copy" +} + +atf_test_case strip_changing +strip_changing_body() { + strip_changing_with_opts +} + +atf_test_case strip_changing_comparing +strip_changing_comparing_body() { + strip_changing_with_opts -C +} + +strip_changing_overwrite_with_opts() { + setup_stripbin + printf 'test\n123\r456\r\n789\0z' >testf + printf 'test\n123\r456\r\n789\0w' >copyf + atf_check install -s "$@" testf copyf + [ ! testf -nt copyf ] || atf_fail "bad timestamp" + printf 'test\n123\r456\r\n789\0@' >otherf + cmp otherf copyf || atf_fail "bad stripped copy" +} + +atf_test_case strip_changing_overwrite +strip_changing_overwrite_body() { + strip_changing_overwrite_with_opts +} + +atf_test_case strip_changing_overwrite_comparing +strip_changing_overwrite_comparing_body() { + strip_changing_overwrite_with_opts -C +} + +strip_changing_overwrite_eq_with_opts() { + setup_stripbin + printf 'test\n123\r456\r\n789\0z' >testf + printf 'test\n123\r456\r\n789\0@' >copyf + atf_check install -s "$@" testf copyf + [ ! testf -nt copyf ] || atf_fail "bad timestamp" + printf 'test\n123\r456\r\n789\0@' >otherf + cmp otherf copyf || atf_fail "bad stripped copy" +} + +atf_test_case strip_changing_overwrite_eq +strip_changing_overwrite_eq_body() { + strip_changing_overwrite_eq_with_opts +} + +atf_test_case strip_changing_overwrite_eq_comparing +strip_changing_overwrite_eq_comparing_body() { + strip_changing_overwrite_eq_with_opts -C +} + +atf_test_case strip_noop +strip_noop_body() { + export STRIPBIN=true + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install -s testf copyf + [ ! testf -nt copyf ] || atf_fail "bad timestamp" + printf 'test\n123\r456\r\n789\0z' >otherf + cmp otherf copyf || atf_fail "bad stripped copy" +} + +atf_test_case hard_link +hard_link_body() { + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install -l h testf copyf + [ testf -ef copyf ] || atf_fail "not same file" + [ ! -L copyf ] || atf_fail "copy is symlink" +} + +atf_test_case symbolic_link +symbolic_link_body() { + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install -l s testf copyf + [ testf -ef copyf ] || atf_fail "not same file" + [ -L copyf ] || atf_fail "copy is not symlink" +} + +atf_test_case symbolic_link_absolute +symbolic_link_absolute_body() { + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install -l sa testf copyf + [ testf -ef copyf ] || atf_fail "not same file" + [ -L copyf ] || atf_fail "copy is not symlink" + [ "$(readlink copyf)" = "$(pwd -P)/testf" ] || atf_fail "unexpected symlink contents" +} + +atf_test_case symbolic_link_relative +symbolic_link_relative_body() { + printf 'test\n123\r456\r\n789\0z' >testf + atf_check install -l sr testf copyf + [ testf -ef copyf ] || atf_fail "not same file" + [ -L copyf ] || atf_fail "copy is not symlink" + [ "$(readlink copyf)" = "testf" ] || atf_fail "unexpected symlink contents" +} + +atf_test_case mkdir_simple +mkdir_simple_body() { + atf_check install -d dir1/dir2 + [ -d dir1 ] || atf_fail "dir1 missing" + [ -d dir1/dir2 ] || atf_fail "dir2 missing" + atf_check install -d dir1/dir2/dir3 + [ -d dir1/dir2/dir3 ] || atf_fail "dir3 missing" + atf_check install -d dir1 + atf_check install -d dir1/dir2/dir3 +} + +atf_init_test_cases() { + atf_add_test_case copy_to_nonexistent + atf_add_test_case copy_to_nonexistent_safe + atf_add_test_case copy_to_nonexistent_comparing + atf_add_test_case copy_to_nonexistent_safe_comparing + atf_add_test_case copy_to_nonexistent_backup + atf_add_test_case copy_to_nonexistent_backup_safe + atf_add_test_case copy_self + atf_add_test_case copy_self_safe + atf_add_test_case copy_self_comparing + atf_add_test_case copy_self_safe_comparing + atf_add_test_case overwrite + atf_add_test_case overwrite_safe + atf_add_test_case overwrite_comparing + atf_add_test_case overwrite_safe_comparing + atf_add_test_case overwrite_eq + atf_add_test_case overwrite_eq_safe + atf_add_test_case overwrite_eq_comparing + atf_add_test_case overwrite_eq_safe_comparing + atf_add_test_case overwrite_backup + atf_add_test_case overwrite_backup_safe + atf_add_test_case overwrite_backup_comparing + atf_add_test_case overwrite_backup_safe_comparing + atf_add_test_case strip_changing + atf_add_test_case strip_changing_comparing + atf_add_test_case strip_changing_overwrite + atf_add_test_case strip_changing_overwrite_comparing + atf_add_test_case strip_changing_overwrite_eq + atf_add_test_case strip_changing_overwrite_eq_comparing + atf_add_test_case strip_noop + atf_add_test_case hard_link + atf_add_test_case symbolic_link + atf_add_test_case symbolic_link_absolute + atf_add_test_case symbolic_link_relative + atf_add_test_case mkdir_simple +}