summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGao Weitao <victor.gao@huawei.com>2019-03-04 00:48:41 +0000
committerGerrit Code Review <gerrit@onap.org>2019-03-04 00:48:41 +0000
commit91810def813d33d6e555e9b1909796440c53e378 (patch)
tree4ac808375554f214da14aa97ca60241bee504845
parent480cee41e7ebe28feb4fb77955afcd0f3295fba4 (diff)
parent946470e3a794cc98e2d5b20af74ae3e5dac7d315 (diff)
Merge "Allow multiple contexts per test case"
-rw-r--r--coverage.xml3820
-rw-r--r--tools/cover.awk25
-rw-r--r--tools/cover.sh80
3 files changed, 3821 insertions, 104 deletions
diff --git a/coverage.xml b/coverage.xml
new file mode 100644
index 0000000..eb42172
--- /dev/null
+++ b/coverage.xml
@@ -0,0 +1,3820 @@
+<?xml version="1.0" ?>
+<coverage branch-rate="0.3672" branches-covered="217" branches-valid="591" complexity="0" line-rate="0.5961" lines-covered="1936" lines-valid="3248" timestamp="1551614713461" version="4.4.2">
+ <!-- Generated by coverage.py: https://coverage.readthedocs.io -->
+ <!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
+ <sources>
+ <source>/home/devel/dev/onap/vnfsdk/dovetail-integration/vnftest</source>
+ </sources>
+ <packages>
+ <package branch-rate="0.01316" complexity="0" line-rate="0.2819" name=".">
+ <classes>
+ <class branch-rate="0.25" complexity="0" filename="__init__.py" line-rate="0.6389" name="__init__.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="33" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="45"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="51,53" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="0" number="59"/>
+ <line hits="0" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="62"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="main.py" line-rate="0" name="main.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="17"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="54"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,57" number="56"/>
+ <line hits="0" number="57"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="ssh.py" line-rate="0.2402" name="ssh.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="63"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="71"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="74"/>
+ <line hits="1" number="75"/>
+ <line hits="1" number="76"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="81"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="83,84" number="82"/>
+ <line hits="0" number="83"/>
+ <line hits="0" number="84"/>
+ <line hits="0" number="85"/>
+ <line hits="0" number="86"/>
+ <line hits="1" number="89"/>
+ <line hits="1" number="90"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="100"/>
+ <line hits="1" number="102"/>
+ <line hits="1" number="103"/>
+ <line hits="0" number="104"/>
+ <line hits="0" number="105"/>
+ <line hits="0" number="106"/>
+ <line hits="0" number="107"/>
+ <line hits="0" number="108"/>
+ <line hits="0" number="109"/>
+ <line hits="0" number="110"/>
+ <line hits="0" number="111"/>
+ <line hits="1" number="113"/>
+ <line hits="0" number="117"/>
+ <line hits="1" number="119"/>
+ <line hits="0" number="130"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="132,134" number="131"/>
+ <line hits="0" number="132"/>
+ <line hits="0" number="134"/>
+ <line hits="0" number="136"/>
+ <line hits="0" number="137"/>
+ <line hits="0" number="139"/>
+ <line hits="0" number="142"/>
+ <line hits="0" number="143"/>
+ <line hits="0" number="144"/>
+ <line hits="0" number="145"/>
+ <line hits="0" number="146"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="151,153" number="150"/>
+ <line hits="0" number="151"/>
+ <line hits="0" number="153"/>
+ <line hits="1" number="155"/>
+ <line hits="1" number="156"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="158,159" number="157"/>
+ <line hits="0" number="158"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="160,161" number="159"/>
+ <line hits="0" number="160"/>
+ <line hits="0" number="161"/>
+ <line hits="0" number="162"/>
+ <line hits="1" number="172"/>
+ <line hits="1" number="173"/>
+ <line hits="0" number="174"/>
+ <line hits="1" number="176"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="178,179" number="177"/>
+ <line hits="0" number="178"/>
+ <line hits="0" number="179"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="181,185" number="180"/>
+ <line hits="0" number="181"/>
+ <line hits="0" number="182"/>
+ <line hits="0" number="183"/>
+ <line hits="0" number="184"/>
+ <line hits="0" number="185"/>
+ <line hits="1" number="187"/>
+ <line hits="0" number="189"/>
+ <line hits="1" number="191"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="193,194" number="192"/>
+ <line hits="0" number="193"/>
+ <line hits="0" number="194"/>
+ <line hits="0" number="195"/>
+ <line hits="0" number="196"/>
+ <line hits="0" number="197"/>
+ <line hits="0" number="203"/>
+ <line hits="0" number="204"/>
+ <line hits="0" number="205"/>
+ <line hits="0" number="207"/>
+ <line hits="0" number="208"/>
+ <line hits="1" number="211"/>
+ <line hits="0" number="212"/>
+ <line hits="1" number="222"/>
+ <line hits="0" number="223"/>
+ <line hits="1" number="225"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,227" number="226"/>
+ <line hits="0" number="227"/>
+ <line hits="0" number="228"/>
+ <line hits="1" number="230"/>
+ <line hits="0" number="252"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="255,257" number="254"/>
+ <line hits="0" number="255"/>
+ <line hits="0" number="257"/>
+ <line hits="1" number="262"/>
+ <line hits="0" number="266"/>
+ <line hits="0" number="267"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="269,270" number="268"/>
+ <line hits="0" number="269"/>
+ <line hits="0" number="270"/>
+ <line hits="0" number="271"/>
+ <line hits="0" number="274"/>
+ <line hits="0" number="275"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="280,282" number="279"/>
+ <line hits="0" number="280"/>
+ <line hits="0" number="282"/>
+ <line hits="0" number="284"/>
+ <line hits="0" number="286"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="289,295" number="288"/>
+ <line hits="0" number="289"/>
+ <line hits="0" number="290"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="292,293" number="291"/>
+ <line hits="0" number="292"/>
+ <line hits="0" number="293"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="296,303" number="295"/>
+ <line hits="0" number="296"/>
+ <line hits="0" number="298"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="300,301" number="299"/>
+ <line hits="0" number="300"/>
+ <line hits="0" number="301"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="304,322" number="303"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="305,322" number="304"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="306,317" number="305"/>
+ <line hits="0" number="306"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="308,309" number="307"/>
+ <line hits="0" number="308"/>
+ <line hits="0" number="309"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="313,317" number="311"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="314,317" number="313"/>
+ <line hits="0" number="314"/>
+ <line hits="0" number="315"/>
+ <line hits="0" number="316"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="318,322" number="317"/>
+ <line hits="0" number="318"/>
+ <line hits="0" number="320"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="323,325" number="322"/>
+ <line hits="0" number="323"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="326,329" number="325"/>
+ <line hits="0" number="326"/>
+ <line hits="0" number="327"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="284,330" number="329"/>
+ <line hits="0" number="330"/>
+ <line hits="0" number="332"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="334,339" number="333"/>
+ <line hits="0" number="334"/>
+ <line hits="0" number="335"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="337,338" number="336"/>
+ <line hits="0" number="337"/>
+ <line hits="0" number="338"/>
+ <line hits="0" number="339"/>
+ <line hits="1" number="341"/>
+ <line hits="0" number="350"/>
+ <line hits="0" number="351"/>
+ <line hits="0" number="353"/>
+ <line hits="0" number="356"/>
+ <line hits="0" number="357"/>
+ <line hits="0" number="358"/>
+ <line hits="1" number="360"/>
+ <line hits="0" number="362"/>
+ <line hits="0" number="363"/>
+ <line hits="0" number="364"/>
+ <line hits="0" number="365"/>
+ <line hits="0" number="366"/>
+ <line hits="0" number="367"/>
+ <line hits="0" number="368"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="363,370" number="369"/>
+ <line hits="0" number="370"/>
+ <line hits="1" number="372"/>
+ <line hits="0" number="373"/>
+ <line hits="0" number="375"/>
+ <line hits="0" number="376"/>
+ <line hits="1" number="378"/>
+ <line hits="0" number="379"/>
+ <line hits="0" number="381"/>
+ <line hits="0" number="382"/>
+ <line hits="1" number="385"/>
+ <line hits="0" number="386"/>
+ <line hits="0" number="387"/>
+ <line hits="1" number="389"/>
+ <line hits="0" number="390"/>
+ <line hits="0" number="392"/>
+ <line hits="0" number="393"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="395,396" number="394"/>
+ <line hits="0" number="395"/>
+ <line hits="0" number="396"/>
+ <line hits="1" number="398"/>
+ <line hits="1" number="400"/>
+ <line hits="0" number="402"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="404,405" number="403"/>
+ <line hits="0" number="404"/>
+ <line hits="0" number="405"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="408,410" number="406"/>
+ <line hits="0" number="408"/>
+ <line hits="0" number="410"/>
+ <line hits="0" number="412"/>
+ <line hits="1" number="414"/>
+ <line hits="0" number="421"/>
+ <line hits="0" number="422"/>
+ <line hits="0" number="423"/>
+ <line hits="0" number="424"/>
+ <line hits="1" number="426"/>
+ <line hits="0" number="427"/>
+ <line hits="0" number="429"/>
+ <line hits="0" number="430"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,432" number="431"/>
+ <line hits="0" number="432"/>
+ <line hits="1" number="434"/>
+ <line hits="0" number="435"/>
+ <line hits="0" number="437"/>
+ <line hits="0" number="438"/>
+ <line hits="1" number="441"/>
+ <line hits="1" number="444"/>
+ <line hits="0" number="446"/>
+ <line hits="0" number="447"/>
+ <line hits="1" number="449"/>
+ <line hits="0" number="450"/>
+ <line hits="0" number="451"/>
+ <line hits="0" number="454"/>
+ <line hits="1" number="456"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,458" number="457"/>
+ <line hits="0" number="458"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,460" number="459"/>
+ <line hits="0" number="460"/>
+ <line hits="1" number="462"/>
+ <line hits="0" number="464"/>
+ <line hits="1" number="466"/>
+ <line hits="0" number="467"/>
+ <line hits="0" number="468"/>
+ <line hits="1" number="470"/>
+ <line hits="0" number="473"/>
+ <line hits="0" number="474"/>
+ <line hits="1" number="477"/>
+ <line hits="0" number="478"/>
+ <line hits="0" number="479"/>
+ <line hits="1" number="481"/>
+ <line hits="0" number="482"/>
+ <line hits="0" number="483"/>
+ <line hits="1" number="485"/>
+ <line hits="0" number="486"/>
+ <line hits="0" number="487"/>
+ <line hits="1" number="489"/>
+ <line hits="0" number="490"/>
+ <line hits="0" number="491"/>
+ <line hits="1" number="493"/>
+ <line hits="0" number="497"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0" complexity="0" line-rate="0" name="cmd">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="cmd/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0" complexity="0" filename="cmd/cli.py" line-rate="0" name="cli.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="17"/>
+ <line hits="0" number="21"/>
+ <line hits="0" number="22"/>
+ <line hits="0" number="23"/>
+ <line hits="0" number="24"/>
+ <line hits="0" number="26"/>
+ <line hits="0" number="27"/>
+ <line hits="0" number="28"/>
+ <line hits="0" number="30"/>
+ <line hits="0" number="31"/>
+ <line hits="0" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="53"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="55,60" number="54"/>
+ <line hits="0" number="55"/>
+ <line hits="0" number="56"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="54,58" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="60"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.2143" complexity="0" line-rate="0.178" name="cmd.commands">
+ <classes>
+ <class branch-rate="0.5" complexity="0" filename="cmd/commands/__init__.py" line-rate="0.75" name="__init__.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="1"/>
+ <line hits="1" number="2"/>
+ <line hits="1" number="5"/>
+ <line hits="1" number="6"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="7"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="9" number="8"/>
+ <line hits="0" number="9"/>
+ <line hits="1" number="10"/>
+ <line hits="1" number="13"/>
+ <line hits="1" number="15"/>
+ <line hits="0" number="16"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,exit" number="17"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="cmd/commands/env.py" line-rate="0" name="env.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="16"/>
+ <line hits="0" number="17"/>
+ <line hits="0" number="19"/>
+ <line hits="0" number="20"/>
+ <line hits="0" number="21"/>
+ <line hits="0" number="23"/>
+ <line hits="0" number="25"/>
+ <line hits="0" number="26"/>
+ <line hits="0" number="29"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="54"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="62"/>
+ <line hits="0" number="64"/>
+ <line hits="0" number="65"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="68,77" number="67"/>
+ <line hits="0" number="68"/>
+ <line hits="0" number="69"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="72,75" number="71"/>
+ <line hits="0" number="72"/>
+ <line hits="0" number="75"/>
+ <line hits="0" number="77"/>
+ <line hits="0" number="82"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="84,86" number="83"/>
+ <line hits="0" number="84"/>
+ <line hits="0" number="85"/>
+ <line hits="0" number="86"/>
+ <line hits="0" number="88"/>
+ <line hits="0" number="89"/>
+ <line hits="0" number="90"/>
+ <line hits="0" number="91"/>
+ <line hits="0" number="92"/>
+ <line hits="0" number="93"/>
+ <line hits="0" number="94"/>
+ <line hits="0" number="95"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="cmd/commands/plugin.py" line-rate="0" name="plugin.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="16"/>
+ <line hits="0" number="18"/>
+ <line hits="0" number="20"/>
+ <line hits="0" number="21"/>
+ <line hits="0" number="22"/>
+ <line hits="0" number="23"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="cmd/commands/report.py" line-rate="0" name="report.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="12"/>
+ <line hits="0" number="14"/>
+ <line hits="0" number="16"/>
+ <line hits="0" number="18"/>
+ <line hits="0" number="19"/>
+ <line hits="0" number="20"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="cmd/commands/runner.py" line-rate="1" name="runner.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="cmd/commands/step.py" line-rate="1" name="step.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="cmd/commands/task.py" line-rate="0" name="task.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="11"/>
+ <line hits="0" number="12"/>
+ <line hits="0" number="13"/>
+ <line hits="0" number="15"/>
+ <line hits="0" number="17"/>
+ <line hits="0" number="18"/>
+ <line hits="0" number="19"/>
+ <line hits="0" number="20"/>
+ <line hits="0" number="22"/>
+ <line hits="0" number="24"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="cmd/commands/testcase.py" line-rate="0" name="testcase.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="16"/>
+ <line hits="0" number="17"/>
+ <line hits="0" number="19"/>
+ <line hits="0" number="21"/>
+ <line hits="0" number="22"/>
+ <line hits="0" number="23"/>
+ <line hits="0" number="24"/>
+ <line hits="0" number="27"/>
+ <line hits="0" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="48,49" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.565" complexity="0" line-rate="0.6741" name="common">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="common/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0.5833" complexity="0" filename="common/constants.py" line-rate="0.8571" name="constants.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="37"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="39"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="51,52" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="54,57" number="53"/>
+ <line hits="0" number="54"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="57"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="58"/>
+ <line hits="1" number="59"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="60"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="0" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="74"/>
+ <line hits="1" number="75"/>
+ <line hits="0" number="76"/>
+ <line hits="0" number="78"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="81" number="80"/>
+ <line hits="0" number="81"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ <line hits="1" number="87"/>
+ <line hits="1" number="88"/>
+ <line hits="1" number="89"/>
+ <line hits="1" number="90"/>
+ <line hits="1" number="91"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="1" number="95"/>
+ <line hits="1" number="96"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="100"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="102"/>
+ <line hits="1" number="104"/>
+ <line hits="1" number="105"/>
+ <line hits="1" number="106"/>
+ <line hits="1" number="107"/>
+ <line hits="1" number="108"/>
+ <line hits="1" number="110"/>
+ <line hits="1" number="111"/>
+ <line hits="1" number="112"/>
+ <line hits="1" number="115"/>
+ <line hits="1" number="116"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="common/exceptions.py" line-rate="0.8421" name="exceptions.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="0" number="28"/>
+ <line hits="0" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="0" number="32"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="common/html_template.py" line-rate="1" name="html_template.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="13"/>
+ <line hits="1" number="137"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="common/httpClient.py" line-rate="0.8" name="httpClient.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="39"/>
+ <line hits="0" number="40"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="42,44" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="common/import_utils.py" line-rate="1" name="import_utils.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="14"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="27"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="32"/>
+ <line hits="1" number="36"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="common/openstack_utils.py" line-rate="0.4038" name="openstack_utils.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="43"/>
+ <line hits="0" number="44"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="47,50" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="54"/>
+ <line hits="0" number="55"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,60" number="59"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="61,64" number="60"/>
+ <line hits="0" number="61"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,65" number="64"/>
+ <line hits="0" number="65"/>
+ <line hits="1" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="1" number="74"/>
+ <line hits="0" number="75"/>
+ <line hits="0" number="76"/>
+ <line hits="0" number="77"/>
+ <line hits="0" number="78"/>
+ <line hits="1" number="81"/>
+ <line hits="0" number="82"/>
+ <line hits="0" number="83"/>
+ <line hits="0" number="84"/>
+ <line hits="0" number="85"/>
+ <line hits="0" number="86"/>
+ <line hits="0" number="88"/>
+ <line hits="0" number="89"/>
+ <line hits="0" number="90"/>
+ <line hits="1" number="93"/>
+ <line hits="0" number="94"/>
+ <line hits="0" number="97"/>
+ </lines>
+ </class>
+ <class branch-rate="0.8571" complexity="0" filename="common/process.py" line-rate="0.9412" name="process.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="33"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="exit" number="34"/>
+ <line hits="1" number="35"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="46"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="51"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="55" number="54"/>
+ <line hits="0" number="55"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="56"/>
+ <line hits="1" number="57"/>
+ <line hits="1" number="61"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="63"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="68"/>
+ <line hits="0" number="71"/>
+ <line hits="1" number="74"/>
+ <line hits="0" number="76"/>
+ <line hits="1" number="81"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="87"/>
+ <line hits="1" number="88"/>
+ <line hits="1" number="89"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="93" number="90"/>
+ <line hits="0" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="1" number="95"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="100"/>
+ <line hits="1" number="103"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="104"/>
+ <line hits="1" number="105"/>
+ <line hits="1" number="107"/>
+ <line hits="1" number="111"/>
+ <line hits="1" number="113"/>
+ <line hits="1" number="114"/>
+ <line hits="1" number="115"/>
+ <line hits="1" number="116"/>
+ <line hits="1" number="117"/>
+ <line hits="1" number="119"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="120"/>
+ <line hits="1" number="121"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="130" number="128"/>
+ <line hits="1" number="129"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="130"/>
+ <line hits="1" number="131"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="138"/>
+ <line hits="1" number="140"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="common/rest_client.py" line-rate="0.2321" name="rest_client.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="29"/>
+ <line hits="0" number="30"/>
+ <line hits="1" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,39" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="45"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="47,48" number="46"/>
+ <line hits="0" number="47"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="49,51" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="53"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="55,58" number="54"/>
+ <line hits="0" number="55"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="59"/>
+ <line hits="0" number="60"/>
+ <line hits="0" number="61"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,64" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="1" number="67"/>
+ <line hits="0" number="68"/>
+ <line hits="0" number="69"/>
+ <line hits="0" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="0" number="72"/>
+ <line hits="0" number="73"/>
+ <line hits="0" number="74"/>
+ <line hits="0" number="75"/>
+ <line hits="0" number="76"/>
+ <line hits="0" number="77"/>
+ <line hits="0" number="78"/>
+ <line hits="0" number="79"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,82" number="81"/>
+ <line hits="0" number="82"/>
+ </lines>
+ </class>
+ <class branch-rate="0.5" complexity="0" filename="common/task_template.py" line-rate="0.7586" name="task_template.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="24"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="35" number="32"/>
+ <line hits="0" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="55"/>
+ <line hits="1" number="56"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="60" number="59"/>
+ <line hits="0" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="62"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="67"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="76" number="71"/>
+ <line hits="1" number="73"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="77,78" number="76"/>
+ <line hits="0" number="77"/>
+ <line hits="0" number="78"/>
+ </lines>
+ </class>
+ <class branch-rate="0.6" complexity="0" filename="common/template_format.py" line-rate="0.84" name="template_format.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="24" number="22"/>
+ <line hits="0" number="24"/>
+ <line hits="1" number="26"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="29" number="28"/>
+ <line hits="0" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="50"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="57" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="63"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="72" number="68"/>
+ <line hits="1" number="71"/>
+ <line hits="0" number="72"/>
+ </lines>
+ </class>
+ <class branch-rate="0.5736" complexity="0" filename="common/utils.py" line-rate="0.6408" name="utils.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="53"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="54"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="56"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="58" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="59"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="64"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="70"/>
+ <line hits="1" number="73"/>
+ <line hits="0" number="74"/>
+ <line hits="0" number="75"/>
+ <line hits="0" number="76"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,78" number="77"/>
+ <line hits="0" number="78"/>
+ <line hits="1" number="81"/>
+ <line hits="1" number="82"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="84"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="86" number="85"/>
+ <line hits="0" number="86"/>
+ <line hits="1" number="89"/>
+ <line hits="0" number="90"/>
+ <line hits="0" number="91"/>
+ <line hits="0" number="93"/>
+ <line hits="0" number="95"/>
+ <line hits="1" number="98"/>
+ <line hits="0" number="99"/>
+ <line hits="0" number="101"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,103" number="102"/>
+ <line hits="0" number="103"/>
+ <line hits="0" number="104"/>
+ <line hits="1" number="107"/>
+ <line hits="0" number="108"/>
+ <line hits="0" number="109"/>
+ <line hits="0" number="111"/>
+ <line hits="1" number="114"/>
+ <line hits="0" number="115"/>
+ <line hits="0" number="116"/>
+ <line hits="1" number="119"/>
+ <line hits="0" number="120"/>
+ <line hits="0" number="121"/>
+ <line hits="1" number="124"/>
+ <line hits="0" number="125"/>
+ <line hits="0" number="127"/>
+ <line hits="0" number="128"/>
+ <line hits="0" number="129"/>
+ <line hits="0" number="130"/>
+ <line hits="0" number="131"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="134,136" number="133"/>
+ <line hits="0" number="134"/>
+ <line hits="0" number="136"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,141" number="137"/>
+ <line hits="0" number="138"/>
+ <line hits="0" number="139"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,145" number="141"/>
+ <line hits="0" number="145"/>
+ <line hits="1" number="148"/>
+ <line hits="0" number="149"/>
+ <line hits="0" number="150"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="153,154" number="152"/>
+ <line hits="0" number="153"/>
+ <line hits="0" number="154"/>
+ <line hits="1" number="157"/>
+ <line hits="0" number="158"/>
+ <line hits="0" number="160"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="163,164" number="162"/>
+ <line hits="0" number="163"/>
+ <line hits="0" number="164"/>
+ <line hits="1" number="167"/>
+ <line hits="1" number="168"/>
+ <line branch="true" condition-coverage="100% (3/3)" hits="1" number="171"/>
+ <line hits="1" number="173"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="175"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="176"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="177"/>
+ <line hits="1" number="178"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="180"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="181"/>
+ <line hits="1" number="182"/>
+ <line hits="1" number="184"/>
+ <line hits="1" number="186"/>
+ <line hits="1" number="189"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="190"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="191"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="192"/>
+ <line hits="1" number="193"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="194"/>
+ <line hits="1" number="195"/>
+ <line hits="1" number="196"/>
+ <line hits="1" number="199"/>
+ <line hits="0" number="200"/>
+ <line hits="0" number="204"/>
+ <line hits="1" number="207"/>
+ <line hits="1" number="208"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="209"/>
+ <line hits="1" number="210"/>
+ <line hits="1" number="211"/>
+ <line hits="1" number="212"/>
+ <line hits="1" number="213"/>
+ <line hits="1" number="214"/>
+ <line hits="1" number="217"/>
+ <line hits="1" number="218"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="220"/>
+ <line hits="1" number="221"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="222"/>
+ <line hits="1" number="223"/>
+ <line hits="1" number="225"/>
+ <line hits="1" number="226"/>
+ <line hits="1" number="229"/>
+ <line hits="0" number="230"/>
+ <line hits="0" number="231"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="233,234" number="232"/>
+ <line hits="0" number="233"/>
+ <line hits="0" number="234"/>
+ <line hits="1" number="237"/>
+ <line hits="1" number="238"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="239"/>
+ <line hits="1" number="240"/>
+ <line hits="1" number="243"/>
+ <line hits="1" number="245"/>
+ <line hits="1" number="246"/>
+ <line hits="1" number="247"/>
+ <line hits="1" number="248"/>
+ <line hits="1" number="249"/>
+ <line hits="1" number="252"/>
+ <line hits="1" number="254"/>
+ <line hits="1" number="255"/>
+ <line hits="1" number="256"/>
+ <line hits="1" number="257"/>
+ <line hits="1" number="258"/>
+ <line hits="1" number="260"/>
+ <line hits="1" number="263"/>
+ <line hits="1" number="264"/>
+ <line hits="1" number="265"/>
+ <line hits="1" number="266"/>
+ <line hits="1" number="267"/>
+ <line hits="1" number="268"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="270"/>
+ <line hits="1" number="271"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="276" number="273"/>
+ <line hits="1" number="274"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,exit" number="276"/>
+ <line hits="1" number="279"/>
+ <line hits="1" number="281"/>
+ <line hits="1" number="282"/>
+ <line hits="1" number="283"/>
+ <line hits="1" number="284"/>
+ <line hits="1" number="287"/>
+ <line hits="1" number="289"/>
+ <line hits="1" number="291"/>
+ <line hits="1" number="293"/>
+ <line hits="1" number="295"/>
+ <line hits="1" number="296"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="297"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="298"/>
+ <line hits="1" number="299"/>
+ <line hits="1" number="300"/>
+ <line hits="1" number="302"/>
+ <line hits="1" number="303"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="305"/>
+ <line hits="1" number="306"/>
+ <line hits="1" number="310"/>
+ <line hits="1" number="312"/>
+ <line hits="1" number="313"/>
+ <line hits="1" number="315"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="316"/>
+ <line hits="1" number="318"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="319"/>
+ <line hits="1" number="324"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,exit" number="325"/>
+ <line hits="1" number="329"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="334,335" number="333"/>
+ <line hits="0" number="334"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="336,337" number="335"/>
+ <line hits="0" number="336"/>
+ <line hits="0" number="337"/>
+ <line hits="1" number="340"/>
+ <line hits="0" number="341"/>
+ <line hits="0" number="342"/>
+ <line hits="0" number="343"/>
+ <line hits="0" number="344"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,exit" number="345"/>
+ <line hits="1" number="348"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="351" number="350"/>
+ <line hits="0" number="351"/>
+ <line hits="1" number="352"/>
+ <line hits="1" number="355"/>
+ <line hits="1" number="357"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,359" number="358"/>
+ <line hits="0" number="359"/>
+ <line hits="1" number="361"/>
+ <line hits="0" number="362"/>
+ <line hits="1" number="365"/>
+ <line hits="1" number="366"/>
+ <line hits="0" number="367"/>
+ <line hits="0" number="368"/>
+ <line hits="1" number="370"/>
+ <line hits="0" number="371"/>
+ <line hits="0" number="372"/>
+ <line hits="1" number="374"/>
+ <line hits="0" number="375"/>
+ <line hits="1" number="377"/>
+ <line hits="0" number="378"/>
+ <line hits="1" number="381"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="391"/>
+ <line hits="1" number="392"/>
+ <line hits="1" number="393"/>
+ <line hits="0" number="394"/>
+ <line hits="1" number="395"/>
+ <line hits="1" number="396"/>
+ <line hits="1" number="397"/>
+ <line hits="1" number="400"/>
+ <line hits="1" number="401"/>
+ <line hits="1" number="402"/>
+ <line hits="1" number="403"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="404"/>
+ <line hits="1" number="405"/>
+ <line hits="1" number="406"/>
+ <line hits="1" number="409"/>
+ <line hits="1" number="411"/>
+ <line hits="1" number="412"/>
+ <line hits="1" number="413"/>
+ <line hits="1" number="416"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="418" number="417"/>
+ <line hits="0" number="418"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="420" number="419"/>
+ <line hits="0" number="420"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="422,424" number="421"/>
+ <line hits="0" number="422"/>
+ <line hits="0" number="423"/>
+ <line hits="0" number="424"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="426" number="425"/>
+ <line hits="0" number="426"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="428,430" number="427"/>
+ <line hits="0" number="428"/>
+ <line hits="0" number="429"/>
+ <line hits="0" number="430"/>
+ <line hits="1" number="431"/>
+ <line hits="1" number="434"/>
+ <line hits="1" number="435"/>
+ <line hits="1" number="438"/>
+ <line hits="1" number="439"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="441" number="440"/>
+ <line hits="0" number="441"/>
+ <line hits="1" number="442"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="443"/>
+ <line hits="1" number="444"/>
+ <line hits="1" number="445"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="446"/>
+ <line hits="1" number="447"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="448"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="453" number="449"/>
+ <line hits="1" number="450"/>
+ <line hits="1" number="453"/>
+ <line hits="1" number="455"/>
+ <line hits="1" number="457"/>
+ <line hits="1" number="458"/>
+ <line hits="1" number="460"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="462" number="461"/>
+ <line hits="0" number="462"/>
+ <line hits="1" number="464"/>
+ <line hits="1" number="466"/>
+ <line hits="1" number="469"/>
+ <line hits="0" number="470"/>
+ <line hits="0" number="471"/>
+ <line hits="1" number="474"/>
+ <line hits="1" number="475"/>
+ <line hits="1" number="476"/>
+ <line hits="0" number="477"/>
+ <line hits="0" number="478"/>
+ <line hits="0" number="479"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="481,482" number="480"/>
+ <line hits="0" number="481"/>
+ <line hits="0" number="482"/>
+ <line hits="1" number="485"/>
+ <line hits="0" number="486"/>
+ <line hits="0" number="487"/>
+ <line hits="0" number="488"/>
+ <line hits="0" number="489"/>
+ <line hits="0" number="490"/>
+ <line hits="0" number="491"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="493,494" number="492"/>
+ <line hits="0" number="493"/>
+ <line hits="0" number="494"/>
+ <line hits="1" number="497"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="499" number="498"/>
+ <line hits="0" number="499"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="501,503" number="500"/>
+ <line hits="0" number="501"/>
+ <line hits="0" number="502"/>
+ <line hits="0" number="503"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="505" number="504"/>
+ <line hits="0" number="505"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="507,509" number="506"/>
+ <line hits="0" number="507"/>
+ <line hits="0" number="508"/>
+ <line hits="0" number="509"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="511" number="510"/>
+ <line hits="0" number="511"/>
+ <line hits="1" number="513"/>
+ <line hits="1" number="514"/>
+ <line hits="1" number="515"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="516"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="519" number="518"/>
+ <line hits="0" number="519"/>
+ <line hits="1" number="521"/>
+ <line hits="1" number="522"/>
+ <line hits="1" number="523"/>
+ <line hits="0" number="524"/>
+ <line hits="0" number="525"/>
+ <line hits="0" number="526"/>
+ <line hits="0" number="527"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="531" number="528"/>
+ <line hits="1" number="529"/>
+ <line hits="0" number="531"/>
+ <line hits="1" number="532"/>
+ </lines>
+ </class>
+ <class branch-rate="0.5" complexity="0" filename="common/yaml_loader.py" line-rate="0.8" name="yaml_loader.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="24" number="22"/>
+ <line hits="0" number="24"/>
+ <line hits="1" number="26"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="29" number="28"/>
+ <line hits="0" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.8333" complexity="0" line-rate="0.8393" name="contexts">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="contexts/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0.8333" complexity="0" filename="contexts/base.py" line-rate="0.8966" name="base.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="14"/>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="38"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="44" number="41"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="0" number="53"/>
+ <line hits="1" number="55"/>
+ <line hits="1" number="59"/>
+ <line hits="0" number="62"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="contexts/csar.py" line-rate="0.8462" name="csar.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="33"/>
+ <line hits="0" number="35"/>
+ <line hits="1" number="37"/>
+ <line hits="0" number="39"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="contexts/dummy.py" line-rate="0.7143" name="dummy.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="0" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="1" number="35"/>
+ <line hits="0" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="0" number="41"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.5263" complexity="0" line-rate="0.7595" name="core">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="core/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="45"/>
+ </lines>
+ </class>
+ <class branch-rate="0.8333" complexity="0" filename="core/plugin.py" line-rate="0.8977" name="plugin.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="55"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="71"/>
+ <line hits="1" number="72"/>
+ <line hits="1" number="74"/>
+ <line hits="1" number="75"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="81"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ <line hits="1" number="89"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="91"/>
+ <line hits="1" number="92"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="98"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="103"/>
+ <line hits="1" number="104"/>
+ <line hits="1" number="106"/>
+ <line hits="1" number="108"/>
+ <line hits="1" number="109"/>
+ <line hits="1" number="112"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="114"/>
+ <line hits="1" number="115"/>
+ <line hits="1" number="120"/>
+ <line hits="1" number="121"/>
+ <line hits="1" number="124"/>
+ <line hits="1" number="126"/>
+ <line hits="1" number="127"/>
+ <line hits="1" number="129"/>
+ <line hits="0" number="131"/>
+ <line hits="0" number="133"/>
+ <line hits="0" number="134"/>
+ <line hits="1" number="137"/>
+ <line hits="1" number="140"/>
+ <line hits="1" number="141"/>
+ <line hits="1" number="143"/>
+ <line hits="1" number="148"/>
+ <line hits="1" number="150"/>
+ <line hits="1" number="151"/>
+ <line hits="1" number="152"/>
+ <line hits="1" number="153"/>
+ <line hits="1" number="154"/>
+ <line hits="1" number="155"/>
+ <line hits="0" number="156"/>
+ <line hits="0" number="157"/>
+ <line hits="0" number="159"/>
+ <line hits="1" number="160"/>
+ <line hits="1" number="162"/>
+ <line hits="0" number="163"/>
+ <line hits="0" number="164"/>
+ <line hits="1" number="166"/>
+ <line hits="1" number="168"/>
+ <line hits="1" number="170"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="174" number="173"/>
+ <line hits="0" number="174"/>
+ </lines>
+ </class>
+ <class branch-rate="0.75" complexity="0" filename="core/report.py" line-rate="0.925" name="report.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="48"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="55" number="54"/>
+ <line hits="0" number="55"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="79"/>
+ <line hits="1" number="80"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="90"/>
+ <line hits="1" number="91"/>
+ <line hits="1" number="119"/>
+ <line hits="1" number="120"/>
+ <line hits="1" number="124"/>
+ <line hits="1" number="125"/>
+ <line hits="1" number="126"/>
+ <line hits="1" number="127"/>
+ <line hits="1" number="129"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="core/runner.py" line-rate="1" name="runner.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="core/step.py" line-rate="1" name="step.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ </lines>
+ </class>
+ <class branch-rate="0.4286" complexity="0" filename="core/task.py" line-rate="0.6739" name="task.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="486"/>
+ <line hits="1" number="488"/>
+ <line hits="1" number="489"/>
+ <line hits="1" number="490"/>
+ <line hits="1" number="491"/>
+ <line hits="1" number="492"/>
+ <line hits="1" number="493"/>
+ <line hits="1" number="494"/>
+ <line hits="1" number="495"/>
+ <line hits="1" number="496"/>
+ <line hits="1" number="498"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,500" number="499"/>
+ <line hits="0" number="500"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="502,505" number="501"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="501,503" number="502"/>
+ <line hits="0" number="503"/>
+ <line hits="0" number="504"/>
+ <line hits="0" number="505"/>
+ <line hits="0" number="506"/>
+ <line hits="1" number="508"/>
+ <line hits="0" number="509"/>
+ <line hits="0" number="510"/>
+ <line hits="1" number="512"/>
+ <line hits="0" number="513"/>
+ <line hits="0" number="514"/>
+ <line hits="0" number="515"/>
+ <line hits="1" number="517"/>
+ <line hits="1" number="518"/>
+ <line hits="1" number="519"/>
+ <line hits="1" number="520"/>
+ <line hits="1" number="522"/>
+ <line hits="1" number="523"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="exit" number="524"/>
+ <line hits="1" number="525"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="526"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="528" number="527"/>
+ <line hits="0" number="528"/>
+ <line hits="0" number="529"/>
+ <line hits="1" number="530"/>
+ <line hits="1" number="531"/>
+ <line hits="1" number="533"/>
+ <line hits="1" number="534"/>
+ <line hits="1" number="535"/>
+ <line hits="1" number="536"/>
+ <line hits="1" number="537"/>
+ <line hits="1" number="538"/>
+ <line hits="1" number="539"/>
+ <line hits="1" number="540"/>
+ <line hits="1" number="542"/>
+ <line hits="1" number="543"/>
+ <line hits="1" number="544"/>
+ <line hits="1" number="546"/>
+ <line hits="1" number="547"/>
+ <line hits="1" number="548"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="549"/>
+ <line hits="1" number="550"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="556"/>
+ <line hits="1" number="557"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="560" number="559"/>
+ <line hits="0" number="560"/>
+ <line hits="0" number="561"/>
+ <line hits="1" number="562"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="564" number="563"/>
+ <line hits="0" number="564"/>
+ <line hits="1" number="566"/>
+ <line hits="1" number="567"/>
+ <line hits="1" number="569"/>
+ <line hits="1" number="570"/>
+ <line hits="1" number="573"/>
+ <line hits="0" number="575"/>
+ <line hits="0" number="576"/>
+ <line hits="0" number="577"/>
+ <line hits="0" number="578"/>
+ <line hits="0" number="580"/>
+ <line hits="0" number="581"/>
+ <line hits="0" number="582"/>
+ <line hits="0" number="583"/>
+ <line hits="0" number="585"/>
+ <line hits="1" number="588"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="590" number="589"/>
+ <line hits="0" number="590"/>
+ <line hits="1" number="592"/>
+ <line hits="1" number="595"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="597" number="596"/>
+ <line hits="0" number="597"/>
+ <line hits="0" number="598"/>
+ <line hits="1" number="599"/>
+ <line hits="1" number="600"/>
+ <line hits="1" number="601"/>
+ <line hits="1" number="604"/>
+ <line hits="0" number="605"/>
+ <line hits="1" number="609"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="611,613" number="610"/>
+ <line hits="0" number="611"/>
+ <line hits="0" number="613"/>
+ <line hits="0" number="614"/>
+ <line hits="0" number="615"/>
+ <line hits="0" number="616"/>
+ <line hits="0" number="617"/>
+ <line hits="0" number="618"/>
+ <line hits="0" number="620"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="623,627" number="622"/>
+ <line hits="0" number="623"/>
+ <line hits="0" number="624"/>
+ <line hits="0" number="626"/>
+ <line hits="0" number="627"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="core/testcase.py" line-rate="0.7869" name="testcase.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="1" number="54"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="58"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="60"/>
+ <line hits="1" number="61"/>
+ <line hits="0" number="62"/>
+ <line hits="0" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="75"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="79"/>
+ <line hits="1" number="80"/>
+ <line hits="1" number="82"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="84"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="87"/>
+ <line hits="1" number="88"/>
+ <line hits="1" number="89"/>
+ <line hits="0" number="90"/>
+ <line hits="0" number="91"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="0" number="95"/>
+ <line hits="0" number="96"/>
+ <line hits="1" number="98"/>
+ <line hits="1" number="100"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="103"/>
+ <line hits="1" number="104"/>
+ <line hits="1" number="105"/>
+ <line hits="0" number="106"/>
+ <line hits="0" number="107"/>
+ <line hits="0" number="108"/>
+ <line hits="1" number="110"/>
+ <line hits="1" number="111"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="core/testsuite.py" line-rate="0" name="testsuite.py">
+ <methods/>
+ <lines>
+ <line hits="0" number="17"/>
+ <line hits="0" number="18"/>
+ <line hits="0" number="19"/>
+ <line hits="0" number="21"/>
+ <line hits="0" number="23"/>
+ <line hits="0" number="24"/>
+ <line hits="0" number="26"/>
+ <line hits="0" number="28"/>
+ <line hits="0" number="31"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="51"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0" complexity="0" line-rate="0.3617" name="crawlers">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="crawlers/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0" complexity="0" filename="crawlers/base.py" line-rate="0.36" name="base.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="29,31" number="28"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="28,30" number="29"/>
+ <line hits="0" number="30"/>
+ <line hits="0" number="31"/>
+ <line hits="1" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="1" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="0" number="41"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="43,50" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="crawlers/default.py" line-rate="0.3636" name="default.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="30,32" number="29"/>
+ <line hits="0" number="30"/>
+ <line hits="0" number="32"/>
+ <line hits="0" number="33"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="35,41" number="34"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="36,37" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="39,40" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="42,43" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.2" complexity="0" line-rate="0.4937" name="dispatcher">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="dispatcher/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="30"/>
+ </lines>
+ </class>
+ <class branch-rate="0.3333" complexity="0" filename="dispatcher/base.py" line-rate="0.5882" name="base.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="0" number="28"/>
+ <line hits="1" number="30"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="34,36" number="33"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="33,35" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="1" number="38"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="46"/>
+ <line hits="1" number="48"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="dispatcher/file.py" line-rate="0.6923" name="file.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="1" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="38"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="dispatcher/http.py" line-rate="0.3095" name="http.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="37"/>
+ <line hits="0" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="1" number="44"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="47,51" number="45"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="54"/>
+ <line hits="0" number="55"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,58" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="1" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="62"/>
+ <line hits="0" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="0" number="65"/>
+ <line hits="0" number="67"/>
+ <line hits="0" number="68"/>
+ <line hits="0" number="70"/>
+ <line hits="0" number="82"/>
+ <line hits="0" number="83"/>
+ <line hits="0" number="84"/>
+ <line hits="0" number="88"/>
+ <line hits="0" number="90"/>
+ <line hits="0" number="91"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="onap">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0" complexity="0" line-rate="0.5" name="onap.common">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/common/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0" complexity="0" filename="onap/common/vf_module_crawler.py" line-rate="0.5" name="vf_module_crawler.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="0" number="26"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="28,35" number="27"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="27,32" number="28"/>
+ <line hits="0" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="onap.lifecycle">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/lifecycle/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="onap.onboard">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/onboard/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="onap.onboard.v1">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/onboard/v1/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="onap.onboard.v2">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/onboard/v2/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="onap.steps">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/steps/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0" complexity="0" line-rate="0.3529" name="onap.steps.validation">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="onap/steps/validation/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0" complexity="0" filename="onap/steps/validation/vf_module_validator.py" line-rate="0.3529" name="vf_module_validator.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="0" number="31"/>
+ <line hits="0" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="1" number="37"/>
+ <line hits="0" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="1" number="44"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,48" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="1" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="54"/>
+ <line hits="0" number="59"/>
+ <line hits="0" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="62"/>
+ <line hits="0" number="63"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="openstack">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="openstack/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0" complexity="0" line-rate="0.3871" name="openstack.steps">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="openstack/steps/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="1" complexity="0" filename="openstack/steps/heat.py" line-rate="0.4138" name="heat.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="0" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="1" number="53"/>
+ <line hits="0" number="54"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="openstack/steps/nova.py" line-rate="0.3636" name="nova.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="0" number="32"/>
+ <line hits="0" number="33"/>
+ <line hits="0" number="34"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="1" number="53"/>
+ <line hits="0" number="54"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,56" number="55"/>
+ <line hits="0" number="56"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="55,58" number="57"/>
+ <line hits="0" number="58"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="resources">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="resources/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.1379" complexity="0" line-rate="0.3347" name="runners">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="runners/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0.381" complexity="0" filename="runners/base.py" line-rate="0.503" name="base.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="33"/>
+ <line hits="0" number="35"/>
+ <line hits="0" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="44"/>
+ <line hits="1" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="54,57" number="53"/>
+ <line hits="0" number="54"/>
+ <line hits="0" number="55"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="1" number="61"/>
+ <line hits="0" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="0" number="65"/>
+ <line hits="0" number="66"/>
+ <line hits="0" number="67"/>
+ <line hits="0" number="68"/>
+ <line hits="0" number="69"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="71,74" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="0" number="72"/>
+ <line hits="0" number="73"/>
+ <line hits="0" number="74"/>
+ <line hits="0" number="75"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="79"/>
+ <line hits="1" number="81"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="87" number="84"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ <line hits="0" number="87"/>
+ <line hits="1" number="89"/>
+ <line hits="1" number="92"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="1" number="95"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="103"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="exit" number="106"/>
+ <line hits="1" number="107"/>
+ <line hits="1" number="109"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,113" number="112"/>
+ <line hits="0" number="113"/>
+ <line hits="1" number="115"/>
+ <line hits="0" number="118"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="122,124" number="121"/>
+ <line hits="0" number="122"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,125" number="124"/>
+ <line hits="0" number="125"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="127,129" number="126"/>
+ <line hits="0" number="127"/>
+ <line hits="0" number="128"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="130,133" number="129"/>
+ <line hits="0" number="130"/>
+ <line hits="0" number="131"/>
+ <line hits="0" number="132"/>
+ <line hits="0" number="133"/>
+ <line hits="1" number="135"/>
+ <line hits="1" number="136"/>
+ <line hits="1" number="137"/>
+ <line hits="1" number="138"/>
+ <line hits="1" number="139"/>
+ <line hits="1" number="140"/>
+ <line hits="1" number="141"/>
+ <line hits="1" number="142"/>
+ <line hits="1" number="144"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="147" number="146"/>
+ <line hits="0" number="147"/>
+ <line hits="0" number="148"/>
+ <line hits="0" number="149"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="151,154" number="150"/>
+ <line hits="0" number="151"/>
+ <line hits="0" number="152"/>
+ <line hits="0" number="153"/>
+ <line hits="0" number="154"/>
+ <line hits="0" number="155"/>
+ <line hits="1" number="157"/>
+ <line hits="0" number="158"/>
+ <line hits="1" number="160"/>
+ <line hits="1" number="161"/>
+ <line hits="1" number="162"/>
+ <line hits="1" number="163"/>
+ <line hits="1" number="164"/>
+ <line hits="1" number="165"/>
+ <line hits="1" number="166"/>
+ <line hits="1" number="168"/>
+ <line hits="1" number="169"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="173" number="172"/>
+ <line hits="0" number="173"/>
+ <line hits="0" number="174"/>
+ <line hits="0" number="175"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="177,180" number="176"/>
+ <line hits="0" number="177"/>
+ <line hits="0" number="178"/>
+ <line hits="0" number="179"/>
+ <line hits="0" number="180"/>
+ <line hits="0" number="181"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="184" number="183"/>
+ <line hits="0" number="184"/>
+ <line hits="0" number="190"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="193" number="192"/>
+ <line hits="0" number="193"/>
+ <line hits="0" number="199"/>
+ <line hits="1" number="201"/>
+ <line hits="1" number="203"/>
+ <line hits="0" number="205"/>
+ <line hits="1" number="207"/>
+ <line hits="1" number="209"/>
+ <line hits="1" number="210"/>
+ <line hits="1" number="211"/>
+ <line hits="1" number="213"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="216" number="214"/>
+ <line hits="0" number="216"/>
+ <line hits="0" number="217"/>
+ <line hits="0" number="218"/>
+ <line hits="1" number="220"/>
+ <line hits="1" number="221"/>
+ <line hits="1" number="223"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="225" number="224"/>
+ <line hits="0" number="225"/>
+ <line hits="0" number="226"/>
+ <line hits="0" number="227"/>
+ <line hits="1" number="229"/>
+ <line hits="1" number="230"/>
+ <line hits="1" number="232"/>
+ <line hits="1" number="233"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="234"/>
+ <line hits="1" number="235"/>
+ <line hits="1" number="236"/>
+ <line hits="1" number="237"/>
+ <line hits="0" number="238"/>
+ <line hits="0" number="239"/>
+ <line hits="1" number="240"/>
+ <line hits="1" number="242"/>
+ <line hits="1" number="243"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="244"/>
+ <line hits="1" number="245"/>
+ <line hits="1" number="246"/>
+ <line hits="1" number="247"/>
+ <line hits="0" number="248"/>
+ <line hits="0" number="249"/>
+ <line hits="1" number="250"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="runners/duration.py" line-rate="0.2188" name="duration.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="37"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="55"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="57,59" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="0" number="59"/>
+ <line hits="0" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="63"/>
+ <line hits="0" number="66"/>
+ <line hits="0" number="67"/>
+ <line hits="0" number="69"/>
+ <line hits="0" number="70"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="73,80" number="71"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="74,75" number="73"/>
+ <line hits="0" number="74"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="76,89" number="75"/>
+ <line hits="0" number="76"/>
+ <line hits="0" number="77"/>
+ <line hits="0" number="80"/>
+ <line hits="0" number="81"/>
+ <line hits="0" number="82"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="87,89" number="84"/>
+ <line hits="0" number="87"/>
+ <line hits="0" number="89"/>
+ <line hits="0" number="91"/>
+ <line hits="0" number="98"/>
+ <line hits="0" number="100"/>
+ <line hits="0" number="103"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="61,106" number="105"/>
+ <line hits="0" number="106"/>
+ <line hits="0" number="107"/>
+ <line hits="0" number="109"/>
+ <line hits="0" number="110"/>
+ <line hits="0" number="111"/>
+ <line hits="0" number="116"/>
+ <line hits="0" number="117"/>
+ <line hits="0" number="119"/>
+ <line hits="0" number="120"/>
+ <line hits="1" number="123"/>
+ <line hits="1" number="138"/>
+ <line hits="1" number="140"/>
+ <line hits="0" number="141"/>
+ <line hits="0" number="142"/>
+ <line hits="0" number="147"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="runners/dynamictp.py" line-rate="0.7857" name="dynamictp.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="155"/>
+ <line hits="1" number="170"/>
+ <line hits="1" number="172"/>
+ <line hits="0" number="173"/>
+ <line hits="0" number="174"/>
+ <line hits="0" number="179"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="runners/iteration.py" line-rate="0.2169" name="iteration.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="38"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="54"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="56,58" number="55"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="60"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="62,63" number="61"/>
+ <line hits="0" number="62"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="64,126" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="0" number="66"/>
+ <line hits="0" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="0" number="72"/>
+ <line hits="0" number="74"/>
+ <line hits="0" number="75"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="79,105" number="76"/>
+ <line hits="0" number="79"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="81,99" number="80"/>
+ <line hits="0" number="81"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="84,86" number="83"/>
+ <line hits="0" number="84"/>
+ <line hits="0" number="85"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="87,89" number="86"/>
+ <line hits="0" number="87"/>
+ <line hits="0" number="88"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="90,105" number="89"/>
+ <line hits="0" number="90"/>
+ <line hits="0" number="91"/>
+ <line hits="0" number="92"/>
+ <line hits="0" number="93"/>
+ <line hits="0" number="94"/>
+ <line hits="0" number="96"/>
+ <line hits="0" number="97"/>
+ <line hits="0" number="98"/>
+ <line hits="0" number="99"/>
+ <line hits="0" number="100"/>
+ <line hits="0" number="101"/>
+ <line hits="0" number="102"/>
+ <line hits="0" number="103"/>
+ <line hits="0" number="105"/>
+ <line hits="0" number="107"/>
+ <line hits="0" number="114"/>
+ <line hits="0" number="116"/>
+ <line hits="0" number="120"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="64,124" number="122"/>
+ <line hits="0" number="124"/>
+ <line hits="0" number="125"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="127,137" number="126"/>
+ <line hits="0" number="127"/>
+ <line hits="0" number="128"/>
+ <line hits="0" number="129"/>
+ <line hits="0" number="134"/>
+ <line hits="0" number="135"/>
+ <line hits="0" number="137"/>
+ <line hits="0" number="138"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,140" number="139"/>
+ <line hits="0" number="140"/>
+ <line hits="1" number="143"/>
+ <line hits="1" number="158"/>
+ <line hits="1" number="160"/>
+ <line hits="1" number="161"/>
+ <line hits="1" number="162"/>
+ <line hits="1" number="167"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="runners/search.py" line-rate="0.25" name="search.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="45"/>
+ <line hits="0" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="1" number="54"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="56,57" number="55"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="1" number="59"/>
+ <line hits="0" number="61"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="64,66" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="0" number="66"/>
+ <line hits="0" number="67"/>
+ <line hits="0" number="68"/>
+ <line hits="0" number="69"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,72" number="71"/>
+ <line hits="0" number="72"/>
+ <line hits="1" number="74"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="76,78" number="75"/>
+ <line hits="0" number="76"/>
+ <line hits="0" number="78"/>
+ <line hits="0" number="80"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,83" number="81"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,84" number="83"/>
+ <line hits="0" number="84"/>
+ <line hits="0" number="85"/>
+ <line hits="1" number="88"/>
+ <line hits="1" number="103"/>
+ <line hits="1" number="105"/>
+ <line hits="0" number="106"/>
+ <line hits="0" number="107"/>
+ <line hits="0" number="108"/>
+ <line hits="0" number="109"/>
+ <line hits="0" number="110"/>
+ <line hits="1" number="112"/>
+ <line hits="0" number="113"/>
+ <line hits="0" number="115"/>
+ <line hits="0" number="116"/>
+ <line hits="0" number="118"/>
+ <line hits="0" number="119"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="122,127" number="120"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="123,124" number="122"/>
+ <line hits="0" number="123"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="125,131" number="124"/>
+ <line hits="0" number="125"/>
+ <line hits="0" number="126"/>
+ <line hits="0" number="127"/>
+ <line hits="0" number="128"/>
+ <line hits="0" number="129"/>
+ <line hits="0" number="131"/>
+ <line hits="0" number="141"/>
+ <line hits="0" number="143"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,148" number="146"/>
+ <line hits="0" number="148"/>
+ <line hits="1" number="150"/>
+ <line hits="0" number="151"/>
+ <line hits="0" number="152"/>
+ <line hits="0" number="154"/>
+ <line hits="0" number="157"/>
+ <line hits="0" number="158"/>
+ <line hits="0" number="159"/>
+ <line hits="0" number="160"/>
+ <line hits="0" number="162"/>
+ <line hits="0" number="168"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,170" number="169"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="169,171" number="170"/>
+ <line hits="0" number="171"/>
+ <line hits="0" number="172"/>
+ <line hits="1" number="174"/>
+ <line hits="0" number="175"/>
+ <line hits="0" number="176"/>
+ <line hits="0" number="180"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="runners/sequence.py" line-rate="0.2" name="sequence.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="35"/>
+ <line hits="0" number="38"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="42"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="47,49" number="46"/>
+ <line hits="0" number="47"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="56"/>
+ <line hits="0" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="60"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="62,64" number="61"/>
+ <line hits="0" number="62"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="65,108" number="64"/>
+ <line hits="0" number="65"/>
+ <line hits="0" number="67"/>
+ <line hits="0" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="0" number="73"/>
+ <line hits="0" number="74"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="77,82" number="75"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="78,79" number="77"/>
+ <line hits="0" number="78"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="80,89" number="79"/>
+ <line hits="0" number="80"/>
+ <line hits="0" number="81"/>
+ <line hits="0" number="82"/>
+ <line hits="0" number="83"/>
+ <line hits="0" number="84"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="87,89" number="86"/>
+ <line hits="0" number="87"/>
+ <line hits="0" number="89"/>
+ <line hits="0" number="91"/>
+ <line hits="0" number="98"/>
+ <line hits="0" number="100"/>
+ <line hits="0" number="103"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="64,106" number="105"/>
+ <line hits="0" number="106"/>
+ <line hits="0" number="108"/>
+ <line hits="0" number="109"/>
+ <line hits="0" number="110"/>
+ <line hits="0" number="115"/>
+ <line hits="0" number="116"/>
+ <line hits="0" number="117"/>
+ <line hits="0" number="118"/>
+ <line hits="0" number="119"/>
+ <line hits="1" number="122"/>
+ <line hits="1" number="140"/>
+ <line hits="1" number="142"/>
+ <line hits="0" number="143"/>
+ <line hits="0" number="144"/>
+ <line hits="0" number="149"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.1667" complexity="0" line-rate="0.3355" name="steps">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="steps/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0.5" complexity="0" filename="steps/base.py" line-rate="0.6667" name="base.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="26"/>
+ <line hits="0" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="0" number="32"/>
+ <line hits="1" number="34"/>
+ <line hits="0" number="36"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="41"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="46"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="53" number="49"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="49" number="50"/>
+ <line hits="1" number="51"/>
+ <line hits="0" number="53"/>
+ <line hits="1" number="55"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="63" number="59"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="59" number="60"/>
+ <line hits="1" number="61"/>
+ <line hits="0" number="63"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="70"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="79"/>
+ <line hits="0" number="80"/>
+ <line hits="1" number="82"/>
+ <line hits="0" number="83"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="85,89" number="84"/>
+ <line hits="0" number="85"/>
+ <line hits="0" number="86"/>
+ <line hits="0" number="87"/>
+ <line hits="0" number="88"/>
+ <line hits="0" number="89"/>
+ </lines>
+ </class>
+ <class branch-rate="0" complexity="0" filename="steps/rest_call.py" line-rate="0.2212" name="rest_call.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="14"/>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="36"/>
+ <line hits="0" number="37"/>
+ <line hits="0" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="40"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="43"/>
+ <line hits="0" number="44"/>
+ <line hits="0" number="45"/>
+ <line hits="1" number="47"/>
+ <line hits="0" number="48"/>
+ <line hits="0" number="49"/>
+ <line hits="0" number="50"/>
+ <line hits="0" number="51"/>
+ <line hits="0" number="52"/>
+ <line hits="0" number="53"/>
+ <line hits="0" number="54"/>
+ <line hits="1" number="56"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,58" number="57"/>
+ <line hits="0" number="58"/>
+ <line hits="0" number="59"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="61,63" number="60"/>
+ <line hits="0" number="61"/>
+ <line hits="0" number="62"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="64,65" number="63"/>
+ <line hits="0" number="64"/>
+ <line hits="0" number="65"/>
+ <line hits="1" number="67"/>
+ <line hits="0" number="68"/>
+ <line hits="0" number="69"/>
+ <line hits="0" number="70"/>
+ <line hits="0" number="71"/>
+ <line hits="0" number="72"/>
+ <line hits="0" number="73"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="75,80" number="74"/>
+ <line hits="0" number="75"/>
+ <line hits="0" number="76"/>
+ <line hits="0" number="77"/>
+ <line hits="0" number="78"/>
+ <line hits="0" number="80"/>
+ <line hits="0" number="81"/>
+ <line hits="1" number="83"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="85,86" number="84"/>
+ <line hits="0" number="85"/>
+ <line hits="0" number="86"/>
+ <line hits="0" number="87"/>
+ <line hits="0" number="88"/>
+ <line hits="0" number="89"/>
+ <line hits="0" number="90"/>
+ <line hits="0" number="91"/>
+ <line hits="0" number="92"/>
+ <line hits="1" number="94"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="96,97" number="95"/>
+ <line hits="0" number="96"/>
+ <line hits="0" number="97"/>
+ <line hits="0" number="98"/>
+ <line hits="0" number="99"/>
+ <line hits="0" number="100"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="102,107" number="101"/>
+ <line hits="0" number="102"/>
+ <line hits="0" number="103"/>
+ <line hits="0" number="104"/>
+ <line hits="0" number="105"/>
+ <line hits="0" number="107"/>
+ <line hits="1" number="109"/>
+ <line hits="0" number="110"/>
+ <line hits="0" number="111"/>
+ <line hits="0" number="112"/>
+ <line hits="0" number="113"/>
+ <line hits="0" number="114"/>
+ <line hits="0" number="115"/>
+ <line hits="0" number="116"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="118,129" number="117"/>
+ <line hits="0" number="118"/>
+ <line hits="0" number="119"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="121,127" number="120"/>
+ <line hits="0" number="121"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="123,125" number="122"/>
+ <line hits="0" number="123"/>
+ <line hits="0" number="125"/>
+ <line hits="0" number="126"/>
+ <line hits="0" number="127"/>
+ <line hits="0" number="129"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="134,136" number="133"/>
+ <line hits="0" number="134"/>
+ <line hits="0" number="136"/>
+ <line hits="0" number="137"/>
+ <line hits="1" number="139"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="exit,141" number="140"/>
+ <line hits="0" number="141"/>
+ <line hits="0" number="142"/>
+ <line hits="0" number="143"/>
+ <line hits="0" number="144"/>
+ <line hits="1" number="146"/>
+ <line hits="0" number="147"/>
+ <line hits="0" number="148"/>
+ <line hits="0" number="149"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0" complexity="0" line-rate="0.5294" name="steps.dummy">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="steps/dummy/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0" complexity="0" filename="steps/dummy/dummy.py" line-rate="0.5294" name="dummy.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="14"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="0" number="29"/>
+ <line hits="0" number="30"/>
+ <line hits="0" number="31"/>
+ <line hits="1" number="33"/>
+ <line hits="0" number="35"/>
+ <line hits="1" number="37"/>
+ <line branch="true" condition-coverage="0% (0/2)" hits="0" missing-branches="39,41" number="38"/>
+ <line hits="0" number="39"/>
+ <line hits="0" number="41"/>
+ <line hits="0" number="42"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="test_config">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="test_config/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="test_config.onap">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="test_config/onap/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="test_config.onap.test_cases">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="test_config/onap/test_cases/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="test_config.onap.test_suites">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="test_config/onap/test_suites/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="tests">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="tests/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/fixture.py" line-rate="1" name="fixture.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="tests.unit">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="tests/unit/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.9706" complexity="0" line-rate="0.8512" name="tests.unit.common">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="tests/unit/common/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/common/test_httpClient.py" line-rate="1" name="test_httpClient.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/common/test_process.py" line-rate="1" name="test_process.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="51"/>
+ <line hits="1" number="54"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="57"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="60"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="63"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="70"/>
+ <line hits="1" number="71"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="74"/>
+ <line hits="1" number="75"/>
+ <line hits="1" number="76"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="80"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ <line hits="1" number="87"/>
+ <line hits="1" number="89"/>
+ <line hits="1" number="90"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="95"/>
+ <line hits="1" number="96"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="99"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="102"/>
+ <line hits="1" number="103"/>
+ <line hits="1" number="106"/>
+ <line hits="1" number="107"/>
+ <line hits="1" number="110"/>
+ <line hits="1" number="112"/>
+ <line hits="1" number="113"/>
+ <line hits="1" number="114"/>
+ <line hits="1" number="117"/>
+ <line hits="1" number="118"/>
+ <line hits="1" number="121"/>
+ <line hits="1" number="124"/>
+ <line hits="1" number="126"/>
+ <line hits="1" number="128"/>
+ <line hits="1" number="129"/>
+ <line hits="1" number="130"/>
+ <line hits="1" number="131"/>
+ <line hits="1" number="132"/>
+ <line hits="1" number="133"/>
+ <line hits="1" number="135"/>
+ <line hits="1" number="137"/>
+ <line hits="1" number="138"/>
+ <line hits="1" number="139"/>
+ <line hits="1" number="140"/>
+ <line hits="1" number="141"/>
+ <line hits="1" number="142"/>
+ <line hits="1" number="144"/>
+ <line hits="1" number="146"/>
+ <line hits="1" number="147"/>
+ <line hits="1" number="148"/>
+ <line hits="1" number="149"/>
+ <line hits="1" number="150"/>
+ <line hits="1" number="151"/>
+ <line hits="1" number="152"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/common/test_template_format.py" line-rate="1" name="test_template_format.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="49"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/common/test_utils.py" line-rate="0.7965" name="test_utils.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="51"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="58"/>
+ <line hits="1" number="60"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="72"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="81"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ <line hits="1" number="87"/>
+ <line hits="1" number="88"/>
+ <line hits="1" number="89"/>
+ <line hits="1" number="91"/>
+ <line hits="1" number="92"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="99"/>
+ <line hits="1" number="100"/>
+ <line hits="1" number="118"/>
+ <line hits="1" number="119"/>
+ <line hits="1" number="122"/>
+ <line hits="1" number="123"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="125"/>
+ <line hits="1" number="127"/>
+ <line hits="1" number="129"/>
+ <line hits="1" number="131"/>
+ <line hits="1" number="133"/>
+ <line hits="1" number="134"/>
+ <line hits="1" number="136"/>
+ <line hits="1" number="138"/>
+ <line hits="1" number="140"/>
+ <line hits="1" number="141"/>
+ <line hits="1" number="143"/>
+ <line hits="1" number="145"/>
+ <line hits="1" number="146"/>
+ <line hits="1" number="147"/>
+ <line hits="1" number="148"/>
+ <line hits="1" number="150"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="151"/>
+ <line hits="1" number="152"/>
+ <line hits="1" number="153"/>
+ <line hits="1" number="155"/>
+ <line hits="1" number="156"/>
+ <line hits="1" number="158"/>
+ <line hits="1" number="159"/>
+ <line hits="1" number="160"/>
+ <line hits="1" number="161"/>
+ <line hits="1" number="164"/>
+ <line hits="1" number="165"/>
+ <line hits="1" number="167"/>
+ <line hits="1" number="169"/>
+ <line hits="1" number="170"/>
+ <line hits="1" number="171"/>
+ <line hits="1" number="172"/>
+ <line hits="1" number="175"/>
+ <line hits="1" number="176"/>
+ <line hits="1" number="177"/>
+ <line hits="1" number="179"/>
+ <line hits="1" number="180"/>
+ <line hits="1" number="183"/>
+ <line hits="1" number="185"/>
+ <line hits="1" number="186"/>
+ <line hits="1" number="190"/>
+ <line hits="1" number="192"/>
+ <line hits="1" number="193"/>
+ <line hits="1" number="194"/>
+ <line hits="1" number="196"/>
+ <line hits="1" number="197"/>
+ <line hits="1" number="199"/>
+ <line hits="1" number="200"/>
+ <line hits="1" number="203"/>
+ <line hits="1" number="205"/>
+ <line hits="1" number="208"/>
+ <line hits="1" number="210"/>
+ <line hits="1" number="211"/>
+ <line hits="1" number="212"/>
+ <line hits="1" number="213"/>
+ <line hits="1" number="216"/>
+ <line hits="1" number="218"/>
+ <line hits="1" number="219"/>
+ <line hits="1" number="302"/>
+ <line hits="1" number="303"/>
+ <line hits="1" number="304"/>
+ <line hits="1" number="306"/>
+ <line hits="1" number="307"/>
+ <line hits="1" number="390"/>
+ <line hits="1" number="391"/>
+ <line hits="1" number="392"/>
+ <line hits="1" number="393"/>
+ <line hits="1" number="394"/>
+ <line hits="1" number="395"/>
+ <line hits="1" number="397"/>
+ <line hits="1" number="398"/>
+ <line hits="1" number="589"/>
+ <line hits="1" number="590"/>
+ <line hits="1" number="591"/>
+ <line hits="1" number="592"/>
+ <line hits="1" number="593"/>
+ <line hits="1" number="594"/>
+ <line hits="1" number="595"/>
+ <line hits="1" number="596"/>
+ <line hits="1" number="597"/>
+ <line hits="1" number="598"/>
+ <line hits="1" number="600"/>
+ <line hits="1" number="601"/>
+ <line hits="1" number="792"/>
+ <line hits="1" number="793"/>
+ <line hits="1" number="794"/>
+ <line hits="1" number="795"/>
+ <line hits="1" number="796"/>
+ <line hits="1" number="797"/>
+ <line hits="1" number="798"/>
+ <line hits="1" number="801"/>
+ <line hits="1" number="803"/>
+ <line hits="1" number="804"/>
+ <line hits="1" number="805"/>
+ <line hits="1" number="806"/>
+ <line hits="1" number="808"/>
+ <line hits="1" number="809"/>
+ <line hits="1" number="810"/>
+ <line hits="1" number="811"/>
+ <line hits="1" number="814"/>
+ <line hits="1" number="816"/>
+ <line hits="1" number="817"/>
+ <line hits="1" number="820"/>
+ <line hits="1" number="821"/>
+ <line hits="1" number="824"/>
+ <line hits="1" number="826"/>
+ <line hits="1" number="827"/>
+ <line hits="1" number="828"/>
+ <line hits="0" number="829"/>
+ <line hits="0" number="831"/>
+ <line hits="1" number="834"/>
+ <line hits="1" number="836"/>
+ <line hits="0" number="838"/>
+ <line hits="1" number="840"/>
+ <line hits="0" number="842"/>
+ <line hits="0" number="843"/>
+ <line hits="1" number="845"/>
+ <line hits="0" number="847"/>
+ <line hits="0" number="848"/>
+ <line hits="0" number="849"/>
+ <line hits="1" number="851"/>
+ <line hits="0" number="853"/>
+ <line hits="0" number="855"/>
+ <line hits="0" number="856"/>
+ <line hits="1" number="858"/>
+ <line hits="1" number="859"/>
+ <line hits="0" number="861"/>
+ <line hits="0" number="862"/>
+ <line hits="0" number="863"/>
+ <line hits="0" number="864"/>
+ <line hits="0" number="865"/>
+ <line hits="0" number="866"/>
+ <line hits="1" number="868"/>
+ <line hits="0" number="870"/>
+ <line hits="0" number="871"/>
+ <line hits="0" number="872"/>
+ <line hits="0" number="873"/>
+ <line hits="1" number="875"/>
+ <line hits="0" number="877"/>
+ <line hits="0" number="878"/>
+ <line hits="0" number="879"/>
+ <line hits="0" number="884"/>
+ <line hits="0" number="885"/>
+ <line hits="0" number="886"/>
+ <line hits="0" number="887"/>
+ <line hits="0" number="888"/>
+ <line hits="0" number="889"/>
+ <line hits="1" number="891"/>
+ <line hits="0" number="893"/>
+ <line hits="0" number="897"/>
+ <line hits="0" number="901"/>
+ <line hits="0" number="906"/>
+ <line hits="0" number="907"/>
+ <line hits="0" number="908"/>
+ <line hits="0" number="909"/>
+ <line hits="0" number="915"/>
+ <line hits="0" number="920"/>
+ <line hits="0" number="921"/>
+ <line hits="1" number="923"/>
+ <line hits="0" number="925"/>
+ <line hits="0" number="926"/>
+ <line hits="0" number="929"/>
+ <line hits="0" number="930"/>
+ <line hits="1" number="932"/>
+ <line hits="0" number="934"/>
+ <line hits="0" number="935"/>
+ <line hits="0" number="936"/>
+ <line hits="0" number="937"/>
+ <line hits="1" number="939"/>
+ <line hits="0" number="941"/>
+ <line hits="0" number="945"/>
+ <line hits="0" number="950"/>
+ <line hits="0" number="951"/>
+ <line hits="0" number="952"/>
+ <line hits="0" number="953"/>
+ <line hits="0" number="959"/>
+ <line hits="0" number="964"/>
+ <line hits="0" number="965"/>
+ <line hits="1" number="967"/>
+ <line hits="0" number="968"/>
+ <line hits="0" number="969"/>
+ <line hits="0" number="970"/>
+ <line hits="0" number="971"/>
+ <line hits="0" number="972"/>
+ <line hits="1" number="974"/>
+ <line hits="0" number="975"/>
+ <line hits="0" number="976"/>
+ <line hits="0" number="977"/>
+ <line hits="0" number="979"/>
+ <line hits="0" number="980"/>
+ <line hits="0" number="982"/>
+ <line hits="0" number="983"/>
+ <line hits="1" number="986"/>
+ <line hits="1" number="988"/>
+ <line hits="1" number="998"/>
+ <line hits="1" number="1007"/>
+ <line hits="1" number="1013"/>
+ <line hits="1" number="1022"/>
+ <line hits="1" number="1029"/>
+ <line hits="1" number="1030"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1031"/>
+ <line hits="1" number="1033"/>
+ <line hits="1" number="1034"/>
+ <line hits="1" number="1036"/>
+ <line hits="1" number="1037"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1038"/>
+ <line hits="1" number="1040"/>
+ <line hits="1" number="1041"/>
+ <line hits="1" number="1043"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1046"/>
+ <line hits="1" number="1047"/>
+ <line hits="1" number="1049"/>
+ <line hits="1" number="1050"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1051"/>
+ <line hits="1" number="1052"/>
+ <line hits="1" number="1053"/>
+ <line hits="1" number="1055"/>
+ <line hits="1" number="1056"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1057"/>
+ <line hits="1" number="1058"/>
+ <line hits="1" number="1059"/>
+ <line hits="1" number="1061"/>
+ <line hits="1" number="1062"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1063"/>
+ <line hits="1" number="1065"/>
+ <line hits="1" number="1067"/>
+ <line hits="1" number="1068"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1069"/>
+ <line hits="1" number="1071"/>
+ <line hits="1" number="1073"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1076"/>
+ <line hits="1" number="1077"/>
+ <line hits="1" number="1079"/>
+ <line hits="1" number="1080"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1081"/>
+ <line hits="1" number="1082"/>
+ <line hits="1" number="1083"/>
+ <line hits="1" number="1085"/>
+ <line hits="1" number="1086"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1087"/>
+ <line hits="1" number="1088"/>
+ <line hits="1" number="1089"/>
+ <line hits="1" number="1091"/>
+ <line hits="1" number="1092"/>
+ <line hits="1" number="1093"/>
+ <line hits="1" number="1094"/>
+ <line hits="1" number="1095"/>
+ <line hits="1" number="1096"/>
+ <line hits="1" number="1097"/>
+ <line hits="1" number="1099"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1100"/>
+ <line hits="1" number="1101"/>
+ <line hits="1" number="1103"/>
+ <line hits="1" number="1106"/>
+ <line hits="1" number="1107"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1108"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="1109"/>
+ <line hits="1" number="1110"/>
+ <line hits="1" number="1113"/>
+ <line hits="1" number="1115"/>
+ <line hits="1" number="1121"/>
+ <line hits="1" number="1129"/>
+ <line hits="1" number="1131"/>
+ <line hits="1" number="1132"/>
+ <line hits="1" number="1133"/>
+ <line hits="1" number="1134"/>
+ <line hits="1" number="1136"/>
+ <line hits="1" number="1137"/>
+ <line hits="1" number="1138"/>
+ <line hits="1" number="1139"/>
+ <line hits="1" number="1140"/>
+ <line hits="1" number="1142"/>
+ <line hits="1" number="1143"/>
+ <line hits="1" number="1144"/>
+ <line hits="1" number="1145"/>
+ <line hits="1" number="1147"/>
+ <line hits="1" number="1148"/>
+ <line hits="1" number="1149"/>
+ <line hits="1" number="1150"/>
+ <line hits="1" number="1153"/>
+ <line hits="1" number="1154"/>
+ <line hits="1" number="1155"/>
+ <line hits="1" number="1156"/>
+ <line hits="1" number="1157"/>
+ </lines>
+ </class>
+ <class branch-rate="0.5" complexity="0" filename="tests/unit/common/test_yaml_loader.py" line-rate="0.8" name="test_yaml_loader.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="30"/>
+ <line hits="0" number="31"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="34" number="33"/>
+ <line hits="0" number="34"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="0.8333" complexity="0" line-rate="0.9961" name="tests.unit.core">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="tests/unit/core/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="0.8333" complexity="0" filename="tests/unit/core/test_commands.py" line-rate="1" name="test_commands.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="35"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="54"/>
+ <line hits="1" number="55"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="58"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="60"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="63"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="70"/>
+ <line hits="1" number="72"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="74"/>
+ <line hits="1" number="75"/>
+ <line hits="1" number="76"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="79"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="80"/>
+ <line hits="1" number="81"/>
+ <line branch="true" condition-coverage="50% (1/2)" hits="1" missing-branches="86" number="82"/>
+ <line branch="true" condition-coverage="100% (2/2)" hits="1" number="83"/>
+ <line hits="1" number="84"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/core/test_plugin.py" line-rate="1" name="test_plugin.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="54"/>
+ <line hits="1" number="55"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="57"/>
+ <line hits="1" number="59"/>
+ <line hits="1" number="61"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="70"/>
+ <line hits="1" number="71"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="75"/>
+ <line hits="1" number="76"/>
+ <line hits="1" number="77"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="81"/>
+ <line hits="1" number="82"/>
+ <line hits="1" number="84"/>
+ <line hits="1" number="86"/>
+ <line hits="1" number="89"/>
+ <line hits="1" number="90"/>
+ <line hits="1" number="91"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="95"/>
+ <line hits="1" number="96"/>
+ <line hits="1" number="99"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="104"/>
+ <line hits="1" number="105"/>
+ <line hits="1" number="106"/>
+ <line hits="1" number="107"/>
+ <line hits="1" number="108"/>
+ <line hits="1" number="109"/>
+ <line hits="1" number="112"/>
+ <line hits="1" number="114"/>
+ <line hits="1" number="115"/>
+ <line hits="1" number="118"/>
+ <line hits="1" number="121"/>
+ <line hits="1" number="122"/>
+ <line hits="1" number="123"/>
+ <line hits="1" number="126"/>
+ <line hits="1" number="128"/>
+ <line hits="1" number="129"/>
+ <line hits="1" number="132"/>
+ <line hits="1" number="134"/>
+ <line hits="1" number="137"/>
+ <line hits="1" number="138"/>
+ <line hits="1" number="139"/>
+ <line hits="1" number="140"/>
+ <line hits="1" number="141"/>
+ <line hits="1" number="142"/>
+ <line hits="1" number="145"/>
+ <line hits="1" number="147"/>
+ <line hits="1" number="148"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/core/test_report.py" line-rate="1" name="test_report.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="24"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="27"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="41"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="44"/>
+ <line hits="1" number="46"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="57"/>
+ <line hits="1" number="58"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/core/test_task.py" line-rate="0.9875" name="test_task.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="19"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="22"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="28"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="30"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="40"/>
+ <line hits="1" number="42"/>
+ <line hits="1" number="43"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="49"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="62"/>
+ <line hits="1" number="63"/>
+ <line hits="1" number="64"/>
+ <line hits="1" number="65"/>
+ <line hits="1" number="66"/>
+ <line hits="1" number="67"/>
+ <line hits="1" number="68"/>
+ <line hits="1" number="69"/>
+ <line hits="1" number="71"/>
+ <line hits="1" number="72"/>
+ <line hits="1" number="73"/>
+ <line hits="1" number="74"/>
+ <line hits="1" number="76"/>
+ <line hits="1" number="78"/>
+ <line hits="1" number="79"/>
+ <line hits="1" number="80"/>
+ <line hits="1" number="81"/>
+ <line hits="1" number="83"/>
+ <line hits="1" number="84"/>
+ <line hits="1" number="85"/>
+ <line hits="1" number="86"/>
+ <line hits="1" number="88"/>
+ <line hits="1" number="90"/>
+ <line hits="1" number="91"/>
+ <line hits="1" number="93"/>
+ <line hits="1" number="94"/>
+ <line hits="1" number="96"/>
+ <line hits="1" number="97"/>
+ <line hits="1" number="98"/>
+ <line hits="1" number="99"/>
+ <line hits="1" number="101"/>
+ <line hits="1" number="103"/>
+ <line hits="1" number="104"/>
+ <line hits="1" number="105"/>
+ <line hits="1" number="106"/>
+ <line hits="1" number="108"/>
+ <line hits="1" number="109"/>
+ <line hits="1" number="110"/>
+ <line hits="1" number="111"/>
+ <line hits="1" number="113"/>
+ <line hits="1" number="115"/>
+ <line hits="1" number="116"/>
+ <line hits="1" number="118"/>
+ <line hits="1" number="119"/>
+ <line hits="1" number="121"/>
+ <line hits="1" number="122"/>
+ <line hits="1" number="123"/>
+ <line hits="1" number="125"/>
+ <line hits="1" number="126"/>
+ <line hits="1" number="127"/>
+ <line hits="1" number="128"/>
+ <line hits="1" number="130"/>
+ <line hits="1" number="131"/>
+ <line hits="1" number="132"/>
+ <line hits="1" number="133"/>
+ <line hits="1" number="135"/>
+ <line hits="0" number="136"/>
+ </lines>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/core/test_testcase.py" line-rate="1" name="test_testcase.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="20"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="25"/>
+ <line hits="1" number="26"/>
+ <line hits="1" number="29"/>
+ <line hits="1" number="31"/>
+ <line hits="1" number="32"/>
+ <line hits="1" number="33"/>
+ <line hits="1" number="34"/>
+ <line hits="1" number="36"/>
+ <line hits="1" number="37"/>
+ <line hits="1" number="38"/>
+ <line hits="1" number="39"/>
+ <line hits="1" number="40"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ <package branch-rate="1" complexity="0" line-rate="1" name="tests.unit.onap">
+ <classes>
+ <class branch-rate="1" complexity="0" filename="tests/unit/onap/__init__.py" line-rate="1" name="__init__.py">
+ <methods/>
+ <lines/>
+ </class>
+ <class branch-rate="1" complexity="0" filename="tests/unit/onap/test_rest_call.py" line-rate="1" name="test_rest_call.py">
+ <methods/>
+ <lines>
+ <line hits="1" number="15"/>
+ <line hits="1" number="16"/>
+ <line hits="1" number="17"/>
+ <line hits="1" number="18"/>
+ <line hits="1" number="21"/>
+ <line hits="1" number="23"/>
+ <line hits="1" number="45"/>
+ <line hits="1" number="47"/>
+ <line hits="1" number="48"/>
+ <line hits="1" number="50"/>
+ <line hits="1" number="52"/>
+ <line hits="1" number="53"/>
+ <line hits="1" number="54"/>
+ <line hits="1" number="55"/>
+ <line hits="1" number="56"/>
+ <line hits="1" number="57"/>
+ <line hits="1" number="58"/>
+ <line hits="1" number="59"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ </packages>
+</coverage>
diff --git a/tools/cover.awk b/tools/cover.awk
deleted file mode 100644
index e4bb816..0000000
--- a/tools/cover.awk
+++ /dev/null
@@ -1,25 +0,0 @@
-BEGIN{
- template = "%6s %-75s\n"
- printf template, "Delta", "Module Path"
-}
-
-/^-/{
- s = substr($1, 2)
- x[s] = $3;
-};
-
-/^+/{
- s = substr($1, 2)
- d = $3
- if (s in x)
- d = d - x[s]
- y[s" "d] = d
-}
-
-END{
- asorti(y, z1, "@val_num_asc")
- for (i=1; i <= length(z1); i++){
- split(z1[i], z2, " ")
- printf template, z2[2], z2[1]
- }
-}
diff --git a/tools/cover.sh b/tools/cover.sh
index fd9e9fe..e9b9cc5 100644
--- a/tools/cover.sh
+++ b/tools/cover.sh
@@ -23,94 +23,16 @@ else
COVER_DIR_NAME=$( dirname $0 )
fi
-show_diff () {
- diff -U 0 $1 $2 | awk -f $COVER_DIR_NAME/cover.awk
-}
-
run_coverage_test() {
- ALLOWED_EXTRA_MISSING=150
# enable debugging
set -x
- # Stash uncommitted changes, checkout master and save coverage report
- uncommited=$(git status --porcelain | grep -v "^??")
- [[ -n ${uncommited} ]] && git stash > /dev/null
- git checkout HEAD^
-
- baseline_report=$(mktemp -t vnftest_coverageXXXXXXX)
-
- find . -type f -name "*.pyc" -delete
-
- coverage run -p -m unittest discover ./vnftest/tests/unit/core
- coverage run -p -m unittest discover ./vnftest/tests/unit/onap
- coverage run -p -m unittest discover ./vnftest/tests/unit/common
- coverage combine
-
- coverage report > ${baseline_report}
- coverage erase
-
- # debug awk
- tail -1 ${baseline_report}
- baseline_missing=$(awk 'END { if (int($3) > 0) print $3 }' ${baseline_report})
-
- if [[ -z $baseline_missing ]]; then
- echo "Failed to determine baseline missing"
- exit 1
- fi
-
- # Checkout back and unstash uncommitted changes (if any)
- git checkout -
- [[ -n ${uncommited} ]] && git stash pop > /dev/null
-
- # Generate and save coverage report
- current_report=$(mktemp -t vnftest_coverageXXXXXXX)
-
- find . -type f -name "*.pyc" -delete
-
coverage run -p -m unittest discover ./vnftest/tests/unit/core
coverage run -p -m unittest discover ./vnftest/tests/unit/onap
coverage run -p -m unittest discover ./vnftest/tests/unit/common
coverage combine
-
- coverage report > ${current_report}
+ coverage xml
coverage erase
- rm -rf cover-$PY_VER
- coverage html -d cover-$PY_VER
-
- # debug awk
- tail -1 ${current_report}
- current_missing=$(awk 'END { if (int($3) > 0) print $3 }' ${current_report})
-
- if [[ -z $current_missing ]]; then
- echo "Failed to determine current missing"
- exit 1
- fi
-
- # Show coverage details
- new_missing=$((current_missing - baseline_missing))
-
- echo "Missing lines allowed to introduce : ${ALLOWED_EXTRA_MISSING}"
- echo "Missing lines introduced : ${new_missing}"
- echo "Missing lines in master : ${baseline_missing}"
- echo "Missing lines in proposed change : ${current_missing}"
-
- if [[ ${new_missing} -gt ${ALLOWED_EXTRA_MISSING} ]];
- then
- show_diff ${baseline_report} ${current_report}
- echo "Please write more unit tests, we should keep our test coverage :( "
- rm ${baseline_report} ${current_report}
- exit 1
-
- elif [[ ${new_missing} -gt 0 ]];
- then
- show_diff ${baseline_report} ${current_report}
- echo "I believe you can cover all your code with 100% coverage!"
-
- else
- echo "Thank you! You are awesome! Keep writing unit tests! :)"
- fi
-
- rm ${baseline_report} ${current_report}
}