diff options
Diffstat (limited to 'tests/fio_tests')
-rw-r--r-- | tests/fio_tests/__init__.py | 11 | ||||
-rw-r--r-- | tests/fio_tests/fio_invoker_test.py | 88 |
2 files changed, 99 insertions, 0 deletions
diff --git a/tests/fio_tests/__init__.py b/tests/fio_tests/__init__.py new file mode 100644 index 0000000..df29e18 --- /dev/null +++ b/tests/fio_tests/__init__.py @@ -0,0 +1,11 @@ +############################################################################## +# Copyright (c) 2017 Dell EMC and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +import logging + +logging.basicConfig(level=logging.DEBUG) diff --git a/tests/fio_tests/fio_invoker_test.py b/tests/fio_tests/fio_invoker_test.py new file mode 100644 index 0000000..4672651 --- /dev/null +++ b/tests/fio_tests/fio_invoker_test.py @@ -0,0 +1,88 @@ +############################################################################## +# Copyright (c) 2017 Dell EMC and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +from StringIO import StringIO +import json +import unittest + +from storperf.fio.fio_invoker import FIOInvoker + + +class Test(unittest.TestCase): + + simple_dictionary = {'Key': 'Value'} + + def exceptional_event(self, callback_id, metric): + self.exception_called = True + raise Exception + + def event(self, callback_id, metric): + self.metric = metric + + def setUp(self): + self.exception_called = False + self.metric = None + self.fio_invoker = FIOInvoker() + + def testStdoutValidJSON(self): + self.fio_invoker.register(self.event) + string = json.dumps(self.simple_dictionary, indent=4, sort_keys=True) + + output = StringIO(string + "\n") + self.fio_invoker.stdout_handler(output) + + self.assertEqual(self.simple_dictionary, self.metric) + + def testStdoutValidJSONWithFIOOutput(self): + self.fio_invoker.register(self.event) + string = json.dumps(self.simple_dictionary, indent=4, sort_keys=True) + terminating = "fio: terminating on signal 2\n" + output = StringIO(terminating + string + "\n") + self.fio_invoker.stdout_handler(output) + + self.assertEqual(self.simple_dictionary, self.metric) + + def testStdoutNoJSON(self): + self.fio_invoker.register(self.event) + string = "{'key': 'value'}" + + output = StringIO(string + "\n") + self.fio_invoker.stdout_handler(output) + + self.assertEqual(None, self.metric) + + def testStdoutInvalidJSON(self): + self.fio_invoker.register(self.event) + string = "{'key':\n}" + + output = StringIO(string + "\n") + self.fio_invoker.stdout_handler(output) + + self.assertEqual(None, self.metric) + + def testStdoutAfterTerminated(self): + self.fio_invoker.register(self.event) + string = json.dumps(self.simple_dictionary, indent=4, sort_keys=True) + + self.fio_invoker.terminated = True + output = StringIO(string + "\n") + self.fio_invoker.stdout_handler(output) + + self.assertEqual(None, self.metric) + + def testStdoutCallbackException(self): + self.fio_invoker.register(self.exceptional_event) + self.fio_invoker.register(self.event) + string = json.dumps(self.simple_dictionary, indent=4, sort_keys=True) + + output = StringIO(string + "\n") + self.fio_invoker.stdout_handler(output) + + self.assertEqual(self.simple_dictionary, self.metric) + self.assertEqual(self.exception_called, True) |