Completed
Push — add-times ( 93a8d2 )
by Valentin
02:30
created

tests.HttpTest.testTimes()   A

Complexity

Conditions 1

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

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