File: __driver__.lua

package info (click to toggle)
monotone 1.1-9
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 20,984 kB
  • ctags: 8,622
  • sloc: cpp: 86,450; sh: 6,906; perl: 924; makefile: 813; python: 517; lisp: 379; sql: 118; exp: 91; ansic: 52
file content (118 lines) | stat: -rw-r--r-- 4,134 bytes parent folder | download | duplicates (4)
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

mtn_setup()

writefile("file1", "file 1")
writefile("file2", "file 2")
writefile("file3", "file 3")

writefile("fileX", "coopers")

writefile("fileY", "vitamin")

revs = {}
files = {}
rosters = {}

function dbex(...)
  check(mtn("db", "execute", string.format(...)), 0, false, false)
end

check(mtn("add", "file1"), 0, false, false)
commit("test", "add file1")
revs[1] = base_revision()
check(raw_mtn("db", "execute", "select hex(id) from rosters"), 0, true, false)
check(tail("stdout", 1), 0, true)
rosters[1] = trim(readfile("stdout"))

check(mtn("add", "file2"), 0, false, false)
commit("test", "add file2")
revs[2] = base_revision()
files[2] = sha1("file2")

check(mtn("add", "file3"), 0, false, false)
commit("test", "add file3")
files[3] = sha1("file3")
revs[3] = base_revision()

check(mtn("db", "check", "--ticker=dot"), 0, false, true)
check(qgrep('database is good', "stderr"))

-- remove file2 from the database invalidating roster2 and roster3
-- both of which include this file

dbex("delete from files where id=x'%s'", files[2])

check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(not qgrep('database is good', "stderr"))
check(qgrep('problems detected', "stderr"))
check(qgrep('1 missing file', "stderr"))
check(qgrep('1 missing or invalid file sizes', "stderr"))
check(qgrep('2 incomplete roster', "stderr"))
check(qgrep('2 incomplete revision', "stderr"))
check(qgrep('total problems detected: 6', "stderr"))
check(qgrep('6 serious', "stderr"))


-- add an unreferenced file
copy("fileX", "stdin")
check(mtn("fload"), 0, false, false, true)
-- create an unreferenced roster by deleting the revision. Note that this will increment
-- the "missing revision" count by one for further checks
check(mtn("add", "fileY"), 0, false, false)
commit("test", "to be removed")
revs[4] = base_revision()
copy("_MTN/revision", "saved_revision")
dbex("delete from revisions where id=x'%s'", revs[4])
-- revert to the old workspace state
copy("saved_revision", "_MTN/revision")
-- remove another file too
dbex("delete from files where id=x'%s'", files[3])

check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('2 unreferenced file', "stderr"))
check(qgrep('1 unreferenced roster', "stderr"))
check(qgrep('2 missing files', "stderr"))

dbex("delete from revision_ancestry")
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('2 mismatched parent', "stderr"))
check(qgrep('2 mismatched child', "stderr"))

-- bogus revision ancestry entries

xdelta_cc = "877cfe29db0f60dec63439857fe78673b9d55346"
xdelta_hh = "68d15dc01398c7bb375b1a90fbb420bebef1bac7"

dbex("insert into revision_ancestry values(x'%s', x'%s')", xdelta_cc, xdelta_hh)
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('3 mismatched parent', "stderr"))
check(qgrep('3 mismatched child', "stderr"))
check(qgrep('3 missing revision', "stderr"))

dbex("delete from roster_deltas where id=x'%s'", rosters[1])
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
-- ROSTER TODO: need check_sane_history equivalent in db check
--check(grep '3 revisions with bad history' stderr, 0, false, false)

dbex("delete from revisions where id=x'%s'", revs[1])
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('4 missing revision', "stderr"))
-- ROSTER TODO
--check(grep '2 revisions with bad history' stderr, 0, false, false)

writefile("tosum", revs[2]..":comment:this is a test:46ec58576f9e4f34a9eede521422aa5fd299dc50:bogus sig")
hash = sha1("tosum")

dbex("insert into revision_certs values (x'%s', x'%s', 'comment', 'this is a test', x'46ec58576f9e4f34a9eede521422aa5fd299dc50', 'bogus sig')", hash, revs[2])
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('1 bad sig', "stderr"))

dbex("delete from revision_certs where name = 'date'")
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('2 missing certs', "stderr"))
check(qgrep('4 mismatched certs', "stderr"))

dbex("delete from public_keys")
check(mtn("db", "check", "--ticker=dot"), 1, false, true)
check(qgrep('1 missing key', "stderr"))
check(qgrep('13 unchecked signatures', "stderr"))