summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCédric Ollivier <cedric.ollivier@orange.com>2017-02-13 13:34:34 +0100
committerCédric Ollivier <cedric.ollivier@orange.com>2017-02-13 13:51:48 +0100
commit1e60ed4a402d579675fbf122702a5b8fd3225e3a (patch)
treeda38eca31e50b4d2cafe0e579682e9be5a5a16ff
parent00bf0cae0160ff8318a455bd0dc80911a8a1d707 (diff)
Add can_dump_request_to_file decorator
can_dump_request_to_file can be called to dump any request data to a local file as defined by test_db_url. If its scheme is file, Session.send() is patched. Else the behavior is kept unchanged. Change-Id: Id219dad274b5f02a05259a2ed13e882c04eea7b4 Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
-rw-r--r--functest/utils/decorators.py36
-rw-r--r--functest/utils/functest_utils.py2
2 files changed, 38 insertions, 0 deletions
diff --git a/functest/utils/decorators.py b/functest/utils/decorators.py
new file mode 100644
index 000000000..99bcef3e6
--- /dev/null
+++ b/functest/utils/decorators.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+import mock
+import requests.sessions
+import urlparse
+
+
+def can_dump_request_to_file(method):
+
+ def dump_preparedrequest(request, **kwargs):
+ parseresult = urlparse.urlparse(request.url)
+ if parseresult.scheme == "file":
+ with open(parseresult.path.replace('/results', ''), 'a') as f:
+ headers = ""
+ for key in request.headers:
+ headers += key + " " + request.headers[key] + "\n"
+ message = "{} {}\n{}\n{}\n\n\n".format(
+ request.method, request.url, headers, request.body)
+ f.write(message)
+ return mock.Mock()
+
+ def patch_request(method, url, **kwargs):
+ with requests.sessions.Session() as session:
+ parseresult = urlparse.urlparse(url)
+ if parseresult.scheme == "file":
+ with mock.patch.object(
+ session, 'send', side_effect=dump_preparedrequest):
+ return session.request(method=method, url=url, **kwargs)
+ else:
+ return session.request(method=method, url=url, **kwargs)
+
+ def hook(*args, **kwargs):
+ with mock.patch('requests.api.request', side_effect=patch_request):
+ return method(*args, **kwargs)
+
+ return hook
diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py
index 23a51ff23..12d8e902f 100644
--- a/functest/utils/functest_utils.py
+++ b/functest/utils/functest_utils.py
@@ -23,6 +23,7 @@ import requests
import yaml
from git import Repo
+from functest.utils import decorators
import functest.utils.functest_logger as ft_logger
logger = ft_logger.Logger("functest_utils").getLogger()
@@ -182,6 +183,7 @@ def logger_test_results(project, case_name, status, details):
'd': details})
+@decorators.can_dump_request_to_file
def push_results_to_db(project, case_name,
start_date, stop_date, criteria, details):
"""