Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Joshua
wendelin.core
Commits
ec103e5c
Commit
ec103e5c
authored
Apr 30, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
fb35f696
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
44 deletions
+29
-44
wcfs/wcfs_test.py
wcfs/wcfs_test.py
+29
-44
No files found.
wcfs/wcfs_test.py
View file @
ec103e5c
...
...
@@ -73,7 +73,7 @@ def teardown_function(f):
os
.
rmdir
(
testmntpt
)
# ---- test
s
----
# ---- test
join/autostart
----
# test that zurl does not change from one open to another storage open.
def
test_zurlstable
():
...
...
@@ -116,9 +116,15 @@ def test_join_autostart():
assert
os
.
path
.
isdir
(
wc
.
mountpoint
+
"/head/bigfile"
)
# --- test access to data ----
# tDB provides database/wcfs testing environment.
#
# XXX link -> tFile + tWatch.
# BigFiles opened under tDB are represented as tFile - see .open for details.
# Watches opened under tDB are represented as tWatch - see .openwatch for details.
#
# XXX .open -> .topen
# XXX .openwatch -> .topenwatch ?
#
# XXX print -> t.trace/debug() + t.verbose depending on py.test -v -v ?
class
tDB
:
...
...
@@ -144,6 +150,7 @@ class tDB:
# tracked tFiles & tWatches
t
.
_tracked
=
set
()
# close closes test database as well as all tracked files, watches and wcfs.
def
close
(
t
):
for
tf
in
t
.
_tracked
.
copy
():
tf
.
close
()
...
...
@@ -251,6 +258,10 @@ class tDB:
# tFile provides testing environment for one bigfile on wcfs.
#
# .blk() provides access to data of a block. .cached() gives state of which
# blocks are in OS pagecache. .assertCache and .assertBlk/.assertData assert
# on state of cache and data.
class
tFile
:
# maximum number of pages we mmap for 1 file.
# this should be not big not to exceed mlock limit.
...
...
@@ -277,51 +288,15 @@ class tFile:
mm
.
unmap
(
t
.
fmmap
)
t
.
f
.
close
()
# sizeblk returns file size in blocks.
def
sizeblk
(
t
):
st
=
os
.
fstat
(
t
.
f
.
fileno
())
assert
st
.
st_size
%
t
.
blksize
==
0
assert
st
.
st_size
//
t
.
blksize
<=
t
.
_max_tracked
return
st
.
st_size
//
t
.
blksize
"""
# readblk reads ZBigFile[blk] from wcfs.
# XXX not needed?
@func
def readblk(t, zf, blk, at=None):
assert isinstance(zf, ZBigFile)
f = t._open(zf, at=at) # XXX binary, !buffered
defer(f.close)
blksize = zf.blksize
f.seek(blk*blksize)
n = blksize
data = b''
while n > 0:
chunk = f.read(n)
assert len(chunk) > 0
data += chunk
n -= len(chunk)
return data
"""
# assertCache asserts state of OS file cache.
#
# incorev is [] of 1/0 representing whether block data is present or not.
def
assertCache
(
t
,
incorev
):
assert
t
.
cached
()
==
incorev
# blk returns bytearray view of file[blk].
def
blk
(
t
,
blk
):
assert
blk
<=
t
.
_max_tracked
return
bytearray
(
t
.
fmmap
[
blk
*
t
.
blksize
:(
blk
+
1
)
*
t
.
blksize
])
# cached returns [] with indicating whether
of
file block is cached or not.
# cached returns [] with indicating whether
a
file block is cached or not.
# 1 - cached, 0 - not cached, fractional (0,1) - some pages of the block are cached some not.
def
cached
(
t
):
l
=
t
.
size
blk
()
l
=
t
.
_sizein
blk
()
incorev
=
mm
.
incore
(
t
.
fmmap
[:
l
*
t
.
blksize
])
# incorev is in pages; convert to in blocks
assert
t
.
blksize
%
mm
.
PAGE_SIZE
==
0
...
...
@@ -336,6 +311,19 @@ class tFile:
cachev
[
blk
]
=
int
(
cachev
[
blk
])
# 0.0 -> 0, 1.0 -> 1
return
cachev
# _sizeinblk returns file size in blocks.
def
_sizeinblk
(
t
):
st
=
os
.
fstat
(
t
.
f
.
fileno
())
assert
st
.
st_size
%
t
.
blksize
==
0
assert
st
.
st_size
//
t
.
blksize
<=
t
.
_max_tracked
return
st
.
st_size
//
t
.
blksize
# assertCache asserts state of OS cache for file.
#
# incorev is [] of 1/0 representing whether block data is present or not.
def
assertCache
(
t
,
incorev
):
assert
t
.
cached
()
==
incorev
# assertBlk asserts that file block #blk has data as expected.
#
# Expected data may be given with size < t.blksize. In such case the data
...
...
@@ -343,10 +331,7 @@ class tFile:
def
assertBlk
(
t
,
blk
,
data
):
assert
len
(
data
)
<=
t
.
blksize
data
+=
b'
\
0
'
*
(
t
.
blksize
-
len
(
data
))
# tailing zeros
st
=
os
.
fstat
(
t
.
f
.
fileno
())
assert
st
.
st_size
%
t
.
blksize
==
0
assert
blk
<
(
st
.
st_size
//
t
.
blksize
)
assert
st
.
st_size
//
t
.
blksize
<=
t
.
_max_tracked
assert
blk
<
t
.
_sizeinblk
()
# XXX assert individually for every block's page? (easier debugging?)
assert
t
.
blk
(
blk
)
==
data
,
(
"#blk: %d"
%
blk
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment