Change the parser handling of perf keyvals to bypass any non-numeric values.
MySQL will interpret those as zero when we really don't want to include values like
NaN at all.
This also adds some unit tests for this function and refactors the function.
Risk: Low
Visibility: Non-numeric perf values will no longer get written into the DB.
Signed-off-by: John Admanski <jadmanski@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@3424 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/tko/parsers/version_1_unittest.py b/tko/parsers/version_1_unittest.py
index c0e1fad..5110fe8 100644
--- a/tko/parsers/version_1_unittest.py
+++ b/tko/parsers/version_1_unittest.py
@@ -211,6 +211,42 @@
self.assertEquals(None, line.get_timestamp())
+class iteration_parse_line_into_dicts(unittest.TestCase):
+ def parse_line(self, line):
+ attr, perf = {}, {}
+ version_1.iteration.parse_line_into_dicts(line, attr, perf)
+ return attr, perf
+
+
+ def test_perf_entry(self):
+ result = self.parse_line("perf-val{perf}=173")
+ self.assertEqual(({}, {"perf-val": 173}), result)
+
+
+ def test_attr_entry(self):
+ result = self.parse_line("attr-val{attr}=173")
+ self.assertEqual(({"attr-val": "173"}, {}), result)
+
+
+ def test_untagged_is_perf(self):
+ result = self.parse_line("untagged=678.5")
+ self.assertEqual(({}, {"untagged": 678.5}), result)
+
+
+ def test_invalid_tag_ignored(self):
+ result = self.parse_line("bad-tag{invalid}=56")
+ self.assertEqual(({}, {}), result)
+
+
+ def test_non_numeric_perf_ignored(self):
+ result = self.parse_line("perf-val{perf}=NaN")
+ self.assertEqual(({}, {}), result)
+
+
+ def test_non_numeric_untagged_ignored(self):
+ result = self.parse_line("untagged=NaN")
+ self.assertEqual(({}, {}), result)
+
class DummyAbortTestCase(unittest.TestCase):
def setUp(self):