aboutsummaryrefslogtreecommitdiff
path: root/tests/test_base.py
diff options
context:
space:
mode:
authorDietmar Eggemann <dietmar.eggemann@arm.com>2014-12-11 20:28:45 +0000
committerJavi Merino <javi.merino@arm.com>2015-08-12 16:03:44 +0100
commitb42a50b19e4b99d1ccf1ee5d2478f958a07d5c20 (patch)
tree0c0961b6ac6378da1ff8ef78f79fea439ec32794 /tests/test_base.py
parent0ecdf2613fc993ca96385f15c709f5b6454a4cd6 (diff)
downloadtrappy-b42a50b19e4b99d1ccf1ee5d2478f958a07d5c20.tar.gz
cr2/thermal, base: factor out class Base
To be able to use cr2 for other class objects then thermal related one, put class Base into an extra file to split it from any thermal specific functionality. The test cases have been rearranged accordingly. Change-Id: I48a8e1d6be27bc595795a2602480da931b9cbf71 Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Diffstat (limited to 'tests/test_base.py')
-rw-r--r--tests/test_base.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/tests/test_base.py b/tests/test_base.py
new file mode 100644
index 0000000..62fa9d0
--- /dev/null
+++ b/tests/test_base.py
@@ -0,0 +1,142 @@
+#!/usr/bin/python
+
+import unittest
+import os
+import sys
+
+import utils_tests
+import cr2
+from cr2.base import Base
+from cr2.base import trace_parser_explode_array
+
+sys.path.append(os.path.join(utils_tests.TESTS_DIRECTORY, "..", "cr2"))
+
+class TestBaseMethods(unittest.TestCase):
+ """Test simple methods that don't need to set up a directory"""
+ def test_trace_parser_explode_array(self):
+ """Basic test of trace_parser_explode_array()"""
+
+ line = "cpus=0000000f freq=1400000 raw_cpu_power=189 load={3 2 12 2} power=14"
+ expected = "cpus=0000000f freq=1400000 raw_cpu_power=189 load0=3 load1=2 load2=12 load3=2 power=14"
+ array_lengths = {"load": 4}
+
+ result = trace_parser_explode_array(line, array_lengths)
+ self.assertEquals(result, expected)
+
+ def test_trace_parser_explode_array_nop(self):
+ """trace_parser_explode_array() returns the same string if there's no array in it"""
+
+ line = "cpus=0000000f freq=1400000 raw_cpu_power=189 load0=3 load1=2 load2=12 load3=2 power=14"
+ array_lengths = {"load": 0}
+
+ result = trace_parser_explode_array(line, array_lengths)
+ self.assertEquals(result, line)
+
+ def test_trace_parser_explode_array_2(self):
+ """trace_parser_explode_array() works if there's two arrays in the string"""
+
+ line = "cpus=0000000f freq=1400000 load={3 2 12 2} power=14 req_power={10 7 2 34}"
+ expected = "cpus=0000000f freq=1400000 load0=3 load1=2 load2=12 load3=2 power=14 req_power0=10 req_power1=7 req_power2=2 req_power3=34"
+ array_lengths = {'load': 4, 'req_power': 4}
+
+ result = trace_parser_explode_array(line, array_lengths)
+ self.assertEquals(result, expected)
+
+ def test_trace_parser_explode_array_diff_lengths(self):
+ """trace_parser_explode_array() expands arrays that are shorter than the expected length
+
+ trace_parser_explode_array() has to be able to deal with an
+ array of size 2 if we tell it in other parts of the trace it
+ is four.
+
+ """
+
+ line = "cpus=0000000f freq=1400000 load={3 2} power=14"
+ expected = "cpus=0000000f freq=1400000 load0=3 load1=2 load2=0 load3=0 power=14"
+ array_lengths = {'load': 4}
+
+ result = trace_parser_explode_array(line, array_lengths)
+ self.assertEquals(result, expected)
+
+class TestBase(utils_tests.SetupDirectory):
+ """Incomplete tests for the Base class"""
+
+ def __init__(self, *args, **kwargs):
+ super(TestBase, self).__init__(
+ ["trace.txt", "trace_empty.txt"],
+ *args,
+ **kwargs)
+
+ def test_get_trace_array_lengths(self):
+ """TestBase: InPower.get_trace_array_lengths()"""
+
+ in_data = """ kworker/4:1-397 [004] 720.741315: thermal_power_actor_cpu_get_dyn_power: cpus=000000f0 freq=1900000 raw_cpu_power=1259 load={1 2} power=61
+ kworker/4:1-397 [004] 720.741349: thermal_power_actor_cpu_get_dyn_power: cpus=0000000f freq=1400000 raw_cpu_power=189 load={1 3 4 89} power=14
+ kworker/4:1-397 [004] 720.841315: thermal_power_actor_cpu_get_dyn_power: cpus=000000f0 freq=1900000 raw_cpu_power=1259 load={1 2} power=61
+ kworker/4:1-397 [004] 720.841349: thermal_power_actor_cpu_get_dyn_power: cpus=0000000f freq=1400000 raw_cpu_power=189 load={} power=14
+"""
+ with open("trace.txt", "w") as fout:
+ fout.write(in_data)
+
+ base = Base(".", "thermal_power_actor_cpu_get_dyn_power")
+ lengths = base.get_trace_array_lengths("trace.txt")
+
+ self.assertEquals(len(lengths), 1)
+ self.assertEquals(lengths["load"], 4)
+
+ def test_parse_empty_array(self):
+ """TestBase: Test that trace that has an empty array creates a valid DataFrame"""
+
+ in_data = """ kworker/4:1-397 [004] 720.741315: thermal_power_actor_cpu_get_dyn_power: cpus=000000f0 freq=1900000 raw_cpu_power=1259 load={} power=61
+ kworker/4:1-397 [004] 720.741349: thermal_power_actor_cpu_get_dyn_power: cpus=0000000f freq=1400000 raw_cpu_power=189 load={} power=14"""
+ expected_columns = set(["cpus", "freq", "raw_cpu_power", "power"])
+
+ with open("trace.txt", "w") as fout:
+ fout.write(in_data)
+
+ base = Base(".", "thermal_power_actor_cpu_get_dyn_power")
+ dfr = base.data_frame
+
+ self.assertEquals(set(dfr.columns), expected_columns)
+ self.assertEquals(dfr["power"].iloc[0], 61)
+
+ def test_get_dataframe(self):
+ """TestBase: Thermal.data_frame["thermal_zone"] exists and
+ Thermal.data_frame["temp"][0] = 24000"""
+ dfr = cr2.Run().thermal.data_frame
+
+ self.assertTrue("thermal_zone" in dfr.columns)
+ self.assertEquals(dfr["temp"].iloc[0], 24000)
+
+ def test_write_csv(self):
+ """TestBase: Test that write_csv() creates a valid csv"""
+ from csv import DictReader
+
+ fname = "thermal.csv"
+ cr2.Run().thermal.write_csv(fname)
+
+ with open(fname) as fin:
+ csv_reader = DictReader(fin)
+
+ self.assertTrue("Time" in csv_reader.fieldnames)
+ self.assertTrue("temp" in csv_reader.fieldnames)
+
+ first_data = csv_reader.next()
+ self.assertEquals(first_data["Time"], "0.0")
+ self.assertEquals(first_data["temp"], "24000")
+
+ def test_normalize_time(self):
+ """TestBase: Test that normalize_time() normalizes the time of the trace"""
+ thrm = cr2.Run().thermal
+
+ last_prev_time = thrm.data_frame.index[-1]
+
+ basetime = thrm.data_frame.index[0]
+ thrm.normalize_time(basetime)
+
+ last_time = thrm.data_frame.index[-1]
+ expected_last_time = last_prev_time - basetime
+
+ self.assertEquals(round(thrm.data_frame.index[0], 7), 0)
+ self.assertEquals(round(last_time - expected_last_time, 7), 0)
+