1# 2# SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3# 4# Copyright (c) 2020 Kyle Evans <kevans@FreeBSD.org> 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# $FreeBSD$ 28 29check_size() 30{ 31 file=$1 32 sz=$2 33 34 atf_check -o inline:"$sz\n" stat -f '%z' $file 35} 36 37atf_test_case basic 38basic_body() 39{ 40 echo "foo" > bar 41 42 atf_check cp bar baz 43 check_size baz 4 44} 45 46atf_test_case chrdev 47chrdev_body() 48{ 49 echo "foo" > bar 50 51 check_size bar 4 52 atf_check cp /dev/null trunc 53 check_size trunc 0 54 atf_check cp bar trunc 55 check_size trunc 4 56 atf_check cp /dev/null trunc 57 check_size trunc 0 58} 59 60atf_test_case matching_srctgt 61matching_srctgt_body() 62{ 63 64 # PR235438: `cp -R foo foo` would previously infinitely recurse and 65 # eventually error out. 66 mkdir foo 67 echo "qux" > foo/bar 68 cp foo/bar foo/zoo 69 70 atf_check cp -R foo foo 71 atf_check -o inline:"qux\n" cat foo/foo/bar 72 atf_check -o inline:"qux\n" cat foo/foo/zoo 73 atf_check -e not-empty -s not-exit:0 stat foo/foo/foo 74} 75 76atf_test_case matching_srctgt_contained 77matching_srctgt_contained_body() 78{ 79 80 # Let's do the same thing, except we'll try to recursively copy foo into 81 # one of its subdirectories. 82 mkdir foo 83 echo "qux" > foo/bar 84 mkdir foo/loo 85 mkdir foo/moo 86 mkdir foo/roo 87 cp foo/bar foo/zoo 88 89 atf_check cp -R foo foo/moo 90 atf_check -o inline:"qux\n" cat foo/moo/foo/bar 91 atf_check -o inline:"qux\n" cat foo/moo/foo/zoo 92 atf_check -e not-empty -s not-exit:0 stat foo/moo/foo/moo 93} 94 95atf_test_case matching_srctgt_link 96matching_srctgt_link_body() 97{ 98 99 mkdir foo 100 echo "qux" > foo/bar 101 cp foo/bar foo/zoo 102 103 atf_check ln -s foo roo 104 atf_check cp -RH roo foo 105 atf_check -o inline:"qux\n" cat foo/roo/bar 106 atf_check -o inline:"qux\n" cat foo/roo/zoo 107} 108 109atf_test_case matching_srctgt_nonexistent 110matching_srctgt_nonexistent_body() 111{ 112 113 # We'll copy foo to a nonexistent subdirectory; ideally, we would 114 # skip just the directory and end up with a layout like; 115 # 116 # foo/ 117 # bar 118 # dne/ 119 # bar 120 # zoo 121 # zoo 122 # 123 mkdir foo 124 echo "qux" > foo/bar 125 cp foo/bar foo/zoo 126 127 atf_check cp -R foo foo/dne 128 atf_check -o inline:"qux\n" cat foo/dne/bar 129 atf_check -o inline:"qux\n" cat foo/dne/zoo 130 atf_check -e not-empty -s not-exit:0 stat foo/dne/foo 131} 132 133atf_init_test_cases() 134{ 135 atf_add_test_case basic 136 atf_add_test_case chrdev 137 atf_add_test_case matching_srctgt 138 atf_add_test_case matching_srctgt_contained 139 atf_add_test_case matching_srctgt_link 140 atf_add_test_case matching_srctgt_nonexistent 141} 142