summaryrefslogtreecommitdiffstats
path: root/tests/unit/api/test_server.py
blob: e9364d3df46b6828b661e46e334fc87e6f945ce7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import json
import time

import mock
import pytest

import qtip.api.cmd.server as server


def setup_module():
    server.add_routers()


@pytest.fixture
def app():
    return server.app


@pytest.fixture
def app_client(app):
    client = app.test_client()
    return client


def side_effect_sleep(sleep_time):
    time.sleep(sleep_time)


def side_effect_pass():
    pass


class TestClass:
    @pytest.mark.parametrize("body, expected", [
        ({'installer_type': 'fuel',
          'installer_ip': '10.20.0.2'},
         {'job_id': '',
          'installer_type': 'fuel',
          'installer_ip': '10.20.0.2',
          'pod_name': 'default',
          'suite_name': 'compute',
          'max_minutes': 60,
          'type': 'BM',
          'testdb_url': None,
          'node_name': None,
          'state': 'finished',
          'state_detail': [{'state': 'finished', 'benchmark': 'dhrystone_bm.yaml'},
                           {'state': 'finished', 'benchmark': 'whetstone_bm.yaml'},
                           {'state': 'finished', 'benchmark': 'ramspeed_bm.yaml'},
                           {'state': 'finished', 'benchmark': 'dpi_bm.yaml'},
                           {'state': 'finished', 'benchmark': 'ssl_bm.yaml'}],
          'result': 0}),
        ({'installer_type': 'fuel',
          'installer_ip': '10.20.0.2',
          'pod_name': 'default',
          'max_minutes': 20,
          'suite_name': 'compute',
          'type': 'VM',
          'benchmark_name': 'dhrystone_vm.yaml',
          'testdb_url': 'http://testresults.opnfv.org/test/api/v1',
          'node_name': 'zte-pod2'},
         {'job_id': '',
          'installer_type': 'fuel',
          'installer_ip': '10.20.0.2',
          'pod_name': 'default',
          'suite_name': 'compute',
          'max_minutes': 20,
          'type': 'VM',
          'testdb_url': 'http://testresults.opnfv.org/test/api/v1',
          'node_name': 'zte-pod2',
          'state': 'finished',
          'state_detail': [{u'state': u'finished', u'benchmark': u'dhrystone_vm.yaml'}],
          'result': 0})
    ])
    @mock.patch('qtip.utils.args_handler.prepare_and_run_benchmark')
    def test_post_get_delete_job_successful(self, mock_args_handler, app_client, body, expected):
        mock_args_handler.return_value = {'result': 0,
                                          'detail': {'host': [(u'10.20.6.14', {'unreachable': 0,
                                                                               'skipped': 13,
                                                                               'ok': 27,
                                                                               'changed': 26,
                                                                               'failures': 0}),
                                                              ('localhost', {'unreachable': 0,
                                                                             'skipped': 0,
                                                                             'ok': 6,
                                                                             'changed': 6,
                                                                             'failures': 0}),
                                                              (u'10.20.6.13', {'unreachable': 0,
                                                                               'skipped': 13,
                                                                               'ok': 27,
                                                                               'changed': 26,
                                                                               'failures': 0})]}}

        reply = app_client.post("/api/v1.0/jobs", data=body)
        print(reply.data)
        id = json.loads(reply.data)['job_id']
        expected['job_id'] = id
        post_process = ''
        while post_process != 'finished':
            get_reply = app_client.get("/api/v1.0/jobs/%s" % id)
            reply_data = json.loads(get_reply.data)
            post_process = reply_data['state']
            print(reply_data)
        assert len(filter(lambda x: reply_data[x] == expected[x], expected.keys())) == len(expected)
        delete_reply = app_client.delete("/api/v1.0/jobs/%s" % id)
        assert "successful" in delete_reply.data

    @pytest.mark.parametrize("body, expected", [
        ([{'installer_type': 'fuel',
           'installer_ip': '10.20.0.2'},
          {'installer_type': 'compass',
           'installer_ip': '192.168.20.50'}],
         ['job_id',
          'It already has one job running now!'])
    ])
    @mock.patch('qtip.utils.args_handler.prepare_and_run_benchmark',
                side_effect=[side_effect_sleep(0.5), side_effect_pass])
    def test_post_two_jobs_unsuccessful(self, mock_args_hanler, app_client, body, expected):
        reply_1 = app_client.post("/api/v1.0/jobs", data=body[0])
        reply_2 = app_client.post("/api/v1.0/jobs", data=body[1])
        assert expected[0] in json.loads(reply_1.data).keys()
        app_client.delete("/api/v1.0/jobs/%s" % json.loads(reply_1.data)['job_id'])
        assert expected[1] in json.dumps(reply_2.data)