From 89ab54794e9857c428b0d718e4efba2d505ce3f0 Mon Sep 17 00:00:00 2001 From: Joshua Grisham <18266314+joshuagrisham@users.noreply.github.com> Date: Sat, 9 Dec 2023 13:39:32 +0100 Subject: [PATCH] egismoc: added test and capture for 05a1 variant --- tests/egismoc-05a1/custom.pcapng | Bin 0 -> 62756 bytes tests/egismoc-05a1/custom.py | 156 ++++++++++++++++++ tests/egismoc-05a1/device | 262 +++++++++++++++++++++++++++++++ tests/meson.build | 1 + 4 files changed, 419 insertions(+) create mode 100644 tests/egismoc-05a1/custom.pcapng create mode 100755 tests/egismoc-05a1/custom.py create mode 100644 tests/egismoc-05a1/device diff --git a/tests/egismoc-05a1/custom.pcapng b/tests/egismoc-05a1/custom.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..4821c01222b66340a8066289ebc3f7aaf69b2298 GIT binary patch literal 62756 zcmd5_349bq_MU`rghN094?H4&6kH928&RR|>w6y|#UNufTXtVqOykD5# zP&v73g;2eL$5%M?nrnXEXDPK7o;Z<{nqQ9WU3%FyA7q0een4b7!KI+@>4$*;i8 z!8`gO)&1DTW&H8#t&4x&pyMn0(0i`H@8IHRhJgP??W*p7Fro+5{mgyP_$Q}?QcqA* zZ##2Y`BP3#N##beE$P#2vgy$0TwzoC)V+@KDV_G=LOzidyrU0;zcl3eo+c3T4*qBO{3v1NW7U_l8&}**1mwx_A_*~A=)qUfA(D-MR z%L;V}wFq4vYEFOI^tx}Tb*LHrDVs7b2eppoTZpA6gt+>BCm(E*DmN0!J@lU$A zBz}if#?NdE{CO*tZzT~UKZ%B)-KHcy^aJ=io>T3wq2Y=%__&34^r7G;Pw&Uv{6_fM z^qy-hZl*o2+RunwOB9XYkT;~HxyL$wnMYOj*Q!gbKcS(K$1C`gwMzNp;t_`O2k+?{;P1oc416d*}n{=YyA7Kl5*l z?&oQ1l%LvMDBlIfJ9?vEhUq2a52MP3{an;Gy^tHi75LK6+G~}c45Ojwm8a+rIocUp z`mm^-^&vDix(~J21^3}Ej`acf(uXtF|1lpfyxjVbe`|Cfo*^52{H>(BrkD>hA-toP zx}U=IlKUu^Di`LVcKh_guJoEK@TCunHYgt$k!y*f@hhLCw&c8&);$En^QP{Eq4d|bt&{<(~HWl=;A}5f*CaoU^yQ_`Bd&BxhY;@yFQ? z@`Ve>dh?O#g{$Z_*O11SoUQvvwLgz`;aZ{y&Zcpc59yrUB(rH&(`HSYW?h`wEc5b< zJ2h$9xqZjXv17)#Cp{6{n`E|b(Xm7G&X;$HzP)K?R`X7s+qZ0Gw-hRw=9;9xcJY1up-5p|Ao#&p|XOFjssY=c3 zpKtM<@$e~afQmS0|IQx%gZ3{UK z=L-A|3P03dA7?u~#+ghg)J|9T4LwMFoQq|iO&gn>nvy|Um0&3d6{vP``@AvwYKyj3 zM|MUYm(jkA%w3865#WbOiW=C-{p|sUr`1>@BU*u5co~=jyx-f0T~E zUdBWfqpfHkuCWTV{^ciVj|;L-Etek(WyIRqeC~v}JyNf4tlG}-h;~UHzovF^iPt9H z9;PbsKdI)ye+zy`@;GR+Kdtf3lPvtaUEu(-%hl2NlE+%v+^SIMbY0yy-Uo5aetI)) zta1fSdELxg3OI_{CZl-s;g)l8B93&sk`pSd9JvwKra+F_*jy;ktxA54T_d~lv9*gdH)cBIKlde=VN-IraiHphAo{uFum^uPe2N@*XNLW8 z=<-F~%pA7<$?9jm#+MwvNcdc8=<2@lJ_rt_etJ22;E3hO`2hYza#UxCKaTV-sC{%ipoI(}?i#ko{Sv0i zh5Kb2*>&hO*O0c0IECG6gH^u-IUaPm*y0z9TnzZLhA6)hJsx<+_Br?VHu?*E#3}Fx ztyNc`V(PDs8|2sT4W_nGD0tAuHTjDv!C7C&U>=ainHA9uWl#}2dj#qYzXNRHObRXzpb z=+ibih9lrhjxvT-cH5sQNAWa&@1;4mzcy=swB{q`PQRhD%aP++wGV9HEqd&R>5bI< zLqo4OnxC)nq4^!P<{!F3ou8D2=6^fNyA)=@9cqJDo%mlu$RB{Hn0AU+dj~YZQvtLfj@2o zw@Qt(sAElN{=2T`r^eL$0Xs|D%+YHRU~|A<{pFCQY5q54(;*++s{2v$^bOhM64gg{ zi+TvtljLdDdlnz_xtPm?PpdWt&mo^K8f5iE&rwUBo}Q<2i$wJ#p5|Zq^dJ)#n1h!b zT{&On8ZmPL-Den2rD^^rWYeMl;R>6Qqff{tmmnN{@T|qR*JC2b(gzFtafK;9#|W_$C!exL#>uz9iY(rg0)qA z<&UN5ecf$CEl1j>)RMaEl#fBQB=>ELkM)z1qulk%ryv|1Bm8XYN3Ot^933NkEuLo@SHIwoqtf(#C)sqU(Ok`1TfH{Wj3ctiB?w2y-m&<_BXP|z zQtyww7@VVnV#jMHeb(lgL94kIvO8w+DV_grB$HGS1K`c zIgO8bot(rHb+?QJ(Ustz3Bgebi#4)qLG&lBY*LP&_3=^INwbSt2fwRAC%~=D*`=ep*b;&&#(qk+Vv!vd;6DLzb53r`$2t@C2KZr&q})m#99vThv3C zo}`{Exzpm~J4TYH>ly^lA#<-9XY>U4lBb5p{pFDH^8Ahc#+kUlxu4`{$}j#nDoyiy z^&e+B(%+$y9991{I7hVySbUt1OOAH^7M!C`2|t@+gDdbQM@xVA$5A}ZpK`7BN6za& zlP{rfT=Du^huh>Se9Uo+9=lj`Vq&U>poA2zp_Pwrg)r)1ORi2Q&}=m~6wD_B3- z-&iF~8>Hsnxx(UOovGw0wNmi8{I(OO89f2M(QO(uvbdT;xxUJQqWM zWqja|qtZ0L)ud^LBiNK2y+Ag(1UWA6m~8Q}wpntNy)QUNg}rV!906Z)bp9HD*IVLg z{@1;4H~j^B$n(L`jqB943CHa<`;ds{AAWO&(R|=b%^&|K^&P9S(EKKwXBf>#yhzPo zeUbW(Rx&mJEwan~$rW~GoOaDr{Srj;$85Fu80#`lzi;I4yJud_U$fwDGq!;*O=}Bt-k_Rn5j-8UHGk@_n2bZU9^4w1Dh?z!DfDfL!=$z}xS?V8>q50cK z&a`nMzIz6H)$a}Yntv-z^9SBI({O~m4IIJdqhymy5RTg1Z1It|f+OJHHb?msWd3b4 z;b&9ZxB_2tRCzA9KJjZV@ic$_XzLHoE1>!C=bd@VAIG(7A2>$b5+~1pyxwf1`M`(f z1OK!3Ww&PMtNOF8=HuQP`kE8k*RWIa*X&F?Z?=h3oCC`^eVOcX38MKIH?a6Pr8CXxKc{U$}lCHUF`@g0I;*UUPxbeBevXzqo1H<@qyfEijsoYmqWW z-)NrvJim7B1-9SCbtmxLw?*(ge`6hspKq>rs_Ra`|D|Q{Jpb6*g=TC6UusF~_iX+f zRS$*cZ*w)jQcTUCxS^y?$<+(Hlbh$)d|{#C$@;0T527D?@3DT8?8Gc#+9EZ7#ETX` z^wa8N-up!Xzv%todH#|)i>#h#eDKs&=lM%+R83Aso?kp~k&TOg!5=mM27ARfCpXWZ zeBUC=k+uoVht0{Ol#fy4P;GJ_!}KUQnp5Dx{~SK4u>|}%ql4%9*Uq;b#)t9kH0gI|$x+W0{5JbzNb5;L|PjW6SL z(rBAoMICEG^S8R1pB_{5M=Y>5L*K)vNIe;Gi@zMQv^+n3;S$3WY)YQe$67yK!eTsx z>2s+k3l>@Y{2$;`Bu@**1q50nLOTT&Fa?911@JVq6o3k!d`3d(~yne%c{;!>BNBX`rA6+x3M*F^WPQh}^ zm9`76VE2@Z=%1;?v&q}TRHg2(obSQ^8h$CRfIlkp59E;xmRsG|_>!x-jk$G+=aIWc z($1*`X?gU-{ya#P3tvO%v1obW1bWTY`3?R=@>I2n@}~vu!!=d`PhB3RJsM=!DMwEk zeE-KRT{7wRqS1g7ngW#;_YFo5`XMsi(hPx zcac0cr5m^hz2Dr%_lpdVz?VEu8P7fBgGWC9@!Y@Bd(H054~xtgFaA9`kNa*d=j+-` zX*t#!vguHhxWcC7XzWDgV^mF{|3eAW3(3)tk1T!&zu%ze=`hynO;$byxi+((@UzJ- zSKv#I3JIS}qUUTf$MS08lb;qDO)SRoTc5MQpWLa+pW0-TYpjB?mdHIeTl~xRBkW3^ zej>YE;@RZwVXBg+gP&Ra{Nsqd$g#Bgc7Hq-urVsEQS%NInR^NWU-ES2EYS;8>yLxXD6S>SIDkI&E^WblE>+Dg7cVv$l^N( z;8!G%&b;6}Za8Xr1is|))&>7v9=)2``MA~0Pz=qiut@pK`V~*ZFdj?O%q?V-`Qr+k zlEc|#lS@2%ygf`+j>Y!BSp4EoqjQ+L*dK>^Y>Wzz#n%Zxn_hDTzU1&O!sk*$SNDzg zL5xMInO=^Z-z-PPV(tK%8G6VcM;TqIF?^5C6np=eux=mw_%_*e=sj21lpM_?n_Pl$ zboL30?|c`XqmTa*oTL8`J~#rtDA#z%|-fAMhjU6`Oc@}ld#ilIr_TMPM+&$ajv{E6h~#S!YeG5u*DuCWTVe*e$3 zM>lnkPAAsR_`I}KgVcuGD|xQdd#mMHw;Ni7e(IO2`YB$Uxf$Uo_?2@kKC}Ys6@Y)m zjsCtf^b#AR!ee*+E87YmqSsu3FM0lHx4N&v0NRIZiK4Xu-x;dYllJJIyM%sjgkBWf zk{Wt)YPo!V&*fL5c+MNC`K5LEOVnw6573kX{x5Db_r3SnQ*F~WJFdmC2Yu6XuexUf zkFj{;3^7w$e((_4bO?*9JodomUb4w0o;}_krYhs9`s*HikskoRm%hJ6kaMcGpX{*X zTH{N;Z$F~u%7Tt-Z!W&$iyh{i3i%YSC&Ql_zxkUJOyrzu-2NSgC)kzaaxK~A66Bn! z=2sRUxw0IWy-)a?6LbTe+QZ}W$cyiob1L9Vo?7lu*Tl2vf4G(?VqE$?r}B=qrW@Ze zV-4pvlE<+-le;e98M5h+Q(R$Fa(IAjatSilvR?M!i}PZ{W*)7t2s+2~D&c2S+qlZ} zV&JFjQthun`*1B$1c&i*@mpW99AO?oaN&c~0X zRJpKjy!7}FHW%0U$i;i=TzqPa>hAt!k&CZi{)5pG%)25+(Y^_-s{5J;)z>j&=HeYz z{9tqhHW8z+S+2F}lOQ^Bb)m(#bM$In2Kc94tbB?-$cYZYX`aiF;&jQa2aS#ZA2E8R z=Jd=r)jtH)5pOQuV$wmAi|3nbC@L3+z4dRYx%dC2TzogR+o5jYigtr%w7cIwX(N>& zx%jTh9(;4nOz{l-zMK7Blkn!^egA#PYf!m#^Q~$M04?4`wtnuVN>$Gu%+s+c=k9R!c=80e)5+VAJ>&} z?14}Bw^BX@8P|uqA2H(^_;Os2U!vA31s&JkT>RWVM{F)Gu5ZAfW%Qe6obM#_`ornr44Po7azULS0_J2b886+29o8!SZ^E;8_ve|NfYqAQstyK7!`j2`?O)f6ik)ZvZ z#&PthJUq*NB_325n)_<}kz9Ow{i9~Ah0L|lNPRvrKDpn^XnfvL%b{2cgg$tFg6e}H zW3A`;79Z=W5TGe=#a` z#G8vR>tDNwCQRLV@%$g*kJ5VBTlRk{M*o*`@s3y5Haw%;pdZ=Uz@<~l`v z$rM-TX!Mx*_yM){IhlFh>@9T+=ddd|pS@W1S&%$$#8!)+|1JEA9NQxv^tYzFfcl6F zYe)MF&nU{H*Ia=wId6Yd&FyE=K3q!_kt6uc^SnIn$vngGSd8zG==Dg5@jb`=-RnA$ zx$~PEond%{UCHB3KdXKS!sCX<7T*!~K80T!e(`s&>jF&#^LR9^uHg~*lE$26T-O|DfiF3%zT4mZ*W_{5%hB8_mLq(pS#mUYk3Wt|%hxZfYWom2b!#>+ombhsqz0 zdvB?MH*xay&>PK6z7BlMo%hlCdVV#Pvy{c$dEK{~86CkrAP}Qy-^0~a&XcTs{e80O zP~UNdO~fc{UR^`=Ne~^$*=+G~Uk=15@ZYWJFOSRPwo>6^LDnP9jg9~xF$(-upC>P0 zZ~Ittldt3cE0UwX@BiP+*DEeTgAOA5!(Z=Qa%UC)2=_s;^Y2RlCzKc`dee>&C`bNZ)x&0;7iW_ok^D- zs3e-F)tyN@*K4+T&?QYLKbqe5zUx-bJW}-Yrk;VqKqde_$$ANPur9Huq(w|>m4 zul-+cW%L#JlEXb|>Rh1)QNy)F5#ugio_5tMtqe!Fcc0|wy$b%;e3kY+*c!#H%s7Kh z$x%T?0$v?}X1KQI6u}X)nJP#UGugL6aWm}(teBf^dZ(J^jC5bULP5J4*XE74o35VFL`QunaULt)suLd|LVmZY+Q)@TB5&F z+66lAiTV5EgW7a393iKZ96d%h-9C38V?TsxljP`?ODsO}Rmsr_$6r3|)%=asI~tCF zFFE?9mYR!Al%sf>|3b}90De&)lnZHM%<|(7*S3>hk`z_jTzge4@=Yi(KX18L0 zzkyVm<{u!N4*9?pHlZi5d4OzkiRz=fMLmS+N$N@W6Bb|2^#Q;8rr^JUbm2Q!8a)BN zlg7nmEB9JPPI-+Hpr^8B4-)1kiQ3Y(Inon(_s5RL}yviKo! zUrTT_;KAVQ$^Pn*VBsn%^i3&Hr-HRYvo1ok_;%m-YP3`y`_IW5QS2ei!$(M8A*uzu@ye#|K;d zd~sh(;2*E=Z{EkN`8&7tHDeq2QcHHuvvVF%$C?_3Weo2dN_D0SP*<}r^51n zMo)k*d8#nN-@HLQ&A+IypNR{McgfL3Ba=I~^Ea~TP~W;$Tqi{z{*7#Mi5iFQ7WELO zC&^LDlNLXg=BL~gd~RpoZT$^Lz?U5DyDWLv;0{ggZ~6h(tRkq040(Z2I$s5~o~dH&hut~dP-yU0yo_hYilB}ktC zmo$ry{1kaU@UOYsU;gOT-&aNrG-Dh1h*RKC|IX%CQOBB3&3`n{+Qhkqr4n zd47{y23nrPZ;->!gJhFSR3F_f>LE-|Qcq@&wfH#SlRS0*F?bHyv-2RMC%~6HReRH4 z4jE7LFYY?X#0AdlB}d2K@^}A`((?S3WYeL(d zZQ>e&)RUF@{?>7oruhp(BMeWlDfJ}h4(q3i{OFHi`dDiIyD1jmUQbeaKH^}(ox#^} z-M@2$)f4?&fs&^_IkfDUN}_raPxEKJH^Ron4bjI_m%i$^PB|u`#)aD&`&(kAY5r-u zY#*9yhWa~b=)?EPCYN~jczc+t`gS(hkB@#c1BJ(p`@+Qgim+kw3+T!Lu+z*j9kG#POU{Etrr zzlM7t>lQn<#T+E?ZyLj+M~$quzw3jgY5q0M zZ!tW-Bd$gXl?7`dFhUz=!68rv_d9T_236 z`Hxo_YvRJ@#OixYuvhO2b$u{dn%}tUSi=!)N{*fvcQ8f8kwq3@(d2f7IfMM)T!-0owQNE_Dn~W}aX1!HFhLVOPfKtlg?#f@uD& z4_SQ7y~sE{vd3R;;?487)SPU`w)xFIm7Ad7x@X(_G({b2Li67lOtF=g7IFW2ug#6M ztWC^^NzK0`C%N~d%Bels@?^g6pw7qO=euN+OH?1-E$SgmPf|~|)v@@P`;>K=k zR6l<;*=RoSrJmf@K-~u?Q9X&L`Fp?iaAdA`Mr!_m3j*EiC+51HAqQ+9+WGKEjy@xs zT!L`);x`uGUZYUwVu*p(7Y4uAPlslyLi4}dCbJ79Z#J;0gHCYWlm@o~P~e z_*-+)Y@;W@hn@g`&3@H>9?xb>YYg{E@Dxw;Pi{Qh#0BPAFrHxV_lsl1(l_H2<6?79aCtlB07D1m`F{Wsczp_>!aajf#XsIf|$GMX7U4e__57 zb35p-qLZ(SYeP~`jvP*Io#0Bh0jt>4axq1GS z8Vd|Zuqip3vN?F3zptjnM+``g_H7BC=MOm9as+(I(SWV~IEttF+fK3mVC+iG-?lAy zp8tB^hm7U}ADTZv=Yw}`Q)8ekH2XJ_J31 z%~n4ocdh34WYZxI+$!#$0h`a0O)gQ7Ywi~H5T+-Y=l8tL;v+|eo&dkvq2OyZXLns< zG#~hqr|!kcTdVo}6-#Vf=zGLSj>c?C?pnc>Z(_?D>nHO1`nD>-i z?Rz4*Yc>B&Ho+5YN}jqcw|)|xF-w@XNX?&{Y4I@^EqUs>BKTU(s-YD|^MNllf9u5L zt<_wfvckj#t{+H_hD}cHTFvWHR~U|9Q*w0XZNb-Sb}r|^$2CupKUJ9GZ#_hwjuJlC z`;zdp={;9mr;;2M5k42zT&^XG7)$Xq|GPBnPd=_;3eA6Rs`AGXhKy}(FHGCz+)iGX zXN=|pADVxS&hvlJzfWBjntx-rXRPMKe?3Qx_I<5?-#VF^U+aozOq`m2(euQxyKuTX zwg=JtvE3~`;s{y-{6qQvaue^|&bhxoYsa>^wy889_{*A=cOxdzJb#O;`IRFy-+NEv z#-WvlD~xUE32Z*!LfxAtQLcXNOiiqqU58tmL6z-ET|Q2B9s1m@;(MO3JGrIuH3(Om zQY=1nS#s6BRq%W699Xl`XbSM5DQN#qU#a#dswulhQir4#q~*~Q_t%3|xv+*UTDP)j z0=?#n~Ef~v^5hK)m&}H8f;3Ao+X=HqUMqA7WELOC&|%SCtG}+gUGS= zNSEOAbQ=jjo9uE0z8q_p{J}L7UQK+b)@q}P_8e4Qn?OwT)@vqeQl(Pkv&q}TR3%Rf>sWl8yGx#G(YgjdztOOYjZtBZdhy)VMFsSlEAS;x zt^2F?GnZUT6p?4WwvqN|A0bXnONvv(_9)_25L!hr+#g<^x7PRYtiQJ@$6}9bRDUFu z=kqKNcAiMhp&-7hT^pR|Dd$^!J9nq%P=Nmn;Roe;MH9<2@FmaZ(QkuuDJ!16$IgRI zSDRxe=1(Qhx8$n+XhCh}8mnMDcV0q!G{`=Uzxfk+?2Hngv`@5S=kjKjC$vkB_xdAM zKgMelw>3;vj`wxVEq<|C?;9Bh&2RJ<2YGCa3Xk{AyVe?A2EL4gE2{WAuad`3?|5Cl zXRXm?T;Gs9)~}|{tCBfhd%eHb96w=K^0b}oa$&piN|-iEo>KQ(d|Zc;x_swJ{?303 zbR(Fjvp-vF?&}PE$BC$MO`x|`bN&^E4Um*lzM`Kq7dwTb>cs;-??1OeEiJ zkiWt31iO-_qV>VoUpBtO;^X)#d3t_>zx9`1o{9-Sn>wB=@Fh>q3;uXIF@~^GhyTuY F{vW14HAw&f literal 0 HcmV?d00001 diff --git a/tests/egismoc-05a1/custom.py b/tests/egismoc-05a1/custom.py new file mode 100755 index 00000000..3a662380 --- /dev/null +++ b/tests/egismoc-05a1/custom.py @@ -0,0 +1,156 @@ +#!/usr/bin/python3 + +import traceback +import sys +import time +import gi + +gi.require_version('FPrint', '2.0') +from gi.repository import FPrint, GLib + +# Exit with error on any exception, included those happening in async callbacks +sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1)) + +ctx = GLib.main_context_default() + +c = FPrint.Context() +c.enumerate() +devices = c.get_devices() + +d = devices[0] +del devices + +d.open_sync() + +assert d.get_driver() == "egismoc" +assert not d.has_feature(FPrint.DeviceFeature.CAPTURE) +assert d.has_feature(FPrint.DeviceFeature.IDENTIFY) +assert d.has_feature(FPrint.DeviceFeature.VERIFY) +assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK) +assert d.has_feature(FPrint.DeviceFeature.STORAGE) +assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST) +assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE) +assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR) + +def enroll_progress(*args): + print("finger status: ", d.get_finger_status()) + print('enroll progress: ' + str(args)) + +def identify_done(dev, res): + global identified + identified = True + identify_match, identify_print = dev.identify_finish(res) + print('indentification_done: ', identify_match, identify_print) + assert identify_match.equal(identify_print) + +# Beginning with list and clear assumes you begin with >0 prints enrolled before capturing + +print("listing - device should have prints") +stored = d.list_prints_sync() +assert len(stored) > 0 +del stored + +print("clear device storage") +d.clear_storage_sync() +print("clear done") + +print("listing - device should be empty") +stored = d.list_prints_sync() +assert len(stored) == 0 +del stored + +print("enrolling") +template = FPrint.Print.new(d) +template.set_finger(FPrint.Finger.LEFT_INDEX) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +p1 = d.enroll_sync(template, None, enroll_progress, None) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +print("enroll done") +del template + +print("listing - device should have 1 print") +stored = d.list_prints_sync() +assert len(stored) == 1 +assert stored[0].equal(p1) + +print("verifying") +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +verify_res, verify_print = d.verify_sync(p1) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +print("verify done") +assert verify_res == True + +identified = False +deserialized_prints = [] +for p in stored: + deserialized_prints.append(FPrint.Print.deserialize(p.serialize())) + assert deserialized_prints[-1].equal(p) +del stored + +print('async identifying') +d.identify(deserialized_prints, callback=identify_done) +del deserialized_prints + +while not identified: + ctx.iteration(True) + +print("try to enroll duplicate") +template = FPrint.Print.new(d) +template.set_finger(FPrint.Finger.RIGHT_INDEX) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +try: + d.enroll_sync(template, None, enroll_progress, None) +except GLib.Error as error: + assert error.matches(FPrint.DeviceError.quark(), + FPrint.DeviceError.DATA_DUPLICATE) +except Exception as exc: + raise +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +print("duplicate enroll attempt done") + +print("listing - device should still only have 1 print") +stored = d.list_prints_sync() +assert len(stored) == 1 +assert stored[0].equal(p1) +del stored + +print("enroll new finger") +template = FPrint.Print.new(d) +template.set_finger(FPrint.Finger.RIGHT_INDEX) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +p2 = d.enroll_sync(template, None, enroll_progress, None) +assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE +print("enroll new finger done") +del template + +print("listing - device should have 2 prints") +stored = d.list_prints_sync() +assert len(stored) == 2 +assert (stored[0].equal(p1) and stored[1].equal(p2)) or (stored[0].equal(p2) and stored[1].equal(p1)) +del stored + +print("deleting first print") +d.delete_print_sync(p1) +print("delete done") +del p1 + +print("listing - device should only have second print") +stored = d.list_prints_sync() +assert len(stored) == 1 +assert stored[0].equal(p2) +del stored +del p2 + +print("clear device storage") +d.clear_storage_sync() +print("clear done") + +print("listing - device should be empty") +stored = d.list_prints_sync() +assert len(stored) == 0 +del stored + +d.close_sync() + +del d +del c diff --git a/tests/egismoc-05a1/device b/tests/egismoc-05a1/device new file mode 100644 index 00000000..49f1e9ea --- /dev/null +++ b/tests/egismoc-05a1/device @@ -0,0 +1,262 @@ +P: /devices/pci0000:00/0000:00:14.0/usb1/1-5 +N: bus/usb/001/003=12010002FF0000407A1CA10513120102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005 +E: BUSNUM=001 +E: DEVNAME=/dev/bus/usb/001/003 +E: DEVNUM=003 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_BUS=usb +E: ID_MODEL=ETU905A80-E +E: ID_MODEL_ENC=ETU905A80-E +E: ID_MODEL_ID=05a1 +E: ID_REVISION=1213 +E: ID_SERIAL=EGIS_ETU905A80-E_0C5A44PCU833 +E: ID_SERIAL_SHORT=0C5A44PCU833 +E: ID_USB_INTERFACES=:ff0000: +E: ID_USB_MODEL=ETU905A80-E +E: ID_USB_MODEL_ENC=ETU905A80-E +E: ID_USB_MODEL_ID=05a1 +E: ID_USB_REVISION=1213 +E: ID_USB_SERIAL=EGIS_ETU905A80-E_0C5A44PCU833 +E: ID_USB_SERIAL_SHORT=0C5A44PCU833 +E: ID_USB_VENDOR=EGIS +E: ID_USB_VENDOR_ENC=EGIS +E: ID_USB_VENDOR_ID=1c7a +E: ID_VENDOR=EGIS +E: ID_VENDOR_ENC=EGIS +E: ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc. +E: ID_VENDOR_ID=1c7a +E: MAJOR=189 +E: MINOR=2 +E: PRODUCT=1c7a/5a1/1213 +E: SUBSYSTEM=usb +E: TYPE=255/0/0 +A: authorized=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=ff\n +A: bDeviceProtocol=00\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=100mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=1213\n +A: bmAttributes=a0\n +A: busnum=1\n +A: configuration= +H: descriptors=12010002FF0000407A1CA10513120102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005 +A: dev=189:2\n +A: devnum=3\n +A: devpath=5\n +L: driver=../../../../../bus/usb/drivers/usb +L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:51/device:52/device:57 +A: idProduct=05a1\n +A: idVendor=1c7a\n +A: ltm_capable=no\n +A: manufacturer=EGIS\n +A: maxchild=0\n +A: physical_location/dock=no\n +A: physical_location/horizontal_position=center\n +A: physical_location/lid=no\n +A: physical_location/panel=unknown\n +A: physical_location/vertical_position=center\n +L: port=../1-0:1.0/usb1-port5 +A: power/active_duration=955612\n +A: power/async=enabled\n +A: power/autosuspend=2\n +A: power/autosuspend_delay_ms=2000\n +A: power/connected_duration=955612\n +A: power/control=on\n +A: power/level=on\n +A: power/persist=0\n +A: power/runtime_active_kids=0\n +A: power/runtime_active_time=955338\n +A: power/runtime_enabled=forbidden\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=1\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=ETU905A80-E\n +A: quirks=0x0\n +A: removable=fixed\n +A: rx_lanes=1\n +A: serial=0C5A44PCU833\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=491\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0/usb1 +N: bus/usb/001/001=12010002090001406B1D020005060302010109021900010100E0000904000001090000000705810304000C +E: BUSNUM=001 +E: CURRENT_TAGS=:seat: +E: DEVNAME=/dev/bus/usb/001/001 +E: DEVNUM=001 +E: DEVTYPE=usb_device +E: DRIVER=usb +E: ID_AUTOSUSPEND=1 +E: ID_BUS=usb +E: ID_FOR_SEAT=usb-pci-0000_00_14_0 +E: ID_MODEL=xHCI_Host_Controller +E: ID_MODEL_ENC=xHCI\x20Host\x20Controller +E: ID_MODEL_FROM_DATABASE=2.0 root hub +E: ID_MODEL_ID=0002 +E: ID_PATH=pci-0000:00:14.0 +E: ID_PATH_TAG=pci-0000_00_14_0 +E: ID_REVISION=0605 +E: ID_SERIAL=Linux_6.5.0-9-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_SERIAL_SHORT=0000:00:14.0 +E: ID_USB_INTERFACES=:090000: +E: ID_USB_MODEL=xHCI_Host_Controller +E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller +E: ID_USB_MODEL_ID=0002 +E: ID_USB_REVISION=0605 +E: ID_USB_SERIAL=Linux_6.5.0-9-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 +E: ID_USB_SERIAL_SHORT=0000:00:14.0 +E: ID_USB_VENDOR=Linux_6.5.0-9-generic_xhci-hcd +E: ID_USB_VENDOR_ENC=Linux\x206.5.0-9-generic\x20xhci-hcd +E: ID_USB_VENDOR_ID=1d6b +E: ID_VENDOR=Linux_6.5.0-9-generic_xhci-hcd +E: ID_VENDOR_ENC=Linux\x206.5.0-9-generic\x20xhci-hcd +E: ID_VENDOR_FROM_DATABASE=Linux Foundation +E: ID_VENDOR_ID=1d6b +E: MAJOR=189 +E: MINOR=0 +E: PRODUCT=1d6b/2/605 +E: SUBSYSTEM=usb +E: TAGS=:seat: +E: TYPE=9/0/1 +A: authorized=1\n +A: authorized_default=1\n +A: avoid_reset_quirk=0\n +A: bConfigurationValue=1\n +A: bDeviceClass=09\n +A: bDeviceProtocol=01\n +A: bDeviceSubClass=00\n +A: bMaxPacketSize0=64\n +A: bMaxPower=0mA\n +A: bNumConfigurations=1\n +A: bNumInterfaces= 1\n +A: bcdDevice=0605\n +A: bmAttributes=e0\n +A: busnum=1\n +A: configuration= +H: descriptors=12010002090001406B1D020005060302010109021900010100E0000904000001090000000705810304000C +A: dev=189:0\n +A: devnum=1\n +A: devpath=0\n +L: driver=../../../../bus/usb/drivers/usb +L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:51/device:52 +A: idProduct=0002\n +A: idVendor=1d6b\n +A: interface_authorized_default=1\n +A: ltm_capable=no\n +A: manufacturer=Linux 6.5.0-9-generic xhci-hcd\n +A: maxchild=12\n +A: power/active_duration=956044\n +A: power/async=enabled\n +A: power/autosuspend=0\n +A: power/autosuspend_delay_ms=0\n +A: power/connected_duration=956044\n +A: power/control=auto\n +A: power/level=auto\n +A: power/runtime_active_kids=2\n +A: power/runtime_active_time=956041\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=disabled\n +A: power/wakeup_abort_count=\n +A: power/wakeup_active=\n +A: power/wakeup_active_count=\n +A: power/wakeup_count=\n +A: power/wakeup_expire_count=\n +A: power/wakeup_last_time_ms=\n +A: power/wakeup_max_time_ms=\n +A: power/wakeup_total_time_ms=\n +A: product=xHCI Host Controller\n +A: quirks=0x0\n +A: removable=unknown\n +A: rx_lanes=1\n +A: serial=0000:00:14.0\n +A: speed=480\n +A: tx_lanes=1\n +A: urbnum=181\n +A: version= 2.00\n + +P: /devices/pci0000:00/0000:00:14.0 +E: DRIVER=xhci_hcd +E: ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller +E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller +E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI +E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller +E: ID_VENDOR_FROM_DATABASE=Intel Corporation +E: MODALIAS=pci:v00008086d000051EDsv0000144Dsd0000C1CAbc0Csc03i30 +E: PCI_CLASS=C0330 +E: PCI_ID=8086:51ED +E: PCI_SLOT_NAME=0000:00:14.0 +E: PCI_SUBSYS_ID=144D:C1CA +E: SUBSYSTEM=pci +A: ari_enabled=0\n +A: broken_parity_status=0\n +A: class=0x0c0330\n +H: config=8680ED51060490020130030C0000800004001A3E6000000000000000000000000000000000000000000000004D14CAC1000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C108000000000000000000000005908700D804E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F110112000000 +A: consistent_dma_mask_bits=64\n +A: d3cold_allowed=1\n +A: dbc=disabled\n +A: dbc_bInterfaceProtocol=01\n +A: dbc_bcdDevice=0010\n +A: dbc_idProduct=0010\n +A: dbc_idVendor=1d6b\n +A: device=0x51ed\n +A: dma_mask_bits=64\n +L: driver=../../../bus/pci/drivers/xhci_hcd +A: driver_override=(null)\n +A: enable=1\n +L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:51 +A: index=9\n +L: iommu=../../virtual/iommu/dmar2 +L: iommu_group=../../../kernel/iommu_groups/11 +A: irq=142\n +A: label=Onboard - Other\n +A: local_cpulist=0-15\n +A: local_cpus=ffff\n +A: modalias=pci:v00008086d000051EDsv0000144Dsd0000C1CAbc0Csc03i30\n +A: msi_bus=1\n +A: msi_irqs/142=msi\n +A: numa_node=-1\n +A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 0 0 128 0\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 6 7 2112 7\nxHCI ring segments 28 28 4096 28\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 1 32 128 1\nbuffer-32 0 0 32 0\n +A: power/async=enabled\n +A: power/control=auto\n +A: power/runtime_active_kids=1\n +A: power/runtime_active_time=957198\n +A: power/runtime_enabled=enabled\n +A: power/runtime_status=active\n +A: power/runtime_suspended_time=0\n +A: power/runtime_usage=0\n +A: power/wakeup=enabled\n +A: power/wakeup_abort_count=0\n +A: power/wakeup_active=0\n +A: power/wakeup_active_count=0\n +A: power/wakeup_count=0\n +A: power/wakeup_expire_count=0\n +A: power/wakeup_last_time_ms=0\n +A: power/wakeup_max_time_ms=0\n +A: power/wakeup_total_time_ms=0\n +A: power_state=D0\n +A: resource=0x000000603e1a0000 0x000000603e1affff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n +A: revision=0x01\n +A: subsystem_device=0xc1ca\n +A: subsystem_vendor=0x144d\n +A: vendor=0x8086\n + diff --git a/tests/meson.build b/tests/meson.build index c919ec6e..efa573fb 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -52,6 +52,7 @@ drivers_tests = [ 'nb1010', 'egis0570', 'egismoc', + 'egismoc-05a1', 'fpcmoc', 'realtek', 'focaltech_moc',