2014-06-23 13:56:08

by Mkrtchyan, Tigran

[permalink] [raw]
Subject: beatify pynfs and CI integration

Two small patches:

One allows to map nfs requests to pynfs tests based on tags.
Second groups test results by test module, which makes generated
output to look like regular junit report. This nicely fits into
any modern CI system.



2014-06-23 13:56:12

by Mkrtchyan, Tigran

[permalink] [raw]
Subject: [PATCH 2/2] group junit like output by filenames

Signed-off-by: Tigran Mkrtchyan <[email protected]>
---
nfs4.1/testmod.py | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/nfs4.1/testmod.py b/nfs4.1/testmod.py
index 661aed0..32f51a9 100644
--- a/nfs4.1/testmod.py
+++ b/nfs4.1/testmod.py
@@ -97,10 +97,11 @@ class Test(object):
_funct_result = Result(DEP_FUNCT, default=True)
__re = re.compile(r'(\D*)(\d*)(.*)')

- def __init__(self, function, module=""):
+ def __init__(self, suite, function, module=""):
"""Needs function to be run"""
self.runtest = function
self.name = function.__name__
+ self.suite = suite
if module:
self.fullname = module.split('.')[-1] + '.' + self.name
else:
@@ -347,7 +348,7 @@ def createtests(testdir):
for attr in dir(mod):
if attr.startswith("test"):
f = getattr(mod, attr)
- tests.append(Test(f, testmod))
+ tests.append(Test(testfile, f, testmod))
# Reduce doc string info into format easier to work with
used_codes = {}
flag_dict = {}
@@ -451,8 +452,8 @@ def xml_printresults(tests, file_name, suite='all'):
for t in tests:
testcase = doc.createElement("testcase")
testsuite.appendChild(testcase)
- testcase.setAttribute("name", str(t))
- testcase.setAttribute("classname", suite)
+ testcase.setAttribute("name", t.name)
+ testcase.setAttribute("classname", t.suite)
testcase.setAttribute("time", str(t.time_taken))

total_time += t.time_taken
--
1.9.3


2014-06-23 13:56:08

by Mkrtchyan, Tigran

[permalink] [raw]
Subject: [PATCH 1/2] nfs4client: add test name as a compound tag

allowes to easy trace tests, e.q: [st_verify.py:_try_mand]

Signed-off-by: Tigran Mkrtchyan <[email protected]>
---
nfs4.1/nfs4client.py | 11 +++++++++++
1 file changed, 11 insertions(+)

diff --git a/nfs4.1/nfs4client.py b/nfs4.1/nfs4client.py
index 6912565..c536897 100644
--- a/nfs4.1/nfs4client.py
+++ b/nfs4.1/nfs4client.py
@@ -9,6 +9,8 @@ import nfs_ops
import time, struct
import threading
import hmac
+import inspect
+from os.path import basename
from nfs4commoncode import CBCompoundState as CompoundState, \
cb_encode_status as encode_status, \
cb_encode_status_by_name as encode_status_by_name
@@ -82,6 +84,7 @@ class NFS4Client(rpc.Client, rpc.Server):
return self.send_call(pipe, 1, p.get_buffer(), credinfo)

def compound(self, *args, **kwargs):
+ self.tag = self.create_tag()
xid = self.compound_async(*args, **kwargs)
pipe = kwargs.get("pipe", None)
res = self.listen(xid, pipe=pipe)
@@ -292,6 +295,14 @@ class NFS4Client(rpc.Client, rpc.Server):
s.compound([op4.reclaim_complete(FALSE)])
return s

+ def create_tag(self):
+ current_stack = inspect.stack()
+ stackid = 0
+ while basename(current_stack[stackid][1]) == 'environment.py' or basename(current_stack[stackid][1]) == 'nfs4client.py':
+ stackid = stackid + 1
+ test_name = '%s:%s' % (basename(current_stack[stackid][1]), current_stack[stackid][3])
+ return test_name
+
class ClientStateProtection(object):
def __init__(self, p_res, p_arg):
self.type = p_res.spr_how
--
1.9.3


2014-07-23 19:24:35

by J. Bruce Fields

[permalink] [raw]
Subject: Re: beatify pynfs and CI integration

On Mon, Jun 23, 2014 at 03:56:01PM +0200, Tigran Mkrtchyan wrote:
> Two small patches:
>
> One allows to map nfs requests to pynfs tests based on tags.
> Second groups test results by test module, which makes generated
> output to look like regular junit report. This nicely fits into
> any modern CI system.

OK, applied.

--b.