summaryrefslogtreecommitdiff
path: root/tests/setup.sh
blob: c82d4cc331115f738355d7b4709d5bb9fe22115e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# Copyright © 2011, 2012, 2014-18 Richard Kettlewell.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

export WORKSPACE="${PWD}/w-${0##*/}"
RSBACKUP="${VALGRIND} ${PWD}/../src/rsbackup --config ${WORKSPACE}/config ${VERBOSE_OPT}"

PRUNE_POLICY="${PRUNE_POLICY:-age}"
PRUNE_AGE="${PRUNE_AGE:-prune-parameter prune-age}"
MIN_BACKUPS="${MIN_BACKUPS:-prune-parameter min-backups}"

setup() {
  echo
  echo "* ==== $0 ===="

  # Figure out what the 'real' rsync is
  case $(uname -s) in
      Darwin )
          RSYNC=/usr/bin/rsync
          ;;
      * )
          RSYNC=rsync
          ;;
  esac

  rm -rf ${WORKSPACE}
  mkdir ${WORKSPACE}

  rm -f ${WORKSPACE}/config

  mkdir ${WORKSPACE}/store1
  echo device1 > ${WORKSPACE}/store1/device-id
  echo "store --no-mounted ${WORKSPACE}/store1" >> ${WORKSPACE}/config
  echo "device \"device1\"" >> ${WORKSPACE}/config

  mkdir ${WORKSPACE}/store2
  echo device2 > ${WORKSPACE}/store2/device-id
  echo "store --no-mounted ${WORKSPACE}/store2" >>${WORKSPACE}/config
  echo "device device2" >> ${WORKSPACE}/config

  echo "public true" >> ${WORKSPACE}/config

  echo "pre-access-hook ${srcdir:-.}/hook" >> ${WORKSPACE}/config
  echo "post-access-hook ${srcdir:-.}/hook" >> ${WORKSPACE}/config

  echo "keep-prune-logs 1" >> ${WORKSPACE}/config
  echo "prune-policy ${PRUNE_POLICY}" >> ${WORKSPACE}/config
  [ -n "$PRUNE_PATH" ] && echo "prune-parameter path ${PRUNE_PATH}" >> ${WORKSPACE}/config
  [ -n "$DECAY_LIMIT" ] && echo "prune-parameter decay-limit ${DECAY_LIMIT}" >> ${WORKSPACE}/config

  mkdir ${WORKSPACE}/logs
  echo "logs ${WORKSPACE}/logs" >> ${WORKSPACE}/config
  echo "lock ${WORKSPACE}/lock" >> ${WORKSPACE}/config

  # Exclude graph from report
  echo 'report "title:Backup report (${RSBACKUP_DATE})"' >> ${WORKSPACE}/config
  echo 'report + "h1:Backup report (${RSBACKUP_DATE})"' >> ${WORKSPACE}/config
  echo 'report + h2:Warnings?warnings warnings' >> ${WORKSPACE}/config
  echo 'report + h2:Summary summary' >> ${WORKSPACE}/config
  echo 'report + h2:Logfiles logs' >> ${WORKSPACE}/config
  echo 'report + "h3:Pruning logs" prune-logs' >> ${WORKSPACE}/config
  echo 'report + "p:Generated ${RSBACKUP_CTIME}"' >> ${WORKSPACE}/config

  # Apple's rsync is ancient
  case $(uname -s) in
      Darwin )
	  echo "rsync-command ${RSYNC}" >> ${WORKSPACE}/config
	  echo 'rsync-extra-options --extended-attributes' >> ${WORKSPACE}/config
	  ;;
  esac

  echo "host host1" >> ${WORKSPACE}/config
  echo "  hostname localhost" >> ${WORKSPACE}/config
  [ "${PRUNE_AGE}" != none ] && echo "  ${PRUNE_AGE} 2" >> ${WORKSPACE}/config
  echo "  volume volume1 ${WORKSPACE}/volume1" >> ${WORKSPACE}/config
  [ "${MIN_BACKUPS}" != none ] && echo "    ${MIN_BACKUPS} 1" >> ${WORKSPACE}/config
  echo "    pre-backup-hook ${srcdir:-.}/hook" >> ${WORKSPACE}/config
  echo "    post-backup-hook ${srcdir:-.}/hook" >> ${WORKSPACE}/config
  echo "    check-file file1" >> ${WORKSPACE}/config
  echo "  volume volume2 ${WORKSPACE}/volume2" >> ${WORKSPACE}/config
  [ "${MIN_BACKUPS}" != none ] && echo "    ${MIN_BACKUPS} 2" >> ${WORKSPACE}/config
  echo "  volume volume3 ${WORKSPACE}/volume3" >> ${WORKSPACE}/config
  [ "${MIN_BACKUPS}" != none ] && echo "    ${MIN_BACKUPS} 2" >> ${WORKSPACE}/config
  echo "    devices *2" >> ${WORKSPACE}/config

  mkdir ${WORKSPACE}/volume1
  echo one > ${WORKSPACE}/volume1/file1
  mkdir ${WORKSPACE}/volume1/dir1
  echo two > ${WORKSPACE}/volume1/dir1/file2

  mkdir ${WORKSPACE}/volume2
  echo three > ${WORKSPACE}/volume2/file3
  mkdir ${WORKSPACE}/volume2/dir2
  echo four > ${WORKSPACE}/volume2/dir2/file4
  echo five > ${WORKSPACE}/volume2/dir2/file5

  mkdir ${WORKSPACE}/volume3
  echo six > ${WORKSPACE}/volume3/file6

  mkdir -p ${WORKSPACE}/got
}

cleanup() {
  rm -rf "${WORKSPACE}"
}

compare() {
  if diff -ruN "$1" "$2" > ${WORKSPACE}/diffs; then
    :
  else
    echo "*** $1 and $2 unexpectedly differ"
    cat ${WORKSPACE}/diffs
    exit 1
  fi
}

exists() {
  if ! [ -e "$1" ]; then
    echo "*** $1 does not exist"
    exit 1
  fi
}

absent() {
  if [ -e "$1" ]; then
    echo "*** $1 unexpectedly exists"
    exit 1
  fi
  if [ -e "$1.incomplete" ]; then
    echo "*** $1.incomplete unexpectedly exists"
    exit 1
  fi
}

s() {
  echo ">" "$@" "#" ${RSBACKUP_TODAY} >&2
  if [ -z "$STDERR" ]; then
    if [ -z "${RSBACKUP_TODAY}" ]; then
      RUN="${RUN}" "$@"
    else
      RUN="${RUN}" RSBACKUP_TODAY="${RSBACKUP_TODAY}" "$@"
    fi
  else
    if "$@" 2> "$STDERR"; then
      cat "$STDERR" >&2
    else
      cat "$STDERR" >&2
      false
    fi
  fi
}

exec 3>&2