- Notifications
You must be signed in to change notification settings - Fork68
Expand file tree
/
Copy pathtest_pack.py
More file actions
87 lines (71 loc) · 2.75 KB
/
test_pack.py
File metadata and controls
87 lines (71 loc) · 2.75 KB
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
# Copyright (C) 2010, 2011 Sebastian Thiel (byronimo@gmail.com) and contributors
#
# This module is part of GitDB and is released under
# the New BSD License: https://opensource.org/license/bsd-3-clause/
fromgitdb.test.db.libimport (
TestDBBase,
with_rw_directory,
with_packs_rw
)
fromgitdb.dbimportPackedDB
fromgitdb.excimportBadObject,AmbiguousObjectName
fromgitdb.utilimportmman
importos
importrandom
importsys
importpytest
classTestPackDB(TestDBBase):
@with_rw_directory
@with_packs_rw
deftest_writing(self,path):
ifsys.platform=="win32":
pytest.skip("FIXME: Currently fail on windows")
pdb=PackedDB(path)
# on demand, we init our pack cache
num_packs=len(pdb.entities())
assertpdb._st_mtime!=0
# test pack directory changed:
# packs removed - rename a file, should affect the glob
pack_path=pdb.entities()[0].pack().path()
new_pack_path=pack_path+"renamed"
ifsys.platform=="win32":
# While using this function, we are not allowed to have any handle
# to this path, which is currently not the case. The pack caching
# does still have a handle :-(
mman.force_map_handle_removal_win(pack_path)
os.rename(pack_path,new_pack_path)
pdb.update_cache(force=True)
assertlen(pdb.entities())==num_packs-1
# packs added
os.rename(new_pack_path,pack_path)
pdb.update_cache(force=True)
assertlen(pdb.entities())==num_packs
# bang on the cache
# access the Entities directly, as there is no iteration interface
# yet ( or required for now )
sha_list=list(pdb.sha_iter())
assertlen(sha_list)==pdb.size()
# hit all packs in random order
random.shuffle(sha_list)
forshainsha_list:
pdb.info(sha)
pdb.stream(sha)
# END for each sha to query
# test short finding - be a bit more brutal here
max_bytes=19
min_bytes=2
num_ambiguous=0
fori,shainenumerate(sha_list):
short_sha=sha[:max((i%max_bytes),min_bytes)]
try:
assertpdb.partial_to_complete_sha(short_sha,len(short_sha)*2)==sha
exceptAmbiguousObjectName:
num_ambiguous+=1
pass# valid, we can have short objects
# END exception handling
# END for each sha to find
# we should have at least one ambiguous, considering the small sizes
# but in our pack, there is no ambiguous ...
# assert num_ambiguous
# non-existing
self.assertRaises(BadObject,pdb.partial_to_complete_sha,b'\0\0',4)