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: I9953019794ba53fcfcb20e32fecbe94da22c9565
This commit is contained in:
parent
ff3dc87d6b
commit
9832648353
@ -220,7 +220,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
|
||||
|
||||
|
||||
|
61
os_testr/tests/test_subunit_trace.py
Normal file
61
os_testr/tests/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 os_testr import subunit_trace
|
||||
from os_testr.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)
|
@ -10,3 +10,4 @@ sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3
|
||||
oslosphinx>=2.2.0 # Apache-2.0
|
||||
oslotest>=1.2.0 # Apache-2.0
|
||||
testscenarios>=0.4
|
||||
ddt>=0.4.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user