##// END OF EJS Templates
scm: git: define NUM_REV as the number of test repository revisions at unit model test...
Toshi MARUYAMA -
r6943:32b328f8d504
parent child
Show More
@@ -1,452 +1,454
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19
20 20 class RepositoryGitTest < ActiveSupport::TestCase
21 21 fixtures :projects, :repositories, :enabled_modules, :users, :roles
22 22
23 23 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
24 24 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
25 25
26 NUM_REV = 21
27
26 28 FELIX_HEX = "Felix Sch\xC3\xA4fer"
27 29 CHAR_1_HEX = "\xc3\x9c"
28 30
29 31 ## Ruby uses ANSI api to fork a process on Windows.
30 32 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
31 33 ## and these are incompatible with ASCII.
32 34 # WINDOWS_PASS = Redmine::Platform.mswin?
33 35 WINDOWS_PASS = false
34 36
35 37 ## Git, Mercurial and CVS path encodings are binary.
36 38 ## Subversion supports URL encoding for path.
37 39 ## Redmine Mercurial adapter and extension use URL encoding.
38 40 ## Git accepts only binary path in command line parameter.
39 41 ## So, there is no way to use binary command line parameter in JRuby.
40 42 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
41 43 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
42 44
43 45 if File.directory?(REPOSITORY_PATH)
44 46 def setup
45 47 klass = Repository::Git
46 48 assert_equal "Git", klass.scm_name
47 49 assert klass.scm_adapter_class
48 50 assert_not_equal "", klass.scm_command
49 51 assert_equal true, klass.scm_available
50 52
51 53 @project = Project.find(3)
52 54 @repository = Repository::Git.create(
53 55 :project => @project,
54 56 :url => REPOSITORY_PATH,
55 57 :path_encoding => 'ISO-8859-1'
56 58 )
57 59 assert @repository
58 60 @char_1 = CHAR_1_HEX.dup
59 61 if @char_1.respond_to?(:force_encoding)
60 62 @char_1.force_encoding('UTF-8')
61 63 end
62 64 end
63 65
64 66 def test_fetch_changesets_from_scratch
65 67 assert_nil @repository.extra_info
66 68
67 69 assert_equal 0, @repository.changesets.count
68 70 @repository.fetch_changesets
69 71 @project.reload
70 72
71 73 assert_equal 21, @repository.changesets.count
72 74 assert_equal 33, @repository.changes.count
73 75
74 76 commit = @repository.changesets.find(:first, :order => 'committed_on ASC')
75 77 assert_equal "Initial import.\nThe repository contains 3 files.", commit.comments
76 78 assert_equal "jsmith <jsmith@foo.bar>", commit.committer
77 79 assert_equal User.find_by_login('jsmith'), commit.user
78 80 # TODO: add a commit with commit time <> author time to the test repository
79 81 assert_equal "2007-12-14 09:22:52".to_time, commit.committed_on
80 82 assert_equal "2007-12-14".to_date, commit.commit_date
81 83 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.revision
82 84 assert_equal "7234cb2750b63f47bff735edc50a1c0a433c2518", commit.scmid
83 85 assert_equal 3, commit.changes.count
84 86 change = commit.changes.sort_by(&:path).first
85 87 assert_equal "README", change.path
86 88 assert_equal "A", change.action
87 89
88 90 assert_equal 4, @repository.extra_info["branches"].size
89 91 end
90 92
91 93 def test_fetch_changesets_incremental
92 94 @repository.fetch_changesets
93 95 @repository.reload
94 96 assert_equal 21, @repository.changesets.count
95 97 assert_equal 33, @repository.changes.count
96 98 extra_info_db = @repository.extra_info["branches"]
97 99 assert_equal 4, extra_info_db.size
98 100 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
99 101 extra_info_db["latin-1-path-encoding"]["last_scmid"]
100 102 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
101 103 extra_info_db["master"]["last_scmid"]
102 104
103 105 del_revs = [
104 106 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
105 107 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
106 108 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
107 109 "deff712f05a90d96edbd70facc47d944be5897e3",
108 110 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
109 111 "7e61ac704deecde634b51e59daa8110435dcb3da",
110 112 ]
111 113 @repository.changesets.each do |rev|
112 114 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
113 115 end
114 116 @repository.reload
115 117 cs1 = @repository.changesets
116 118 assert_equal 15, cs1.count
117 119 h = @repository.extra_info.dup
118 120 h["branches"]["master"]["last_scmid"] =
119 121 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
120 122 @repository.merge_extra_info(h)
121 123 @repository.save
122 124 @repository.reload
123 125 extra_info_db_1 = @repository.extra_info["branches"]
124 126 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
125 127 extra_info_db_1["master"]["last_scmid"]
126 128
127 129 @repository.fetch_changesets
128 130 assert_equal 21, @repository.changesets.count
129 131 end
130 132
131 133 def test_fetch_changesets_invalid_rev
132 134 @repository.fetch_changesets
133 135 @repository.reload
134 136 assert_equal 21, @repository.changesets.count
135 137 assert_equal 33, @repository.changes.count
136 138 extra_info_db = @repository.extra_info["branches"]
137 139 assert_equal 4, extra_info_db.size
138 140 assert_equal "1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127",
139 141 extra_info_db["latin-1-path-encoding"]["last_scmid"]
140 142 assert_equal "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
141 143 extra_info_db["master"]["last_scmid"]
142 144
143 145 del_revs = [
144 146 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
145 147 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
146 148 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
147 149 "deff712f05a90d96edbd70facc47d944be5897e3",
148 150 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
149 151 "7e61ac704deecde634b51e59daa8110435dcb3da",
150 152 ]
151 153 @repository.changesets.each do |rev|
152 154 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
153 155 end
154 156 @repository.reload
155 157 cs1 = @repository.changesets
156 158 assert_equal 15, cs1.count
157 159 h = @repository.extra_info.dup
158 160 h["branches"]["master"]["last_scmid"] =
159 161 "abcd1234efgh"
160 162 @repository.merge_extra_info(h)
161 163 @repository.save
162 164 @repository.reload
163 165 extra_info_db_1 = @repository.extra_info["branches"]
164 166 assert_equal "abcd1234efgh",
165 167 extra_info_db_1["master"]["last_scmid"]
166 168
167 169 @repository.fetch_changesets
168 170 assert_equal 15, @repository.changesets.count
169 171 end
170 172
171 173 def test_db_consistent_ordering_init
172 174 assert_nil @repository.extra_info
173 175 @repository.fetch_changesets
174 176 @repository.reload
175 177 assert_equal 1, @repository.extra_info["db_consistent"]["ordering"]
176 178 end
177 179
178 180 def test_db_consistent_ordering_before_1_2
179 181 assert_nil @repository.extra_info
180 182 @repository.fetch_changesets
181 183 @repository.reload
182 184 assert_equal 21, @repository.changesets.count
183 185 assert_not_nil @repository.extra_info
184 186 @repository.write_attribute(:extra_info, nil)
185 187 @repository.save
186 188 assert_nil @repository.extra_info
187 189 assert_equal 21, @repository.changesets.count
188 190 @repository.fetch_changesets
189 191 @repository.reload
190 192 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
191 193
192 194 del_revs = [
193 195 "83ca5fd546063a3c7dc2e568ba3355661a9e2b2c",
194 196 "ed5bb786bbda2dee66a2d50faf51429dbc043a7b",
195 197 "4f26664364207fa8b1af9f8722647ab2d4ac5d43",
196 198 "deff712f05a90d96edbd70facc47d944be5897e3",
197 199 "32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf",
198 200 "7e61ac704deecde634b51e59daa8110435dcb3da",
199 201 ]
200 202 @repository.changesets.each do |rev|
201 203 rev.destroy if del_revs.detect {|r| r == rev.scmid.to_s }
202 204 end
203 205 @repository.reload
204 206 cs1 = @repository.changesets
205 207 assert_equal 15, cs1.count
206 208 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
207 209 h = @repository.extra_info.dup
208 210 h["branches"]["master"]["last_scmid"] =
209 211 "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8"
210 212 @repository.merge_extra_info(h)
211 213 @repository.save
212 214 @repository.reload
213 215 extra_info_db_1 = @repository.extra_info["branches"]
214 216 assert_equal "4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8",
215 217 extra_info_db_1["master"]["last_scmid"]
216 218
217 219 @repository.fetch_changesets
218 220 assert_equal 21, @repository.changesets.count
219 221 assert_equal 0, @repository.extra_info["db_consistent"]["ordering"]
220 222 end
221 223
222 224 def test_latest_changesets
223 225 @repository.fetch_changesets
224 226 @repository.reload
225 227 # with limit
226 228 changesets = @repository.latest_changesets('', nil, 2)
227 229 assert_equal 2, changesets.size
228 230
229 231 # with path
230 232 changesets = @repository.latest_changesets('images', nil)
231 233 assert_equal [
232 234 'deff712f05a90d96edbd70facc47d944be5897e3',
233 235 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
234 236 '7234cb2750b63f47bff735edc50a1c0a433c2518',
235 237 ], changesets.collect(&:revision)
236 238
237 239 changesets = @repository.latest_changesets('README', nil)
238 240 assert_equal [
239 241 '32ae898b720c2f7eec2723d5bdd558b4cb2d3ddf',
240 242 '4a07fe31bffcf2888791f3e6cbc9c4545cefe3e8',
241 243 '713f4944648826f558cf548222f813dabe7cbb04',
242 244 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
243 245 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
244 246 '7234cb2750b63f47bff735edc50a1c0a433c2518',
245 247 ], changesets.collect(&:revision)
246 248
247 249 # with path, revision and limit
248 250 changesets = @repository.latest_changesets('images', '899a15dba')
249 251 assert_equal [
250 252 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
251 253 '7234cb2750b63f47bff735edc50a1c0a433c2518',
252 254 ], changesets.collect(&:revision)
253 255
254 256 changesets = @repository.latest_changesets('images', '899a15dba', 1)
255 257 assert_equal [
256 258 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
257 259 ], changesets.collect(&:revision)
258 260
259 261 changesets = @repository.latest_changesets('README', '899a15dba')
260 262 assert_equal [
261 263 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
262 264 '7234cb2750b63f47bff735edc50a1c0a433c2518',
263 265 ], changesets.collect(&:revision)
264 266
265 267 changesets = @repository.latest_changesets('README', '899a15dba', 1)
266 268 assert_equal [
267 269 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
268 270 ], changesets.collect(&:revision)
269 271
270 272 # with path, tag and limit
271 273 changesets = @repository.latest_changesets('images', 'tag01.annotated')
272 274 assert_equal [
273 275 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
274 276 '7234cb2750b63f47bff735edc50a1c0a433c2518',
275 277 ], changesets.collect(&:revision)
276 278
277 279 changesets = @repository.latest_changesets('images', 'tag01.annotated', 1)
278 280 assert_equal [
279 281 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
280 282 ], changesets.collect(&:revision)
281 283
282 284 changesets = @repository.latest_changesets('README', 'tag01.annotated')
283 285 assert_equal [
284 286 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
285 287 '7234cb2750b63f47bff735edc50a1c0a433c2518',
286 288 ], changesets.collect(&:revision)
287 289
288 290 changesets = @repository.latest_changesets('README', 'tag01.annotated', 1)
289 291 assert_equal [
290 292 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
291 293 ], changesets.collect(&:revision)
292 294
293 295 # with path, branch and limit
294 296 changesets = @repository.latest_changesets('images', 'test_branch')
295 297 assert_equal [
296 298 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
297 299 '7234cb2750b63f47bff735edc50a1c0a433c2518',
298 300 ], changesets.collect(&:revision)
299 301
300 302 changesets = @repository.latest_changesets('images', 'test_branch', 1)
301 303 assert_equal [
302 304 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
303 305 ], changesets.collect(&:revision)
304 306
305 307 changesets = @repository.latest_changesets('README', 'test_branch')
306 308 assert_equal [
307 309 '713f4944648826f558cf548222f813dabe7cbb04',
308 310 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
309 311 '899a15dba03a3b350b89c3f537e4bbe02a03cdc9',
310 312 '7234cb2750b63f47bff735edc50a1c0a433c2518',
311 313 ], changesets.collect(&:revision)
312 314
313 315 changesets = @repository.latest_changesets('README', 'test_branch', 2)
314 316 assert_equal [
315 317 '713f4944648826f558cf548222f813dabe7cbb04',
316 318 '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
317 319 ], changesets.collect(&:revision)
318 320
319 321 if JRUBY_SKIP
320 322 puts JRUBY_SKIP_STR
321 323 else
322 324 # latin-1 encoding path
323 325 changesets = @repository.latest_changesets(
324 326 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
325 327 assert_equal [
326 328 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
327 329 '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
328 330 ], changesets.collect(&:revision)
329 331
330 332 changesets = @repository.latest_changesets(
331 333 "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
332 334 assert_equal [
333 335 '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
334 336 ], changesets.collect(&:revision)
335 337 end
336 338 end
337 339
338 340 def test_latest_changesets_latin_1_dir
339 341 if WINDOWS_PASS
340 342 #
341 343 elsif JRUBY_SKIP
342 344 puts JRUBY_SKIP_STR
343 345 else
344 346 @repository.fetch_changesets
345 347 @repository.reload
346 348 changesets = @repository.latest_changesets(
347 349 "latin-1-dir/test-#{@char_1}-subdir", '1ca7f5ed')
348 350 assert_equal [
349 351 '1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127',
350 352 ], changesets.collect(&:revision)
351 353 end
352 354 end
353 355
354 356 def test_find_changeset_by_name
355 357 @repository.fetch_changesets
356 358 @repository.reload
357 359 ['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
358 360 assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
359 361 @repository.find_changeset_by_name(r).revision
360 362 end
361 363 end
362 364
363 365 def test_find_changeset_by_empty_name
364 366 @repository.fetch_changesets
365 367 @repository.reload
366 368 ['', ' ', nil].each do |r|
367 369 assert_nil @repository.find_changeset_by_name(r)
368 370 end
369 371 end
370 372
371 373 def test_identifier
372 374 @repository.fetch_changesets
373 375 @repository.reload
374 376 c = @repository.changesets.find_by_revision(
375 377 '7234cb2750b63f47bff735edc50a1c0a433c2518')
376 378 assert_equal c.scmid, c.identifier
377 379 end
378 380
379 381 def test_format_identifier
380 382 @repository.fetch_changesets
381 383 @repository.reload
382 384 c = @repository.changesets.find_by_revision(
383 385 '7234cb2750b63f47bff735edc50a1c0a433c2518')
384 386 assert_equal '7234cb27', c.format_identifier
385 387 end
386 388
387 389 def test_activities
388 390 c = Changeset.new(:repository => @repository,
389 391 :committed_on => Time.now,
390 392 :revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
391 393 :scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
392 394 :comments => 'test')
393 395 assert c.event_title.include?('abc7234c:')
394 396 assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
395 397 end
396 398
397 399 def test_log_utf8
398 400 @repository.fetch_changesets
399 401 @repository.reload
400 402 str_felix_hex = FELIX_HEX.dup
401 403 if str_felix_hex.respond_to?(:force_encoding)
402 404 str_felix_hex.force_encoding('UTF-8')
403 405 end
404 406 c = @repository.changesets.find_by_revision(
405 407 'ed5bb786bbda2dee66a2d50faf51429dbc043a7b')
406 408 assert_equal "#{str_felix_hex} <felix@fachschaften.org>", c.committer
407 409 end
408 410
409 411 def test_previous
410 412 @repository.fetch_changesets
411 413 @repository.reload
412 414 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
413 415 changeset = @repository.find_changeset_by_name(r1)
414 416 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
415 417 assert_equal @repository.find_changeset_by_name(r2), changeset.previous
416 418 end
417 419 end
418 420 end
419 421
420 422 def test_previous_nil
421 423 @repository.fetch_changesets
422 424 @repository.reload
423 425 %w|7234cb2750b63f47bff735edc50a1c0a433c2518 7234cb2|.each do |r1|
424 426 changeset = @repository.find_changeset_by_name(r1)
425 427 assert_nil changeset.previous
426 428 end
427 429 end
428 430
429 431 def test_next
430 432 @repository.fetch_changesets
431 433 @repository.reload
432 434 %w|64f1f3e89ad1cb57976ff0ad99a107012ba3481d 64f1f3e89ad1|.each do |r2|
433 435 changeset = @repository.find_changeset_by_name(r2)
434 436 %w|1ca7f5ed374f3cb31a93ae5215c2e25cc6ec5127 1ca7f5ed|.each do |r1|
435 437 assert_equal @repository.find_changeset_by_name(r1), changeset.next
436 438 end
437 439 end
438 440 end
439 441
440 442 def test_next_nil
441 443 @repository.fetch_changesets
442 444 @repository.reload
443 445 %w|67e7792ce20ccae2e4bb73eed09bb397819c8834 67e7792ce20cca|.each do |r1|
444 446 changeset = @repository.find_changeset_by_name(r1)
445 447 assert_nil changeset.next
446 448 end
447 449 end
448 450 else
449 451 puts "Git test repository NOT FOUND. Skipping unit tests !!!"
450 452 def test_fake; assert true end
451 453 end
452 454 end
General Comments 0
You need to be logged in to leave comments. Login now