Add functional tests for HTML report 03/61203/12
authorPatrice Buriez <patrice.buriez@intel.com>
Fri, 9 Nov 2018 10:42:27 +0000 (11:42 +0100)
committerPatrice Buriez <patrice.buriez@intel.com>
Fri, 21 Dec 2018 18:06:01 +0000 (19:06 +0100)
JIRA: YARDSTICK-1367
Topic: report/html_table (9 of 12)

Change-Id: I987203c4b3f49fb0f205e9b4c71bcbf4618041a0
Signed-off-by: Emma Foley <emma.l.foley@intel.com>
Signed-off-by: Patrice Buriez <patrice.buriez@intel.com>
yardstick/tests/functional/benchmark/core/__init__.py [new file with mode: 0644]
yardstick/tests/functional/benchmark/core/test_report.py [new file with mode: 0644]

diff --git a/yardstick/tests/functional/benchmark/core/__init__.py b/yardstick/tests/functional/benchmark/core/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/yardstick/tests/functional/benchmark/core/test_report.py b/yardstick/tests/functional/benchmark/core/test_report.py
new file mode 100644 (file)
index 0000000..401b97d
--- /dev/null
@@ -0,0 +1,100 @@
+##############################################################################
+# Copyright (c) 2018 Intel Corporation.
+#
+# 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 ast
+import tempfile
+import unittest
+
+import mock
+from six.moves import configparser
+
+from yardstick.benchmark import core
+from yardstick.benchmark.core import report
+from yardstick.cmd.commands import change_osloobj_to_paras
+
+
+GOOD_YAML_NAME = 'fake_name'
+GOOD_TASK_ID = "9cbe74b6-df09-4535-8bdc-dc3a43b8a4e2"
+GOOD_DB_FIELDKEYS = [
+    {u'fieldKey': u'metric1', u'fieldType': u'integer'},
+    {u'fieldKey': u'metric2', u'fieldType': u'integer'},
+    {u'fieldKey': u'metric3', u'fieldType': u'integer'},
+    {u'fieldKey': u'metric4', u'fieldType': u'integer'},
+]
+GOOD_DB_METRICS = [
+    {u'time': u'2018-08-20T16:49:26.372662016Z',
+     u'metric1': 1, u'metric2': 0, u'metric3': 8, u'metric4': 5},
+    {u'time': u'2018-08-20T16:49:27.374208000Z',
+     u'metric1': 1, u'metric2': 1, u'metric3': 5, u'metric4': 4},
+    {u'time': u'2018-08-20T16:49:28.375742976Z',
+     u'metric1': 2, u'metric2': 2, u'metric3': 3, u'metric4': 3},
+    {u'time': u'2018-08-20T16:49:29.377299968Z',
+     u'metric1': 3, u'metric2': 3, u'metric3': 2, u'metric4': 2},
+    {u'time': u'2018-08-20T16:49:30.378252032Z',
+     u'metric1': 5, u'metric2': 4, u'metric3': 1, u'metric4': 1},
+    {u'time': u'2018-08-20T16:49:30.379359421Z',
+     u'metric1': 8, u'metric2': 5, u'metric3': 1, u'metric4': 0},
+]
+
+yardstick_config = """
+[DEFAULT]
+dispatcher = influxdb
+"""
+
+
+def my_query(query_sql):
+    get_fieldkeys_cmd = 'show field keys'
+    get_metrics_cmd = 'select * from'
+
+    if get_fieldkeys_cmd in query_sql:
+        return GOOD_DB_FIELDKEYS
+    elif get_metrics_cmd in query_sql:
+        return GOOD_DB_METRICS
+    return []
+
+
+class ReportTestCase(unittest.TestCase):
+
+    @mock.patch.object(report.influx, 'query', new=my_query)
+    @mock.patch.object(configparser.ConfigParser,
+        'read', side_effect=mock.mock_open(read_data=yardstick_config))
+    def test_report_generate_nsb_simple(self, *args):
+        tmpfile = tempfile.NamedTemporaryFile(delete=True)
+
+        args = core.Param({"task_id": [GOOD_TASK_ID], "yaml_name": [GOOD_YAML_NAME]})
+        params = change_osloobj_to_paras(args)
+
+        with mock.patch.object(report.consts, 'DEFAULT_HTML_FILE', tmpfile.name):
+            report.Report().generate_nsb(params)
+
+        with open(tmpfile.name) as f:
+            for l in f.readlines():
+                 if " arr = {" in l:
+                     arr_act = ast.literal_eval(l.strip()[6:-1])
+                 elif " jstree_data = [" in l:
+                     jstree_data_act = ast.literal_eval(l.strip()[14:-1])
+
+        arr_exp = {
+            'Timestamp':
+                ['16:49:26.372662', '16:49:27.374208', '16:49:28.375742',
+                 '16:49:29.377299', '16:49:30.378252', '16:49:30.379359'],
+            'metric1': [1, 1, 2, 3, 5, 8],
+            'metric2': [0, 1, 2, 3, 4, 5],
+            'metric3': [8, 5, 3, 2, 1, 1],
+            'metric4': [5, 4, 3, 2, 1, 0],
+        }
+        jstree_data_exp = [
+            {'parent': '#', 'text': 'metric1', 'id': 'metric1'},
+            {'parent': '#', 'text': 'metric2', 'id': 'metric2'},
+            {'parent': '#', 'text': 'metric3', 'id': 'metric3'},
+            {'parent': '#', 'text': 'metric4', 'id': 'metric4'},
+        ]
+
+        self.assertEqual(arr_exp, arr_act)
+        self.assertEqual(jstree_data_exp, jstree_data_act)