Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Q
QueryR
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Julien Lopez
QueryR
Commits
b58a0991
Commit
b58a0991
authored
9 years ago
by
Adam Welc
Browse files
Options
Downloads
Plain Diff
Merged.
parents
945640cf
3ad73d9a
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
mx.fastr/mx_fastr_pkgtest.py
+88
-27
88 additions, 27 deletions
mx.fastr/mx_fastr_pkgtest.py
with
88 additions
and
27 deletions
mx.fastr/mx_fastr_pkgtest.py
+
88
−
27
View file @
b58a0991
...
@@ -30,7 +30,7 @@ from HTMLParser import HTMLParser
...
@@ -30,7 +30,7 @@ from HTMLParser import HTMLParser
from
datetime
import
datetime
from
datetime
import
datetime
def
_gather_test_outputs_forpkg
(
pkgdirpath
):
def
_gather_test_outputs_forpkg
(
pkgdirpath
):
'''
return a list of paths to .Rout/.fail files in pkgdirpath
'''
'''
return a
sorted
list of paths to .Rout/.fail files in pkgdirpath
'''
result
=
[]
result
=
[]
for
dirpath
,
_
,
files
in
os
.
walk
(
pkgdirpath
):
for
dirpath
,
_
,
files
in
os
.
walk
(
pkgdirpath
):
for
f
in
files
:
for
f
in
files
:
...
@@ -39,17 +39,32 @@ def _gather_test_outputs_forpkg(pkgdirpath):
...
@@ -39,17 +39,32 @@ def _gather_test_outputs_forpkg(pkgdirpath):
result
.
sort
()
result
.
sort
()
return
result
return
result
def
_gather_test_outputs
(
testdir
,
pkgs
):
def
_gather_test_outputs
(
testdir
):
'''
return a dict mapping package names to list of output file paths
'''
'''
return a dict mapping package names to
sorted
list of output file paths
'''
result
=
dict
()
result
=
dict
()
for
dirpath
,
dirs
,
_
in
os
.
walk
(
testdir
):
for
dirpath
,
dirs
,
_
in
os
.
walk
(
testdir
):
for
d
in
dirs
:
for
d
in
dirs
:
if
len
(
pkgs
)
==
0
or
d
in
pkgs
:
result
[
d
]
=
_gather_test_outputs_forpkg
(
join
(
dirpath
,
d
))
result
[
d
]
=
_gather_test_outputs_forpkg
(
join
(
dirpath
,
d
))
# only interested in top level
# only interested in top level
break
break
return
result
return
result
def
_gather_all_test_outputs
(
testdir
):
fastr
=
dict
()
fastr_date
=
dict
()
dirlist
=
get_local_dirs
(
testdir
)
for
resultdir
in
dirlist
:
resultInfo
=
ResultInfo
(
resultdir
)
result_outputs
=
_gather_test_outputs
(
join
(
testdir
,
resultdir
,
"
test
"
))
for
pkg
,
outputs
in
result_outputs
.
iteritems
():
if
fastr
.
has_key
(
pkg
):
# if this is a more recent result overwrite, else drop
if
resultInfo
.
date
<
fastr_date
[
pkg
]:
continue
fastr
[
pkg
]
=
outputs
fastr_date
[
pkg
]
=
resultInfo
.
date
return
fastr
def
_find_start
(
content
):
def
_find_start
(
content
):
marker
=
"
Type
'
q()
'
to quit R.
"
marker
=
"
Type
'
q()
'
to quit R.
"
for
i
in
range
(
len
(
content
)):
for
i
in
range
(
len
(
content
)):
...
@@ -84,45 +99,80 @@ def _fuzzy_compare(gnur_content, fastr_content):
...
@@ -84,45 +99,80 @@ def _fuzzy_compare(gnur_content, fastr_content):
i
=
i
+
1
i
=
i
+
1
return
result
return
result
def
rpt_list_testdates
(
args
):
parser
=
ArgumentParser
(
prog
=
'
mx rpt-list-testdates
'
)
_add_common_args
(
parser
)
parser
.
add_argument
(
'
--pattern
'
,
action
=
'
store
'
,
help
=
'
regexp pattern for pkg match
'
,
default
=
'
.*
'
)
parser
.
add_argument
(
'
--printfile
'
,
action
=
'
store_true
'
,
help
=
'
print filename containing tests
'
)
args
=
parser
.
parse_args
(
args
)
fastr
=
dict
()
dirlist
=
get_local_dirs
(
args
.
logdir
)
for
resultdir
in
dirlist
:
resultInfo
=
ResultInfo
(
resultdir
)
result_outputs
=
_gather_test_outputs
(
join
(
args
.
logdir
,
resultdir
,
"
test
"
))
for
pkg
,
_
in
result_outputs
.
iteritems
():
if
re
.
search
(
args
.
pattern
,
pkg
)
is
None
:
continue
if
not
fastr
.
has_key
(
pkg
):
testdates
=
[]
fastr
[
pkg
]
=
testdates
else
:
testdates
=
fastr
[
pkg
]
testdates
.
append
(
resultInfo
)
for
pkg
,
testdates
in
fastr
.
iteritems
():
sortedList
=
sorted
(
testdates
)
print
pkg
for
resultInfo
in
sortedList
:
if
args
.
printfile
:
print
'
'
+
resultInfo
.
localdir
else
:
print
'
'
+
str
(
resultInfo
.
date
)
def
rpt_compare
(
args
):
def
rpt_compare
(
args
):
'''
'''
Analyze test package test results by comparing with GnuR output.
Analyze package test results by comparing test output with GnuR output.
Uses either a specific directory, i.e. the
'
test
'
subdirectory of the --testdir argument
or (default) the latest downloaded results from the --logdir directory
Return 0 if passed, non-zero if failed
Return 0 if passed, non-zero if failed
'''
'''
parser
=
ArgumentParser
(
prog
=
'
mx rpt-compare
'
)
parser
=
ArgumentParser
(
prog
=
'
mx rpt-compare
'
)
parser
.
add_argument
(
'
--fastr-dir
'
,
action
=
'
store
'
,
help
=
'
dir containing fastr results
'
,
default
=
os
.
getcwd
()
)
_add_common_args
(
parser
)
parser
.
add_argument
(
'
--
pkg
'
,
action
=
'
store
'
,
help
=
'
pkg to compare, default all
'
)
parser
.
add_argument
(
'
--
testdir
'
,
action
=
'
store
'
,
help
=
'
specific dir containing fastr results
'
)
parser
.
add_argument
(
'
--
verbose
'
,
action
=
'
store
_true
'
,
help
=
'
p
rint names of files that differ
'
)
parser
.
add_argument
(
'
--
pkg
'
,
action
=
'
store
'
,
help
=
'
p
kg to compare
'
)
parser
.
add_argument
(
'
--diff
'
,
action
=
'
store_true
'
,
help
=
'
execute given diff program on differing outputs
'
)
parser
.
add_argument
(
'
--diff
'
,
action
=
'
store_true
'
,
help
=
'
execute given diff program on differing outputs
'
)
parser
.
add_argument
(
'
--difftool
'
,
action
=
'
store
'
,
help
=
'
diff tool
'
,
default
=
'
diff
'
)
parser
.
add_argument
(
'
--difftool
'
,
action
=
'
store
'
,
help
=
'
diff tool
'
,
default
=
'
diff
'
)
parser
.
add_argument
(
'
pkgs
'
,
nargs
=
REMAINDER
,
metavar
=
'
pkg1 pkg2 ...
'
)
parser
.
add_argument
(
'
--pattern
'
,
action
=
'
store
'
,
help
=
'
regexp pattern for pkg match
'
,
default
=
'
.*
'
)
args
=
parser
.
parse_args
(
args
)
args
=
parser
.
parse_args
(
args
)
pkgs
=
args
.
pkgs
if
args
.
pkg
:
if
args
.
pkg
:
pkgs
=
[
args
.
pkg
]
+
pkgs
args
.
pattern
=
args
.
pkg
verbose
=
args
.
verbose
gnur
=
_gather_test_outputs
(
join
(
os
.
getcwd
(),
"
test_gnur
"
))
gnur
=
_gather_test_outputs
(
join
(
os
.
getcwd
(),
"
test_gnur
"
),
pkgs
)
if
args
.
pkg
:
if
not
gnur
.
has_key
(
args
.
pkg
):
mx
.
abort
(
'
no gnur output to compare
'
)
fastr
=
_gather_test_outputs
(
join
(
args
.
fastr_dir
,
"
test
"
),
pkgs
)
if
args
.
testdir
:
fastr
=
_gather_test_outputs
(
join
(
args
.
testdir
,
"
test
"
))
else
:
fastr
=
_gather_all_test_outputs
(
args
.
logdir
)
return
_rpt_compare_pkgs
(
args
,
gnur
,
fastr
)
def
_rpt_compare_pkgs
(
args
,
gnur
,
fastr
):
# gnur is definitive
# gnur is definitive
result
=
0
# optimistic
result
=
0
# optimistic
for
pkg
in
pkgs
:
for
pkg
in
fastr
.
keys
():
if
not
fastr
.
has_key
(
pkg
):
if
re
.
search
(
args
.
pattern
,
pkg
)
is
None
:
result
=
1
continue
continue
if
not
gnur
.
has_key
(
pkg
):
if
not
gnur
.
has_key
(
pkg
):
print
'
no gnur output to compare:
'
+
pkg
print
'
no gnur output to compare:
'
+
pkg
continue
if
args
.
verbose
:
print
'
comparing
'
+
pkg
fastr_outputs
=
fastr
[
pkg
]
fastr_outputs
=
fastr
[
pkg
]
gnur_outputs
=
gnur
[
pkg
]
gnur_outputs
=
gnur
[
pkg
]
if
len
(
fastr_outputs
)
!=
len
(
gnur_outputs
):
if
len
(
fastr_outputs
)
!=
len
(
gnur_outputs
):
if
verbose
:
if
args
.
verbose
:
print
'
fastr is missing some output files
'
print
'
fastr is missing some output files
'
# TODO continue but handle missing files in loop?
# TODO continue but handle missing files in loop?
# does it ever happen in practice?
# does it ever happen in practice?
...
@@ -139,7 +189,7 @@ def rpt_compare(args):
...
@@ -139,7 +189,7 @@ def rpt_compare(args):
fastr_content
=
f
.
readlines
()
fastr_content
=
f
.
readlines
()
result
=
_fuzzy_compare
(
gnur_content
,
fastr_content
)
result
=
_fuzzy_compare
(
gnur_content
,
fastr_content
)
if
result
!=
0
:
if
result
!=
0
:
if
verbose
:
if
args
.
verbose
:
print
'
mismatch on file:
'
+
fastr_output
print
'
mismatch on file:
'
+
fastr_output
if
args
.
diff
:
if
args
.
diff
:
cmd
=
[
args
.
difftool
,
gnur_output
,
fastr_output
]
cmd
=
[
args
.
difftool
,
gnur_output
,
fastr_output
]
...
@@ -218,13 +268,19 @@ class DirHTMLParser(HTMLParser):
...
@@ -218,13 +268,19 @@ class DirHTMLParser(HTMLParser):
self
.
files
.
append
(
name
)
self
.
files
.
append
(
name
)
class
ResultInfo
:
class
ResultInfo
:
def
__init__
(
self
,
date
,
cid
):
def
__init__
(
self
,
localdir
):
self
.
localdir
=
localdir
date
=
localdir
[
7
:
33
]
cid
=
localdir
[
34
:
74
]
self
.
date
=
datetime
.
strptime
(
date
,
"
%Y-%m-%d_%H:%M:%S.%f
"
)
self
.
date
=
datetime
.
strptime
(
date
,
"
%Y-%m-%d_%H:%M:%S.%f
"
)
self
.
cid
=
cid
self
.
cid
=
cid
def
__str__
(
self
):
def
__str__
(
self
):
return
"
date: {0}, id {1}
"
.
format
(
self
.
date
,
self
.
cid
)
return
"
date: {0}, id {1}
"
.
format
(
self
.
date
,
self
.
cid
)
def
__sortkey__
(
self
):
return
self
.
date
class
Result
:
class
Result
:
def
__init__
(
self
,
resultInfo
,
content
,
rawData
=
None
):
def
__init__
(
self
,
resultInfo
,
content
,
rawData
=
None
):
self
.
resultInfo
=
resultInfo
self
.
resultInfo
=
resultInfo
...
@@ -318,7 +374,7 @@ def _get_results(logdir):
...
@@ -318,7 +374,7 @@ def _get_results(logdir):
with
open
(
os
.
path
.
join
(
logdir
,
localdir
,
'
testlog
'
))
as
f
:
with
open
(
os
.
path
.
join
(
logdir
,
localdir
,
'
testlog
'
))
as
f
:
rawData
=
f
.
read
()
rawData
=
f
.
read
()
result_data
=
check_install
(
0
,
rawData
)[
1
]
result_data
=
check_install
(
0
,
rawData
)[
1
]
results
.
append
(
Result
(
ResultInfo
(
localdir
[
7
:
33
],
localdir
[
34
:
74
]
),
result_data
,
rawData
))
results
.
append
(
Result
(
ResultInfo
(
localdir
),
result_data
,
rawData
))
return
results
return
results
def
_build_pkgtable
(
results
):
def
_build_pkgtable
(
results
):
...
@@ -367,7 +423,8 @@ def get_local_dirs(logdir):
...
@@ -367,7 +423,8 @@ def get_local_dirs(logdir):
filelist
=
[]
filelist
=
[]
localdirs
=
os
.
listdir
(
logdir
)
localdirs
=
os
.
listdir
(
logdir
)
for
localdir
in
localdirs
:
for
localdir
in
localdirs
:
filelist
.
append
(
localdir
)
if
localdir
.
startswith
(
'
res
'
):
filelist
.
append
(
localdir
)
return
filelist
return
filelist
def
_is_result_dir
(
d
):
def
_is_result_dir
(
d
):
...
@@ -407,6 +464,9 @@ def rpt_getnew(args):
...
@@ -407,6 +464,9 @@ def rpt_getnew(args):
_add_common_args
(
parser
)
_add_common_args
(
parser
)
args
=
parser
.
parse_args
(
args
)
args
=
parser
.
parse_args
(
args
)
if
not
os
.
path
.
exists
(
args
.
logdir
):
_safe_mkdir
(
args
.
logdir
)
gatedirs
=
get_gate_dirs
(
gate_url
,
_is_result_dir
,
_strip_dotslash
)
gatedirs
=
get_gate_dirs
(
gate_url
,
_is_result_dir
,
_strip_dotslash
)
localdirs
=
get_local_dirs
(
args
.
logdir
)
localdirs
=
get_local_dirs
(
args
.
logdir
)
for
gatedir
in
gatedirs
:
for
gatedir
in
gatedirs
:
...
@@ -562,5 +622,6 @@ _commands = {
...
@@ -562,5 +622,6 @@ _commands = {
'
rpt-list-testdirs
'
:
[
rpt_list_testdirs
,
'
[options]
'
],
'
rpt-list-testdirs
'
:
[
rpt_list_testdirs
,
'
[options]
'
],
'
rpt-compare
'
:
[
rpt_compare
,
'
[options]
'
],
'
rpt-compare
'
:
[
rpt_compare
,
'
[options]
'
],
'
rpt-check-install-log
'
:
[
rpt_check_install_log
,
'
[options]
'
],
'
rpt-check-install-log
'
:
[
rpt_check_install_log
,
'
[options]
'
],
'
rpt-list-testdates
'
:
[
rpt_list_testdates
,
'
[options]
'
],
'
pkgtestanalyze
'
:
[
rpt_compare
,
'
[options]
'
],
'
pkgtestanalyze
'
:
[
rpt_compare
,
'
[options]
'
],
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment