Completed
Push — master ( 39535f...23b608 )
by Thomas
9s
created

tests.HttpTest._get_test_times_trace_item()   A

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 1
Metric Value
cc 1
dl 0
loc 9
ccs 8
cts 8
cp 1
crap 1
rs 9.6666
1 1
import sys
2 1
import time
3
4 1
from ppp_libmodule.tests import PPPTestCase
5 1
from ppp_libmodule.http import HttpRequestHandler
6 1
from ppp_libmodule import shortcuts
7
8 1
from ppp_datamodel.nodes import Triple as T
9 1
from ppp_datamodel.nodes import Missing as M
10 1
from ppp_datamodel.nodes import Missing as R
11 1
from ppp_datamodel.nodes import List as L
12 1
from ppp_datamodel.communication import Response, TraceItem
13
14 1
def predicate(node):
15 1
    if node == T(M(), M(), M()):
16 1
        return R('foo')
17 1
    elif node == R('foo'):
18 1
        return R('bar')
19 1
    elif node == M():
20
        return node
21 1
    elif node == L([]):
22 1
        return node
23
    else:
24
        assert False, node
25
26 1
class RequestHandler:
27 1
    def __init__(self, request):
28 1
        self.request = request
29
30 1
    def answer(self):
31 1
        tree = self.request.tree.traverse(predicate)
32 1
        if tree != self.request.tree:
33
            # If we have modified the tree, it is relevant to return it
34 1
            return [shortcuts.build_answer(self.request, tree, {}, 'test')]
35
        else:
36
            # Otherwise, we have nothing interesting to say.
37
            return []
38
39 1
def app(environ, start_response):
40
    """Function called by the WSGI server."""
41 1
    r = HttpRequestHandler(environ, start_response, RequestHandler).dispatch()
42 1
    return r
43
44 1
class HttpTest(PPPTestCase(app)):
45 1
    def testWorking(self):
46 1
        t = T(M(), M(), M())
47 1
        q = {'id': '1', 'language': 'en', 'tree': t.as_dict(),
48
              'measures': {}, 'trace': []}
49 1
        self.assertResponse(q, [Response('en', R('bar'), {},
50
            [TraceItem('test', R('bar'), {})])])
51
52 1
    def _get_test_times_trace_item(self):
53 1
        t = T(M(), M(), M())
54 1
        q = {'id': '1', 'language': 'en', 'tree': t.as_dict(),
55
              'measures': {}, 'trace': []}
56 1
        responses = self.request(q)
57 1
        self.assertEqual(len(responses), 1, responses)
58 1
        response = responses[0]
59 1
        self.assertEqual(len(response.trace), 1, response.trace)
60 1
        return response.trace[0]
61
62 1
    if sys.version_info >= (3, 3):
63 1
        def testTimes(self):
64 1
            trace_item = self._get_test_times_trace_item()
65
66 1
            self.assertEqual(set(trace_item.times), {'start', 'end', 'cpu'})
67
68 1
            self.assertGreater(trace_item.times['cpu'], 0.)
69
            # The following may fail on a very slow system.
70 1
            self.assertLess(trace_item.times['cpu'], 1.)
71 1
            self.assertAlmostEqual(trace_item.times['start'], time.time(), delta=1.)
72 1
            self.assertAlmostEqual(trace_item.times['end'], time.time(), delta=1.)
73
    else:
74
        def testTimes(self):
75
            trace_item = self._get_test_times_trace_item()
76
77
            self.assertEqual(set(trace_item.times), {'start', 'end'})
78
79
            # The following may fail on a very slow system.
80
            self.assertAlmostEqual(trace_item.times['start'], time.time(), delta=1.)
81
            self.assertAlmostEqual(trace_item.times['end'], time.time(), delta=1.)
82