1 ##############################################################################
2 # Copyright (c) 2015 Ericsson AB and others.
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.fio.Fio
12 from __future__ import absolute_import
18 from oslo_serialization import jsonutils
20 from yardstick.benchmark.scenarios.storage import fio
23 @mock.patch('yardstick.benchmark.scenarios.storage.fio.ssh')
24 class FioTestCase(unittest.TestCase):
31 'key_filename': 'mykey.key'
34 self.sample_output = {
35 'read': 'fio_read_sample_output.json',
36 'write': 'fio_write_sample_output.json',
37 'rw': 'fio_rw_sample_output.json'
40 def test_fio_successful_setup(self, mock_ssh):
43 'filename': '/home/ubuntu/data.raw',
48 args = {'options': options}
49 p = fio.Fio(args, self.ctx)
52 mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
53 self.assertIsNotNone(p.client)
54 self.assertTrue(p.setup_done)
56 def test_fio_job_file_successful_setup(self, mock_ssh):
59 'job_file': 'job_file.ini',
60 'directory': '/FIO_Test'
62 args = {'options': options}
63 p = fio.Fio(args, self.ctx)
66 mock_ssh.SSH.from_node().execute.return_value = (0, '', '')
67 self.assertIsNotNone(p.client)
68 self.assertTrue(p.setup_done)
70 def test_fio_successful_no_sla(self, mock_ssh):
73 'filename': '/home/ubuntu/data.raw',
78 args = {'options': options}
79 p = fio.Fio(args, self.ctx)
82 p.client = mock_ssh.SSH.from_node()
84 sample_output = self._read_sample_output(self.sample_output['rw'])
85 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
89 expected_result = '{"read_bw": 83888, "read_iops": 20972,' \
90 '"read_lat": 236.8, "write_bw": 84182, "write_iops": 21045,'\
91 '"write_lat": 233.55}'
92 expected_result = jsonutils.loads(expected_result)
93 self.assertEqual(result, expected_result)
95 def test_fio_successful_read_no_sla(self, mock_ssh):
98 'filename': '/home/ubuntu/data.raw',
103 args = {'options': options}
104 p = fio.Fio(args, self.ctx)
107 p.client = mock_ssh.SSH.from_node()
109 sample_output = self._read_sample_output(self.sample_output['read'])
110 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
114 expected_result = '{"read_bw": 36113, "read_iops": 9028,' \
116 expected_result = jsonutils.loads(expected_result)
117 self.assertEqual(result, expected_result)
119 def test_fio_successful_write_no_sla(self, mock_ssh):
122 'filename': '/home/ubuntu/data.raw',
127 args = {'options': options}
128 p = fio.Fio(args, self.ctx)
131 p.client = mock_ssh.SSH.from_node()
133 sample_output = self._read_sample_output(self.sample_output['write'])
134 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
138 expected_result = '{"write_bw": 35107, "write_iops": 8776,'\
139 '"write_lat": 111.74}'
140 expected_result = jsonutils.loads(expected_result)
141 self.assertEqual(result, expected_result)
143 def test_fio_successful_lat_sla(self, mock_ssh):
146 'filename': '/home/ubuntu/data.raw',
153 'sla': {'write_lat': 300.1}
155 p = fio.Fio(args, self.ctx)
158 p.client = mock_ssh.SSH.from_node()
160 sample_output = self._read_sample_output(self.sample_output['rw'])
161 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
165 expected_result = '{"read_bw": 83888, "read_iops": 20972,' \
166 '"read_lat": 236.8, "write_bw": 84182, "write_iops": 21045,'\
167 '"write_lat": 233.55}'
168 expected_result = jsonutils.loads(expected_result)
169 self.assertEqual(result, expected_result)
171 def test_fio_unsuccessful_lat_sla(self, mock_ssh):
174 'filename': '/home/ubuntu/data.raw',
181 'sla': {'write_lat': 200.1}
183 p = fio.Fio(args, self.ctx)
186 p.client = mock_ssh.SSH.from_node()
188 sample_output = self._read_sample_output(self.sample_output['rw'])
189 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
190 self.assertRaises(AssertionError, p.run, result)
192 def test_fio_successful_bw_iops_sla(self, mock_ssh):
195 'filename': '/home/ubuntu/data.raw',
202 'sla': {'read_iops': 20000}
204 p = fio.Fio(args, self.ctx)
207 p.client = mock_ssh.SSH.from_node()
209 sample_output = self._read_sample_output(self.sample_output['rw'])
210 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
214 expected_result = '{"read_bw": 83888, "read_iops": 20972,' \
215 '"read_lat": 236.8, "write_bw": 84182, "write_iops": 21045,'\
216 '"write_lat": 233.55}'
217 expected_result = jsonutils.loads(expected_result)
218 self.assertEqual(result, expected_result)
220 def test_fio_unsuccessful_bw_iops_sla(self, mock_ssh):
223 'filename': '/home/ubuntu/data.raw',
230 'sla': {'read_iops': 30000}
232 p = fio.Fio(args, self.ctx)
235 p.client = mock_ssh.SSH.from_node()
237 sample_output = self._read_sample_output(self.sample_output['rw'])
238 mock_ssh.SSH.from_node().execute.return_value = (0, sample_output, '')
239 self.assertRaises(AssertionError, p.run, result)
241 def test_fio_unsuccessful_script_error(self, mock_ssh):
244 'filename': '/home/ubuntu/data.raw',
249 args = {'options': options}
250 p = fio.Fio(args, self.ctx)
253 p.client = mock_ssh.SSH.from_node()
255 mock_ssh.SSH.from_node().execute.return_value = (1, '', 'FOOBAR')
256 self.assertRaises(RuntimeError, p.run, result)
258 def _read_sample_output(self, file_name):
259 curr_path = os.path.dirname(os.path.abspath(__file__))
260 output = os.path.join(curr_path, file_name)
261 with open(output) as f:
262 sample_output = f.read()