diff mbox series

[v5,2/3] test: Add PStore command tests

Message ID 20200320095924.523-3-frederic.danis@collabora.com
State Accepted
Commit 26f555a6e5454043ed0b0a12d6fce252f5ae5b80
Headers show
Series Add command to display or save Linux PStore dumps | expand

Commit Message

Frédéric Danis March 20, 2020, 9:59 a.m. UTC
Add PStore command to sandbox and sandbox64 defconfigs.
Add test checking:
- 'pstore display' of all records
- 'pstore display' only the 2nd dump record
- 'pstore save' of all records

Signed-off-by: Fr?d?ric Danis <frederic.danis at collabora.com>
Cc: Tom Rini <trini at konsulko.com>
Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
Cc: Wolfgang Denk <wd at denx.de>
Cc: Heiko Schocher <hs at denx.de>
---
Changes in v5:
- Fix test_pstore.py license

Changes in v4:
- Fix PStore memory address in sandbox defconfig files for tests

Changes in v3:
- Replace 1M test file by 3 * 4K files and build pstore memory during test

New in v2:
- Add unit tests

 configs/sandbox64_defconfig                |   2 +
 configs/sandbox_defconfig                  |   2 +
 test/py/tests/test_pstore.py               |  73 +++++++++++++++++++++
 test/py/tests/test_pstore_data_console.hex | Bin 0 -> 4096 bytes
 test/py/tests/test_pstore_data_panic1.hex  | Bin 0 -> 4096 bytes
 test/py/tests/test_pstore_data_panic2.hex  | Bin 0 -> 4096 bytes
 6 files changed, 77 insertions(+)
 create mode 100644 test/py/tests/test_pstore.py
 create mode 100644 test/py/tests/test_pstore_data_console.hex
 create mode 100644 test/py/tests/test_pstore_data_panic1.hex
 create mode 100644 test/py/tests/test_pstore_data_panic2.hex

diff --git a/test/py/tests/test_pstore_data_console.hex b/test/py/tests/test_pstore_data_console.hex
new file mode 100644
index 0000000000000000000000000000000000000000..e7f426e8928a2793457baced5f66ee165ef429f6
GIT binary patch
literal 4096
zcmcgv%TnVw6lJ!(nP0e*4NyZ8zvNd{7IX(_s%e at b&{Z=OMcI}D8f?ie*$MgY`GC1f
z?1ZL6Cktj4lpUjc?>YA&9Sz@~d<cKp+4<+!ogJz&$oSm at K6`cyiWPFg4nS8)#lU-a
z1K>Db&-IDxkz1&BYW{HH_2 at lNt}`hF%c=vQY{D}JqApUVz+M^#mQS38q21kR=dA1k
z656*dwDxHrn#gIb!N!=1-E&>xgDwrjz_Af2FP at z4lvdzaX=YhgZ%XBT48sLX{ZLm_
zPDKnyPbK0<-l>$;Z%Z$c>pK{J at i~S|h6zy>7x$oN7_fK;cGUADG6$&=L1hs`0QKS(
zril``cu(&`!L?=-Xw9IKpfIgDFSv1Kf*Ch~>qQYlPHM`l7^+#x2DWEeiw}D?30&Lu
zqsYURQS9u;kd$Sj3aJL2(beJA^{4}~WayepG3b;^j(N`Ra+%N$G`|L&T41flTrm77
zl7bC7{aUMj%0)j*1m-ZU)vU{&ScXQN4qV at YOcuqU(?+|)pqi=961Pu$5^ROr3u5<e
zapyekE1qT#SQ)0Cy>>IHSVMt?8z_X9<$KXq6bOmEx2Ld5{qrht!K;=+w26WfMvl7`
z1>cRy|3%?>6 at pC^h-aB;+hPDB68mpU;l%*dCB+f#>I%E4o7RHnOt%9;Ht`58$JuI-
zLo0}bx8-35VtqH2im9T at M1}KRN-nA;A$J3z$nv)=j3E at hEur;=!7Ztj0?Bl_pzNtF
zjlYSBYZKSnro{}C=xv$&q%>0FNuaB>)$ulQA_0lE+J8fr#J2Ueq+XO~-ehexHVu3f
z+HSPfz=tG?ZTr7P-qfH4|I;(Wv3r4M`2m9e%rnJu_%!+}!XbeZexIbgf{TxTf at 6nx
zvRFM<JuoF$g~G at 3@z}1a1P?4aUqcn2pi;Vd-OVlR6`bFp)``o9*<C`Z8m#qv09<_=
zTzok at +n=A!2BeRA4SVDCVuFDWhr`PcU(S#B&X2B!M_=!*FEFDB&Wa)D;t{w8A&m%1
z=xpJE^g`lz7M?3(mi at q|u{~>SuS at 8HeUg^Ce_ZD|{ut+SirtG_j?6(l^{c0)Tij6y
z4&r)XA3h$QpB#M;E at e3LOn;9qvWai`w}3mY{Vg_+p8W at WJv%&yQC*f&RWPx8;UcQv
zL!CC4SPSt+yMN1Ci6o~t4smZ|I8IP7(YZdu6hQM|Fft1IlSK7%dEalo_I>6?Nk~#^
z(a>XF5~1RxV-lsrVTlz)D65$2+NS<XM^b^3D5+7P9RTjbMo6L>G+G<5XJn0kW58}f
z<v3faRAa?7LPcSXT`(_=<G8)R_Cnvg#kE!TFqgIM8y2*EMRiW+RmG#MY=kYE`mXI`
z`rAY_LO2E|GAK#}f*pa`)|f>M{uAkHkc1BL2$tc6J8@%UR!1|D8KNeQiv=1`DMOme
z?6J8p=$<K&xnfv8DlsIr-W3znxEh_FTpeA0UR0_`P$%I>l(?Bes(Zbaw+Qo(-P?M5
zQSeKaF&sa-bU0SBfQ!>1-YWK5n<h8=OQ$$|mKmxS3mUd7h at Vc+&Nf4IT-=slBm6N@
z6fY5`9~L!+U2~)PeffL$0C4-z*ic}#DRjJu82zyp-?b=YE#_C4d0#IUt at 7`XD2%X_
zH^h#xc$at)Y?kl#cjv>`l_H-37ck}31Kv1HH*46{njYvf$=F?HcDDmvrxTgu4T3bU
zgZ}O+g#jS}l74 at 6c|1a2V+niB)v+kDG=H>9bHTxz<s;0Uf^ll9jC&LlNs4pY(sdmt
zFv at o=-9y}mo;O~-pwH+MitB`)7rtUXWJy->2~I4A*3+b1CCYVOyobGFXTr{xV}Cau
yo`=L!&&H!;E#e_Fr-O-?OIiLfAGn|6h`eHJ!alb`>%~#CVvF0Qi-|XP{eJ;km?x0{

literal 0
HcmV?d00001

diff --git a/test/py/tests/test_pstore_data_panic1.hex b/test/py/tests/test_pstore_data_panic1.hex
new file mode 100644
index 0000000000000000000000000000000000000000..988929d12c25fee4c4242776a2ed0d78cdc55948
GIT binary patch
literal 4096
zcmb_f-;dn35$0X4!PN+gYmt|}4U(5LnsX>oqNGI<taBH~24eL5qeW5UAW$TAD|odl
zOWN}#Pg|hqbN__&AMD at IkJ{C)WS at hgs2028kTc&5haZRBi*LU_|MzbgbKkG=cwr<w
zPlzyjkZ>U-KfAd1$7R)g?$M>HTkqai!8fmnyeN7Q${^(Yil``WO<hv6FlnXB)Rf9D
zu8V~w+b+~iaYN>9Ix}UFLa}f6+H_s5(nim$>3Z6tv^7;~VdrU6l-1l4pwri7lg{kC
z!Wg_bhiL)38$sG?YL=^o(aYL)1MSS#rJ6fCvNy)wxL)}t)zvDm?HkIowE3|~b4-e=
zw`H2msi at LcWpmrmZQoF<c9}N;Wo at 0Kds)*@O>0tP^|GvL+cX<_C*9u8R5PQW=0ygj
ze6CtcwJMBEt2cyBU2EZM+Pu<hyRdZuao(i*x?Zj-QZv0t5R|)i1&n-&No+d^<1<t1
zE{oeXt>#tHDYS~LLzrnpE2Gmc9gT5a*1bBbja<#!yrfl=bvk&LMY9<%{DB at dx+&6f
zX-F+pyR6dMUat at nQc=x*Ov~FQg)P=oi*%-tOg(>{BB4|ky0-HHQKToh1X0c}|1=@+
z=*h)|g2<=yWm!%LS$nC9MQhE3zNh{<?;F7bFL}Vv<e93=vLf*C!e)h9P&Xi>GhZ*m
zp)=nPV*iRBtJ=I(;KV|ec0!M8Ya6Y=r{clWzeswvQs&Exm74!hV5Lqk>`kF9y at b~N
z5m at 4J?}{$Zsc1;G1m at IlFx`cj+f>(B@;~rf!N0^$JhT%cjxpmOo^S0CJP53AkhcsL
zzJ^6Gwun7nTv4TILa)BkJTjs3<8QFNi01XSQ+PIux1Ci}Pe^k2cw*=~2$0+>YAP66
zo#n<RF*fO5j3MTGQR$I&63OU_YL8E-1Lr&-suO^1MGi5Bs6Ah2$j{I^47m(o9qrY9
zsLQ<=K at 4}I6cB@*$cObsN>4^Hz{Gys`SyD;5>E7b5#d4PJ5i3ZB4ZI?MIO!7bu*#G
zU(audo;-in&~ica=*hP6bZIQT`15%x5cZQ759#6ar$jI8b!itZEtU&AoNW|_E?4Kv
zMO!cD;5OHxh$BN_G|I_ at gw{OZfg-wic-|*4#3XrNL}l!ODqvW>)UK*vH=I at lwgT4h
z3u;=WUt at olMN3~3zm+mFvB+X at bbt_X5nj;?r#qoje!E-rb_p9NS>$G9lXyW0wiz2^
zng6#3%P-<A47Rjz+1|&LB#}rQz5 at Ox9usUE87D_?$ps2v$8#`j%PoI16ehgy;Tx-5
zf at eGYh{xRP at b#Xi at 0wT~4O`do7B=5B!W=uoTI(4N&UC at R;}GAIeu7mo*7ot|yhqEO
zNvLA1Y;Wr(5~?USE?T8>0a)&ZSpd%68NVNdj at l;YJA8kepWN&4eUp1TSlwsC-{W^v
z%aQ+0!$&pQ=STQ)C>_2Je8lEk5BRR(T#_|X=C+GJ3~}1Kscpl?vhvVq<frfHCo;qj
za7VyCH+k^k{O3s at Tj<h`7_b#K4Ib at gv|qImeiC>czWil;5%@`FY_!c!G$7KJQC^?A
zV2B?^GQplPx#Pd)f at 9X3Xu*hn$y6Ud*s_TqwCoxp8N|QIzZ&HqwJYfG9sfIg2fG1@
z`ylU*wx`W*M{FA-envsyqw<)1&;Ps8Hpab2?z?OVU-FnTn<shBh3oOGRipgGKDL;{
zcl_T5fXk3Gi9Og#YgCvC*N`F#B>9~Z3i4KYm-b!H at SKQ}AdtWx9dxJfAFlT)ub1Uk
z%@qusho@<O{&xB}O*41?dWoxWyUS_JC2p_1hr3P3=wa>-*3-8&E(Gp|h;zQJi|cD!
z!-b6DB64+i at 4<_4Q{H*_u=&8vrfN7h73#gaQKg+fc!=C2lCcND{Qy<YW$8nfL-4L-
zY%+9{H#=nC#U6~2vAZJhvqQeiYy|6Shl3r0W`WDO9;1dn_G6Fwp4Au=wZLJ%My7X>
zMh?`DF{R)ED#0dFS3$;B?|>%U4G%FrH+xTyRxS#-kGnvR`Hs;55_JK5c96Ag(_A&J
zV+O8~bF7$KurL?_$D#0$*6(h$t=a-Ni|zpLkK|m%v^$aw_TI=g5ee@~wksL$Kbw7Z
z_a^^^lCh&}!b22||9i>U<9kuyuDt(s$rzO5#Ft(I;+*65h3i7-u4*Wkc^Dx{0scp3
z*7!kS$O?s8jiFN;>Q3oC4Yp*0zpWBm^6c#F6<PdIY-@#Ey^6C~D6OI_;YM3dS5Uae
z*6jH3U`p(meat at l-6v~e?C*!{XZDyK{S(cP86LuCjrW>;f!{-7CyY(mcWnC7^&YO-
z!6n`&$0wcM$uT=PJUKamIeLzcpvsQ$IX-58gW8%M;?p%~&88>pfU!&Z)%y4lsCeAi
z(fW{0r?@YEvSw_0#GW&vDO(d`KV$fa9-)Qj at LM{XqWM{8baKe(+4Q4zCt!4qI8Oe-
gK1K6im&c6#eu`;b{uY4j*Km4t at E9X-&W;cM16+S2TL1t6

literal 0
HcmV?d00001

diff --git a/test/py/tests/test_pstore_data_panic2.hex b/test/py/tests/test_pstore_data_panic2.hex
new file mode 100644
index 0000000000000000000000000000000000000000..8f9d56cbe01e38f5f8fac6d46491497c9d7bda8f
GIT binary patch
literal 4096
zcmcIn%Wm676lIDmnrzxn7$6%5h2?qNc?oG2vD(x?3%EcE6bKA;G#ti+ElQ=N*x6;#
zzwFQS4qql?*)a;5fZ-uDbLR3s&bfE?=I!yn-z7=>`w<@|wO~vLX(phxVf=9R{L~e>
zf5FMAE4S?VD|r2$5T?z9a>c=%k at v4W6_m@=ygnlbA96oGcSU*`=6U(|OOlnVWwV7j
z>f at Gq{AIrR=zpNs${*2dOJDYJg;H9ak)N)8Sa0)HK{i|GFAnH+2-dPpP_kW-_D!3?
zSpdcGEXz2Zl7~FBc?kYjoTorSrhEoq2!0mlg3`WiQfg%*J|KREPr!4;GfriiLA?mV
zN3{5ucERFLnK2Ug&{V4ho~l2`_&&Z;7F5Jnh+l88-A=p+J?%`|Er2LWHKj~c#zceq
zXj)0b+X&rq{~$Ps3NbjY^yhQG-pz9iAqEHx1_=DX$wt{5*u4jP&@KzWX at pKg=609c
z3VH6`<t4(42rq{4)=-N+j(K&@;ocR(0MDw_N>{Djj7Maqpl>;&#)51d^5vl+pv<at
zj-J5uE4RD#JQUmV6WUxMi$TsZW);v5_^!kKD;T$`vUwBysz_b=slI4_5y~P&-!Mhv
zCzwHoGl8|Io14CZ(Ot)4f%^J7L~P#BGrTQk1{}-zj2xf-!KYYotMxiBKJ;>lfx#ND
zHcSbU!O3h&C^=p&m$?1Pt=FME;^dvni)~1!<ZWGhGeVBrDufBM6MCo)UAbJY$qPni
zVUfFnR6i(v$o)$8Z&cKB{L)`snO?avkisp)l>A(Vu)*vJB%l2Dry{@aTzWLyxyxVk
zZ6F7;@G<v+yu)3C$ZM=_Xx%1_uUx+?uJR(CFOXigrSqY4Sgf;P>J-?VudZTf{6&m?
z3<)15mBB!@vEOs52kHXHtyL}Tmg^355lJu|CY0r9LT&H9Q$0|D#ImSB8{R!RJ&BcN
zqp89VvWH^~yVBirt`B<$r6Y8OYzI!@C>rz;!~hA{Y9z$HVqmhq7~tDb47lJ7Pz<vF
zB?ejoDh-OkBHSSc9E4<;pxFb(0KOsy_yGek;1ZCoB7P$VxS<w<xU<uMZgIaDa0Qxm
z5gJVlxRwH1K8o6OTSa<Fbq}A%l)Wtm++Z`%*1_FM(!1ipV!$!6#AAp776S0r(*_<<
z3<Rf|vzFEF7nIILE&WFt+Ajt|U^QdWp%`EnvPTSr&>U*Dh$^sG4Ctt0ASC6Hzef=R
zfg~Ke#Hw>;ql$shjLJ5t#u5Wzn6ynFH=-B_i<;k-?wDc#6o-hWgBx=)047Xy?rkxM
z4LA#-nGCA8j1QC#`x|Tqv9rcqn6u3j7b>;VM54F8PxMtoeSde~pN0S{Mplyty}{qt
z_1DJXh)^#8={p)9mF!k`-|L0|B&+e`WP=HuQ5 at 7NBfseSaif)3z4cr+8qtH|IGePv
zqZ2)7V6 at Hgafu!bx~|RhF}r at Sii*}H4<dS(Y0D~wEW-vTp(5X+?k%G3Ee1o7q(~$U
zv+p_7k-29`Wz<x&N;Rk4j1Q1TSV^%@d-6GXk|fWP<e$Hi&q?ylGxFx!r%#jQ`~Lte
C8DA&>

literal 0
HcmV?d00001

Comments

Tom Rini Oct. 13, 2020, 3:48 p.m. UTC | #1
On Fri, Mar 20, 2020 at 10:59:23AM +0100, Frédéric Danis wrote:

> Add PStore command to sandbox and sandbox64 defconfigs.

> Add test checking:

> - 'pstore display' of all records

> - 'pstore display' only the 2nd dump record

> - 'pstore save' of all records

> 

> Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>

> Cc: Tom Rini <trini@konsulko.com>

> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>

> Cc: Wolfgang Denk <wd@denx.de>

> Cc: Heiko Schocher <hs@denx.de>

> ---

> Changes in v5:

> - Fix test_pstore.py license

> 

> Changes in v4:

> - Fix PStore memory address in sandbox defconfig files for tests

> 

> Changes in v3:

> - Replace 1M test file by 3 * 4K files and build pstore memory during test

> 

> New in v2:

> - Add unit tests

> 

>  configs/sandbox64_defconfig                |   2 +

>  configs/sandbox_defconfig                  |   2 +

>  test/py/tests/test_pstore.py               |  73 +++++++++++++++++++++

>  test/py/tests/test_pstore_data_console.hex | Bin 0 -> 4096 bytes

>  test/py/tests/test_pstore_data_panic1.hex  | Bin 0 -> 4096 bytes

>  test/py/tests/test_pstore_data_panic2.hex  | Bin 0 -> 4096 bytes

>  6 files changed, 77 insertions(+)

>  create mode 100644 test/py/tests/test_pstore.py

>  create mode 100644 test/py/tests/test_pstore_data_console.hex

>  create mode 100644 test/py/tests/test_pstore_data_panic1.hex

>  create mode 100644 test/py/tests/test_pstore_data_panic2.hex


Sorry for the delay here.  When I run the tests I see:
------------------------------------ Captured stdout call -------------------------------------
=>
=> => host load hostfs - 0x3000000 test/py/tests/test_pstore_data_panic1.hex
4096 bytes read in 0 ms
=> => host load hostfs - 0x3001000 test/py/tests/test_pstore_data_panic2.hex
0 bytes read in 0 ms
=> => host load hostfs - 0x30fd000 test/py/tests/test_pstore_data_console.hex
4096 bytes read in 0 ms
=> => pstore set 0x3000000 0x100000
=> => pstore save hostfs - /tmp/tmp1xx0rahx
3798 bytes written in 1 ms (3.6 MiB/s)
4084 bytes written in 0 ms
=> => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-0
3798 bytes read in 0 ms
=> => printenv filesize
filesize=ed6
=> => md5sum 1000008 $filesize
md5 for 01000008 ... 01000edd ==> 8059335ab4cfa62c77324c491659c503
=> => setenv filesize
=> => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-1
Failed to load '/tmp/tmp1xx0rahx/dmesg-ramoops-1'
=> => printenv filesize
## Error: "file
=================================== short test summary info ===================================

So I'm not sure why the second one fails to load.

-- 
Tom
Frédéric Danis Oct. 13, 2020, 4:35 p.m. UTC | #2
Hi Tom,

On 13/10/2020 17:48, Tom Rini wrote:
> On Fri, Mar 20, 2020 at 10:59:23AM +0100, Frédéric Danis wrote:

>

>> Add PStore command to sandbox and sandbox64 defconfigs.

>> Add test checking:

>> - 'pstore display' of all records

>> - 'pstore display' only the 2nd dump record

>> - 'pstore save' of all records

>>

>> Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>

>> Cc: Tom Rini <trini@konsulko.com>

>> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>

>> Cc: Wolfgang Denk <wd@denx.de>

>> Cc: Heiko Schocher <hs@denx.de>

>> ---

>> Changes in v5:

>> - Fix test_pstore.py license

>>

>> Changes in v4:

>> - Fix PStore memory address in sandbox defconfig files for tests

>>

>> Changes in v3:

>> - Replace 1M test file by 3 * 4K files and build pstore memory during test

>>

>> New in v2:

>> - Add unit tests

>>

>>   configs/sandbox64_defconfig                |   2 +

>>   configs/sandbox_defconfig                  |   2 +

>>   test/py/tests/test_pstore.py               |  73 +++++++++++++++++++++

>>   test/py/tests/test_pstore_data_console.hex | Bin 0 -> 4096 bytes

>>   test/py/tests/test_pstore_data_panic1.hex  | Bin 0 -> 4096 bytes

>>   test/py/tests/test_pstore_data_panic2.hex  | Bin 0 -> 4096 bytes

>>   6 files changed, 77 insertions(+)

>>   create mode 100644 test/py/tests/test_pstore.py

>>   create mode 100644 test/py/tests/test_pstore_data_console.hex

>>   create mode 100644 test/py/tests/test_pstore_data_panic1.hex

>>   create mode 100644 test/py/tests/test_pstore_data_panic2.hex

> Sorry for the delay here.  When I run the tests I see:

> ------------------------------------ Captured stdout call -------------------------------------

> =>

> => => host load hostfs - 0x3000000 test/py/tests/test_pstore_data_panic1.hex

> 4096 bytes read in 0 ms

> => => host load hostfs - 0x3001000 test/py/tests/test_pstore_data_panic2.hex

> 0 bytes read in 0 ms

> => => host load hostfs - 0x30fd000 test/py/tests/test_pstore_data_console.hex

> 4096 bytes read in 0 ms

> => => pstore set 0x3000000 0x100000

> => => pstore save hostfs - /tmp/tmp1xx0rahx

> 3798 bytes written in 1 ms (3.6 MiB/s)

> 4084 bytes written in 0 ms

> => => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-0

> 3798 bytes read in 0 ms

> => => printenv filesize

> filesize=ed6

> => => md5sum 1000008 $filesize

> md5 for 01000008 ... 01000edd ==> 8059335ab4cfa62c77324c491659c503

> => => setenv filesize

> => => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-1

> Failed to load '/tmp/tmp1xx0rahx/dmesg-ramoops-1'

> => => printenv filesize

> ## Error: "file

> =================================== short test summary info ===================================

>

> So I'm not sure why the second one fails to load.

>

It seems that the "test_pstore_data_panic2.hex" test file was not loaded 
correctly in memory, so the "dmesg-ramoops-1" was not generated

Regards,

Fred
Tom Rini Oct. 13, 2020, 6:03 p.m. UTC | #3
On Tue, Oct 13, 2020 at 06:35:51PM +0200, Frédéric Danis wrote:
> Hi Tom,

> 

> On 13/10/2020 17:48, Tom Rini wrote:

> > On Fri, Mar 20, 2020 at 10:59:23AM +0100, Frédéric Danis wrote:

> > 

> > > Add PStore command to sandbox and sandbox64 defconfigs.

> > > Add test checking:

> > > - 'pstore display' of all records

> > > - 'pstore display' only the 2nd dump record

> > > - 'pstore save' of all records

> > > 

> > > Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>

> > > Cc: Tom Rini <trini@konsulko.com>

> > > Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>

> > > Cc: Wolfgang Denk <wd@denx.de>

> > > Cc: Heiko Schocher <hs@denx.de>

> > > ---

> > > Changes in v5:

> > > - Fix test_pstore.py license

> > > 

> > > Changes in v4:

> > > - Fix PStore memory address in sandbox defconfig files for tests

> > > 

> > > Changes in v3:

> > > - Replace 1M test file by 3 * 4K files and build pstore memory during test

> > > 

> > > New in v2:

> > > - Add unit tests

> > > 

> > >   configs/sandbox64_defconfig                |   2 +

> > >   configs/sandbox_defconfig                  |   2 +

> > >   test/py/tests/test_pstore.py               |  73 +++++++++++++++++++++

> > >   test/py/tests/test_pstore_data_console.hex | Bin 0 -> 4096 bytes

> > >   test/py/tests/test_pstore_data_panic1.hex  | Bin 0 -> 4096 bytes

> > >   test/py/tests/test_pstore_data_panic2.hex  | Bin 0 -> 4096 bytes

> > >   6 files changed, 77 insertions(+)

> > >   create mode 100644 test/py/tests/test_pstore.py

> > >   create mode 100644 test/py/tests/test_pstore_data_console.hex

> > >   create mode 100644 test/py/tests/test_pstore_data_panic1.hex

> > >   create mode 100644 test/py/tests/test_pstore_data_panic2.hex

> > Sorry for the delay here.  When I run the tests I see:

> > ------------------------------------ Captured stdout call -------------------------------------

> > =>

> > => => host load hostfs - 0x3000000 test/py/tests/test_pstore_data_panic1.hex

> > 4096 bytes read in 0 ms

> > => => host load hostfs - 0x3001000 test/py/tests/test_pstore_data_panic2.hex

> > 0 bytes read in 0 ms

> > => => host load hostfs - 0x30fd000 test/py/tests/test_pstore_data_console.hex

> > 4096 bytes read in 0 ms

> > => => pstore set 0x3000000 0x100000

> > => => pstore save hostfs - /tmp/tmp1xx0rahx

> > 3798 bytes written in 1 ms (3.6 MiB/s)

> > 4084 bytes written in 0 ms

> > => => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-0

> > 3798 bytes read in 0 ms

> > => => printenv filesize

> > filesize=ed6

> > => => md5sum 1000008 $filesize

> > md5 for 01000008 ... 01000edd ==> 8059335ab4cfa62c77324c491659c503

> > => => setenv filesize

> > => => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-1

> > Failed to load '/tmp/tmp1xx0rahx/dmesg-ramoops-1'

> > => => printenv filesize

> > ## Error: "file

> > =================================== short test summary info ===================================

> > 

> > So I'm not sure why the second one fails to load.

> > 

> It seems that the "test_pstore_data_panic2.hex" test file was not loaded

> correctly in memory, so the "dmesg-ramoops-1" was not generated


So there's two problems.  One of which is that we need to do something
like this:
diff --git a/test/py/tests/test_pstore.py b/test/py/tests/test_pstore.py
index 7388f335068c..153b8ff210ac 100644
--- a/test/py/tests/test_pstore.py
+++ b/test/py/tests/test_pstore.py
@@ -4,6 +4,7 @@
 
 import pytest
 import u_boot_utils
+import os
 import tempfile
 import shutil
 
@@ -18,9 +19,9 @@ def load_pstore(u_boot_console):
     """Load PStore records from sample files"""
 
     output = u_boot_console.run_command_list([
-        'host load hostfs - 0x%x %s' % (PSTORE_ADDR, PSTORE_PANIC1),
-        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 4096, PSTORE_PANIC2),
-        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 253 * 4096, PSTORE_CONSOLE),
+        'host load hostfs - 0x%x %s' % (PSTORE_ADDR, os.path.join(u_boot_console.config.source_dir, PSTORE_PANIC1)),
+        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 4096, os.path.join(u_boot_console.config.source_dir, PSTORE_PANIC2)),
+        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 253 * 4096, os.path.join(u_boot_console.config.source_dir, PSTORE_CONSOLE)),
         'pstore set 0x%x 0x%x' % (PSTORE_ADDR, PSTORE_LENGTH)])
 
 def checkfile(u_boot_console, path, filesize, checksum):

to ensure that we load from the source directory and not relative
directory.  The other problem is that the patch results in a zero byte
file for that second one.

-- 
Tom
Tom Rini Oct. 13, 2020, 6:33 p.m. UTC | #4
On Tue, Oct 13, 2020 at 02:03:46PM -0400, Tom Rini wrote:
> On Tue, Oct 13, 2020 at 06:35:51PM +0200, Frédéric Danis wrote:

> > Hi Tom,

> > 

> > On 13/10/2020 17:48, Tom Rini wrote:

> > > On Fri, Mar 20, 2020 at 10:59:23AM +0100, Frédéric Danis wrote:

> > > 

> > > > Add PStore command to sandbox and sandbox64 defconfigs.

> > > > Add test checking:

> > > > - 'pstore display' of all records

> > > > - 'pstore display' only the 2nd dump record

> > > > - 'pstore save' of all records

> > > > 

> > > > Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>

> > > > Cc: Tom Rini <trini@konsulko.com>

> > > > Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>

> > > > Cc: Wolfgang Denk <wd@denx.de>

> > > > Cc: Heiko Schocher <hs@denx.de>

> > > > ---

> > > > Changes in v5:

> > > > - Fix test_pstore.py license

> > > > 

> > > > Changes in v4:

> > > > - Fix PStore memory address in sandbox defconfig files for tests

> > > > 

> > > > Changes in v3:

> > > > - Replace 1M test file by 3 * 4K files and build pstore memory during test

> > > > 

> > > > New in v2:

> > > > - Add unit tests

> > > > 

> > > >   configs/sandbox64_defconfig                |   2 +

> > > >   configs/sandbox_defconfig                  |   2 +

> > > >   test/py/tests/test_pstore.py               |  73 +++++++++++++++++++++

> > > >   test/py/tests/test_pstore_data_console.hex | Bin 0 -> 4096 bytes

> > > >   test/py/tests/test_pstore_data_panic1.hex  | Bin 0 -> 4096 bytes

> > > >   test/py/tests/test_pstore_data_panic2.hex  | Bin 0 -> 4096 bytes

> > > >   6 files changed, 77 insertions(+)

> > > >   create mode 100644 test/py/tests/test_pstore.py

> > > >   create mode 100644 test/py/tests/test_pstore_data_console.hex

> > > >   create mode 100644 test/py/tests/test_pstore_data_panic1.hex

> > > >   create mode 100644 test/py/tests/test_pstore_data_panic2.hex

> > > Sorry for the delay here.  When I run the tests I see:

> > > ------------------------------------ Captured stdout call -------------------------------------

> > > =>

> > > => => host load hostfs - 0x3000000 test/py/tests/test_pstore_data_panic1.hex

> > > 4096 bytes read in 0 ms

> > > => => host load hostfs - 0x3001000 test/py/tests/test_pstore_data_panic2.hex

> > > 0 bytes read in 0 ms

> > > => => host load hostfs - 0x30fd000 test/py/tests/test_pstore_data_console.hex

> > > 4096 bytes read in 0 ms

> > > => => pstore set 0x3000000 0x100000

> > > => => pstore save hostfs - /tmp/tmp1xx0rahx

> > > 3798 bytes written in 1 ms (3.6 MiB/s)

> > > 4084 bytes written in 0 ms

> > > => => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-0

> > > 3798 bytes read in 0 ms

> > > => => printenv filesize

> > > filesize=ed6

> > > => => md5sum 1000008 $filesize

> > > md5 for 01000008 ... 01000edd ==> 8059335ab4cfa62c77324c491659c503

> > > => => setenv filesize

> > > => => load hostfs - 1000008 /tmp/tmp1xx0rahx/dmesg-ramoops-1

> > > Failed to load '/tmp/tmp1xx0rahx/dmesg-ramoops-1'

> > > => => printenv filesize

> > > ## Error: "file

> > > =================================== short test summary info ===================================

> > > 

> > > So I'm not sure why the second one fails to load.

> > > 

> > It seems that the "test_pstore_data_panic2.hex" test file was not loaded

> > correctly in memory, so the "dmesg-ramoops-1" was not generated

> 

> So there's two problems.  One of which is that we need to do something

> like this:

> diff --git a/test/py/tests/test_pstore.py b/test/py/tests/test_pstore.py

> index 7388f335068c..153b8ff210ac 100644

> --- a/test/py/tests/test_pstore.py

> +++ b/test/py/tests/test_pstore.py

> @@ -4,6 +4,7 @@

>  

>  import pytest

>  import u_boot_utils

> +import os

>  import tempfile

>  import shutil

>  

> @@ -18,9 +19,9 @@ def load_pstore(u_boot_console):

>      """Load PStore records from sample files"""

>  

>      output = u_boot_console.run_command_list([

> -        'host load hostfs - 0x%x %s' % (PSTORE_ADDR, PSTORE_PANIC1),

> -        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 4096, PSTORE_PANIC2),

> -        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 253 * 4096, PSTORE_CONSOLE),

> +        'host load hostfs - 0x%x %s' % (PSTORE_ADDR, os.path.join(u_boot_console.config.source_dir, PSTORE_PANIC1)),

> +        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 4096, os.path.join(u_boot_console.config.source_dir, PSTORE_PANIC2)),

> +        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 253 * 4096, os.path.join(u_boot_console.config.source_dir, PSTORE_CONSOLE)),

>          'pstore set 0x%x 0x%x' % (PSTORE_ADDR, PSTORE_LENGTH)])

>  

>  def checkfile(u_boot_console, path, filesize, checksum):

> 

> to ensure that we load from the source directory and not relative

> directory.  The other problem is that the patch results in a zero byte

> file for that second one.


To be clear-er, patchwork is missing the last part of the file and I
can't quite grab it from
https://lists.denx.de/pipermail/u-boot/2020-March/403645.html directly.
If you just want to email me the file off-list, I can fix it up.
Thanks!

-- 
Tom
Tom Rini Oct. 14, 2020, 5:44 p.m. UTC | #5
On Fri, Mar 20, 2020 at 10:59:23AM +0100, Frédéric Danis wrote:

> Add PStore command to sandbox and sandbox64 defconfigs.

> Add test checking:

> - 'pstore display' of all records

> - 'pstore display' only the 2nd dump record

> - 'pstore save' of all records

> 

> Signed-off-by: Frédéric Danis <frederic.danis@collabora.com>

> Cc: Tom Rini <trini@konsulko.com>

> Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>

> Cc: Wolfgang Denk <wd@denx.de>

> Cc: Heiko Schocher <hs@denx.de>


With the test files supplied off-list and some minor changes to ensure
it works reliably with separate source/build/run directories:

Applied to u-boot/master, thanks!

-- 
Tom
diff mbox series

Patch

diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index 71a4d7fccb..f7b3544ae5 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -68,6 +68,8 @@  CONFIG_CMD_CBFS=y
 CONFIG_CMD_CRAMFS=y
 CONFIG_CMD_EXT4_WRITE=y
 CONFIG_CMD_MTDPARTS=y
+CONFIG_CMD_PSTORE=y
+CONFIG_CMD_PSTORE_MEM_ADDR=0x3000000
 CONFIG_MAC_PARTITION=y
 CONFIG_AMIGA_PARTITION=y
 CONFIG_OF_CONTROL=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index f96891ecae..64b878abac 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -77,6 +77,8 @@  CONFIG_CMD_CBFS=y
 CONFIG_CMD_CRAMFS=y
 CONFIG_CMD_EXT4_WRITE=y
 CONFIG_CMD_MTDPARTS=y
+CONFIG_CMD_PSTORE=y
+CONFIG_CMD_PSTORE_MEM_ADDR=0x3000000
 CONFIG_MAC_PARTITION=y
 CONFIG_AMIGA_PARTITION=y
 CONFIG_OF_CONTROL=y
diff --git a/test/py/tests/test_pstore.py b/test/py/tests/test_pstore.py
new file mode 100644
index 0000000000..7388f33506
--- /dev/null
+++ b/test/py/tests/test_pstore.py
@@ -0,0 +1,73 @@ 
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2020, Collabora
+# Author: Fr?d?ric Danis <frederic.danis at collabora.com>
+
+import pytest
+import u_boot_utils
+import tempfile
+import shutil
+
+PSTORE_ADDR=0x3000000
+PSTORE_LENGTH=0x100000
+PSTORE_PANIC1='test/py/tests/test_pstore_data_panic1.hex'
+PSTORE_PANIC2='test/py/tests/test_pstore_data_panic2.hex'
+PSTORE_CONSOLE='test/py/tests/test_pstore_data_console.hex'
+ADDR=0x01000008
+
+def load_pstore(u_boot_console):
+    """Load PStore records from sample files"""
+
+    output = u_boot_console.run_command_list([
+        'host load hostfs - 0x%x %s' % (PSTORE_ADDR, PSTORE_PANIC1),
+        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 4096, PSTORE_PANIC2),
+        'host load hostfs - 0x%x %s' % (PSTORE_ADDR + 253 * 4096, PSTORE_CONSOLE),
+        'pstore set 0x%x 0x%x' % (PSTORE_ADDR, PSTORE_LENGTH)])
+
+def checkfile(u_boot_console, path, filesize, checksum):
+    """Check file against MD5 checksum"""
+
+    output = u_boot_console.run_command_list([
+        'load hostfs - %x %s' % (ADDR, path),
+        'printenv filesize'])
+    assert('filesize=%x' % (filesize) in ''.join(output))
+
+    output = u_boot_console.run_command_list([
+        'md5sum %x $filesize' % ADDR,
+        'setenv filesize'])
+    assert(checksum in ''.join(output))
+
+ at pytest.mark.buildconfigspec('cmd_pstore')
+def test_pstore_display_all_records(u_boot_console):
+    """Test that pstore displays all records."""
+
+    u_boot_console.run_command('')
+    load_pstore(u_boot_console)
+    response = u_boot_console.run_command('pstore display')
+    assert('**** Dump' in response)
+    assert('**** Console' in response)
+
+ at pytest.mark.buildconfigspec('cmd_pstore')
+def test_pstore_display_one_record(u_boot_console):
+    """Test that pstore displays only one record."""
+
+    u_boot_console.run_command('')
+    load_pstore(u_boot_console)
+    response = u_boot_console.run_command('pstore display dump 1')
+    assert('Panic#2 Part1' in response)
+    assert('**** Console' not in response)
+
+ at pytest.mark.buildconfigspec('cmd_pstore')
+def test_pstore_save_records(u_boot_console):
+    """Test that pstore saves all records."""
+
+    outdir = tempfile.mkdtemp()
+
+    u_boot_console.run_command('')
+    load_pstore(u_boot_console)
+    u_boot_console.run_command('pstore save hostfs - %s' % (outdir))
+
+    checkfile(u_boot_console, '%s/dmesg-ramoops-0' % (outdir), 3798, '8059335ab4cfa62c77324c491659c503')
+    checkfile(u_boot_console, '%s/dmesg-ramoops-1' % (outdir), 4035, '3ff30df3429d81939c75d0070b5187b9')
+    checkfile(u_boot_console, '%s/console-ramoops-0' % (outdir), 4084, 'bb44de4a9b8ebd9b17ae98003287325b')
+
+    shutil.rmtree(outdir)