monotone

monotone Mtn Source Tree

Root/testsuite.at

1# -*- Autoconf -*-
2#
3# the monotone integration testsuite is written in bourne shell,
4# strung together with the autotest framework (part of autoconf).
5#
6# it's a bit icky but it's better than the hand-written thing we were
7# using before, and it's *certainly* more user friendly than dejagnu,
8# and we need *some* tests which run "as the user would run them".
9# bourne shell scripts are pretty close to that.
10#
11
12AT_INIT([integration tests])
13AT_TESTED([monotone])
14
15# some command abbreviations to make life easier
16
17# Set PREEXECUTE in your environment to run monotone under, e.g., valgrind.
18m4_define([MONOTONE], [$PREEXECUTE $_MT_EXEC --rcfile=$_ROOT_DIR/test_hooks.lua --nostd --norc --db=$_ROOT_DIR/test.db --key=tester@test.net --root=$_ROOT_DIR])
19m4_define([RAW_MONOTONE], [$PREEXECUTE monotone --norc])
20m4_define([SHA1], [monotone --norc identify $1])
21m4_define([BASE_REVISION], [cat MT/revision])
22m4_define([WORKING_REVISION], [monotone --norc cat revision | monotone --norc identify])
23m4_define([CANONICALISE], [
24if test "$OSTYPE" == "msys"; then
25 dos2unix -q -o $1
26fi
27])
28
29# the MONOTONE_SETUP macro deploys the standard lua hooks and loads the
30# standard testing key, which we use for further tests.
31
32m4_define([MONOTONE_SETUP], [
33
34# Absolutify monotone path.
35_MT_EXEC=`which monotone`
36
37# Save the PWD so MONOTONE macro can refer back to it
38_ROOT_DIR=`pwd -P`
39
40# Pick a random port, so running multiple testsuites concurrently on the
41# same machine has a hope of working. Port range will usually be
42# 20050..53347.
43_PORT=`echo $RANDOM | awk 'BEGIN {a=1;srand()} END {printf "%.0f\n", ((rand() * 529 + 20050 + $a) % 64512 + 1024)}'`
44
45AT_DATA(test_keys, [@<:@pubkey tester@test.net@:>@
46MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCfN/cAMabgb6T7m8ksGnpQ7LO6hOdnc/7V
47yivrRGtmpwSItljht1bmgLQF37KiSPoMEDUb1stfKxaMsYiy8iTyoQ+M2EVFP37n2rtnNZ0H
48oVcQd2sRsCerQFh9nslRPymlkQXUlOiNFN6RlFNcdjkucqNe+YorFX21EYw7XuT5XwIBEQ==
49@<:@end@:>@
50@<:@privkey tester@test.net@:>@
51npy0jyqbZdylFkMjdR9OvlqmDHuBGXpGFPt94h96aG+Lp+OdBCmWx8GueHk8FKkexwPqhRBM
52PPopUeuwqxuSX+yEodMl5IHBmin0nLnbOeBjtasjemBFEmdNl/jPDF/AeQ2WHhanB731dSQc
53vzLOQfKAYmfk56PPULi9oJJNUxaCkvsWtvaI+HUHZrjyyV7dA4Vsc6Jvx2Yf1+MdDAEGk/Rw
54ZtP0LmuoiyvRDFqBF8aTmnotyb4kRKohnJ7VF+y6hYvmtMpM3TKnpR7EbojBzNPqKuO7nPUz
55jGxA7F84O24Vbf128PNSI5vj4istow26aPjn28qPjfRrkV30WLL/dXfYJkfkTqglYnoEXvF/
56xZoVxxNeAX58mgy0A1ErVxv8U7TwuP983GHEpLwy3gbiP+9akAJCr8r823DHmQqq5QDELibP
57cuXZfOttpfVRkcbMhjeF0M6czc4HoKgHTAnf/18hzdZwGX/WWvRIBHImbUJ+mDbp2ByDTfKf
58ErGXSvZ3HxCqBD8yx1SnXhV8IDHaBmV9wwYcN+H2cxOWGZk7g7xJS19+a3UQB3c3sSXQVJBp
596QpCZgysxkZwzuXDzzLZPT9SLZz4K2p7+7BwMbpy9ZxcyAzmiEtpA24UP06jtjFN7WcXAdx/
60E5Gmoe9b1EiXWdReHjUGpc6k0LQ0PPXAwqrcGdwYbOLDZ5xsQ5AsEYSFtyTS60D1nHBcdNmW
61M0eOUJFdJf/uNe/2EApc3a8TyEkZtVqiYtOVV3qDB9NmU4bVOkDqzl1F7zJwATWbmasSdkM3
626lxDkczBfCrEjH5p5Y8DU+ge4e4LRtknY9oBOJ7EQO0twYJg3k0=
63@<:@end@:>@
64])
65
66AT_DATA(test_hooks.lua, [
67-- this is the "testing" set of lua hooks for monotone
68-- it's intended to support self-tests, not for use in
69-- production. just defines some of the std hooks.
70
71function get_passphrase(keyid)
72return keyid
73end
74
75function non_blocking_rng_ok()
76return true
77end
78
79-- Everything alice signs is trusted, nothing mallory signs is
80-- trusted. For certs signed by other people, everything is
81-- trusted except for one particular cert...
82-- For use of t_trusted.at.
83function get_revision_cert_trust(signers, id, name, val)
84 for k, v in pairs(signers) do
85 if v == "alice@trusted.com" then return true end
86 if v == "mallory@evil.com" then return false end
87 end
88 if (id == "0000000000000000000000000000000000000000"
89 and name == "bad-cert" and val == "bad-val")
90 then return false end
91 return true
92end
93
94function get_manifest_cert_trust(signers, id, name, val)
95 return true
96end
97
98function get_file_cert_trust(signers, id, name, val)
99 return true
100end
101
102function accept_testresult_change(old_results, new_results)
103 for test,res in pairs(old_results)
104 do
105 if res == true and new_results@<:@test@:>@ ~= true
106 then
107 return false
108 end
109 end
110 return true
111end
112
113function persist_phrase_ok()
114return true
115end
116
117function get_author(branchname)
118return "tester@test.net"
119end
120
121function ignore_file(name)
122if (string.find(name, "test_hooks.lua")) then return true end
123if (string.find(name, "test.db")) then return true end
124return false
125end
126
127function merge2(left_path, right_path, merged_path, left, right)
128io.write("running merge2 hook\n")
129return left
130end
131
132if (attr_functions == nil) then
133 attr_functions = {}
134end
135attr_functions[["test_attr"]] =
136 function(filename, value)
137 io.write(string.format("test_attr:%s:%s\n", filename, value))
138 end
139
140])
141
142AT_CHECK(MONOTONE db init, [], [ignore], [ignore])
143AT_CHECK(MONOTONE read <test_keys, [], [ignore], [ignore])
144AT_CHECK(MONOTONE setup --branch=testbranch ., [], [ignore], [ignore])
145AT_CHECK(rm test_keys)
146])
147
148# run as CHECK_SAME_STDOUT(command1, command2)
149m4_define([CHECK_SAME_STDOUT], [
150AT_CHECK($1, [], [stdout], [ignore])
151AT_CHECK(mv stdout expout)
152AT_CHECK($2, [], [expout], [ignore])
153])
154
155# run as CHECK_SAME_CANONICALISED_STDOUT(command1, command2)
156m4_define([CHECK_SAME_CANONICALISED_STDOUT], [
157AT_CHECK($1, [], [stdout], [ignore])
158AT_CHECK(mv stdout output1)
159AT_CHECK(CANONICALISE(output1))
160AT_CHECK($2, [], [stdout], [ignore])
161AT_CHECK(mv stdout output2)
162AT_CHECK(CANONICALISE(output2))
163AT_CHECK(cmp output1 output2)
164])
165
166# run as CHECK_DIFFERENT_STDOUT(command1, command2)
167m4_define([CHECK_DIFFERENT_STDOUT], [
168AT_CHECK($1, [], [stdout], [ignore])
169AT_CHECK(mv stdout firstout)
170AT_CHECK($2, [], [stdout], [ignore])
171AT_CHECK(mv stdout secondout)
172AT_CHECK(cmp firstout secondout, [1], [ignore], [ignore])
173])
174
175# run as CHECK_SAME_DB_CONTENTS(db1, db2)
176m4_define([CHECK_SAME_DB_CONTENTS], [
177CHECK_SAME_STDOUT(MONOTONE --db=$1 ls keys, MONOTONE --db=$2 ls keys)
178
179REVS=`MONOTONE --db=$1 complete revision ""`
180for R in $REVS; do
181 CHECK_SAME_STDOUT(MONOTONE --db=$1 ls certs $R, MONOTONE --db=$2 ls certs $R)
182 CHECK_SAME_STDOUT(MONOTONE --db=$1 cat revision $R, MONOTONE --db=$2 cat revision $R)
183done
184
185CHECK_SAME_STDOUT(MONOTONE --db=$1 complete manifest "", MONOTONE --db=$2 complete manifest "")
186MANIFESTS=`MONOTONE --db=$1 complete manifest ""`
187for M in $MANIFESTS; do
188 CHECK_SAME_STDOUT(MONOTONE --db=$1 cat manifest $M, MONOTONE --db=$2 cat manifest $M)
189done
190
191CHECK_SAME_STDOUT(MONOTONE --db=$1 complete file "", MONOTONE --db=$2 complete file "")
192FILES=`MONOTONE --db=$1 complete file ""`
193for F in $FILES; do
194 CHECK_SAME_STDOUT(MONOTONE --db=$1 cat file $F, MONOTONE --db=$2 cat file $F)
195done
196])
197
198# run as PROBE_NODE(filename, rsha, fsha)
199m4_define([PROBE_NODE], [
200AT_CHECK(rm -rf MT.old)
201AT_CHECK(mv MT MT.old)
202AT_CHECK(rm $1)
203AT_CHECK(MONOTONE checkout --revision=$2 ., [], [ignore])
204AT_CHECK(mv MT.old/options MT)
205PROBE_R_SHA=`BASE_REVISION`
206PROBE_F_SHA=`SHA1($1)`
207AT_CHECK(test $PROBE_R_SHA = $2)
208AT_CHECK(test $PROBE_F_SHA = $3)
209])
210
211# run as REVERT_TO(rsha[,branch])
212m4_define([REVERT_TO], [
213AT_CHECK(rm -rf MT.old)
214AT_CHECK(mv MT MT.old)
215m4_case([$2],
216 [], [AT_CHECK(MONOTONE checkout --revision=$1 ., [], [ignore])],
217 [AT_CHECK(MONOTONE --branch=$2 checkout --revision=$1 ., [], [ignore])])
218PROBE_R_SHA=`BASE_REVISION`
219AT_CHECK(test $PROBE_R_SHA = $1)
220])
221
222# run as ADD_FILE(filename, data)
223m4_define([ADD_FILE], [
224AT_DATA($1, $2)
225AT_CHECK(MONOTONE add $1, [], [ignore], [ignore])
226])
227
228# run as SET_FILE(filename, data)
229m4_define([SET_FILE], [
230AT_DATA($1, $2)
231])
232
233# run as COMMIT(branch)
234m4_define([COMMIT], [
235AT_CHECK(MONOTONE --branch=$1 commit --message blah-blah, [], [ignore],
236[ignore])
237])
238
239m4_define([NOT_ON_WIN32], [
240if test "$OSTYPE" == "msys"; then
241 exit 77
242fi
243])
244
245# Some tests want to include data files.
246# Usage: NEED_UNB64 will cancel the test (reporting success) if we
247# can't decode base64'ed text.
248# After calling NEED_UNB64, you can use UNB64(infile, outfile) to
249# decode base64'ed text.
250m4_define([NEED_UNB64], [
251if test -n "`command -v mimencode`" 2>/dev/null; then
252 UNB64_COMMAND="mimencode -u"
253elif test -n "`command -v recode`" 2>/dev/null; then
254 UNB64_COMMAND="recode /Base64"
255elif perl -MMIME::Base64 -e 1 2>/dev/null; then
256 UNB64_COMMAND="perl -MMIME::Base64 -ne 'print decode_base64(\$_)'"
257elif python -c 'import sys;sys.exit(not hasattr("", "decode"))' 2>/dev/null; then
258 UNB64_COMMAND="python -c 'import sys;sys.stdout.write(sys.stdin.read().decode("'"'"base64"'"'"))'"
259else
260 # This is lame! We should XFAIL the test so the user knows that
261 # they're not, you know, actually testing the software. But
262 # Autotest runs XFAIL conditions in a completely different shell, so
263 # we can't without duplicating the whole test here.
264 exit 77
265fi
266# Poor man's logging:
267AT_CHECK(echo $UNB64_COMMAND, [], [ignore], [ignore])
268])
269m4_define([UNB64], [AT_CHECK(
270if test "$OSTYPE" == "msys"; then
271 mimencode -u -o $2 $1
272else
273 eval $UNB64_COMMAND <$1 >$2
274fi
275)])
276
277# Usage: NEED_UNGZ will cancel the test (reporting success) if we
278# can't decode gzipped text.
279# After calling NEED_UNGZ, you can use UNGZ(infile, outfile) to
280# decode gzipped text.
281m4_define([NEED_UNGZ], [
282if test -n "`command -v gunzip`" 2>/dev/null; then
283 # This is lame! We should XFAIL the test so the user knows that
284 # they're not, you know, actually testing the software. But
285 # Autotest runs XFAIL conditions in a completely different shell, so
286 # we can't without duplicating the whole test here.
287 UNGZ_COMMAND="gunzip -c"
288fi
289# Poor man's logging:
290AT_CHECK(echo $UNGZ_COMMAND, [], [ignore], [ignore])
291])
292m4_define([UNGZ], [AT_CHECK(
293if test "$OSTYPE" == "msys"; then
294 if test "$1" != "$2.gz"; then
295 mv $1 $2.gz
296 fi
297 gunzip $2.gz
298else
299 eval $UNGZ_COMMAND <$1 >$2
300fi
301)])
302
303# Usage: NEED_UNGZB64 will XFAIL the test if we can't decode base64'ed
304# gzipped text.
305# After calling NEED_UNGZB64, you can use UNGZB64(infile, outfile) to
306# decode base64'ed gzipped text.
307m4_define([NEED_UNGZB64], [
308NEED_UNB64
309NEED_UNGZ
310])
311m4_define([UNGZB64], [
312UNB64($1, $2.gz)
313UNGZ($2.gz, $2)
314])
315
316# netsync helpers
317# NETSYNC_SETUP sets up 2 databases; RUN_NETSYNC netsyncs between
318# them, MONOTONE2 operates on the second one.
319
320m4_define([NETSYNC_SETUP], [
321
322AT_CHECK(cp test.db test2.db)
323AT_CHECK(cp test.db test3.db)
324AT_DATA(netsync.lua, [
325function get_netsync_read_permitted(pattern, identity)
326return true
327end
328
329function get_netsync_write_permitted(identity)
330return true
331end
332])
333
334])
335
336m4_define([MONOTONE2], MONOTONE --db=test2.db)
337m4_define([MONOTONE3], MONOTONE --db=test3.db)
338
339m4_define([NETSYNC_KILL], [
340# kill last seen pid if there is no pid file (needed for cases where
341# NETSYNC_KILL{,HARD} is used more than once on a single process.
342if test -e monotone_at.pid; then
343 mt_pid=`cat monotone_at.pid`
344fi
345if test "$OSTYPE" == "msys"; then
346 # we can't use MingW's kill because it can't target Win32 pids.
347 pskill=`which pskill`
348 if test $pskill && test -x $pskill; then
349 $pskill $mt_pid 2>/dev/null
350 else
351 ps | awk -- '{p=$NF;a=1;if(p=="COMMAND")next;pp=split(p,ps,"/");if(ps[[pp]]=="monotone")system("kill " $a);}'
352 fi
353else
354 # use a SEGV because it will cause an exit, but trigger error
355 # unwind, so we will actually "exit normally"; which is important
356 # when using things like coverage tools, etc. that need to write out
357 # their data on program exit.
358 kill -SEGV $mt_pid 2>/dev/null
359fi
360rm -f monotone_at.pid 2>/dev/null
361])
362m4_define([NETSYNC_KILLHARD], [
363# kill last seen pid if there is no pid file (needed for cases where
364# NETSYNC_KILL{,HARD} is used more than once on a single process.
365if test -e monotone_at.pid; then
366 mt_pid=`cat monotone_at.pid`
367fi
368if test "$OSTYPE" == "msys"; then
369 # we can't use MingW's kill because it can't target Win32 pids.
370 pskill=`which pskill`
371 if test $pskill && test -x $pskill; then
372 $pskill $mt_pid 2>/dev/null
373 else
374 ps | awk -- '{p=$NF;a=1;if(p=="COMMAND")next;pp=split(p,ps,"/");if(ps[[pp]]=="monotone")system("kill -KILL " $a);}'
375 fi
376else
377 kill -KILL $mt_pid 2>/dev/null
378fi
379rm -f monotone_at.pid 2>/dev/null
380])
381
382m4_define([NETSYNC_ADDRESS], [localhost:$_PORT])
383
384# run as NETSYNC_SERVE_N_START(2|3, pattern)
385# note that NETSYNC_SERVE_START is _not_ a special case of this macro.
386m4_define([NETSYNC_SERVE_N_START], [
387NETSYNC_KILLHARD
388MONOTONE --db=test$1.db --rcfile=netsync.lua --pid-file=monotone_at.pid serve NETSYNC_ADDRESS m4_if($2, [], "{}*", $2) &
389sleep 4
390])
391# run as NETSYNC_SERVE_START(pattern)
392m4_define([NETSYNC_SERVE_START], [
393NETSYNC_KILLHARD
394MONOTONE --rcfile=netsync.lua --pid-file=monotone_at.pid serve NETSYNC_ADDRESS m4_if($1, [], "{}*", $1) &
395sleep 4
396])
397# run as NETSYNC_SERVE_STOP
398m4_define([NETSYNC_SERVE_STOP], [
399NETSYNC_KILL
400sleep 1
401NETSYNC_KILLHARD
402])
403# run as NETSYNC_CLIENT_N_RUN(2|3, push|pull|sync, pattern[, expected result])
404# first argument chooses whether to use the 2nd or 3rd database
405m4_define([NETSYNC_CLIENT_N_RUN], [
406AT_CHECK(MONOTONE --db=test$1.db --rcfile=netsync.lua $2 NETSYNC_ADDRESS $3, [$4], [ignore], [ignore])
407])
408# run as NETSYNC_CLIENT_RUN(push|pull|sync, pattern[, expected result])
409m4_define([NETSYNC_CLIENT_RUN], [
410NETSYNC_CLIENT_N_RUN(2, $1, $2, $3)
411])
412# run as RUN_NETSYNC(push|pull|sync, pattern)
413# It is the second database that is always the client; take this into
414# account when choosing push|pull|sync.
415m4_define([RUN_NETSYNC], [
416NETSYNC_SERVE_START($2)
417NETSYNC_CLIENT_RUN($1, $2, 0)
418NETSYNC_SERVE_STOP
419])
420# run as QGREP(arguments) the same way you'd run 'grep -q arguments'
421# same for QEGREP and egrep -q
422m4_define([QGREP], [grep $1 >/dev/null])
423m4_define([QEGREP], [egrep $1 >/dev/null])
424# run as TAIL(lines)
425m4_define([TAIL], [(tail -n $1 2>/dev/null || tail -$1)])
426
427
428# include all the sub-tests we're going to use
429
430m4_include(tests/t_null.at)
431m4_include(tests/t_scan.at)
432m4_include(tests/t_import.at)
433m4_include(tests/t_genkey.at)
434m4_include(tests/t_unidiff.at)
435m4_include(tests/t_persist_phrase.at)
436m4_include(tests/t_versions.at)
437m4_include(tests/t_fork.at)
438m4_include(tests/t_update.at)
439m4_include(tests/t_merge.at)
440m4_include(tests/t_merge_add.at)
441m4_include(tests/t_related_merge2_data.at)
442m4_include(tests/t_merge2_add.at)
443m4_include(tests/t_merge2_data.at)
444m4_include(tests/t_unidiff2.at)
445m4_include(tests/t_cwork.at)
446m4_include(tests/t_revert.at)
447m4_include(tests/t_add.at)
448m4_include(tests/t_drop.at)
449m4_include(tests/t_drop_missing.at)
450m4_include(tests/t_cross.at)
451m4_include(tests/t_rename.at)
452m4_include(tests/t_renamed.at)
453m4_include(tests/t_erename.at)
454m4_include(tests/t_cvsimport.at)
455m4_include(tests/t_i18n_file.at)
456m4_include(tests/t_fmerge.at)
457m4_include(tests/t_netsync.at)
458m4_include(tests/t_netsync_single.at)
459m4_include(tests/t_netsync_pubkey.at)
460m4_include(tests/t_netsync_repeated.at)
461m4_include(tests/t_netsync_unrelated.at)
462m4_include(tests/t_disapprove.at)
463m4_include(tests/t_testresult.at)
464m4_include(tests/t_singlecvs.at)
465m4_include(tests/t_ls_missing.at)
466m4_include(tests/t_attributes.at)
467m4_include(tests/t_single_char_filenames.at)
468m4_include(tests/t_restrictions.at)
469m4_include(tests/t_subdirs.at)
470m4_include(tests/t_movepatch.at)
471m4_include(tests/t_movedel.at)
472m4_include(tests/t_remerge.at)
473m4_include(tests/t_update_missing.at)
474m4_include(tests/t_chkeypass.at)
475m4_include(tests/t_diff_added_file.at)
476m4_include(tests/t_update_to_revision.at)
477m4_include(tests/t_heads.at)
478m4_include(tests/t_heads_discontinuous_branch.at)
479m4_include(tests/t_merge_1.at)
480m4_include(tests/t_merge_2.at)
481m4_include(tests/t_tags.at)
482m4_include(tests/t_add_dot.at)
483m4_include(tests/t_cleanup_empty_dir.at)
484m4_include(tests/t_merge_add_del.at)
485m4_include(tests/t_add_edge.at)
486m4_include(tests/t_patch_drop_add.at)
487m4_include(tests/t_add_drop_add.at)
488m4_include(tests/t_merge2_add_drop_add.at)
489m4_include(tests/t_add_patch_drop_add.at)
490m4_include(tests/t_patch_vs_drop_add.at)
491m4_include(tests/t_explicit_merge.at)
492m4_include(tests/t_ambig_update.at)
493m4_include(tests/t_checkout_dir.at)
494m4_include(tests/t_checkout_options.at)
495m4_include(tests/t_trusted.at)
496m4_include(tests/t_attr.at)
497m4_include(tests/t_rcfile_required.at)
498m4_include(tests/t_persistent_server_revision.at)
499m4_include(tests/t_persistent_server_keys.at)
500m4_include(tests/t_fmerge_normalize.at)
501m4_include(tests/t_delete_dir.at)
502m4_include(tests/t_migrate_schema.at)
503m4_include(tests/t_dump_load.at)
504m4_include(tests/t_no_change_deltas.at)
505m4_include(tests/t_drop_rename_patch.at)
506m4_include(tests/t_cmdline_options.at)
507m4_include(tests/t_log_nonexistent.at)
508m4_include(tests/t_crlf.at)
509m4_include(tests/t_netsync_diffbranch.at)
510m4_include(tests/t_netsync_nocerts.at)
511m4_include(tests/t_check_same_db_contents.at)
512m4_include(tests/t_merge_ancestor.at)
513m4_include(tests/t_propagate_desc.at)
514m4_include(tests/t_propagate_anc.at)
515m4_include(tests/t_status_missing.at)
516m4_include(tests/t_persistent_server_keys_2.at)
517m4_include(tests/t_update_1.at)
518m4_include(tests/t_vcheck.at)
519m4_include(tests/t_db_with_dots.at)
520m4_include(tests/t_subdir_add.at)
521m4_include(tests/t_subdir_drop.at)
522m4_include(tests/t_subdir_revert.at)
523m4_include(tests/t_subdir_rename.at)
524m4_include(tests/t_subdir_attr.at)
525m4_include(tests/t_lca_1.at)
526m4_include(tests/t_update_2.at)
527m4_include(tests/t_rename_dir_cross_level.at)
528m4_include(tests/t_rename_added_in_rename.at)
529m4_include(tests/t_rename_conflict.at)
530m4_include(tests/t_rename_dir_patch.at)
531m4_include(tests/t_delete_dir_patch.at)
532m4_include(tests/t_revert_dirs.at)
533m4_include(tests/t_revert_rename.at)
534m4_include(tests/t_revert_unchanged.at)
535m4_include(tests/t_cdiff.at)
536m4_include(tests/t_no_rename_overwrite.at)
537m4_include(tests/t_checkout_noop_on_fail.at)
538m4_include(tests/t_monotone_agent.at)
539m4_include(tests/t_approval_semantics.at)
540m4_include(tests/t_rebuild.at)
541m4_include(tests/t_lua_privkey.at)
542m4_include(tests/t_i18n_changelog.at)
543m4_include(tests/t_restrictions_warn_on_unknown.at)
544m4_include(tests/t_need_mt_revision.at)
545m4_include(tests/t_update_null_revision.at)
546m4_include(tests/t_branch_checkout.at)
547m4_include(tests/t_load_into_existing.at)
548m4_include(tests/t_automate_version.at)
549m4_include(tests/t_automate_heads.at)
550m4_include(tests/t_merge_normalization_edge_case.at)
551m4_include(tests/t_undo_update.at)
552m4_include(tests/t_change_empty_file.at)
553m4_include(tests/t_largish_file.at)
554m4_include(tests/t_add_intermediate_MT_path.at)
555m4_include(tests/t_merge_3.at)
556m4_include(tests/t_merge_4.at)
557m4_include(tests/t_db_missing.at)
558m4_include(tests/t_database_check.at)
559m4_include(tests/t_add_owndb.at)
560m4_include(tests/t_can_execute.at)
561m4_include(tests/t_diff_binary.at)
562m4_include(tests/t_command_completion.at)
563m4_include(tests/t_merge_rename_file_and_rename_dir.at)
564m4_include(tests/t_diff_restrict.at)
565m4_include(tests/t_cat_file_by_name.at)
566m4_include(tests/t_epoch.at)
567m4_include(tests/t_epoch_server.at)
568m4_include(tests/t_epoch_unidirectional.at)
569m4_include(tests/t_vars.at)
570m4_include(tests/t_netsync_defaults.at)
571m4_include(tests/t_netsync_set_defaults.at)
572m4_include(tests/t_netsync_absorbs.at)
573m4_include(tests/t_netsync_checks_server_key.at)
574m4_include(tests/t_merge_5.at)
575m4_include(tests/t_empty_id_completion.at)
576m4_include(tests/t_empty_path.at)
577m4_include(tests/t_empty_env.at)
578m4_include(tests/t_short_opts.at)
579m4_include(tests/t_netsync_sigpipe.at)
580m4_include(tests/t_setup_creates_log.at)
581m4_include(tests/t_checkout_creates_log.at)
582m4_include(tests/t_commit_log_1.at)
583m4_include(tests/t_commit_log_2.at)
584m4_include(tests/t_dropkey_1.at)
585m4_include(tests/t_dropkey_2.at)
586m4_include(tests/t_rename_attr.at)
587m4_include(tests/t_automate_ancestors.at)
588m4_include(tests/t_automate_descendents.at)
589m4_include(tests/t_automate_erase_ancestors.at)
590m4_include(tests/t_automate_toposort.at)
591m4_include(tests/t_diff_first_rev.at)
592m4_include(tests/t_automate_ancestry_difference.at)
593m4_include(tests/t_automate_leaves.at)
594m4_include(tests/t_log_depth.at)
595m4_include(tests/t_commit_log_3.at)
596m4_include(tests/t_at_sign.at)
597m4_include(tests/t_db_execute.at)
598m4_include(tests/t_sql_unpack.at)
599m4_include(tests/t_final_space.at)
600m4_include(tests/t_inodeprints.at)
601m4_include(tests/t_inodeprints_update.at)
602m4_include(tests/t_ls_known.at)
603m4_include(tests/t_cvsimport_samelog.at)
604m4_include(tests/t_sticky_branch.at)
605m4_include(tests/t_checkout_id_sets_branch.at)
606m4_include(tests/t_netsync_largish_file.at)
607m4_include(tests/t_update_off_branch.at)
608m4_include(tests/t_setup_checkout_modify_new_dir.at)
609m4_include(tests/t_rename_dir_add_dir_with_old_name.at)
610m4_include(tests/t_rcs_import.at)
611m4_include(tests/t_cvsimport2.at)
612m4_include(tests/t_lf_crlf.at)
613m4_include(tests/t_add_vs_commit.at)
614m4_include(tests/t_update_nonexistent.at)
615m4_include(tests/t_override_author_date.at)
616m4_include(tests/t_add_stomp_file.at)
617m4_include(tests/t_database_check_minor.at)
618m4_include(tests/t_db_kill_rev_locally.at)
619m4_include(tests/t_drop_attr.at)
620m4_include(tests/t_attr_drop.at)
621m4_include(tests/t_log_depth_single.at)
622m4_include(tests/t_attr_init.at)
623m4_include(tests/t_add_executable.at)
624m4_include(tests/t_inodeprints_hook.at)
625m4_include(tests/t_bad_packets.at)
626m4_include(tests/t_multiple_heads_msg.at)
627m4_include(tests/t_diff_currev.at)
628m4_include(tests/t_normalized_filenames.at)
629m4_include(tests/t_automate_inventory.at)
630m4_include(tests/t_rename_file_to_dir.at)
631m4_include(tests/t_replace_file_with_dir.at)
632m4_include(tests/t_replace_dir_with_file.at)
633m4_include(tests/t_parents_children.at)
634m4_include(tests/t_automate_graph.at)
635m4_include(tests/t_i18n_file_data.at)
636m4_include(tests/t_cvsimport_manifest_cycle.at)
637m4_include(tests/t_select_cert.at)
638m4_include(tests/t_automate_select.at)
639m4_include(tests/t_refresh_inodeprints.at)
640m4_include(tests/t_merge_6.at)
641m4_include(tests/t_annotate.at)
642m4_include(tests/t_annotate_add_collision.at)
643m4_include(tests/t_annotate_branch_collision.at)
644m4_include(tests/t_netsync_error.at)
645m4_include(tests/t_options.at)
646m4_include(tests/t_annotate_copy_all.at)
647m4_include(tests/t_cvsimport_deleted_invar.at)
648m4_include(tests/t_rcfile_stdin.at)
649m4_include(tests/t_monotone_up.at)
650m4_include(tests/t_drop_vs_patch_rename.at)
651m4_include(tests/t_unreadable_MT.at)
652m4_include(tests/t_cvsimport3.at)
653m4_include(tests/t_commit_message_file.at)
654m4_include(tests/t_automate_attributes.at)
655m4_include(tests/t_unidiff3.at)
656m4_include(tests/t_netsync_permissions.at)
657m4_include(tests/t_update_with_blocked_rename.at)
658m4_include(tests/t_drop_vs_dropadd.at)
659m4_include(tests/t_annotate_lineage_dependent.at)
660m4_include(tests/t_annotate_split_line.at)
661m4_include(tests/t_automate_certs.at)
662m4_include(tests/t_selector_later_earlier.at)
663m4_include(tests/t_automate_stdio.at)
664m4_include(tests/t_cvsimport_drepper.at)
665m4_include(tests/t_update_with_pending_drop.at)
666m4_include(tests/t_update_with_pending_add.at)
667m4_include(tests/t_update_with_pending_rename.at)
668m4_include(tests/t_restricted_commit_with_inodeprints.at)
669m4_include(tests/t_merge_manual.at)
670m4_include(tests/t_revert_restrict.at)
671m4_include(tests/t_status.at)
672m4_include(tests/t_cvsimport_drepper2.at)
673m4_include(tests/t_rcfile_dir.at)
674m4_include(tests/t_lua_includedir.at)
675m4_include(tests/t_existsonpath.at)
676m4_include(tests/t_db_kill_branch_certs_locally.at)
677m4_include(tests/t_netsync_globs.at)
678m4_include(tests/t_set_default.at)
679m4_include(tests/t_netsync_read_permissions.at)
680m4_include(tests/t_netsync_exclude.at)
681m4_include(tests/t_netsync_exclude_default.at)
682m4_include(tests/t_ambiguous_tags.at)
683m4_include(tests/t_kill_tag_locally.at)
684m4_include(tests/t_restricted_diff_unchanged.at)
685m4_include(tests/t_selector_globbing.at)
686m4_include(tests/t_diff_external.at)
687m4_include(tests/t_migrate_broken_schema.at)
688m4_include(tests/t_ls_branches.at)
689m4_include(tests/t_database_check_normalized.at)
690m4_include(tests/t_annotate_no_rev.at)
691m4_include(tests/t_merge_add_rename_add.at)
692m4_include(tests/t_update_branch.at)
693m4_include(tests/t_commit_cancelled.at)
694m4_include(tests/t_merge_lca.at)
695m4_include(tests/t_commit_log_writeback.at)
696m4_include(tests/t_log_brief.at)
697m4_include(tests/t_explicit_merge_with_anc.at)
698m4_include(tests/t_drop_execute.at)
699m4_include(tests/t_rename_execute.at)
700m4_include(tests/t_read_from_file.at)
701m4_include(tests/t_setup_existing_path.at)
702m4_include(tests/t_mt_ignore.at)
703m4_include(tests/t_automate_get_file.at)
704m4_include(tests/t_automate_get_manifest.at)
705m4_include(tests/t_automate_get_revision.at)
706m4_include(tests/t_unreadable_db.at)
707m4_include(tests/t_restriction_with_exclude.at)
708m4_include(tests/t_restriction_with_exclude_iprint.at)
709m4_include(tests/t_rename_diff_names.at)
710m4_include(tests/t_gitimport.at)
711m4_include(tests/t_gitimport2.at)
712m4_include(tests/t_gitimport_suturing.at)

Archive Download this file

Branches

Tags

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status