qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel]  [PATCH resend 0/7] acpi unit-test: new features
@ 2013-12-26 14:54 Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 1/7] acpi unit-test: add test files Marcel Apfelbaum
                   ` (7 more replies)
  0 siblings, 8 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

This resend includes the following:

Compare resulting aml vs expected aml:
 - runs only if iasl is installed on the host machine.
 - the test plan:
   1. Dumps the ACPI tables as AML on the disk.
   2. Runs iasl to disassembly the tables into ASL files.
   3. Runs iasl to disassembly the offline AML files.
   3. Compares them with expected offline ASL files.
 - the test runs for both default machine and q35.
 - in case the test fails, it can be easily tweaked to
   show the differences between the ASL files and
   understand the issue.

Extract iasl executable from configuration:
 - The test checked if iasl is installed by running "iasl"
   and checking the error output.
 - It is better to use the iasl executable as appears
   in configuration.

Rebuild aml files functionality:
 - Acpi unit-test will fail every time the acpi tables change.
 - The series adds a script that rebuilds the expected aml files, so the test
   will pass. It also validates the modifications.
 - The acpi unit test will rebuild the aml tables if TEST_ACPI_REBUILD_AML
   environment variable is set.

Marcel Apfelbaum (7):
  acpi unit-test: add test files
  configure: added acpi unit-test files
  acpi unit-test: compare DSDT and SSDT tables against expected values
  configure: add CONFIG_IASL to config-host.h
  acpi unit-test: extract iasl executable from configuration
  acpi unit-test: added script to rebuild the expected aml files
  acpi unit-test: hook to rebuild expected aml files

 configure                                    |   4 +
 scripts/create_config                        |   4 +
 tests/acpi-test-data/pc/APIC                 | Bin 0 -> 120 bytes
 tests/acpi-test-data/pc/DSDT                 | Bin 0 -> 4407 bytes
 tests/acpi-test-data/pc/FACP                 | Bin 0 -> 116 bytes
 tests/acpi-test-data/pc/FACS                 | Bin 0 -> 64 bytes
 tests/acpi-test-data/pc/HPET                 | Bin 0 -> 56 bytes
 tests/acpi-test-data/pc/SSDT                 | Bin 0 -> 2104 bytes
 tests/acpi-test-data/q35/APIC                | Bin 0 -> 120 bytes
 tests/acpi-test-data/q35/DSDT                | Bin 0 -> 7344 bytes
 tests/acpi-test-data/q35/FACP                | Bin 0 -> 116 bytes
 tests/acpi-test-data/q35/FACS                | Bin 0 -> 64 bytes
 tests/acpi-test-data/q35/HPET                | Bin 0 -> 56 bytes
 tests/acpi-test-data/q35/MCFG                | Bin 0 -> 60 bytes
 tests/acpi-test-data/q35/SSDT                | Bin 0 -> 2104 bytes
 tests/acpi-test-data/rebuild-expected-aml.sh |  36 ++++
 tests/acpi-test.c                            | 266 ++++++++++++++++++++++++---
 17 files changed, 289 insertions(+), 21 deletions(-)
 create mode 100644 tests/acpi-test-data/pc/APIC
 create mode 100644 tests/acpi-test-data/pc/DSDT
 create mode 100644 tests/acpi-test-data/pc/FACP
 create mode 100644 tests/acpi-test-data/pc/FACS
 create mode 100644 tests/acpi-test-data/pc/HPET
 create mode 100644 tests/acpi-test-data/pc/SSDT
 create mode 100644 tests/acpi-test-data/q35/APIC
 create mode 100644 tests/acpi-test-data/q35/DSDT
 create mode 100644 tests/acpi-test-data/q35/FACP
 create mode 100644 tests/acpi-test-data/q35/FACS
 create mode 100644 tests/acpi-test-data/q35/HPET
 create mode 100644 tests/acpi-test-data/q35/MCFG
 create mode 100644 tests/acpi-test-data/q35/SSDT
 create mode 100755 tests/acpi-test-data/rebuild-expected-aml.sh

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel]  [PATCH resend 1/7] acpi unit-test: add test files
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 2/7] configure: added acpi unit-test files Marcel Apfelbaum
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

Added unit-test's expected aml files to be compared
with the actual ACPI tables.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 tests/acpi-test-data/pc/APIC  | Bin 0 -> 120 bytes
 tests/acpi-test-data/pc/DSDT  | Bin 0 -> 4407 bytes
 tests/acpi-test-data/pc/FACP  | Bin 0 -> 116 bytes
 tests/acpi-test-data/pc/FACS  | Bin 0 -> 64 bytes
 tests/acpi-test-data/pc/HPET  | Bin 0 -> 56 bytes
 tests/acpi-test-data/pc/SSDT  | Bin 0 -> 2104 bytes
 tests/acpi-test-data/q35/APIC | Bin 0 -> 120 bytes
 tests/acpi-test-data/q35/DSDT | Bin 0 -> 7344 bytes
 tests/acpi-test-data/q35/FACP | Bin 0 -> 116 bytes
 tests/acpi-test-data/q35/FACS | Bin 0 -> 64 bytes
 tests/acpi-test-data/q35/HPET | Bin 0 -> 56 bytes
 tests/acpi-test-data/q35/MCFG | Bin 0 -> 60 bytes
 tests/acpi-test-data/q35/SSDT | Bin 0 -> 2104 bytes
 13 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tests/acpi-test-data/pc/APIC
 create mode 100644 tests/acpi-test-data/pc/DSDT
 create mode 100644 tests/acpi-test-data/pc/FACP
 create mode 100644 tests/acpi-test-data/pc/FACS
 create mode 100644 tests/acpi-test-data/pc/HPET
 create mode 100644 tests/acpi-test-data/pc/SSDT
 create mode 100644 tests/acpi-test-data/q35/APIC
 create mode 100644 tests/acpi-test-data/q35/DSDT
 create mode 100644 tests/acpi-test-data/q35/FACP
 create mode 100644 tests/acpi-test-data/q35/FACS
 create mode 100644 tests/acpi-test-data/q35/HPET
 create mode 100644 tests/acpi-test-data/q35/MCFG
 create mode 100644 tests/acpi-test-data/q35/SSDT

diff --git a/tests/acpi-test-data/pc/APIC b/tests/acpi-test-data/pc/APIC
new file mode 100644
index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d
GIT binary patch
literal 120
zcmZ<^@N}+VU|?W;>*Vk35v<@85#a0y6k`O6f!H9Lf#JbFFwFr}2jnsGfW!{`1CdNz
hKn!AlSgfo-nis_4<b<)ffC?aD+}vOm3)_F75db|X4FLcE

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/pc/DSDT b/tests/acpi-test-data/pc/DSDT
new file mode 100644
index 0000000000000000000000000000000000000000..b12e5eb85bb22f27fe10ce0fcf1d9a71f38360eb
GIT binary patch
literal 4407
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
TLKSsYG*scK!dFF86`Sxs!<!O4

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/pc/FACP b/tests/acpi-test-data/pc/FACP
new file mode 100644
index 0000000000000000000000000000000000000000..0639999ed1f748d44977f88e63d6a0ab49add040
GIT binary patch
literal 116
zcmZ>BbPgzCU|?Xp>E!S15v<@85#a0w6k`O6f!H9L;lclU2Owr-;AGeY<bM1BBsPE~
l7#LWfG>FXsWItFBVgbdO7+6?<^nd>U{9pknv9y7K0RZCI76AYN

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/pc/FACS b/tests/acpi-test-data/pc/FACS
new file mode 100644
index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93
GIT binary patch
literal 64
PcmZ>BbPjf4ARhn#RKNjV

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/pc/HPET b/tests/acpi-test-data/pc/HPET
new file mode 100644
index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1
GIT binary patch
literal 56
xcmeYWa1F6wU|?WmcJg=j2v%^42ypfQiZKGkKx`1rxTviGNCClxe-N610RT2D3IPBB

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/pc/SSDT b/tests/acpi-test-data/pc/SSDT
new file mode 100644
index 0000000000000000000000000000000000000000..5ab1b96af004737738f3386e73e4dc1d425ab77e
GIT binary patch
literal 2104
zcmZvc%TC)s6o$vSVVs*23<>wHDs@$dJG(lzDW**_#D-D@X|kyVi%M*}qf}+Xk{6&-
z-lK0;dL}vlf_AdWcV<2v|DK#onnu}yErext2jOx0s(T^Bl-4XEgl7Hic8iz7mVT-#
zRNWHAs`C8&`;RR<=gOh2PO2JZhuX|Ov=INh@bSfh`-VEIbXzq`1&f|RyrY_S!O1zf
zX|=0&bT{{1<??M_rClY%#81*djqZAmjL$P$9Vb!sH13`GzTcq~ahjEd7~RTvFtl`K
zjlP$;keThZRhk9jM(>QDN{?eP5x)u(r|#8;k<9dl%*K<kSNSxQnRRoeYg>iGv{7}O
z_xdF0n7)Yzz2xMQL9ai<0^tR9Px{HMyWW~UMsK)3zX~0H^rKr0rSI!D^omKO^wCY<
zAqZtc@31ety6Od)n1r$yXn|@Snd&s-IzI8OP{t>^yz)Y;pB;V9J(VA?9C5GPU)!M^
z^qUbybsxS6eQ2Y**Qwu8bjD|W$Ffxr4e5up=xNkUSrZw?Cwgz{ZLybwmot0Y?B(I*
zb$XrdWxpNv3h)YMZ<oCyyrS9LW3L3SWcK#in}auJ_72#y;n`;IkiB_$^JXt#&w=Nd
zy)JuYcxAH}vR8puF?$hvRd`ji7qeG`S2KG@?A77bjb6uR&xPljJ<MMNUc>BR{+jTb
zW)JhX0B^zUVg5XLp4r3vEy7zgdzil^cuQsv^VfpcGJBZ6HoUgk!~8A7TQ+-`zZG~Z
zW)JhX3UAfyVgA<Ot(iT{-#WZ?vxoWHfVW}xFn^oyHvjXy4=ow?v)S!u-RnE<dU_M)
zh_{&Y#M{gT;vME9@h)?Tc#nCGc%RuOK46|FK4f-?1LiVum$^b5GFOQs<{EL#Tqiza
zcJEXA|I9Ksh>^cZjQk74$nOy&{~|H+FA*buix~Oa#K^x)jQlIa$iGUA{A<L>zfO$&
M8^p-JNlf|w0)H3)9{>OV

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/APIC b/tests/acpi-test-data/q35/APIC
new file mode 100644
index 0000000000000000000000000000000000000000..84509e0ae4cabeb5ead3e42a4edfa50abddbc17d
GIT binary patch
literal 120
zcmZ<^@N}+VU|?W;>*Vk35v<@85#a0y6k`O6f!H9Lf#JbFFwFr}2jnsGfW!{`1CdNz
hKn!AlSgfo-nis_4<b<)ffC?aD+}vOm3)_F75db|X4FLcE

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/DSDT b/tests/acpi-test-data/q35/DSDT
new file mode 100644
index 0000000000000000000000000000000000000000..59243b952d78c465298e0a2ec05a52f480dd92fb
GIT binary patch
literal 7344
zcmb7J&2JmW9i1g9X|<%Jr9{iJ{2@b!7EM2*4@YSWv@p5LFPoB9r0ley0j}hvP+_28
zT?dF`1d!FDc64YFs|k9f0-n?U2hFiZ-+Jh!z4n-*uufLr@Au=#Gph)Qb=aLZd~bg9
zhP(S#!>|=@{`Hbl&aX@BL9KPQ^s^`k(dQ_os7+_Tp1GsiyJ4x?ak8n5(|(-gHV!4X
z@V&5ftLprDC;lvsA3TYjt*+Ys-2ZfYtNYuh@wOt;``ca5qlW*TPOH>u??ypu)5)qY
zyd1YnPB!-i4U7KL^(d&9Tz@^s)V*pBc){(|>S3<<+;iPdAg#39DTYnuc5c-}$8Ft;
zBIO2~&4wz3qn-6uklDYdg7BTiUS;H9CqL!+?bUxSznHsp{j+x-6u<n*KYp=)&&z<Y
zgtLqDa+d&&Lyct`>Jc5h%XIAd&kla+e1uOHnZ4MXes-XF((TiST_RKeVNQCf#A5%R
zzjp2iWQffK&2lSW8u5PhbWEjkSYf4(>EKkIquf!>anbMO($w_=A0OpT@YpdC|NG>;
zQu4V{o;p6x5*2?b#h=iZMt}c0KK|QFX?}U-A(p4PaxK5?E$n~ym0UjF#p#&-1fCqJ
z|Dh@ry-v_<sePKbcPDBsFG(|w%DTA|HI|pU(L$?3AEQz3(1+do54eeb<tXCxatG1k
z?T+fxV1J}3dE-%Q<(f37qq1&(D{8D<>qd(-A~$G6ZZtad(eG#g(#QSSUv=ejDZ90(
zys0l22Nwx04_v&pXmeFzEuX*4s!aQ_Pk8Efc`dveHN(!;!b+#LSyWx>iM!Ob^<nJ!
zaWD7DL97nq?D275^~OIr*iwJm%Bg?<Z>X>O-UKejW-Fif#(zIbOZNPw%FufGD<|J|
zd+&|g)nbRQRg`yB0TW#eRi7J6y0J_RzcFIy)`#n@SHd}Xi0aLalo!)Y)4*Mt@^-yc
z`|(w3t6+V#m{tx>C7c@3W|&f`N(dH{%PDV<$g?1qRZuLiIY9}BMubBp#KCV|d^4@D
zP^#SC`+jpXz|7^&%i>NWvoqegs?$|n<)`N9g1xWqtJLsA)!uviW+^<Or_+T|Uec3Q
zVqvUe<v{hWdKc&U6c($!_wCj7TPMPasie^LhUS$|#2XnnI(Zh1sKShVYh)nq4da{Y
ztHaDm#f#od)%hy@Ra#}L&WrR5EX@3M^+tw^{uFC;QZ#ci6fMZt4CQ-cRp*2B2Wi)x
z-(`I{gSB4Nt25-tb4bsKR`{%8j?zbI<<9#&OofJ7N(|$rPR7BPbmlmzqZGz*F^(J6
zgNiETIygJs9YX#eZaMUI`oVwrnG-cPqsg1U*`3U0a51aK+Rd_(wu5#>P3EZIO950h
zNCVW=<X9$me2iy`@CJxfAdbsttOHd;Qeu4OrdSE?0FhEtQ;L<KvJ#M#m<@CB1QhN7
zky2CBq6C$dfTYw_a2pDjl^NU-JStN&qSTWIG<^<PK8IMTsY9aFlLs_?4qHBlS*fYR
zwogFQ=ZNKVgq7Ooi0u>5^yykYUCXCy`vf$7;(;Y=!Yedt`5d)<0-8QO%cp1g^lYDi
zrccBaYGO^eX4dkVwS5AbKJn-@zR#THGiUn*G<}X)K9Q>!M}MDVwogFQ=eXr_-10eY
z`vf$7PFOxCET0p$Pe9YBZ~62spT6xA(Da$NeC92mdD|zT>2uQZIcfQvw0#1aKBp|7
zQ<l#u+b5vuvtaowSUwB3Pe9Y>Im_oc%jY@UC!pzb+VVMV`JA?W0-8SYwq;zm=PjS-
zZJ&Uq&l$_-jOBC2_6cbEyuixh;9j}F%F^IrcR`fFD@e+4z@4>}vzBt!Rsx#Ji<a`D
zrMze>0Zk?TgTM^*Y%f{LOSTfwR9?1}mo4RGTM1|?udq_5%oSGZIJhE8eWL@CQa^d-
zteSIH%{jX!pwx5`phY7<tF1apbC^14zY0(Ql$A711L&d%P~q{z&%wJB6Ln&ygsLGa
zwKW8&a9NpRr4AMfP@%Gt0u;~)P#`@6y#E+f3Q(c4k^&SEQ|BrOP~i^Hz#~&BK!vKI
z=@S7e!?F?qYEUUa0rli5KmoN+1gLOXi2yaI6re)oniQab+9v{3xU58g8dM5Up|X+!
z6j1v_fC`tD2vCDc0V-5hQh);L)kJ^_mz4-mgGvD^R8~@e0&1TKP~ox?0cubwK!wUm
z3Q$1p69Fn*Rw6(RDg~%eSxEs3sC^<ph096=s6nLw6)Gz!KmoN+1gLOXi2yaI6re(7
zB?Ty;_K5%$E-MkB29*L-sH~&_1=Kzfpu%M(0@R>VfC`nB6rh0GCjwNstVDnsR0>d`
zvXTN6Q2RuH3YV1#P=iVVDpXcdfC6ft2vFg&5&>#ZDL{qFN(xXw?GphiTvj4L4Jrkw
zP+3U<3aEV|K!wXn1gJr!02L}LDL?_WPXwrNS&0BOs1%?=WhDhDp!SIX6)r0gpazu!
zRH&?^00q=O5un0lB?8o-Qh*ATl@y?W+9v{3xU58g8dM5Up|X+!6j1v_fCA}ALVyC9
z0SagaD4-Fbh7tj4C@DY<B?YLVM1UGf1gN2;05y~ppoS6wYA6w)hLQr*P*Q*zN(88(
zM1UGf3Q$8y0ct1_pg{WDMSud~8{@^K00qR?pdl&s+9E)K^x7gof%Mu^fCB2Zr2qvC
zRbjS+2vxNGL;tMy=^xU=VLBDtkAM7Tn*K|reFxg*aH8f$5sAA|qC-H3&{f!~*(g)H
zLWe3HYHnewzJble-smH5cL#eiqkS)1xK`f?nxh~z7xLp?_TynS%6noD)jsukLpavE
zk9NEXMJ-ICxzOHgjL<ub{$D(Y-5uIHaxv{ze%hP*cwCL9k#5*=Q;K%nurW3vdmJ<c
z%%)h#cfxv0eMD_<mwP67=d4c?Vtl^SYPOvHoxvQaJoOK%mlD;nt?-SjmyGHqu3p0Y
zXx~m(FBQJNda1p)O5TG+buaZA<pZO9z~zHP`QVK5!JvGYERWs0Z|pua%7<J&Oq37L
zC?5{Wmy_i)uTj2ilrMAna-w|sjPm6{`AV|<&})>h809NmzLF?kIiq}KP`;WhKl~cy
zt48@Mm#-$uSI;P49h9#n%a6Q9`I=F_#^q~?^0hO{*V=pK3_Z#c<p+1Yes<ukf_B+>
z1Jv#-4D<aw7$$l9CWgT)#;IYX&mJauA0~#u`^KqZq|Y8Ec|RqF!OO>~VWiI<CV5{Z
zhQXW2sbQqg9wvExCx*dm$*Eza&mJauohF9CJIbkHq|Y8EdA%iu!3)c&VWe*`j9(q6
z-POWdL9|+Q@KaY1t*`B<xSP*<uEKv6^taXBdAjAL6ra+n8v|ujf2%MXM98dHs@_nH
zUF*X%eiiV7sC*;Up7;Ka4gV(pO!gP=YWs1H0S=w(e&NP28iB$O6|K&D_`R*G;?FBX
zpT<vU7K349wbk<;#ombeaNF5F%%S@|{HB3D)$Q)1ZAabh%|AQXy4$_WQ;${8JGkqt
zZB~9BJBKcxz4ZIBzwUObkz4{}#UQFLEG(=jEJ9;pK^1(Q7S$d3)dDl({w4W%Sx(pF
g^p>0k(zgZuP)<LRQ&CPOIR$dUdjr)f%c-LN4<BN;TL1t6

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/FACP b/tests/acpi-test-data/q35/FACP
new file mode 100644
index 0000000000000000000000000000000000000000..19f3ac3ce6ab732caa750d835ce1261bc7343cf2
GIT binary patch
literal 116
zcmZ>BbPgzCU|?YEaPoKd2v%^42yk`-iZKGkKx`1raN&Qw0}wMZa58KHa+#Qc#0HQA
i0|N_`2C+GSYz3G&69bC?Q0zbde}0f03@mM6U;qFojS~R?

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/FACS b/tests/acpi-test-data/q35/FACS
new file mode 100644
index 0000000000000000000000000000000000000000..fc67ecc40782bd7fe8921e430d7de67f0bfaad93
GIT binary patch
literal 64
PcmZ>BbPjf4ARhn#RKNjV

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/HPET b/tests/acpi-test-data/q35/HPET
new file mode 100644
index 0000000000000000000000000000000000000000..df689b8f99c1c43cfd7d63bdede3bcdfd23b7de1
GIT binary patch
literal 56
xcmeYWa1F6wU|?WmcJg=j2v%^42ypfQiZKGkKx`1rxTviGNCClxe-N610RT2D3IPBB

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/MCFG b/tests/acpi-test-data/q35/MCFG
new file mode 100644
index 0000000000000000000000000000000000000000..79ceb27a038c6e29d098b98dda2e229495f96b7c
GIT binary patch
literal 60
rcmeZuc5}C3U|?W;@8s|75v<@85#a0#6k`O6f!H7#32cC}|AS}%SE304

literal 0
HcmV?d00001

diff --git a/tests/acpi-test-data/q35/SSDT b/tests/acpi-test-data/q35/SSDT
new file mode 100644
index 0000000000000000000000000000000000000000..186e748e6c16ffef80634be5eae9c3fa17210811
GIT binary patch
literal 2104
zcmZvc%Wl&^6o$vS)pc%8>Ne?}6%s3)-n+xGUFt%TY3!DwRGMs%+67X#?4XEly6g)S
zDenOrUW;-jIsXEfZ1SC%PshI}CzGa8c3=x({pt?F<MdhgLWU`=SwaZS`rGXmFNH1r
zR8^?@NffKf)6<XNw(OiMhqgMYYLp#nGyBj&{O`iszZTpV)KR6|s#z*n^bF!1)wBza
zaHs`UyLv}=b6-_1U*=WXRWeNcBn{N)w&%$BJhRnt5>-#*-kI<F9ZC_WSy_nDXBiKM
zmaeSPmogVJv%R)Tvq0SFo$+JoVJs%%dtu_#z1lF6nck4ucrx}X?}jq7Zmx7~t8kb$
zs*dwopM<ciPvTxLIk{xe>(8)2ctPEhelqK>x2BKL8}7G{LdPF{?G{7n`??LiViGBR
zbklbTLYdGz><h21dO;>8q3i`(pjt<!I?cF_Pkbws@rf?4ywK`rNAGiw<%cUr-0Ak$
zb|?q^W<*il`wv1N+UWLq>UR{K>RI2hY!yU9`XMcP8Z}eaM27K+-kW+`?B(F)%-%M8
zd3brVx5HimUcv0`vR8yxG<$pOmEe`k-adPC@aD|k0edz)+w2{(HxF;#>;>#O@Eo((
zWv>jcZ1zI-D)1_1FJi9>uWI&U_G<8IX77l-I=s5k>-g-s@LaQp`D?&ym_5v26JFEo
zVg452Etoybp9jw~dzimPc#CEa^S1<V$?ReNTJTzC5A)ZC*EV~Yzh!vKW)JhX0&m6a
zVg6R(t(rZ|-x|C%vxoUxhqrF_Fn=5HHq0L8Zxi0;f1dZICBuF;yZx*?eaBr-Z^9h$
z7IU6>o4G)|!(1fZWiAo#G0ze2Guy-m%=5&D%notDTqf=^SBOLADsjYIBaWHt#7E5T
zT}uC-S>^^Y@;8Z*e}NeJJ!0fvBu4%vV&rcTBY&G1`Im{2e}x$NSBa5-jTrgYiIIPU
K82LAeDgPgv$^jn$

literal 0
HcmV?d00001

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH resend 2/7] configure: added acpi unit-test files
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 1/7] acpi unit-test: add test files Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 3/7] acpi unit-test: compare DSDT and SSDT tables against expected values Marcel Apfelbaum
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

Ensure configure will set-up links for the files
if the build is created in other directory.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 configure | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/configure b/configure
index 07b6be3..53a1392 100755
--- a/configure
+++ b/configure
@@ -4744,6 +4744,10 @@ for bios_file in \
 do
     FILES="$FILES pc-bios/`basename $bios_file`"
 done
+for test_file in `find $source_path/tests/acpi-test-data -type f`
+do
+    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
+done
 mkdir -p $DIRS
 for f in $FILES ; do
     if [ -e "$source_path/$f" ] && [ "$source_path" != `pwd` ]; then
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH resend 3/7] acpi unit-test: compare DSDT and SSDT tables against expected values
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 1/7] acpi unit-test: add test files Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 2/7] configure: added acpi unit-test files Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 4/7] configure: add CONFIG_IASL to config-host.h Marcel Apfelbaum
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

This test will run only if iasl is installed on the host machine.
The test plan:
 1. Dumps the ACPI tables as AML on the disk.
 2. Runs iasl to disassembly the tables into ASL files.
 3. Runs iasl to disassembly the offline AML files into ASL files.
 4. Compares the ASL files.

The test runs for both default machine and q35.
In case the test fails, it can be easily tweaked to
show the differences between the ASL files and
understand the issue.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 tests/acpi-test.c | 261 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 240 insertions(+), 21 deletions(-)

diff --git a/tests/acpi-test.c b/tests/acpi-test.c
index ca83b1d..fc0304c 100644
--- a/tests/acpi-test.c
+++ b/tests/acpi-test.c
@@ -18,14 +18,22 @@
 #include "qemu/compiler.h"
 #include "hw/i386/acpi-defs.h"
 
+#define MACHINE_PC "pc"
+#define MACHINE_Q35 "q35"
+
 /* DSDT and SSDTs format */
 typedef struct {
     AcpiTableHeader header;
-    uint8_t *aml;
-    int aml_len;
-} AcpiSdtTable;
+    gchar *aml;            /* aml bytecode from guest */
+    gsize aml_len;
+    gchar *aml_file;
+    gchar *asl;            /* asl code generated from aml */
+    gsize asl_len;
+    gchar *asl_file;
+} QEMU_PACKED AcpiSdtTable;
 
 typedef struct {
+    const char *machine;
     uint32_t rsdp_addr;
     AcpiRsdpDescriptor rsdp_table;
     AcpiRsdtDescriptorRev1 rsdt_table;
@@ -33,8 +41,7 @@ typedef struct {
     AcpiFacsDescriptorRev1 facs_table;
     uint32_t *rsdt_tables_addr;
     int rsdt_tables_nr;
-    AcpiSdtTable dsdt_table;
-    GArray *ssdt_tables;
+    GArray *ssdt_tables; /* first is DSDT */
 } test_data;
 
 #define LOW(x) ((x) & 0xff)
@@ -91,8 +98,10 @@ typedef struct {
 
 /* Boot sector code: write SIGNATURE into memory,
  * then halt.
+ * Q35 machine requires a minimum 0x7e000 bytes disk.
+ * (bug or feature?)
  */
-static uint8_t boot_sector[0x200] = {
+static uint8_t boot_sector[0x7e000] = {
     /* 7c00: mov $0xdead,%ax */
     [0x00] = 0xb8,
     [0x01] = LOW(SIGNATURE),
@@ -117,17 +126,40 @@ static uint8_t boot_sector[0x200] = {
 };
 
 static const char *disk = "tests/acpi-test-disk.raw";
+static const char *data_dir = "tests/acpi-test-data";
 
 static void free_test_data(test_data *data)
 {
+    AcpiSdtTable *temp;
     int i;
 
-    g_free(data->rsdt_tables_addr);
+    if (data->rsdt_tables_addr) {
+        g_free(data->rsdt_tables_addr);
+    }
+
     for (i = 0; i < data->ssdt_tables->len; ++i) {
-        g_free(g_array_index(data->ssdt_tables, AcpiSdtTable, i).aml);
+        temp = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
+        if (temp->aml) {
+            g_free(temp->aml);
+        }
+        if (temp->aml_file) {
+            if (g_strstr_len(temp->aml_file, -1, "aml-")) {
+                unlink(temp->aml_file);
+            }
+            g_free(temp->aml_file);
+        }
+        if (temp->asl) {
+            g_free(temp->asl);
+        }
+        if (temp->asl_file) {
+            if (g_strstr_len(temp->asl_file, -1, "asl-")) {
+                unlink(temp->asl_file);
+            }
+            g_free(temp->asl_file);
+        }
     }
+
     g_array_free(data->ssdt_tables, false);
-    g_free(data->dsdt_table.aml);
 }
 
 static uint8_t acpi_checksum(const uint8_t *data, int len)
@@ -292,34 +324,207 @@ static void test_dst_table(AcpiSdtTable *sdt_table, uint32_t addr)
     ACPI_READ_ARRAY_PTR(sdt_table->aml, sdt_table->aml_len, addr);
 
     checksum = acpi_checksum((uint8_t *)sdt_table, sizeof(AcpiTableHeader)) +
-               acpi_checksum(sdt_table->aml, sdt_table->aml_len);
+               acpi_checksum((uint8_t *)sdt_table->aml, sdt_table->aml_len);
     g_assert(!checksum);
 }
 
 static void test_acpi_dsdt_table(test_data *data)
 {
-    AcpiSdtTable *dsdt_table = &data->dsdt_table;
+    AcpiSdtTable dsdt_table;
     uint32_t addr = data->fadt_table.dsdt;
 
-    test_dst_table(dsdt_table, addr);
-    g_assert_cmphex(dsdt_table->header.signature, ==, ACPI_DSDT_SIGNATURE);
+    memset(&dsdt_table, 0, sizeof(dsdt_table));
+    data->ssdt_tables = g_array_new(false, true, sizeof(AcpiSdtTable));
+
+    test_dst_table(&dsdt_table, addr);
+    g_assert_cmphex(dsdt_table.header.signature, ==, ACPI_DSDT_SIGNATURE);
+
+    /* Place DSDT first */
+    g_array_append_val(data->ssdt_tables, dsdt_table);
 }
 
 static void test_acpi_ssdt_tables(test_data *data)
 {
-    GArray *ssdt_tables;
     int ssdt_tables_nr = data->rsdt_tables_nr - 1; /* fadt is first */
     int i;
 
-    ssdt_tables = g_array_sized_new(false, true, sizeof(AcpiSdtTable),
-                                    ssdt_tables_nr);
     for (i = 0; i < ssdt_tables_nr; i++) {
         AcpiSdtTable ssdt_table;
+
+        memset(&ssdt_table, 0 , sizeof(ssdt_table));
         uint32_t addr = data->rsdt_tables_addr[i + 1]; /* fadt is first */
         test_dst_table(&ssdt_table, addr);
-        g_array_append_val(ssdt_tables, ssdt_table);
+        g_array_append_val(data->ssdt_tables, ssdt_table);
+    }
+}
+
+static bool iasl_installed(void)
+{
+    gchar *out = NULL, *out_err = NULL;
+    bool ret;
+
+    /* pass 'out' and 'out_err' in order to be redirected */
+    ret = g_spawn_command_line_sync("iasl", &out, &out_err, NULL, NULL);
+
+    if (out_err) {
+        ret = ret && (out_err[0] == '\0');
+        g_free(out_err);
+    }
+
+    if (out) {
+        g_free(out);
+    }
+
+    return ret;
+}
+
+static void dump_aml_files(test_data *data)
+{
+    AcpiSdtTable *sdt;
+    GError *error = NULL;
+    gint fd;
+    ssize_t ret;
+    int i;
+
+    for (i = 0; i < data->ssdt_tables->len; ++i) {
+        sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
+        g_assert(sdt->aml);
+
+        fd = g_file_open_tmp("aml-XXXXXX", &sdt->aml_file, &error);
+        g_assert_no_error(error);
+
+        ret = qemu_write_full(fd, sdt, sizeof(AcpiTableHeader));
+        g_assert(ret == sizeof(AcpiTableHeader));
+        ret = qemu_write_full(fd, sdt->aml, sdt->aml_len);
+        g_assert(ret == sdt->aml_len);
+
+        close(fd);
+    }
+}
+
+static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
+{
+    AcpiSdtTable *temp;
+    GError *error = NULL;
+    GString *command_line = g_string_new("'iasl' ");
+    gint fd;
+    gchar *out, *out_err;
+    gboolean ret;
+    int i;
+
+    fd = g_file_open_tmp("asl-XXXXXX.dsl", &sdt->asl_file, &error);
+    g_assert_no_error(error);
+    close(fd);
+
+    /* build command line */
+    g_string_append_printf(command_line, "-p %s ", sdt->asl_file);
+    for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
+        temp = &g_array_index(sdts, AcpiSdtTable, i);
+        g_string_append_printf(command_line, "-e %s ", temp->aml_file);
+    }
+    g_string_append_printf(command_line, "-d %s", sdt->aml_file);
+
+    /* pass 'out' and 'out_err' in order to be redirected */
+    g_spawn_command_line_sync(command_line->str, &out, &out_err, NULL, &error);
+    g_assert_no_error(error);
+
+    ret = g_file_get_contents(sdt->asl_file, (gchar **)&sdt->asl,
+                              &sdt->asl_len, &error);
+    g_assert(ret);
+    g_assert_no_error(error);
+    g_assert(sdt->asl_len);
+
+    g_free(out);
+    g_free(out_err);
+    g_string_free(command_line, true);
+}
+
+#define COMMENT_END "*/"
+#define DEF_BLOCK "DefinitionBlock ("
+#define BLOCK_NAME_END ".aml"
+
+static GString *normalize_asl(gchar *asl_code)
+{
+    GString *asl = g_string_new(asl_code);
+    gchar *comment, *block_name;
+
+    /* strip comments (different generation days) */
+    comment = g_strstr_len(asl->str, asl->len, COMMENT_END);
+    if (comment) {
+        asl = g_string_erase(asl, 0, comment + sizeof(COMMENT_END) - asl->str);
+    }
+
+    /* strip def block name (it has file path in it) */
+    if (g_str_has_prefix(asl->str, DEF_BLOCK)) {
+        block_name = g_strstr_len(asl->str, asl->len, BLOCK_NAME_END);
+        g_assert(block_name);
+        asl = g_string_erase(asl, 0,
+                             block_name + sizeof(BLOCK_NAME_END) - asl->str);
+    }
+
+    return asl;
+}
+
+static GArray *load_expected_aml(test_data *data)
+{
+    int i;
+    AcpiSdtTable *sdt;
+    gchar *aml_file;
+    GError *error = NULL;
+    gboolean ret;
+
+    GArray *exp_ssdt_tables = g_array_new(false, true, sizeof(AcpiSdtTable));
+    for (i = 0; i < data->ssdt_tables->len; ++i) {
+        AcpiSdtTable exp_sdt;
+        sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
+
+        memset(&exp_sdt, 0, sizeof(exp_sdt));
+        exp_sdt.header.signature = sdt->header.signature;
+
+        aml_file = g_strdup_printf("%s/%s/%.4s", data_dir, data->machine,
+                                   (gchar *)&exp_sdt.header.signature);
+        exp_sdt.aml_file = aml_file;
+        g_assert(g_file_test(aml_file, G_FILE_TEST_EXISTS));
+        ret = g_file_get_contents(aml_file, &exp_sdt.aml,
+                                  &exp_sdt.aml_len, &error);
+        g_assert(ret);
+        g_assert_no_error(error);
+        g_assert(exp_sdt.aml);
+        g_assert(exp_sdt.aml_len);
+
+        g_array_append_val(exp_ssdt_tables, exp_sdt);
     }
-    data->ssdt_tables = ssdt_tables;
+
+    return exp_ssdt_tables;
+}
+
+static void test_acpi_asl(test_data *data)
+{
+    int i;
+    AcpiSdtTable *sdt, *exp_sdt;
+    test_data exp_data;
+
+    memset(&exp_data, 0, sizeof(exp_data));
+    exp_data.ssdt_tables = load_expected_aml(data);
+    dump_aml_files(data);
+    for (i = 0; i < data->ssdt_tables->len; ++i) {
+        GString *asl, *exp_asl;
+
+        sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
+        exp_sdt = &g_array_index(exp_data.ssdt_tables, AcpiSdtTable, i);
+
+        load_asl(data->ssdt_tables, sdt);
+        asl = normalize_asl(sdt->asl);
+
+        load_asl(exp_data.ssdt_tables, exp_sdt);
+        exp_asl = normalize_asl(exp_sdt->asl);
+
+        g_assert(!g_strcmp0(asl->str, exp_asl->str));
+        g_string_free(asl, true);
+        g_string_free(exp_asl, true);
+    }
+
+    free_test_data(&exp_data);
 }
 
 static void test_acpi_one(const char *params, test_data *data)
@@ -329,10 +534,14 @@ static void test_acpi_one(const char *params, test_data *data)
     uint8_t signature_high;
     uint16_t signature;
     int i;
+    const char *device = "";
 
-    memset(data, 0, sizeof(*data));
-    args = g_strdup_printf("-net none -display none %s %s",
-                           params ? params : "", disk);
+    if (!g_strcmp0(data->machine, MACHINE_Q35)) {
+        device = ",id=hd -device ide-hd,drive=hd";
+    }
+
+    args = g_strdup_printf("-net none -display none %s -drive file=%s%s,",
+                           params ? params : "", disk, device);
     qtest_start(args);
 
    /* Wait at most 1 minute */
@@ -362,6 +571,10 @@ static void test_acpi_one(const char *params, test_data *data)
     test_acpi_dsdt_table(data);
     test_acpi_ssdt_tables(data);
 
+    if (iasl_installed()) {
+        test_acpi_asl(data);
+    }
+
     qtest_quit(global_qtest);
     g_free(args);
 }
@@ -373,8 +586,14 @@ static void test_acpi_tcg(void)
     /* Supplying -machine accel argument overrides the default (qtest).
      * This is to make guest actually run.
      */
+    memset(&data, 0, sizeof(data));
+    data.machine = MACHINE_PC;
     test_acpi_one("-machine accel=tcg", &data);
+    free_test_data(&data);
 
+    memset(&data, 0, sizeof(data));
+    data.machine = MACHINE_Q35;
+    test_acpi_one("-machine q35,accel=tcg", &data);
     free_test_data(&data);
 }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH resend 4/7] configure: add CONFIG_IASL to config-host.h
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
                   ` (2 preceding siblings ...)
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 3/7] acpi unit-test: compare DSDT and SSDT tables against expected values Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 5/7] acpi unit-test: extract iasl executable from configuration Marcel Apfelbaum
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

Acpi unit-tests will extract iasl executable
from CONFIG_IASL define.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 scripts/create_config | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/scripts/create_config b/scripts/create_config
index b1adbf5..06f5316 100755
--- a/scripts/create_config
+++ b/scripts/create_config
@@ -26,6 +26,10 @@ case $line in
     # save for the next definitions
     prefix=${line#*=}
     ;;
+ IASL=*) # iasl executable
+    value=${line#*=}
+    echo "#define CONFIG_IASL $value"
+    ;;
  CONFIG_AUDIO_DRIVERS=*)
     drivers=${line#*=}
     echo "#define CONFIG_AUDIO_DRIVERS \\"
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH resend 5/7] acpi unit-test: extract iasl executable from configuration
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
                   ` (3 preceding siblings ...)
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 4/7] configure: add CONFIG_IASL to config-host.h Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 6/7] acpi unit-test: added script to rebuild the expected aml files Marcel Apfelbaum
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

The test checked if iasl is installed by running "iasl"
and checking the error output.
It is better to use the iasl executable as appears
in configuration.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 tests/acpi-test.c | 31 ++++++++-----------------------
 1 file changed, 8 insertions(+), 23 deletions(-)

diff --git a/tests/acpi-test.c b/tests/acpi-test.c
index fc0304c..7d4b571 100644
--- a/tests/acpi-test.c
+++ b/tests/acpi-test.c
@@ -127,6 +127,11 @@ static uint8_t boot_sector[0x7e000] = {
 
 static const char *disk = "tests/acpi-test-disk.raw";
 static const char *data_dir = "tests/acpi-test-data";
+#ifdef CONFIG_IASL
+static const char *iasl = stringify(CONFIG_IASL);
+#else
+static const char *iasl;
+#endif
 
 static void free_test_data(test_data *data)
 {
@@ -358,26 +363,6 @@ static void test_acpi_ssdt_tables(test_data *data)
     }
 }
 
-static bool iasl_installed(void)
-{
-    gchar *out = NULL, *out_err = NULL;
-    bool ret;
-
-    /* pass 'out' and 'out_err' in order to be redirected */
-    ret = g_spawn_command_line_sync("iasl", &out, &out_err, NULL, NULL);
-
-    if (out_err) {
-        ret = ret && (out_err[0] == '\0');
-        g_free(out_err);
-    }
-
-    if (out) {
-        g_free(out);
-    }
-
-    return ret;
-}
-
 static void dump_aml_files(test_data *data)
 {
     AcpiSdtTable *sdt;
@@ -406,7 +391,7 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
 {
     AcpiSdtTable *temp;
     GError *error = NULL;
-    GString *command_line = g_string_new("'iasl' ");
+    GString *command_line = g_string_new(iasl);
     gint fd;
     gchar *out, *out_err;
     gboolean ret;
@@ -417,7 +402,7 @@ static void load_asl(GArray *sdts, AcpiSdtTable *sdt)
     close(fd);
 
     /* build command line */
-    g_string_append_printf(command_line, "-p %s ", sdt->asl_file);
+    g_string_append_printf(command_line, " -p %s ", sdt->asl_file);
     for (i = 0; i < 2; ++i) { /* reference DSDT and SSDT */
         temp = &g_array_index(sdts, AcpiSdtTable, i);
         g_string_append_printf(command_line, "-e %s ", temp->aml_file);
@@ -571,7 +556,7 @@ static void test_acpi_one(const char *params, test_data *data)
     test_acpi_dsdt_table(data);
     test_acpi_ssdt_tables(data);
 
-    if (iasl_installed()) {
+    if (iasl) {
         test_acpi_asl(data);
     }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH resend 6/7] acpi unit-test: added script to rebuild the expected aml files
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
                   ` (4 preceding siblings ...)
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 5/7] acpi unit-test: extract iasl executable from configuration Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 7/7] acpi unit-test: hook to rebuild " Marcel Apfelbaum
  2013-12-27 10:11 ` [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Alex Bennée
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

Acpi unit-test will fail every time the acpi tables change.
This script rebuild the expected aml files, so the test
will pass. It also validates the modifications.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 tests/acpi-test-data/rebuild-expected-aml.sh | 36 ++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100755 tests/acpi-test-data/rebuild-expected-aml.sh

diff --git a/tests/acpi-test-data/rebuild-expected-aml.sh b/tests/acpi-test-data/rebuild-expected-aml.sh
new file mode 100755
index 0000000..ab98498
--- /dev/null
+++ b/tests/acpi-test-data/rebuild-expected-aml.sh
@@ -0,0 +1,36 @@
+#! /bin/bash
+
+#
+# Rebuild expected AML files for acpi unit-test
+#
+# Copyright (c) 2013 Red Hat Inc.
+#
+# Authors:
+#  Marcel Apfelbaum <marcel.a@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPLv2.
+# See the COPYING.LIB file in the top-level directory.
+
+qemu=
+
+if [ -e x86_64-softmmu/qemu-system-x86_64 ]; then
+    qemu="x86_64-softmmu/qemu-system-x86_64"
+elif [ -e i386-softmmu/qemu-system-i386 ]; then
+    qemu="i386-softmmu/qemu-system-i386"
+else
+    echo "Run 'make' to build the qemu exectutable!"
+    echo "Run this script from the build directory."
+    exit 1;
+fi
+
+if [ ! -e "tests/acpi-test" ]; then
+    echo "Test: acpi-test is required! Run make check before this script."
+    echo "Run this script from the build directory."
+    exit 1;
+fi
+
+TEST_ACPI_REBUILD_AML=y QTEST_QEMU_BINARY=$qemu tests/acpi-test
+
+echo "The files were rebuilt and can be added to git."
+echo "However, if new files were created, please copy them manually" \
+     "to tests/acpi-test-data/pc/ or tests/acpi-test-data/q35/ ."
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH resend 7/7] acpi unit-test: hook to rebuild expected aml files
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
                   ` (5 preceding siblings ...)
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 6/7] acpi unit-test: added script to rebuild the expected aml files Marcel Apfelbaum
@ 2013-12-26 14:54 ` Marcel Apfelbaum
  2013-12-27 10:11 ` [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Alex Bennée
  7 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-26 14:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: mst

When running the test with TEST_ACPI_REBUILD_AML=y environment
variable, the test will rebuild and validate the expected aml
files.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 tests/acpi-test.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/tests/acpi-test.c b/tests/acpi-test.c
index 7d4b571..2d32b69 100644
--- a/tests/acpi-test.c
+++ b/tests/acpi-test.c
@@ -13,6 +13,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <glib.h>
+#include <glib/gstdio.h>
 #include "qemu-common.h"
 #include "libqtest.h"
 #include "qemu/compiler.h"
@@ -21,6 +22,8 @@
 #define MACHINE_PC "pc"
 #define MACHINE_Q35 "q35"
 
+#define ACPI_REBUILD_EXPECTED_AML "TEST_ACPI_REBUILD_AML"
+
 /* DSDT and SSDTs format */
 typedef struct {
     AcpiTableHeader header;
@@ -363,10 +366,11 @@ static void test_acpi_ssdt_tables(test_data *data)
     }
 }
 
-static void dump_aml_files(test_data *data)
+static void dump_aml_files(test_data *data, bool rebuild)
 {
     AcpiSdtTable *sdt;
     GError *error = NULL;
+    gchar *aml_file = NULL;
     gint fd;
     ssize_t ret;
     int i;
@@ -375,8 +379,16 @@ static void dump_aml_files(test_data *data)
         sdt = &g_array_index(data->ssdt_tables, AcpiSdtTable, i);
         g_assert(sdt->aml);
 
-        fd = g_file_open_tmp("aml-XXXXXX", &sdt->aml_file, &error);
-        g_assert_no_error(error);
+        if (rebuild) {
+            aml_file = g_strdup_printf("%s/%s/%.4s", data_dir, data->machine,
+                                       (gchar *)&sdt->header.signature);
+            fd = g_open(aml_file, O_WRONLY|O_TRUNC|O_CREAT,
+                        S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH);
+        } else {
+            fd = g_file_open_tmp("aml-XXXXXX", &sdt->aml_file, &error);
+            g_assert_no_error(error);
+        }
+        g_assert(fd >= 0);
 
         ret = qemu_write_full(fd, sdt, sizeof(AcpiTableHeader));
         g_assert(ret == sizeof(AcpiTableHeader));
@@ -384,6 +396,10 @@ static void dump_aml_files(test_data *data)
         g_assert(ret == sdt->aml_len);
 
         close(fd);
+
+        if (aml_file) {
+            g_free(aml_file);
+        }
     }
 }
 
@@ -491,7 +507,7 @@ static void test_acpi_asl(test_data *data)
 
     memset(&exp_data, 0, sizeof(exp_data));
     exp_data.ssdt_tables = load_expected_aml(data);
-    dump_aml_files(data);
+    dump_aml_files(data, false);
     for (i = 0; i < data->ssdt_tables->len; ++i) {
         GString *asl, *exp_asl;
 
@@ -557,7 +573,11 @@ static void test_acpi_one(const char *params, test_data *data)
     test_acpi_ssdt_tables(data);
 
     if (iasl) {
-        test_acpi_asl(data);
+        if (getenv(ACPI_REBUILD_EXPECTED_AML)) {
+            dump_aml_files(data, true);
+        } else {
+            test_acpi_asl(data);
+        }
     }
 
     qtest_quit(global_qtest);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features
  2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
                   ` (6 preceding siblings ...)
  2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 7/7] acpi unit-test: hook to rebuild " Marcel Apfelbaum
@ 2013-12-27 10:11 ` Alex Bennée
  2013-12-29  9:52   ` Marcel Apfelbaum
  7 siblings, 1 reply; 10+ messages in thread
From: Alex Bennée @ 2013-12-27 10:11 UTC (permalink / raw)
  To: Marcel Apfelbaum; +Cc: qemu-devel, mst


marcel.a@redhat.com writes:

> This resend includes the following:
>
> Compare resulting aml vs expected aml:
>  - runs only if iasl is installed on the host machine.
<snip>
>
>  configure                                    |   4 +
>  scripts/create_config                        |   4 +
<snip>

Did I miss something? How does this ensure the test runs when "make
test" is executed?


Cheers,

--
Alex Bennée
QEMU/KVM Hacker for Linaro

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features
  2013-12-27 10:11 ` [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Alex Bennée
@ 2013-12-29  9:52   ` Marcel Apfelbaum
  0 siblings, 0 replies; 10+ messages in thread
From: Marcel Apfelbaum @ 2013-12-29  9:52 UTC (permalink / raw)
  To: Alex Bennée; +Cc: qemu-devel, mst

On Fri, 2013-12-27 at 10:11 +0000, Alex Bennée wrote:
> marcel.a@redhat.com writes:
> 
> > This resend includes the following:
> >
> > Compare resulting aml vs expected aml:
> >  - runs only if iasl is installed on the host machine.
> <snip>
> >
> >  configure                                    |   4 +
> >  scripts/create_config                        |   4 +
> snip>
> 
Hi Alex,
Thank you for your review,

> Did I miss something? How does this ensure the test runs when "make
> test" is executed?

It does not, It only ensures that iasl path is exported to the code.
The test itself runs like all the other tests.

Thanks,
Marcel

> 
> 
> Cheers,
> 
> --
> Alex Bennée
> QEMU/KVM Hacker for Linaro

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-12-29  9:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-26 14:54 [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 1/7] acpi unit-test: add test files Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 2/7] configure: added acpi unit-test files Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 3/7] acpi unit-test: compare DSDT and SSDT tables against expected values Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 4/7] configure: add CONFIG_IASL to config-host.h Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 5/7] acpi unit-test: extract iasl executable from configuration Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 6/7] acpi unit-test: added script to rebuild the expected aml files Marcel Apfelbaum
2013-12-26 14:54 ` [Qemu-devel] [PATCH resend 7/7] acpi unit-test: hook to rebuild " Marcel Apfelbaum
2013-12-27 10:11 ` [Qemu-devel] [PATCH resend 0/7] acpi unit-test: new features Alex Bennée
2013-12-29  9:52   ` Marcel Apfelbaum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).