1 ##############################################################################
2 # Copyright (c) 2016 Huawei Technologies Co.,Ltd.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
10 # Unittest for yardstick.benchmark.scenarios.storage.storperf.StorPerf
12 from __future__ import absolute_import
17 from oslo_serialization import jsonutils
19 from yardstick.benchmark.scenarios.storage import storperf
22 # pylint: disable=unused-argument
23 # disable this for now because I keep forgetting mock patch arg ordering
26 def mocked_requests_config_post(*args, **kwargs):
27 class MockResponseConfigPost(object):
29 def __init__(self, json_data, status_code):
30 self.content = json_data
31 self.status_code = status_code
33 return MockResponseConfigPost(
34 '{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622",'
35 '"stack_created": "false"}',
39 def mocked_requests_config_get(*args, **kwargs):
40 class MockResponseConfigGet(object):
42 def __init__(self, json_data, status_code):
43 self.content = json_data
44 self.status_code = status_code
46 return MockResponseConfigGet(
47 '{"stack_id": "dac27db1-3502-4300-b301-91c64e6a1622",'
48 '"stack_created": "true"}',
52 def mocked_requests_job_get(*args, **kwargs):
53 class MockResponseJobGet(object):
55 def __init__(self, json_data, status_code):
56 self.content = json_data
57 self.status_code = status_code
59 return MockResponseJobGet(
60 '{"Status": "Completed",\
61 "_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}',
65 def mocked_requests_job_post(*args, **kwargs):
66 class MockResponseJobPost(object):
68 def __init__(self, json_data, status_code):
69 self.content = json_data
70 self.status_code = status_code
72 return MockResponseJobPost('{"job_id": \
73 "d46bfb8c-36f4-4a40-813b-c4b4a437f728"}', 200)
76 def mocked_requests_job_delete(*args, **kwargs):
77 class MockResponseJobDelete(object):
79 def __init__(self, json_data, status_code):
80 self.content = json_data
81 self.status_code = status_code
83 return MockResponseJobDelete('{}', 200)
86 def mocked_requests_delete(*args, **kwargs):
87 class MockResponseDelete(object):
89 def __init__(self, json_data, status_code):
90 self.json_data = json_data
91 self.status_code = status_code
93 return MockResponseDelete('{}', 200)
96 def mocked_requests_delete_failed(*args, **kwargs):
97 class MockResponseDeleteFailed(object):
99 def __init__(self, json_data, status_code):
100 self.json_data = json_data
101 self.status_code = status_code
103 if args[0] == "http://172.16.0.137:5000/api/v1.0/configurations":
104 return MockResponseDeleteFailed('{"message": "Teardown failed"}', 400)
106 return MockResponseDeleteFailed('{}', 404)
109 class StorPerfTestCase(unittest.TestCase):
114 'ip': '172.16.0.137',
116 'key_filename': "mykey.key"
122 @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post',
123 side_effect=mocked_requests_config_post)
124 @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get',
125 side_effect=mocked_requests_config_get)
126 def test_successful_setup(self, mock_post, mock_get):
129 "public_network": 'ext-net',
134 "StorPerf_ip": "192.168.23.2",
143 s = storperf.StorPerf(args, self.ctx)
147 self.assertTrue(s.setup_done)
149 @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.post',
150 side_effect=mocked_requests_job_post)
151 @mock.patch('yardstick.benchmark.scenarios.storage.storperf.requests.get',
152 side_effect=mocked_requests_job_get)
154 'yardstick.benchmark.scenarios.storage.storperf.requests.delete',
155 side_effect=mocked_requests_job_delete)
156 def test_successful_run(self, mock_post, mock_get, mock_delete):
159 "public_network": 'ext-net',
164 "StorPerf_ip": "192.168.23.2",
173 s = storperf.StorPerf(args, self.ctx)
176 sample_output = '{"Status": "Completed",\
177 "_ssd_preconditioning.queue-depth.8.block-size.16384.duration": 6}'
179 expected_result = jsonutils.loads(sample_output)
183 self.assertEqual(self.result, expected_result)
186 'yardstick.benchmark.scenarios.storage.storperf.requests.delete',
187 side_effect=mocked_requests_delete)
188 def test_successful_teardown(self, mock_delete):
191 "public_network": 'ext-net',
196 "StorPerf_ip": "192.168.23.2",
197 "query_interval": 10,
205 s = storperf.StorPerf(args, self.ctx)
209 self.assertFalse(s.setup_done)
212 'yardstick.benchmark.scenarios.storage.storperf.requests.delete',
213 side_effect=mocked_requests_delete_failed)
214 def test_failed_teardown(self, mock_delete):
217 "public_network": 'ext-net',
222 "StorPerf_ip": "192.168.23.2",
223 "query_interval": 10,
231 s = storperf.StorPerf(args, self.ctx)
233 self.assertRaises(AssertionError, s.teardown(), self.result)