From: Jeff Cody <jc...@redhat.com> This tests the replay of a data sector in a VHDX image file.
The image file is a 10G dynamic image, with 4MB block size. The image was created with qemu-img, and the log left unplayed by modification of the vhdx image format driver. It was verified under both QEMU and Hyper-V that the image file, post log replay, matched. Signed-off-by: Jeff Cody <jc...@redhat.com> Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> --- tests/qemu-iotests/070 | 67 +++++++++++++++++++++ tests/qemu-iotests/070.out | 8 +++ tests/qemu-iotests/group | 1 + .../sample_images/iotest-dirtylog-10G-4M.vhdx.bz2 | Bin 0 -> 4490 bytes 4 files changed, 76 insertions(+) create mode 100755 tests/qemu-iotests/070 create mode 100644 tests/qemu-iotests/070.out create mode 100644 tests/qemu-iotests/sample_images/iotest-dirtylog-10G-4M.vhdx.bz2 diff --git a/tests/qemu-iotests/070 b/tests/qemu-iotests/070 new file mode 100755 index 0000000..41bf100 --- /dev/null +++ b/tests/qemu-iotests/070 @@ -0,0 +1,67 @@ +#!/bin/bash +# +# Test VHDX log replay from an image with a journal that needs to be +# replayed +# +# Copyright (C) 2013 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +# creator +owner=jc...@redhat.com + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt vhdx +_supported_proto generic +_supported_os Linux + +# With the log replayed, the pattern 0xa5 extends to 0xc025000 +# If the log was not replayed, it would only extend to 0xc000000 +# +# This image is a 10G dynamic image, with 4M block size, and 1 unplayed +# data sector in the log +# +# This image was created with qemu-img, however it was verified using +# Hyper-V to properly replay the logs and give the same post-replay +# image as qemu. +_use_sample_img iotest-dirtylog-10G-4M.vhdx.bz2 + +echo +echo "=== Verify open image read-only fails, due to dirty log ===" +$QEMU_IO -r -c "read -pP 0xa5 0 18M" "$TEST_IMG" 2>&1 | grep -o "Permission denied" + +echo "=== Verify open image replays log ===" +$QEMU_IO -c "read -pP 0xa5 0 18M" "$TEST_IMG" | _filter_qemu_io + +# success, all done +echo "*** done" +rm -f $seq.full +status=0 diff --git a/tests/qemu-iotests/070.out b/tests/qemu-iotests/070.out new file mode 100644 index 0000000..9db8ff2 --- /dev/null +++ b/tests/qemu-iotests/070.out @@ -0,0 +1,8 @@ +QA output created by 070 + +=== Verify open image read-only fails, due to dirty log === +Permission denied +=== Verify open image replays log === +read 18874368/18874368 bytes at offset 0 +18 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index c57ff35..b18b241 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -75,3 +75,4 @@ 067 rw auto 068 rw auto 069 rw auto +070 rw auto diff --git a/tests/qemu-iotests/sample_images/iotest-dirtylog-10G-4M.vhdx.bz2 b/tests/qemu-iotests/sample_images/iotest-dirtylog-10G-4M.vhdx.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..4b91cfc654b9b8b46ff45918b6f9a2f88d47ecf0 GIT binary patch literal 4490 zcmV;55q0iDT4*^jL0KkKS$k&2jsZ0{fB*mg|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0 z|NsC0|Nr0&KYaiIlYO_ZcRTI9zV`F0x$m=gzWd(y-zN9hz4y-D_uhSdA3nFvh^Y#D z3N-W+)gBsC)bz}ZrZlILew2Gu*e9xbn-M=#1j3#IpQ)+hVw(d~8mH(cr=uY@Nt$S7 zGgH${gz#w-)Y_X->Uoh(srnT2MvW5!o=m5hQ`E_($r-8<DKt~{FiE{KYM-cjk3mn; zn^W|o#+3CQ6lwWH%|p!!dY(}IAk@>*J*s&yO-Je&r;JJH1ZsJeHq%qlPgC_agrA@q z6ExL76+K45Pt`LfQ`6LHeyQqysguD*L)sMeF+D;krkb9oqt!jCHku&F^%{92Kxoj@ z)b%`}=s}G~l-gwUp{J<R&@`T=%4m9rsL1s+2dH|QdXG~khJa|$1Ihr%Y3gJ&0LTEz zkQz3Sc}=OI6*N=PJf<>%rpb|{#w7HflMNXmv@(xLr>T?F+91*DdQ8${XwYpy(8PL1 zhpFm%CWe|C14f2NsA3vuX_4s-8fXknG<upcHc^R@rY3-BktRsOF*L}?&;w6XMw%LF zkTDH3$Z4R-pwKp^KmgI8dYGCt0Li04pbS9J^#e@}G7Oq&k)Sm6ngB8lG#UdyiAg3B zVH%8)>VA-VQ))b>#;C+&N$5sHH8B{}!5B0&42=`hO&SRGJx8gd)ICh~1j2f1Gej6P zCTZ%K8$@Wqrje#20i?i~(9s8}kCadV%PbH$Ws8vcdpP+(cp!S<bAW0<&|ZZ%I>Jv0 zBp9v^cVke1zziW%O?^-eCRNnX*IrRxO$vjsNH7Z7HcG2usbH1K3s|a)(!FR<0W=5& zi)b!R<icH5|Exw9R*N7sfU+PVW?G7ZP>~~XYSpWIVMIYKrG^(U5Cjm_ML<v*peO>G z=zt-000D52L_t-ta;O%fBYZ)!P`C<&0IKPQmY^>rtdx=xk#6kRwPNnQh>{~CUJ8f` zA#4SlDVr+_1$xTR9o`6;hz1`PX{te8lEnce7Vwl1nbL*TMG_<+!Xp47@u;+Ov<g0@ z0*?(wibRByjfD%zLINlXA@SpQeA0!<i6|(YL<6dV4kRLg{n#K-APggkLflkn1@u1N zD*s!$Yb)k$z@Ua#4@WCl3OXEtN`QcSgfkQH@bq}-y9`Fa5CZmdxD|k^43P`zL}ZHs zNIM*(Bt`)v7bZf0LO_5<0X>)sASi|W0?-$rWI)iaL~?173}6^7{k65VZOFU0uU@@+ z<$M2~p7@Jzjj?fR-wAPbZEDfk#WIk@MFzw)oh=>5OGQY)ts6!#Ac&GaI|>KioPr%F z)+B^cli}we(9Xv#P?-VHG5|Ulpg0o(B62#3F!*tX2W-Tg)oCKKp#V#Nxyc54qztBU zvcR7EuH>rA^BVvES;J%hA%UONcbup0!Myh{{Wk@6w{X+Y0~JsKzQJk&2*4x)5)Hm* zAAzUhY!)?oj+&tYwqJ<ZG+Srp%y9U7pbDVF3_?z68+4j?G*)T<z>&5T>=uc-Xq^1B zEe3rLH8Tv$m@)2n+)EmAAOH%V?zmpTjcjX1;rfvsGZ4N8*{CHWtyQ=iLHkIiM|A!% zL^56K$-sa!P~`3#E0TdiCt^S{-q!Q_yIgk5s_%9CXY<N(I9s#@&Y075@jeEl@7evj zy1c4NMqvt8L3-v)V$d?Bz9V_ACiW=Dn3s=D(4Q(PQB>?SY#6t3rUNR6qQzD_zMJ|> zuHG@ttFw|uWjHBanXyiL=2`eC=<;kN_l$K7E1t}tfN4)*tN51%%oM=bNfP0aDufSu z$$Phc=ffo<D{}#gkYr%IBjd)<qD7kx1ZD0pHetM4x67c3y6AiIsn*yv&Y9KlET(Ir zBtjBGTlEN|AOe#!EE}6SgI}0JNC_lp-fM{2vra>><Mmma<;98FkqqB8Kn`0eLl<|R z`98OIgQDd1c?|vpZk0HG(|e;k|4koWqk9t+PRfuT2pF(Zp18|QKIrS<#FH{CQvj~P z^G2-h2|Q<ZqvyYMYcea+LpEu33+_#KvQ<kcUZ38>E!(B6JH-^wsPezOv(KG5y6p24 zewI|L{AH%B&8wmn&0xn1aGuq_XB<nxQr8;Zcmy+C`q)J6Q&tC)1{(o@4;j0F+my{z z9Bk(&R4U;dbTtmqC^i^8QXgiJ6`d>-V*Z5y4YU7jn53RTohsr`P+~TGe`exgXyw^$ z(UkOdp4+se0#Up;H4_wgv>N5DM=!kOYeEElv`9}kSL_n-m;92yF1EQ}BUQBnASq51 zH{7l1km1i$t3g0M3*V=tJ8a|d&y^Rhb(!5W<<*eays2qigRhm3Yc9zHB!oq5kAEf9 zP~juz<*eUc?7nI?<QPCn5qeJo`k<z1sjW9mXiaD?mISx6AjtdCRuhCc5g8ANZi#>Z zGXVjB00Dq4bT4!WAY2ha+s65S$ISbTC1IZw0E|K<3r&+i%mKs@fmiR9kr`e)Na6$u zS%tKiMYqyNW=B1YHqB6!jU*$Y%7pkHYex_`<r{@uEPno6<q~*zru8<aLZwgQm=jA_ z76FJ1u@**7QYvX6&$JB>EDdPM9mbA#C)h$ggmm4R2?Q_RLGMCxWDbQ{RP=z~^3P-- zgz;fm5CWQ^a^-6ge9J_anKF#jbtrgz)IrG84ktqQk(~4A;bqhrqh72FuDQ468D>Ts zX|P}+oYR^Oo7g>_!QE5sQV|`NOb6L8&ryAyS1-lX9_(qY_TzjM6wFEtc8JyBN;vFk zK|XM|0<q>8GHNk0W#4ab-Zk1te}mqz<}mI)!k*Cg1Wc8EFC<|pdOP@$2DBu$CyGw@ z^uJ`2T^A6)vu$x<MAoEiCQ89HBHHBurkA#~60_cXY*}G0dLTd&ESLNucxkwvjLxHG zdwq|>YS7^N7n($p@$u=trByXwHfhw|dyu%X#TmYwj3Bwb!AO`9*i8d9oZ{4V+*e5y zr4Iq>`N;nGP`WNiC8i=D19B75D_MT59a-Hvj;q^^Xj1{sx>d7qF!w5={bm<CxQlPv z@rVNNoJ?p8$pHm_-=<2zEMM_#lH@{iJu7LSw857+JhO|?Yi6Ib-ZT&wZ3PXY7UtLK zZ{H5BRqn2oH#lun_CD(0vjZ@~%!^?Zz)-NtLFQq_wUO*bTGwO7EuwBe$?9^)(@rqI z(h+2gbu>7`G@Q5w0YHHQAsNhI>py1)xbGQWU!&x5SdDho$!*6-&b(hTFdyctQ2>BI z<@UH&QAJmmwAkBDYrldH6~>`DskSQXFr+CG(6Gml0J#_(F1vFHiXCFkn=psQL##7@ zVuh4_+L(_T;DRaK+UBXz;%}o&f41iX%HoKkV%9^<>Vqui3b$<lXn4x^SJ2+T03Q;0 zvD#>51H4S6Gk*8JrM+!i5AV?gsb{<IDh*ekc8J^i-0Br>l%LQDBh-Yho1cCrX^4Op z(5=0HV0G*(XC*C-9n;mzg&EO$fb3%F5Kdo6D<t%|YKe(pyHCElU)+kFjX!9?BEm@e zv5l$lNiMgJfL?Vgpl%{R1fUR1;lZxC%gI6fZm^^jg?f}c;<MkXC$9Tr1@8xow0_f; z#P6GI^;hw;+jP9Bp_*b0h=G-Xiq`X+u95Sxeny+S&uM)>`;S-Wm{zjuN@<DzDhOI& zDffAmL9dX-F7lT1+M|O*IwRY~6U9UHwp8cYVQF5QH73(i1wjk#SXk>ku=@yUn~1=X zBk5Pm4B}%37@$tM3ynOJX(bVtN^T;#h&Kjmr~RW!lfHiQ)Pdles=@kj$DOisG0LKe zT_l9#?1?G(cWe4PaAa^c9<^v|C*U|Hd;KqQ1U(6~-W<y1PL)I%pY?Tv*oD36@z#UU zw0)mmR&2FX=zv_YfiAC}Gy}R64gN#Y=f$fzYu4ekC8FU}ZfMs{(wN>Os*D_1SJM*B zihwUF&bkv<;0ROMxlAWXB|w+}0H>1{j0sHNo29BN^maob2Q_2wXp?u1`zLYWR%#?u z5H`LAqrFm?c+XhK=j!x;06TH^@<txkXZVp;I8+9u@wxpv_=_%qx6_O3s&{`4HZ;C> z=Y^;lt-N>c?~1T|HvB1`6y+*;0uB6}CtoL#c~yy1#@(AdewS^}Q2!&RRFh=8@PSZ( zG(i4|XX-XkY#kFnk#5c1@yBUHf1^zjT4#RPJTB53Oxxzq5Hbd?8Z8D7f8%{1>^>N0 z9lW$B>>^&R<@V`{$+67xy4TSXw{gQ#tPmhXK!HXW08~InM-@;NQ#qzVRTM!n8r>UO zd<vuj1VliH5Cj>&E_7Hf6JqJd2TZme>sPUr<kaS;*2yk~ramR9;ta7j>@Jvf0sNXV z_V6jK^tCnDU_hq(q&lR$<uH#(MyhjqJgxb092h|@<{SqZ&ar3Alx#-nMTxhi9Z_08 z{=L;_7baci#`0?=G>lx+g8{^N9ax;`Q&e`wk)a;48+TMsjf4{@C{>+!6C=lyuU=;W zg1VM$Zpd$AmhJ8WUsBJhYY9${Xa@#1jQ}cS<IaFfm_wXjiz<r<7U~<%pV=dy@F^~2 zrJ1B#Bhg?eFRyzS13@=k;ihyhjk?Ja(uT7b2BM7hfV9J@`sC`Mg=OV3mLyk;wUC%W z(VZ$2)u?WorC~2YG%D8&5BGR!8@AO~#MP|uHL`^f8!G%H0LESAmSxqMB0yC?MX@V+ zyFJ{u=R?@bIyXP0$ZsGSEnaC=xf?`p3lJV<W2;JcxcwUy8#3g_^X6bQKsO{eT)Ey1 z004wfIV&^fIF1&rYhWyM;je3KGtC*j8gXqpzN7U2E_8j-mqtVr>a;7V+G0B`U}#`B ze821FVs(GlSEk%HbFSJu?gQ8wL0>OalmvhfgCPVA5tt(e2*M1Iw+NiP^F;z3xc3?e zW@iZ5=qq#%5~d#4VieM~AM1S{#9g2EYRTC&y|yxk0U`5;;}7s+N!|)3XQga7MpNCa zw`e;Zy@KPFb-|Id6J!Oxei=Q6GxOp5jztzkW8m29_ReF8l?hqluWO;(+?CylQyv?7 zApSFV4bQV+NF?)@NdDpsIcZ{#j?&v2#8|iZugcr0TuV%|MOb(MGe97sZib!$FyjVz zVFb#xh!7xG$%%h<ww{Q&lMz#79EGYs&Ga&I&cQMDEhs-Dwmg>MNL0Y_mrq=5lC0YH zYhu$Mg}=+zKQ|*hdMbv3_FIRUD{qmJqHW{P;E@Dg;!oZ|r;y1)GN+WF!lzNn0_$^} zd&?gWd02wW^=qm)2wgj>NaPWzx6xTTazbGrT6ZS1GuAG#Oj_gS_7*4J)Yn{4u==&- zjed!WmN$T=mRi9!{&q1AhLqhhwDg_<?BD^o1=d1EQ;3DC10CfAH!E|}@F(a!vgge! z*w)vmMNK(oa(+UekDm@au>rW`;tMCo?oH5*H;i2YDhwL-RgaPW+9~!5i{Qr{SZbPd zIM$?7a<;DIh_uhMWDyq_>Sf@dI$!`9*oojiwhWnv6GLStINPYpy`fwfN;O1!6Bvi1 zBW0dnY9fguH_^_@d(R`x%qr)X6t<B?O}RkDjD#a4ld#@7o_k?0vzg7eHU@hcmaC1y z0JEj-eup=j+jJNlse7-fDb}q(i(+E^kt7!pU`j>~fvh?(&4GKKym~<mh5!LA3O@Bx z-o*VC%qLZ8xkSND_J)eX6GD2uU9bQN30GGR&}DUc7~A{t%wsSGY0PB(Y8OP7e_Jj- z*Dqc{l25fuaM<m&n8;hzb3MrB>EH)G=|rvUJwCxb5ds7NA_N3OOmymrw&d^*<N*;7 zA_M^rO||=VDGv^ZzEvk)YQ(ZUKq0x-kNebWpv}22AM;b#={mdrqAGwm*s3hoAEV5< cz~{b~DWmIpofZ)k0WbKwk}1N3gWEPVaE0D!L;wH) literal 0 HcmV?d00001 -- 1.8.3.1