1299244Sjilles# 2299244Sjilles# Copyright (c) 2016 Jilles Tjoelker 3299244Sjilles# All rights reserved. 4299244Sjilles# 5299244Sjilles# Redistribution and use in source and binary forms, with or without 6299244Sjilles# modification, are permitted provided that the following conditions 7299244Sjilles# are met: 8299244Sjilles# 1. Redistributions of source code must retain the above copyright 9299244Sjilles# notice, this list of conditions and the following disclaimer. 10299244Sjilles# 2. Redistributions in binary form must reproduce the above copyright 11299244Sjilles# notice, this list of conditions and the following disclaimer in the 12299244Sjilles# documentation and/or other materials provided with the distribution. 13299244Sjilles# 14299244Sjilles# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15299244Sjilles# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16299244Sjilles# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17299244Sjilles# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18299244Sjilles# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19299244Sjilles# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20299244Sjilles# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21299244Sjilles# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22299244Sjilles# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23299244Sjilles# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24299244Sjilles# SUCH DAMAGE. 25299244Sjilles# 26299244Sjilles# $FreeBSD: releng/11.0/usr.bin/xinstall/tests/install_test.sh 301765 2016-06-09 21:59:35Z jilles $ 27299244Sjilles# 28299244Sjilles 29299244Sjillescopy_to_nonexistent_with_opts() { 30299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 31299244Sjilles atf_check install "$@" testf copyf 32299244Sjilles cmp testf copyf || atf_fail "bad copy" 33299244Sjilles [ ! testf -nt copyf ] || atf_fail "bad timestamp" 34299244Sjilles [ ! -e copyf.bak ] || atf_fail "no backup expected" 35299244Sjilles} 36299244Sjilles 37299244Sjillesatf_test_case copy_to_nonexistent 38299244Sjillescopy_to_nonexistent_body() { 39299244Sjilles copy_to_nonexistent_with_opts 40299244Sjilles} 41299244Sjilles 42299244Sjillesatf_test_case copy_to_nonexistent_safe 43299244Sjillescopy_to_nonexistent_safe_body() { 44299244Sjilles copy_to_nonexistent_with_opts -S 45299244Sjilles} 46299244Sjilles 47299244Sjillesatf_test_case copy_to_nonexistent_comparing 48299244Sjillescopy_to_nonexistent_comparing_body() { 49299244Sjilles copy_to_nonexistent_with_opts -C 50299244Sjilles} 51299244Sjilles 52299244Sjillesatf_test_case copy_to_nonexistent_safe_comparing 53299244Sjillescopy_to_nonexistent_safe_comparing_body() { 54299244Sjilles copy_to_nonexistent_with_opts -S -C 55299244Sjilles} 56299244Sjilles 57299244Sjillesatf_test_case copy_to_nonexistent_backup 58299244Sjillescopy_to_nonexistent_backup_body() { 59299244Sjilles copy_to_nonexistent_with_opts -b -B.bak 60299244Sjilles} 61299244Sjilles 62299244Sjillesatf_test_case copy_to_nonexistent_backup_safe 63299244Sjillescopy_to_nonexistent_backup_safe_body() { 64299244Sjilles copy_to_nonexistent_with_opts -b -B.bak -S 65299244Sjilles} 66299244Sjilles 67301765Sjillesatf_test_case copy_to_nonexistent_preserving 68301765Sjillescopy_to_nonexistent_preserving_body() { 69301765Sjilles copy_to_nonexistent_with_opts -p 70301765Sjilles [ ! testf -ot copyf ] || atf_fail "bad timestamp 2" 71301765Sjilles} 72301765Sjilles 73299244Sjillescopy_self_with_opts() { 74299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 75299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf2 76299244Sjilles atf_check -s not-exit:0 -o empty -e match:. install "$@" testf testf 77299244Sjilles cmp testf testf2 || atf_fail "file changed after self-copy attempt" 78299244Sjilles} 79299244Sjilles 80299244Sjillesatf_test_case copy_self 81299244Sjillescopy_self_body() { 82299244Sjilles copy_self_with_opts 83299244Sjilles} 84299244Sjilles 85299244Sjillesatf_test_case copy_self_safe 86299244Sjillescopy_self_safe_body() { 87299244Sjilles copy_self_with_opts -S 88299244Sjilles} 89299244Sjilles 90299244Sjillesatf_test_case copy_self_comparing 91299244Sjillescopy_self_comparing_body() { 92299244Sjilles copy_self_with_opts -C 93299244Sjilles} 94299244Sjilles 95299244Sjillesatf_test_case copy_self_safe_comparing 96299244Sjillescopy_self_safe_comparing_body() { 97299244Sjilles copy_self_with_opts -S -C 98299244Sjilles} 99299244Sjilles 100299244Sjillesoverwrite_with_opts() { 101299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 102299244Sjilles printf 'test\n123\r456\r\n789\0w' >otherf 103299244Sjilles atf_check install "$@" testf otherf 104299244Sjilles cmp testf otherf || atf_fail "bad overwrite" 105299244Sjilles [ ! testf -nt otherf ] || atf_fail "bad timestamp" 106299244Sjilles} 107299244Sjilles 108299244Sjillesatf_test_case overwrite 109299244Sjillesoverwrite_body() { 110299244Sjilles overwrite_with_opts 111299244Sjilles} 112299244Sjilles 113299244Sjillesatf_test_case overwrite_safe 114299244Sjillesoverwrite_safe_body() { 115299244Sjilles overwrite_with_opts -S 116299244Sjilles} 117299244Sjilles 118299244Sjillesatf_test_case overwrite_comparing 119299244Sjillesoverwrite_comparing_body() { 120299244Sjilles overwrite_with_opts -C 121299244Sjilles} 122299244Sjilles 123299244Sjillesatf_test_case overwrite_safe_comparing 124299244Sjillesoverwrite_safe_comparing_body() { 125299244Sjilles overwrite_with_opts -S -C 126299244Sjilles} 127299244Sjilles 128299244Sjillesoverwrite_eq_with_opts() { 129299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 130299244Sjilles printf 'test\n123\r456\r\n789\0z' >otherf 131299244Sjilles atf_check install "$@" testf otherf 132299244Sjilles cmp testf otherf || atf_fail "bad overwrite" 133299244Sjilles [ ! testf -nt otherf ] || atf_fail "bad timestamp" 134299244Sjilles} 135299244Sjilles 136299244Sjillesatf_test_case overwrite_eq 137299244Sjillesoverwrite_eq_body() { 138299244Sjilles overwrite_eq_with_opts 139299244Sjilles} 140299244Sjilles 141299244Sjillesatf_test_case overwrite_eq_safe 142299244Sjillesoverwrite_eq_safe_body() { 143299244Sjilles overwrite_eq_with_opts -S 144299244Sjilles} 145299244Sjilles 146299244Sjillesatf_test_case overwrite_eq_comparing 147299244Sjillesoverwrite_eq_comparing_body() { 148299244Sjilles overwrite_eq_with_opts -C 149299244Sjilles} 150299244Sjilles 151299244Sjillesatf_test_case overwrite_eq_safe_comparing 152299244Sjillesoverwrite_eq_safe_comparing_body() { 153299244Sjilles overwrite_eq_with_opts -S -C 154299244Sjilles} 155299244Sjilles 156299244Sjillesoverwrite_backup_with_opts() { 157299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 158299244Sjilles printf 'test\n123\r456\r\n789\0w' >otherf 159299244Sjilles printf 'test\n123\r456\r\n789\0w' >otherf2 160299244Sjilles atf_check install -b -B.bak "$@" testf otherf 161299244Sjilles cmp testf otherf || atf_fail "bad overwrite" 162299244Sjilles [ ! testf -nt otherf ] || atf_fail "bad timestamp" 163299244Sjilles cmp otherf.bak otherf2 || atf_fail "bad backup" 164299244Sjilles} 165299244Sjilles 166299244Sjillesatf_test_case overwrite_backup 167299244Sjillesoverwrite_backup_body() { 168299244Sjilles overwrite_backup_with_opts 169299244Sjilles} 170299244Sjilles 171299244Sjillesatf_test_case overwrite_backup_safe 172299244Sjillesoverwrite_backup_safe_body() { 173299244Sjilles overwrite_backup_with_opts -S 174299244Sjilles} 175299244Sjilles 176299244Sjillesatf_test_case overwrite_backup_comparing 177299244Sjillesoverwrite_backup_comparing_body() { 178299244Sjilles overwrite_backup_with_opts -C 179299244Sjilles} 180299244Sjilles 181299244Sjillesatf_test_case overwrite_backup_safe_comparing 182299244Sjillesoverwrite_backup_safe_comparing_body() { 183299244Sjilles overwrite_backup_with_opts -S -C 184299244Sjilles} 185299244Sjilles 186299244Sjillessetup_stripbin() { 187299244Sjilles cat <<\STRIPBIN >stripbin 188299244Sjilles#!/bin/sh 189299244Sjillestr z @ <"$1" >"$1.new" && mv -- "$1.new" "$1" 190299244SjillesSTRIPBIN 191299244Sjilles chmod 755 stripbin 192299244Sjilles export STRIPBIN="$PWD/stripbin" 193299244Sjilles} 194299244Sjilles 195299244Sjillesstrip_changing_with_opts() { 196299244Sjilles setup_stripbin 197299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 198299244Sjilles atf_check install -s "$@" testf copyf 199299244Sjilles [ ! testf -nt copyf ] || atf_fail "bad timestamp" 200299244Sjilles printf 'test\n123\r456\r\n789\0@' >otherf 201299244Sjilles cmp otherf copyf || atf_fail "bad stripped copy" 202299244Sjilles} 203299244Sjilles 204299244Sjillesatf_test_case strip_changing 205299244Sjillesstrip_changing_body() { 206299244Sjilles strip_changing_with_opts 207299244Sjilles} 208299244Sjilles 209299244Sjillesatf_test_case strip_changing_comparing 210299244Sjillesstrip_changing_comparing_body() { 211299244Sjilles strip_changing_with_opts -C 212299244Sjilles} 213299244Sjilles 214299244Sjillesstrip_changing_overwrite_with_opts() { 215299244Sjilles setup_stripbin 216299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 217299244Sjilles printf 'test\n123\r456\r\n789\0w' >copyf 218299244Sjilles atf_check install -s "$@" testf copyf 219299244Sjilles [ ! testf -nt copyf ] || atf_fail "bad timestamp" 220299244Sjilles printf 'test\n123\r456\r\n789\0@' >otherf 221299244Sjilles cmp otherf copyf || atf_fail "bad stripped copy" 222299244Sjilles} 223299244Sjilles 224299244Sjillesatf_test_case strip_changing_overwrite 225299244Sjillesstrip_changing_overwrite_body() { 226299244Sjilles strip_changing_overwrite_with_opts 227299244Sjilles} 228299244Sjilles 229299244Sjillesatf_test_case strip_changing_overwrite_comparing 230299244Sjillesstrip_changing_overwrite_comparing_body() { 231299244Sjilles strip_changing_overwrite_with_opts -C 232299244Sjilles} 233299244Sjilles 234299244Sjillesstrip_changing_overwrite_eq_with_opts() { 235299244Sjilles setup_stripbin 236299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 237299244Sjilles printf 'test\n123\r456\r\n789\0@' >copyf 238299244Sjilles atf_check install -s "$@" testf copyf 239299244Sjilles [ ! testf -nt copyf ] || atf_fail "bad timestamp" 240299244Sjilles printf 'test\n123\r456\r\n789\0@' >otherf 241299244Sjilles cmp otherf copyf || atf_fail "bad stripped copy" 242299244Sjilles} 243299244Sjilles 244299244Sjillesatf_test_case strip_changing_overwrite_eq 245299244Sjillesstrip_changing_overwrite_eq_body() { 246299244Sjilles strip_changing_overwrite_eq_with_opts 247299244Sjilles} 248299244Sjilles 249299244Sjillesatf_test_case strip_changing_overwrite_eq_comparing 250299244Sjillesstrip_changing_overwrite_eq_comparing_body() { 251299244Sjilles strip_changing_overwrite_eq_with_opts -C 252299244Sjilles} 253299244Sjilles 254299244Sjillesatf_test_case strip_noop 255299244Sjillesstrip_noop_body() { 256299244Sjilles export STRIPBIN=true 257299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 258299244Sjilles atf_check install -s testf copyf 259299244Sjilles [ ! testf -nt copyf ] || atf_fail "bad timestamp" 260299244Sjilles printf 'test\n123\r456\r\n789\0z' >otherf 261299244Sjilles cmp otherf copyf || atf_fail "bad stripped copy" 262299244Sjilles} 263299244Sjilles 264299244Sjillesatf_test_case hard_link 265299244Sjilleshard_link_body() { 266299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 267299244Sjilles atf_check install -l h testf copyf 268299244Sjilles [ testf -ef copyf ] || atf_fail "not same file" 269299244Sjilles [ ! -L copyf ] || atf_fail "copy is symlink" 270299244Sjilles} 271299244Sjilles 272299244Sjillesatf_test_case symbolic_link 273299244Sjillessymbolic_link_body() { 274299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 275299244Sjilles atf_check install -l s testf copyf 276299244Sjilles [ testf -ef copyf ] || atf_fail "not same file" 277299244Sjilles [ -L copyf ] || atf_fail "copy is not symlink" 278299244Sjilles} 279299244Sjilles 280299244Sjillesatf_test_case symbolic_link_absolute 281299244Sjillessymbolic_link_absolute_body() { 282299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 283299244Sjilles atf_check install -l sa testf copyf 284299244Sjilles [ testf -ef copyf ] || atf_fail "not same file" 285299244Sjilles [ -L copyf ] || atf_fail "copy is not symlink" 286299244Sjilles [ "$(readlink copyf)" = "$(pwd -P)/testf" ] || atf_fail "unexpected symlink contents" 287299244Sjilles} 288299244Sjilles 289299244Sjillesatf_test_case symbolic_link_relative 290299244Sjillessymbolic_link_relative_body() { 291299244Sjilles printf 'test\n123\r456\r\n789\0z' >testf 292299244Sjilles atf_check install -l sr testf copyf 293299244Sjilles [ testf -ef copyf ] || atf_fail "not same file" 294299244Sjilles [ -L copyf ] || atf_fail "copy is not symlink" 295299244Sjilles [ "$(readlink copyf)" = "testf" ] || atf_fail "unexpected symlink contents" 296299244Sjilles} 297299244Sjilles 298299244Sjillesatf_test_case mkdir_simple 299299244Sjillesmkdir_simple_body() { 300299244Sjilles atf_check install -d dir1/dir2 301299244Sjilles [ -d dir1 ] || atf_fail "dir1 missing" 302299244Sjilles [ -d dir1/dir2 ] || atf_fail "dir2 missing" 303299244Sjilles atf_check install -d dir1/dir2/dir3 304299244Sjilles [ -d dir1/dir2/dir3 ] || atf_fail "dir3 missing" 305299244Sjilles atf_check install -d dir1 306299244Sjilles atf_check install -d dir1/dir2/dir3 307299244Sjilles} 308299244Sjilles 309299244Sjillesatf_init_test_cases() { 310299244Sjilles atf_add_test_case copy_to_nonexistent 311299244Sjilles atf_add_test_case copy_to_nonexistent_safe 312299244Sjilles atf_add_test_case copy_to_nonexistent_comparing 313299244Sjilles atf_add_test_case copy_to_nonexistent_safe_comparing 314299244Sjilles atf_add_test_case copy_to_nonexistent_backup 315299244Sjilles atf_add_test_case copy_to_nonexistent_backup_safe 316301765Sjilles atf_add_test_case copy_to_nonexistent_preserving 317299244Sjilles atf_add_test_case copy_self 318299244Sjilles atf_add_test_case copy_self_safe 319299244Sjilles atf_add_test_case copy_self_comparing 320299244Sjilles atf_add_test_case copy_self_safe_comparing 321299244Sjilles atf_add_test_case overwrite 322299244Sjilles atf_add_test_case overwrite_safe 323299244Sjilles atf_add_test_case overwrite_comparing 324299244Sjilles atf_add_test_case overwrite_safe_comparing 325299244Sjilles atf_add_test_case overwrite_eq 326299244Sjilles atf_add_test_case overwrite_eq_safe 327299244Sjilles atf_add_test_case overwrite_eq_comparing 328299244Sjilles atf_add_test_case overwrite_eq_safe_comparing 329299244Sjilles atf_add_test_case overwrite_backup 330299244Sjilles atf_add_test_case overwrite_backup_safe 331299244Sjilles atf_add_test_case overwrite_backup_comparing 332299244Sjilles atf_add_test_case overwrite_backup_safe_comparing 333299244Sjilles atf_add_test_case strip_changing 334299244Sjilles atf_add_test_case strip_changing_comparing 335299244Sjilles atf_add_test_case strip_changing_overwrite 336299244Sjilles atf_add_test_case strip_changing_overwrite_comparing 337299244Sjilles atf_add_test_case strip_changing_overwrite_eq 338299244Sjilles atf_add_test_case strip_changing_overwrite_eq_comparing 339299244Sjilles atf_add_test_case strip_noop 340299244Sjilles atf_add_test_case hard_link 341299244Sjilles atf_add_test_case symbolic_link 342299244Sjilles atf_add_test_case symbolic_link_absolute 343299244Sjilles atf_add_test_case symbolic_link_relative 344299244Sjilles atf_add_test_case mkdir_simple 345299244Sjilles} 346