1#! /bin/sh 2# $FreeBSD$ 3# 4# Copyright 2013 Google Inc. 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions are 9# met: 10# 11# * Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# * Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in the 15# documentation and/or other materials provided with the distribution. 16# * Neither the name of Google Inc. nor the names of its contributors 17# may be used to endorse or promote products derived from this software 18# without specific prior written permission. 19# 20# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 32# 33# INTRODUCTION 34# 35# This plain test program mimics the structure and contents of its 36# ATF-based counterpart. It attempts to represent various test cases 37# in different separate functions and just calls them all from main. 38# 39# In reality, plain test programs can be much simpler. All they have 40# to do is return 0 on success and non-0 otherwise. 41# 42 43set -e 44 45# Prints an error message and exits. 46err() { 47 echo "${@}" 1>&2 48 exit 1 49} 50 51# Auxiliary function to compare two files for equality. 52verify_copy() { 53 if ! cmp -s "${1}" "${2}"; then 54 diff -u "${1}" "${2}" 55 err "${1} and ${2} differ, but they should be equal" 56 fi 57} 58 59simple_test() { 60 cp "$(dirname "${0}")/file1" . 61 cp file1 file2 || err "cp failed" 62 verify_copy file1 file2 63} 64 65force_test() { 66 echo 'File 3' >file3 67 chmod 400 file3 68 cp -f file1 file3 || err "cp failed" 69 verify_copy file1 file3 70} 71 72# If you have read the cp_test.sh counterpart in the atf/ directory, you 73# may think that the sequencing of tests below and the exposed behavior 74# to the user is very similar. But you'd be wrong. 75# 76# There are two major differences with this and the ATF version. The 77# first is that the code below has no provisions to detect failures in 78# one test and continue running the other tests: the first failure 79# causes the whole test program to exit. The second is that this 80# particular "main" has no arguments: without ATF, all test programs may 81# expose a different command-line interface, and this is an issue for 82# consistency purposes. 83simple_test 84force_test 85