diff options
author | Gao Weitao <victor.gao@huawei.com> | 2019-03-04 00:48:41 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2019-03-04 00:48:41 +0000 |
commit | 91810def813d33d6e555e9b1909796440c53e378 (patch) | |
tree | 4ac808375554f214da14aa97ca60241bee504845 | |
parent | 480cee41e7ebe28feb4fb77955afcd0f3295fba4 (diff) | |
parent | 946470e3a794cc98e2d5b20af74ae3e5dac7d315 (diff) |
Merge "Allow multiple contexts per test case"
-rw-r--r-- | coverage.xml | 3820 | ||||
-rw-r--r-- | tools/cover.awk | 25 | ||||
-rw-r--r-- | tools/cover.sh | 80 |
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} } |