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
This commit is contained in:
@@ -190,7 +190,11 @@ def run_time():
|
|||||||
runtime = 0.0
|
runtime = 0.0
|
||||||
for k, v in RESULTS.items():
|
for k, v in RESULTS.items():
|
||||||
for test in v:
|
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
|
return runtime
|
||||||
|
|
||||||
|
|
||||||
|
0
tempest_lib/tests/cmd/__init__.py
Normal file
0
tempest_lib/tests/cmd/__init__.py
Normal file
61
tempest_lib/tests/cmd/test_subunit_trace.py
Normal file
61
tempest_lib/tests/cmd/test_subunit_trace.py
Normal file
@@ -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)
|
@@ -14,3 +14,4 @@ testrepository>=0.0.18
|
|||||||
testscenarios>=0.4
|
testscenarios>=0.4
|
||||||
testtools>=0.9.36,!=1.2.0
|
testtools>=0.9.36,!=1.2.0
|
||||||
mock>=1.0
|
mock>=1.0
|
||||||
|
ddt>=0.4.0
|
||||||
|
Reference in New Issue
Block a user