annotate examples/trac/trac/versioncontrol/tests/cache.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2005 Edgewall Software
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 # All rights reserved.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 # are also available at http://trac.edgewall.com/license.html.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 # This software consists of voluntary contributions made by many
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 # individuals. For the exact contribution history, see the revision
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 # history and logs, available at http://projects.edgewall.com/trac/.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 # Author: Christopher Lenz <cmlenz@gmx.de>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 from trac.log import logger_factory
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18 from trac.test import Mock, InMemoryDatabase
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 from trac.versioncontrol import Repository, Changeset, Node
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20 from trac.versioncontrol.cache import CachedRepository
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 import time
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 import unittest
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26 class CacheTestCase(unittest.TestCase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28 def setUp(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 self.db = InMemoryDatabase()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 self.log = logger_factory('test')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32 def test_initial_sync_with_empty_repos(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 changeset = Mock(Changeset, 0, '', '', 42000,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 get_changes=lambda: [])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 repos = Mock(Repository, 'test-repos', None, self.log,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 get_changeset=lambda x: changeset,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37 get_oldest_rev=lambda: 0,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 get_youngest_rev=lambda: 0,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 normalize_rev=lambda x: x,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 next_rev=lambda x: None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 cache = CachedRepository(self.db, repos, None, self.log)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42 cache.sync()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 cursor.execute("SELECT rev,time,author,message FROM revision")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 self.assertEquals(('0', 42000, '', ''), cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 cursor.execute("SELECT COUNT(*) FROM node_change")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 self.assertEquals(0, cursor.fetchone()[0])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50 def test_initial_sync(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51 changes = [('trunk', Node.DIRECTORY, Changeset.ADD, None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 ('trunk/README', Node.FILE, Changeset.ADD, None, None)]
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 changesets = [Mock(Changeset, 0, '', '', 41000,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 get_changes=lambda: []),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 Mock(Changeset, 1, 'Import', 'joe', 42000,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 get_changes=lambda: iter(changes))]
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 repos = Mock(Repository, 'test-repos', None, self.log,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 get_changeset=lambda x: changesets[int(x)],
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59 get_oldest_rev=lambda: 0,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 get_youngest_rev=lambda: 1,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 normalize_rev=lambda x: x,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 next_rev=lambda x: int(x) == 0 and 1 or None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63 cache = CachedRepository(self.db, repos, None, self.log)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 cache.sync()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 cursor.execute("SELECT rev,time,author,message FROM revision")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 self.assertEquals(('0', 41000, '', ''), cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 self.assertEquals(('1', 42000, 'joe', 'Import'), cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 self.assertEquals(None, cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71 cursor.execute("SELECT rev,path,node_type,change_type,base_path,"
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 "base_rev FROM node_change")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73 self.assertEquals(('1', 'trunk', 'D', 'A', None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 self.assertEquals(('1', 'trunk/README', 'F', 'A', None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 self.assertEquals(None, cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 def test_update_sync(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81 cursor.execute("INSERT INTO revision (rev,time,author,message) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82 "VALUES (0,41000,'','')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 cursor.execute("INSERT INTO revision (rev,time,author,message) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 "VALUES (1,42000,'joe','Import')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 cursor.executemany("INSERT INTO node_change (rev,path,node_type,"
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 "change_type,base_path,base_rev) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87 "VALUES ('1',%s,%s,%s,%s,%s)",
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 [('trunk', 'D', 'A', None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 ('trunk/README', 'F', 'A', None, None)])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 changes = [('trunk/README', Node.FILE, Changeset.EDIT, 'trunk/README', 1)]
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 changeset = Mock(Changeset, 2, 'Update', 'joe', 42042,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93 get_changes=lambda: iter(changes))
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94 repos = Mock(Repository, 'test-repos', None, self.log,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 get_changeset=lambda x: changeset,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 get_youngest_rev=lambda: 2,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 next_rev=lambda x: int(x) == 1 and 2 or None)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 cache = CachedRepository(self.db, repos, None, self.log)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 cache.sync()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 cursor.execute("SELECT time,author,message FROM revision WHERE rev='2'")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 self.assertEquals((42042, 'joe', 'Update'), cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 self.assertEquals(None, cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105 cursor.execute("SELECT path,node_type,change_type,base_path,base_rev "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 "FROM node_change WHERE rev='2'")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 self.assertEquals(('trunk/README', 'F', 'E', 'trunk/README', '1'),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 self.assertEquals(None, cursor.fetchone())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111 def test_get_changes(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112 cursor = self.db.cursor()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 cursor.execute("INSERT INTO revision (rev,time,author,message) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114 "VALUES (0,41000,'','')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 cursor.execute("INSERT INTO revision (rev,time,author,message) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116 "VALUES (1,42000,'joe','Import')")
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 cursor.executemany("INSERT INTO node_change (rev,path,node_type,"
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 "change_type,base_path,base_rev) "
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119 "VALUES ('1',%s,%s,%s,%s,%s)",
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120 [('trunk', 'D', 'A', None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
121 ('trunk/README', 'F', 'A', None, None)])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
122
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
123 repos = Mock(Repository, 'test-repos', None, self.log,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
124 get_changeset=lambda x: None,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
125 get_youngest_rev=lambda: 1,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
126 next_rev=lambda x: None, normalize_rev=lambda rev: rev)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
127 cache = CachedRepository(self.db, repos, None, self.log)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
128 self.assertEqual(1, cache.youngest_rev)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
129 changeset = cache.get_changeset(1)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
130 self.assertEqual('joe', changeset.author)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
131 self.assertEqual('Import', changeset.message)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
132 self.assertEqual(42000, changeset.date)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
133 changes = changeset.get_changes()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
134 self.assertEqual(('trunk', Node.DIRECTORY, Changeset.ADD, None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
135 changes.next())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
136 self.assertEqual(('trunk/README', Node.FILE, Changeset.ADD, None, None),
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
137 changes.next())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
138 self.assertRaises(StopIteration, changes.next)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
139
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
140
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
141 def suite():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
142 return unittest.makeSuite(CacheTestCase, 'test')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
143
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
144 if __name__ == '__main__':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
145 unittest.main()
Copyright (C) 2012-2017 Edgewall Software