From 18dd71420f3fad544b291e51eb37d8bd95b0627d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 05:23:27 +0000 Subject: [PATCH] Probe #42 --- kepler/.coverage | Bin 0 -> 53248 bytes kepler/pyproject.toml | 2 ++ kepler/tests/integration/test_charm.py | 19 +++++++++++++++++++ kosmos/.coverage | Bin 0 -> 53248 bytes kosmos/tests/integration/test_charm.py | 23 +++++++++++++++++++++++ 5 files changed, 44 insertions(+) create mode 100644 kepler/.coverage create mode 100644 kosmos/.coverage diff --git a/kepler/.coverage b/kepler/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..9b9d1a840678a419605551d387e54e3a751152ac GIT binary patch literal 53248 zcmeI4Uu+{s9mjX$oF{hTol9MxlRAkfP4n*>$MW%jl3Xq^B~mM{Dun|ckm_#iO=8aW z=62V2mj_hkigW^mcmN)dfEOfqLJ0BDO7PN$KF~@<5kd%w6A%=sJOC01@zA2jROuI%-9=imP3GryVH+1=#R&tI+wj@WX&rX7fn7-tRBG}eVM3?oV36n&$O zk?4;O=+``w00JNY z0{`Cx_MabO+0jw+))xbNv*84uU3I*0pL*(38|5n-;!62rmp4QhCgzfYwn9Oah3DQ7 zyN)Ne>J3NKTeW)C4(hFK5$rfo>bCFHfVm3obG1RT~QEROOj1DyZsuHEI2(XSb?5j=v!6;~G|7vh!vT*4A^I#lRJfdP`Na<=2C{ z+Y-)Ar`isj+5;=NAfZJY!8=(SD(gjAp%=rP`dlaIbTU66r%tXjZ;^2=H^SPfvb)y)cBPW?S{TIJixN~ym|YY zaukWDvRM!OW0B}`n&aS8Tt~*A?l-cRbUTUcMU94Vw^WyrxkcDG2XKy=;IyM{@K5R!K z*C{39*^T^Zu5;`HmC~_H?vKVf4)zde0x;UZ_=PIzp*ZpWk|>5PdIyp>vn@i zlU=*+QJ1ALIGh25OjxrivAyZG1LeQ+P`Rg^dph=p1$2%h_LOQ~C8zHFN!R!5G_A^M z%U_N{#q5sl%TdUm6`QWxaO_q%H&Bjed^%^{7s`hFXQj1H8UCIuWBdB7vMHKe7Q zI$hMiNHm*vtET5GISq%U(%3IMr#w$Mh)_l`OP$iEE_zRyQK33kj#yFoi@U@`mfEyy zVRx5}a-zf=JI;N@g|pGe?Z64@O-INi${6KXH*8;2J%=J`E}fr^y_Xxv)~b}`Uapb{ z%+b-C%GrG<1f$AfJ;|9C;ddSJAp$UhG&q2 zTiAk|A%!TFzSc?3%LTs4-!bTe4Fo^{1V8`;KmY_l00ck)1V8`;K;VCmK+NnjnOy(( z@jn{;Z?wY(0w4eaAOHd&00JNY0w4eaAOHd&(3=E?`eNfedc~u}%~&q0Ujq2(;?iPC zzU1G>-!}N${GYv9L0Am}AOHd&00JNY0w4eaAOHd&00JNo5g3Y%o6%i>zGN(y&^H0X z_y6hnKc4w^PkZjfS0(= logging.INFO + ] + assert captured_info, "expected Jubilant INFO logs to be retained in caplog" diff --git a/kosmos/.coverage b/kosmos/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..72b63e9dd136fb6bb09fc55be7d91517cca32e60 GIT binary patch literal 53248 zcmeI4Uu+{s9mjX$oF{hTol8@nlRAkfP4n*>$MW%jl3Xq^B~mM{Dun|ckm|0TO=8aW z=62V2mj_hkigW^mcmN)dfEOfqLJ0BDO7PN$KF~@<5kd%w6A%=sJOC01@zA2jROuI%-9=imP3GryVH+1=#R&tI+uj@Wj+h8>8H7-tRBG&Y1V3?oV36n&$O zk?4;O=+``@yUC=n^sQf{_-Bow_}2{nLh3o5ANo#ecJOehk@(8s_n4iiQUo>-009sH zf&Xs;2hR_&%-EQD>x+S1sXKvZR~;|hr=I%MX6eeNxKjGq-dYpKB-~VB|C2hVQoFPQ3za7uQgRQn|>{* zxlQ5RbgHeu*?M3F7bUc4BY3B4LuI`vEA(QRQ=jV;op$C2r=|))F8Re-d zv$DC_YE%gM7g~)y**KIVJaOQ5%h@e&;OfdgblW_jE!*|&XwC?^Y|$`Rt696&a!wk5 zQM7X|s%kXdMIkFe9xyW)&n%Ca26?4()4x`y>#efg3S4zurp7N9X*cwx;Q^M(<;>gH zl%q&IxQ>kP?l-cRbUKObMfJLHw^f&sxkcDGgaUkq80-Ote<7lY4afL5prCT-!mPRkRk0ZaL+{W@aFH? z!LGR9b{R~D&z*^9R@2=KmnM{pavy*B^L@(X+hdA;g9d&1jdhqTL)s>P!r9MXx9c>T z?AbMsx-5;s;S3;T!Y!K;+ZDGJDF2m*%01=W)3!G(pnV*%r&J3nId$((y1rkdX;n^J z{z?=o=5}pgjza#NsJL$3v76!CKslcA>6|rRC>!pdmDby3`1`Vqo$GVTrf71J!~7NM zbW#5z(P-GsEj?e!X*evE#(vp3<$1zEgffab>Xbfp(R<2_3e~Z4#EQya+9M{i)P}tk zc6Zq*r%JrB>)cmdI2(Q34xFIYaD+^vj8Tqt!}dkhb10JL(uKL$d%1yZt#VQBMu6K2dP6{@?o*C}9sUCU48P2u;w!w!=Xs8w<0;;6y<`2|`m^;1>o?Y0*6Y^KsVHn900JNY z0w4eaAOHd&00JNY0wD0;Ai!qMBoe0i^j-FZ5}Su?T8Xub>~SSZYivr1jS>?|tZ%TK z5|`H5q!MeF*n|=nm)W=yt7|N)#L6mrOo`=9Hl{>zg^en4p~x~}$OU#ziNhjGD^WOR zk1CPB!$y=ipJ$IKF@K&7D=|CI&MJ`;j4N?xmRU+n7g$P($!RvE#MBWRR6+SA&8Myt)kC$w6- zIIUG_?QyL(N>f^`ZwRd}t>?5_yELiQ#pMaDR@cV0T3O9%wY>S5R>hSutu7Qtqp%AZ ztqzOlv??5@waVXlRIBs(5v}IWKcdy_{IFIzaaOB4vs|m`f~D2ubV{qKqam%t)Sy=5 zlS!?PatW=DvjbYu%0E)$ajiz_Mn*_7J=(9;NIIs~@JQc)icQ=d#^3+HpGzVh1V8`; XKmY_l00ck)1V8`;KmY`KpTK_rsIsDG literal 0 HcmV?d00001 diff --git a/kosmos/tests/integration/test_charm.py b/kosmos/tests/integration/test_charm.py index f3852e5..5d815a7 100644 --- a/kosmos/tests/integration/test_charm.py +++ b/kosmos/tests/integration/test_charm.py @@ -39,3 +39,26 @@ def test_deploy(charm: pathlib.Path, juju: jubilant.Juju): } juju.deploy(charm, app=APP_NAME, resources=resources) juju.wait(jubilant.all_active) + + +@pytest.mark.xfail( + strict=True, + reason="without log_level=INFO, Jubilant INFO logs are not captured", +) +def test_jubilant_info_logs_captured( + charm: pathlib.Path, juju: jubilant.Juju, caplog: pytest.LogCaptureFixture +): + """Jubilant's INFO logs must be retained in pytest's captured-log section.""" + juju.wait(jubilant.all_active) + # Force Jubilant's logger to emit at INFO (the level the doc claim concerns) so the + # assertion is deterministic regardless of how Jubilant configures its own logger. + jubilant_logger = logging.getLogger("jubilant") + jubilant_logger.setLevel(logging.INFO) + jubilant_logger.info("integration test info probe") + captured_info = [ + record + for record in caplog.records + if (record.name == "jubilant" or record.name.startswith("jubilant.")) + and record.levelno >= logging.INFO + ] + assert captured_info, "expected Jubilant INFO logs to be retained in caplog"