]> CyberLeo.Net >> Repos - FreeBSD/releng/10.3.git/blob - share/examples/tests/tests/plain/cp_test.sh
- Copy stable/10@296371 to releng/10.3 in preparation for 10.3-RC1
[FreeBSD/releng/10.3.git] / share / examples / tests / tests / plain / cp_test.sh
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
43 set -e
44
45 # Prints an error message and exits.
46 err() {
47         echo "${@}" 1>&2
48         exit 1
49 }
50
51 # Auxiliary function to compare two files for equality.
52 verify_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
59 simple_test() {
60         echo 'File 1' >file1
61         cp file1 file2 || err "cp failed"
62         verify_copy file1 file2
63 }
64
65 force_test() {
66         echo 'File 1' >file1
67         echo 'File 2' >file2
68         chmod 400 file2
69         cp -f file1 file2 || err "cp failed"
70         verify_copy file1 file2
71 }
72
73 # If you have read the cp_test.sh counterpart in the atf/ directory, you
74 # may think that the sequencing of tests below and the exposed behavior
75 # to the user is very similar.  But you'd be wrong.
76 #
77 # There are two major differences with this and the ATF version.  The
78 # first is that the code below has no provisions to detect failures in
79 # one test and continue running the other tests: the first failure
80 # causes the whole test program to exit.  The second is that this
81 # particular "main" has no arguments: without ATF, all test programs may
82 # expose a different command-line interface, and this is an issue for
83 # consistency purposes.
84 simple_test
85 force_test