summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bechtold <tbechtold@suse.com>2015-04-17 15:55:11 +0200
committerThomas Bechtold <tbechtold@suse.com>2015-04-17 15:57:51 +0200
commitd118faf43a05381362695d3c074678130e53119d (patch)
treeb613f8dcfe0a6f2d1738e82a2793b370ffee1ea5
parent5b7a6f5a9c4692933c82d0454c26bf9b018f1fcd (diff)
downloadtempest-lib-d118faf43a05381362695d3c074678130e53119d.tar.gz
Fix ValueError in subunit_trace
When a subunit stream for a testcase doesn't contain start end enddate, the duration can't be calculated which leads to a: ValueError: could not convert string to float Check now if the duration is an empty string and add basic test coverage based on ddt for the subunit_trace command. Change-Id: I6fdc8d283e67becbecf58b7779e33271db048a73
-rwxr-xr-xtempest_lib/cmd/subunit_trace.py6
-rw-r--r--tempest_lib/tests/cmd/__init__.py0
-rw-r--r--tempest_lib/tests/cmd/test_subunit_trace.py61
-rw-r--r--test-requirements.txt1
4 files changed, 67 insertions, 1 deletions
diff --git a/tempest_lib/cmd/subunit_trace.py b/tempest_lib/cmd/subunit_trace.py
index 5b69fb6..43bb275 100755
--- a/tempest_lib/cmd/subunit_trace.py
+++ b/tempest_lib/cmd/subunit_trace.py
@@ -190,7 +190,11 @@ def run_time():
runtime = 0.0
for k, v in RESULTS.items():
for test in v:
- runtime += float(get_duration(test['timestamps']).strip('s'))
+ test_dur = get_duration(test['timestamps']).strip('s')
+ # NOTE(toabctl): get_duration() can return an empty string
+ # which leads to a ValueError when casting to float
+ if test_dur:
+ runtime += float(test_dur)
return runtime
diff --git a/tempest_lib/tests/cmd/__init__.py b/tempest_lib/tests/cmd/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tempest_lib/tests/cmd/__init__.py
diff --git a/tempest_lib/tests/cmd/test_subunit_trace.py b/tempest_lib/tests/cmd/test_subunit_trace.py
new file mode 100644
index 0000000..c1653d2
--- /dev/null
+++ b/tempest_lib/tests/cmd/test_subunit_trace.py
@@ -0,0 +1,61 @@
+# Copyright 2015 SUSE Linux GmbH
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from datetime import datetime as dt
+
+from ddt import data
+from ddt import ddt
+from ddt import unpack
+from mock import patch
+
+from tempest_lib.cmd import subunit_trace
+from tempest_lib.tests import base
+
+
+@ddt
+class TestSubunitTrace(base.TestCase):
+
+ @data(([dt(2015, 4, 17, 22, 23, 14, 111111),
+ dt(2015, 4, 17, 22, 23, 14, 111111)],
+ "0.000000s"),
+ ([dt(2015, 4, 17, 22, 23, 14, 111111),
+ dt(2015, 4, 17, 22, 23, 15, 111111)],
+ "1.000000s"),
+ ([dt(2015, 4, 17, 22, 23, 14, 111111),
+ None],
+ ""))
+ @unpack
+ def test_get_durating(self, timestamps, expected_result):
+ self.assertEqual(subunit_trace.get_duration(timestamps),
+ expected_result)
+
+ @data(([dt(2015, 4, 17, 22, 23, 14, 111111),
+ dt(2015, 4, 17, 22, 23, 14, 111111)],
+ 0.0),
+ ([dt(2015, 4, 17, 22, 23, 14, 111111),
+ dt(2015, 4, 17, 22, 23, 15, 111111)],
+ 1.0),
+ ([dt(2015, 4, 17, 22, 23, 14, 111111),
+ None],
+ 0.0))
+ @unpack
+ def test_run_time(self, timestamps, expected_result):
+ patched_res = {
+ 0: [
+ {'timestamps': timestamps}
+ ]
+ }
+ with patch.dict(subunit_trace.RESULTS, patched_res, clear=True):
+ self.assertEqual(subunit_trace.run_time(), expected_result)
diff --git a/test-requirements.txt b/test-requirements.txt
index 158a921..2d695aa 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -14,3 +14,4 @@ testrepository>=0.0.18
testscenarios>=0.4
testtools>=0.9.36,!=1.2.0
mock>=1.0
+ddt>=0.4.0