[pgAdmin][RM5048] : code coverage tool

navnath gadakh <[email protected]> Fri, 3 Jan 2020 13:30:16 +0530
Newsgroups gmane.comp.db.postgresql.pgadmin.devel
Message-ID <CAN4uUur=uOQQQrfbJT7+MM9_Wyf+BgKtYzy8=4i62wP9FFFzoA@mail.gmail.com>
--000000000000f2b060059b37b364
Content-Type: multipart/alternative; boundary="000000000000f2b05d059b37b362"

--000000000000f2b05d059b37b362
Content-Type: text/plain; charset="UTF-8"

Hi Team,
      Please find the attached patch to calculate code coverage if pgadmin
code(python tests).
I have extended the existing testsuite to enable coverage. I have used
python's coverage module.

*Some useful commands: *

before running the commands make sure you create .coveragerc file under
/regression directory(details mentioned in README)
Run coverage

    With all modules
        run 'python runtests.py --coverage --exclude feature_tests'
    With specific module
        run 'python runtests.py --pkg
browser.server_groups.servers.tests --coverage'

Thanks!
-- 
*Regards,*
*Navnath Gadakh*

--000000000000f2b05d059b37b362
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_defa=
ult" style=3D"color:rgb(0,0,0);font-family:&quot;trebuchet ms&quot;,sans-se=
rif">Hi Team,</div><div class=3D"gmail_default" style=3D"color:rgb(0,0,0);f=
ont-family:&quot;trebuchet ms&quot;,sans-serif">=C2=A0 =C2=A0 =C2=A0 Please=
 find the attached patch to calculate code coverage if pgadmin code(python =
tests).</div><div class=3D"gmail_default" style=3D"color:rgb(0,0,0);font-fa=
mily:&quot;trebuchet ms&quot;,sans-serif">I have extended the existing test=
suite to enable coverage. I have used python&#39;s coverage module.</div><d=
iv class=3D"gmail_default" style=3D"color:rgb(0,0,0);font-family:&quot;treb=
uchet ms&quot;,sans-serif"><br></div><div class=3D"gmail_default" style=3D"=
color:rgb(0,0,0);font-family:&quot;trebuchet ms&quot;,sans-serif"><u>Some u=
seful commands:=C2=A0</u></div><div class=3D"gmail_default" style=3D"color:=
rgb(0,0,0);font-family:&quot;trebuchet ms&quot;,sans-serif"><br></div><div =
class=3D"gmail_default" style=3D"color:rgb(0,0,0);font-family:&quot;trebuch=
et ms&quot;,sans-serif">before running the commands make sure you create .c=
overagerc file under /regression directory(details mentioned in README)</di=
v><div class=3D"gmail_default" style=3D"color:rgb(0,0,0);font-family:&quot;=
trebuchet ms&quot;,sans-serif"><span style=3D"color:rgb(51,51,51);font-fami=
ly:Menlo;font-size:10.5pt">Run coverage</span></div><div class=3D"gmail_def=
ault" style=3D"color:rgb(0,0,0);font-family:&quot;trebuchet ms&quot;,sans-s=
erif"><pre style=3D"color:rgb(51,51,51);font-family:Menlo;font-size:10.5pt"=
>    With all modules<br>        run &#39;python runtests.py --coverage --e=
xclude feature_tests&#39;<br>    With specific module<br>        run &#39;p=
ython runtests.py --pkg browser.server_groups.servers.tests --coverage&#39;=
</pre></div><div style=3D"color:rgb(0,0,0);font-family:-webkit-standard">Th=
anks!</div><span style=3D"color:rgb(0,0,0);font-family:-webkit-standard;fon=
t-size:medium">--=C2=A0</span><br style=3D"color:rgb(0,0,0);font-family:-we=
bkit-standard"><div dir=3D"ltr" class=3D"gmail_signature" style=3D"color:rg=
b(0,0,0);font-family:-webkit-standard"><div dir=3D"ltr"><div dir=3D"ltr"><d=
iv dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=
=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr"><div dir=3D"ltr=
"><div dir=3D"ltr"><div><font face=3D"trebuchet ms, sans-serif"><b style=3D=
"font-size:14px;white-space:pre-wrap;color:rgb(106,115,125)">Regards,</b><b=
r></font></div><div><font color=3D"#6a737d" face=3D"trebuchet ms, sans-seri=
f"><span style=3D"font-size:14px;white-space:pre-wrap"><b>Navnath Gadakh</b=
></span></font></div></div></div></div></div></div></div></div></div></div>=
</div></div></div></div></div></div></div>

--000000000000f2b05d059b37b362--
--000000000000f2b060059b37b364
Content-Type: application/octet-stream; 
	name="pgadmin_code_coverage_v1.patch"
Content-Disposition: attachment; filename="pgadmin_code_coverage_v1.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_k4xvboi70>
X-Attachment-Id: f_k4xvboi70

ZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uLy5jb3ZlcmFnZXJjLmluIGIvd2ViL3JlZ3Jlc3Np
b24vLmNvdmVyYWdlcmMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi40
MGNlZDVkZWQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcmVncmVzc2lvbi8uY292ZXJhZ2VyYy5p
bgpAQCAtMCwwICsxLDI1IEBACisjIC5jb3ZlcmFnZXJjIHRvIGNvbnRyb2wgY292ZXJhZ2UucHkK
KyMgVGhpcyBpcyBkZWZhdWx0IGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24gZmlsZSByZXF1aXJlIHRv
IHJ1biBjb3ZlcmFnZS5weQorIyBBbnkgcGF0aHMgbWVudGlvbmVkIGZvciBjb3ZlcmFnZSBjb21t
YW5kIGFyZSBpbmRlbnRlZChkZWZhdWx0OjQgc3BhY2VzKQorCitbcnVuXQorIyBNZW50aW9uIHBh
dGhzIGluICdzb3VyY2UnIHRvIG1lYXN1cmUgY29kZSBjb3ZlcmFnZShGdWxsIHByb2plY3QgcGF0
aCkKK3NvdXJjZSA9CisgICAgJFBHQURNSU40X1NSQy93ZWIvcGdhZG1pbi8KKworIyBNZW50aW9u
IHBhdHRlcm5zIGluICdvbWl0JyB0byBvbWl0IGNvZGUgZnJvbSB0aGUgY292ZXJhZ2UgbWVhc3Vy
ZW1lbnQKKyMgSGVyZSwgb21pdCBjb2RlIHdoaWNoIGNvbnRhaW5zIHBhdHRlcm4gJy90ZXN0cy8n
LCAnZmVhdHVyZV90ZXN0cycgZXRjLgorb21pdCA9CisgICAgKi90ZXN0cy8qCisgICAgKi9mZWF0
dXJlX3Rlc3RzLyoKKworIyBNZW50aW9uIHBhdHRlcm5zIGluICdpbmNsdWRlJyB0byBpbmNsdWRl
IGNvZGUgZm9yIHRoZSBjb3ZlcmFnZSBtZWFzdXJlbWVudAorIyBIZXJlLCBjb2RlIGNvdmVyYWdl
IHdpbGwgc2hvdyByZXBvcnQgb25seSBmb3IgbW9kdWxlcyBtZW50aW9uZWQgaW4gdGhlCisjICdp
bmNsdWRlJworaW5jbHVkZSA9CisgICAgIyBGb3IgYWxsIG1vZHVsZXMKKyAgICAqL3dlYi9wZ2Fk
bWluLyoKKyAgICAjIEZvciAnZGF0YWJhc2VzJworICAgICMgKi93ZWIvcGdhZG1pbi9icm93c2Vy
L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvKgorICAgICMgRm9yICd0YWJsZXMnCisg
ICAgIyAqL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl
cy9zY2hlbWFzL3RhYmxlcy8qCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9SRUFETUUgYi93
ZWIvcmVncmVzc2lvbi9SRUFETUUKaW5kZXggYmNiODAwMmYyLi4xNTEzZjZiYmQgMTAwNjQ0Ci0t
LSBhL3dlYi9yZWdyZXNzaW9uL1JFQURNRQorKysgYi93ZWIvcmVncmVzc2lvbi9SRUFETUUKQEAg
LTE5MCw2ICsxOTAsNDIgQEAgUHl0aG9uIFRlc3RzOgogICAgICBFeGFtcGxlIDIpICBFeGVjdXRl
IG9ubHkgcmV2ZXJzZSBlbmdpbmVlcmVkIFNRTCB0ZXN0IGZyYW1ld29yayBmb3Igc29tZSBtb2R1
bGVzCiAgICAgICAgICBydW4gJ3B5dGhvbiBydW50ZXN0cy5weSAtLXBrZyByZXNxbCAtLW1vZHVs
ZXMgc2VxdWVuY2VzLGZ1bmN0aW9ucycKIAorQ29kZSBDb3ZlcmFnZToKKy0tLS0tLS0tLS0tLS0t
LQorCistIFRlc3QgZnJhbWV3b3JrIGlzIGFibGUgdG8gY2FsY3VsYXRlIHRoZSBjb2RlIGNvdmVy
YWdlLgorLSBDb3ZlcmFnZSBwYWNrYWdlKGNvdmVyYWdlKSBpcyBhZGRlZCBpbiAkUEdBRE1JTjRf
U1JDL3dlYi9yZWdyZXNzaW9uL3JlcXVpcmVtZW50cy50eHQgZmlsZQorCitIb3cgdG8gZ2VuZXJh
dGUgY29kZSBjb3ZlcmFnZSByZXBvcnQgZm9yIEFQSSB0ZXN0LXN1aXRlPworLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIENoYW5nZSB0byB0aGUgcmVncmVzc2lvbiB0
ZXN0IGRpcmVjdG9yeToKKyAgICAgcnVuICdjZCAkUEdBRE1JTjRfU1JDL3dlYi9yZWdyZXNzaW9u
JworCistIEJlZm9yZSBydW5uaW5nIGNvZGUgY292ZXJhZ2Ugd2UgbmVlZCBjb25maWd1cmUgJ3Jl
Z3Jlc3Npb24vLmNvdmVyYWdlcmMnIGZpbGUuCisgICBpKS4gQ3JlYXRlICdyZWdyZXNzaW9uLy5j
b3ZlcmFnZXJjJyBmaWxlLgorICAgaWkpLiBDb3B5IGNvbnRlbnQgb2YgJ3JlZ3Jlc3Npb24vLmNv
dmVyYWdlcmMuaW4nIHRvICdyZWdyZXNzaW9uLy5jb3ZlcmFnZXJjJworICAgaWlpKS4gTW9kaWZ5
ICdyZWdyZXNzaW9uLy5jb3ZlcmFnZXJjJyBmaWxlIGFzIHBlciBvdXIgbmVlZCBhcyAncmVncmVz
c2lvbi8KKyAgIC5jb3ZlcmFnZXJjLmluJyBoYXMgZGVmYXVsdCBjb25maWd1cmF0aW9ucworCisg
ICAgICAgIEluICdyZWdyZXNzaW9uLy5jb3ZlcmFnZXJjJyBmaWxlIHdlIG5lZWQgdG8gbWVudGlv
biBzb21lIHBhcmFtZXRlcnMKKyAgICAgICAgbGlrZSAnc291cmNlJyhwcm9qZWN0IHBhdGgpLCdp
bmNsdWRlJyhmaWxlcy9tb2R1bGVzIHRvIGJlIGluY2x1ZGVkIGZvcgorICAgICAgICBjb3ZlcmFn
ZSksJ29taXQnKGZpbGVzL21vZHVsZXMgdG8gYmUgb21pdHRlZCBmcm9tIGNvdmVyYWdlKQorCisg
ICAgICAgIFdlIGNhbiBhbHNvIGFkZCBtb3JlIHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIG91ciBu
ZWVkLgorICAgICAgICBGb3IgbW9yZSBpbmZvIHBsZWFzZSByZWFkIGNvdmVyYWdlLnB5J3Mgb2Zm
aWNpYWwgZG9jdW1lbnQgaGVyZQorICAgICAgICAnaHR0cDovL2NvdmVyYWdlLnJlYWR0aGVkb2Nz
LmlvL2VuL2NvdmVyYWdlLTQuMi9pbnN0YWxsLmh0bWwnCisKKy0gUnVuIGNvdmVyYWdlCisgICAg
V2l0aCBhbGwgbW9kdWxlcworICAgICAgICBydW4gJ3B5dGhvbiBydW50ZXN0cy5weSAtLWNvdmVy
YWdlIC0tZXhjbHVkZSBmZWF0dXJlX3Rlc3RzJworICAgIFdpdGggc3BlY2lmaWMgbW9kdWxlCisg
ICAgICAgIHJ1biAncHl0aG9uIHJ1bnRlc3RzLnB5IC0tcGtnIGJyb3dzZXIuc2VydmVyX2dyb3Vw
cy5zZXJ2ZXJzLnRlc3RzIC0tY292ZXJhZ2UnCisKKy0gQWZ0ZXIgZXhlY3V0aW9uIG9mIGNvdmVy
YWdlLCB3ZSB3aWxsIHNlZSBjb2RlIGNvdmVyYWdlIHJlcG9ydCBvbiBjb25zb2xlLgorICBGb3Ig
YSBuaWNlciBwcmVzZW50YXRpb24sICcvcmVncmVzc2lvbi9jb3ZodG1sJyBkaXJlY3RvcnkgZ2V0
cyBjcmVhdGVkLgorICBPcGVuICdpbmRleC5odG1sJyBmaWxlIGluIGJyb3dzZXIgYW5kIHlvdSB3
aWxsIHNlZSBkZXRhaWwgY292ZXJhZ2UgcmVwb3J0LgorCiBKYXZhc2NyaXB0IFRlc3RzOgogCiAt
IEluc3RhbGwgbm9kZS5qcyBhbmQgeWFybiwgaW4gdGhlIGFwcHJvcHJpYXRlIHdheSBmb3IgeW91
ciBwbGF0Zm9ybS4gT24gbWFjT1Mgd2l0aCBIb21lYnJldyB5b3UgbWlnaHQgdXNlOgpkaWZmIC0t
Z2l0IGEvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMvdGVzdF91dGlscy5weSBiL3dl
Yi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0aWxzL3Rlc3RfdXRpbHMucHkKaW5kZXggNWQxODJl
Y2UyLi4zMzJlMTdmZGMgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL3B5dGhvbl90ZXN0X3V0
aWxzL3Rlc3RfdXRpbHMucHkKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcHl0aG9uX3Rlc3RfdXRpbHMv
dGVzdF91dGlscy5weQpAQCAtMTQsNiArMTQsNyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdXVpZAog
aW1wb3J0IHBzeWNvcGcyCiBpbXBvcnQgc3FsaXRlMworaW1wb3J0IHNodXRpbAogZnJvbSBmdW5j
dG9vbHMgaW1wb3J0IHBhcnRpYWwKIGZyb20gdGVzdHRvb2xzLnRlc3RjYXNlIGltcG9ydCBjbG9u
ZV90ZXN0X3dpdGhfbmV3X2lkCiAKQEAgLTIzLDcgKzI0LDExIEBAIGZyb20gcmVncmVzc2lvbiBp
bXBvcnQgdGVzdF9zZXR1cAogCiBmcm9tIHBnYWRtaW4udXRpbHMucHJlZmVyZW5jZXMgaW1wb3J0
IFByZWZlcmVuY2VzCiAKK0NVUlJFTlRfUEFUSCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpv
aW4ob3MucGF0aC5kaXJuYW1lKAorICAgIG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKSwgIi4u
LyIpKQorCiBTRVJWRVJfR1JPVVAgPSB0ZXN0X3NldHVwLmNvbmZpZ19kYXRhWydzZXJ2ZXJfZ3Jv
dXAnXQorQ09WRVJBR0VfQ09ORklHX0ZJTEUgPSBvcy5wYXRoLmpvaW4oQ1VSUkVOVF9QQVRILCAi
LmNvdmVyYWdlcmMiKQogZmlsZV9uYW1lID0gb3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykKIAog
CkBAIC0xMTQ2LDMgKzExNTEsMjcgQEAgZGVmIGdldF93YXRjaGVyX2RpYWxvZ3VlX3N0YXR1cyhz
ZWxmKToKIGRlZiBnZXRfZHJpdmVyX3ZlcnNpb24oKToKICAgICB2ZXJzaW9uID0gZ2V0YXR0cihw
c3ljb3BnMiwgJ19fdmVyc2lvbl9fJywgTm9uZSkKICAgICByZXR1cm4gdmVyc2lvbgorCisKK2Rl
ZiBpc19jb3ZlcmFnZV9lbmFibGVkKGFyZ3MpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24g
Y2hlY2tzIGZvciBjb3ZlcmFnZSBhcmdzIGV4aXN0cyBpbiBjb21tYW5kIGxpbmUgYXJncworICAg
IDpyZXR1cm46IGJvb2xlYW4KKyAgICAiIiIKKyAgICBpZiAiY292ZXJhZ2UiIGluIGFyZ3MgYW5k
IGFyZ3NbImNvdmVyYWdlIl06CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNl
CisKKworZGVmIHByaW50X2FuZF9zdG9yZV9jb3ZlcmFnZV9yZXBvcnQoY292KToKKyAgICAiIiIK
KyAgICBUaGlzIGZ1bmN0aW9uIHByaW50IHRoZSBjb3ZlcmFnZSByZXBvcnQgb24gY29uc29sZSBh
bmQgc3RvcmUgaXQgaW4gaHRtbAorICAgIGZpbGVzCisgICAgOnJldHVybjogTm9uZQorICAgICIi
IgorICAgIHByaW50KCJcbkNvdmVyYWdlIFN1bW1hcnk6XG4iLCBmaWxlPXN5cy5zdGRlcnIpCisg
ICAgY292LnJlcG9ydCgpCisgICAgY292X2RpciA9IG9zLnBhdGguam9pbihDVVJSRU5UX1BBVEgs
ICJjb3ZodG1sIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb3ZfZGlyKToKKyAgICAgICAgc2h1
dGlsLnJtdHJlZShjb3ZfZGlyKQorICAgIGNvdi5odG1sX3JlcG9ydChkaXJlY3Rvcnk9Y292X2Rp
cikKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL3JlcXVpcmVtZW50cy50eHQgYi93ZWIvcmVn
cmVzc2lvbi9yZXF1aXJlbWVudHMudHh0CmluZGV4IGVkNTE2YTFkZS4uMWViOTIyYjE5IDEwMDY0
NAotLS0gYS93ZWIvcmVncmVzc2lvbi9yZXF1aXJlbWVudHMudHh0CisrKyBiL3dlYi9yZWdyZXNz
aW9uL3JlcXVpcmVtZW50cy50eHQKQEAgLTI3LDcgKzI3LDcgQEAgdGVzdHNjZW5hcmlvcz09MC41
LjAKIHRlc3R0b29scz09Mi4zLjAKIHRyYWNlYmFjazI9PTEuNC4wCiBzZWxlbml1bT09My4xNC4w
Ci0KK2NvdmVyYWdlPT01LjAuMQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIE1vZHVsZXMgc3BlY2lmaWNhbGx5IHJlcXVp
cmVkIGZvciBQeXRob24zLjMgb3IgbGVzc2VyIHZlcnNpb24KICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEv
d2ViL3JlZ3Jlc3Npb24vcnVudGVzdHMucHkgYi93ZWIvcmVncmVzc2lvbi9ydW50ZXN0cy5weQpp
bmRleCBmODBlYjVjN2EuLmYxNjI2OGMyNyAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vcnVu
dGVzdHMucHkKKysrIGIvd2ViL3JlZ3Jlc3Npb24vcnVudGVzdHMucHkKQEAgLTIwLDYgKzIwLDcg
QEAgaW1wb3J0IHN5cwogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IGpzb24KIGltcG9ydCByYW5k
b20KK2ltcG9ydCBjb3ZlcmFnZQogCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtNDgsNiArNDksOCBA
QCBpZiBzeXMucGF0aFswXSAhPSByb290OgogZnJvbSBwZ2FkbWluIGltcG9ydCBjcmVhdGVfYXBw
CiBpbXBvcnQgY29uZmlnCiAKK0NPVkVSQUdFX0NPTkZJR19GSUxFID0gb3MucGF0aC5qb2luKENV
UlJFTlRfUEFUSCwgIi5jb3ZlcmFnZXJjIikKKwogaWYgY29uZmlnLlNFUlZFUl9NT0RFIGlzIFRy
dWU6CiAgICAgY29uZmlnLlNFQ1VSSVRZX1JFQ09WRVJBQkxFID0gVHJ1ZQogICAgIGNvbmZpZy5T
RUNVUklUWV9DSEFOR0VBQkxFID0gVHJ1ZQpAQCAtMjk3LDYgKzMwMCw4IEBAIGRlZiBhZGRfYXJn
dW1lbnRzKCk6CiAgICAgICAgIGhlbHA9J1NraXBzIGV4ZWN1dGlvbiBvZiB0aGUgdGVzdCBjYXNl
cyBvZiBwYXJ0aWN1bGFyIHBhY2thZ2UgYW5kICcKICAgICAgICAgICAgICAnc3ViLXBhY2thZ2Vz
JwogICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNvdmVyYWdlJywgbmFyZ3M9Jz8n
LCBjb25zdD1UcnVlLCB0eXBlPWJvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
PUZhbHNlLCBoZWxwPSdFbmFibGUgY29kZSBjb3ZlcmFnZSBmZWF0dXJlJykKICAgICBwYXJzZXIu
YWRkX2FyZ3VtZW50KAogICAgICAgICAnLS1kZWZhdWx0X2Jyb3dzZXInLAogICAgICAgICBoZWxw
PSdFeGVjdXRlcyB0aGUgZmVhdHVyZSB0ZXN0IGluIHNwZWNpZmljIGJyb3dzZXInCkBAIC0zOTQs
NiArMzk5LDcgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAjIEZhaWx1cmUgZGV0
ZWN0ZWQ/CiAgICAgZmFpbHVyZSA9IEZhbHNlCiAgICAgdGVzdF9yZXN1bHQgPSBkaWN0KCkKKyAg
ICBjb3YgPSBOb25lCiAKICAgICAjIFNldCBzaWduYWwgaGFuZGxlciBmb3IgY2xlYW51cAogICAg
IHNpZ25hbF9saXN0ID0gZGlyKHNpZ25hbCkKQEAgLTQzMCw2ICs0MzYsMTIgQEAgaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKICAgICBub2RlX25hbWUgPSAiYWxsIgogICAgIGlmIGFyZ3NbJ3Br
ZyddIGlzIG5vdCBOb25lOgogICAgICAgICBub2RlX25hbWUgPSBhcmdzWydwa2cnXS5zcGxpdCgn
LicpWy0xXQorCisgICAgIyBTdGFydCBjb3ZlcmFnZQorICAgIGlmIHRlc3RfdXRpbHMuaXNfY292
ZXJhZ2VfZW5hYmxlZChhcmdzKToKKyAgICAgICAgY292ID0gY292ZXJhZ2UuQ292ZXJhZ2UoY29u
ZmlnX2ZpbGU9Q09WRVJBR0VfQ09ORklHX0ZJTEUpCisgICAgICAgIGNvdi5zdGFydCgpCisKICAg
ICB0cnk6CiAgICAgICAgIGZvciBzZXJ2ZXIgaW4gc2VydmVyc19pbmZvOgogICAgICAgICAgICAg
cHJpbnQoIlxuPT09PT09PT09PT09PVJ1bm5pbmcgdGhlIHRlc3QgY2FzZXMgZm9yICclcyc9PT09
PT09PT09PT09IgpAQCAtNTU3LDYgKzU2OSwxNSBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18n
OgogICAgICAgICBmaWxlPXN5cy5zdGRlcnIKICAgICApCiAKKyAgICAjIFN0b3AgY29kZSBjb3Zl
cmFnZQorICAgIGlmIHRlc3RfdXRpbHMuaXNfY292ZXJhZ2VfZW5hYmxlZChhcmdzKToKKyAgICAg
ICAgY292LnN0b3AoKQorICAgICAgICBjb3Yuc2F2ZSgpCisKKyAgICAjICMgUHJpbnQgY292ZXJh
Z2Ugb25seSBpZiBjb3ZlcmFnZSBhcmdzIGdpdmVuIGluIGNvbW1hbmQgbGluZQorICAgIGlmIHRl
c3RfdXRpbHMuaXNfY292ZXJhZ2VfZW5hYmxlZChhcmdzKToKKyAgICAgICAgdGVzdF91dGlscy5w
cmludF9hbmRfc3RvcmVfY292ZXJhZ2VfcmVwb3J0KGNvdikKKwogICAgIHByaW50KCJQbGVhc2Ug
Y2hlY2sgb3V0cHV0IGluIGZpbGU6ICVzL3JlZ3Jlc3Npb24ubG9nXG4iICUgQ1VSUkVOVF9QQVRI
KQogCiAgICAgIyBVbnNldCBlbnZpcm9ubWVudCB2YXJpYWJsZQo=
--000000000000f2b060059b37b364--