
On 02/09/2016 03:11 PM, Laine Stump wrote:
On 02/09/2016 10:59 AM, Cole Robinson wrote:
We use the PreFormat callback for this. Many test cases need to be extended to pass in proper qemuCaps flags so AssignAddresses doesn't throw errors.
One test case (pcie-root-port-too-many) is dropped, since it was meant only for checking an error condition in qemuxml2argv, and one we add in AssignAddresses it errors here too.
Long term I think AssignAddresses should be handled in qemu's PostParse callback, but that's not entirely straightforward. Handling it here means we can get the test suite churn over with. ---
I'm too lazy to do it myself, but it would be comforting to move the xml2xmlout data files into the xml2argvdata directory and run qemuxml2argvtest with the existing .args files to verify that all of these PCI addresses you've just generated are exactly the same as the ones that have been auto-generated over the last several years and put into the .args files...
I gave it a spin: cd tests/qemuxml2xmloutdata; for i in *.xml; do new=`echo $i | sed "s/qemuxml2xmlout-/qemuxml2argv-/g"`; cp $i ../qemuxml2argvdata/$new; done qemuxml2argvtest passes with no problems. But qemuxml2xmltest actually fails now! Nothing major though, just the controllers being reordered a bit in a few test cases. The qemu PostParse bits should probably be adding controllers in the same order as domain_conf parses them in, so the bits match. A patch for another day though
(Hmm - if the xml files in all the test data directories had their "qemuxml2XXX-" prefixes removed as we had earlier discussed, such an operation would be trivial :-)
Yup, it's still on my list.
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index e3b61c0..a06aa4d 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -37,13 +37,24 @@ struct testInfo { }; static int +qemuXML2XMLPreFormatCallback(virDomainDefPtr def, const void *opaque) +{ + const struct testInfo *info = opaque; + + if (qemuDomainAssignAddresses(def, info->qemuCaps, NULL)) + return -1; + + return 0; +} + +static int testXML2XMLActive(const void *opaque) { const struct testInfo *info = opaque; return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName, info->outActiveName, true, - NULL, NULL); + qemuXML2XMLPreFormatCallback, opaque); } @@ -54,7 +65,7 @@ testXML2XMLInactive(const void *opaque) return testCompareDomXML2XMLFiles(driver.caps, driver.xmlopt, info->inName, info->outInactiveName, false, - NULL, NULL); + qemuXML2XMLPreFormatCallback, opaque); } @@ -138,6 +149,9 @@ testCompareStatusXMLToXMLFiles(const void *opaque) goto cleanup; } + if (qemuDomainAssignAddresses(obj->def, data->qemuCaps, NULL)) + goto cleanup; +
Why is this needed? I though that's what the pre-format callback was for.
This function, for testing domain status XML, doesn't use the standard testutils infrastructure because it has some funky XML handling, so this call needs to be opencoded.
/* format it back */ if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE))) { @@ -379,14 +393,28 @@ mymain(void) DO_TEST("disk-drive-network-rbd-ipv6"); DO_TEST("disk-drive-network-rbd-ceph-env"); DO_TEST("disk-drive-network-sheepdog"); - DO_TEST("disk-scsi-device"); + DO_TEST_FULL("disk-scsi-device", WHEN_ACTIVE, + QEMU_CAPS_NODEFCONFIG, + QEMU_CAPS_SCSI_LSI);
The indentation of all of the followon lines to DO_TEST_FULL()'s are off. It's consistent, but since it doesn't match what all of our editors likely do automatically, so it will start to look ugly as new cases are added. (I didn't look - is the indentation also incorrect in qemuxml2argvtest.c (which is where I assume you got the caps lists for each test)?)
I didn't reflow anything in qemuxml2argtest I don't think. The nature of the additions/removals means the indentation didn't change.
ACK with the question about the extra call to qemuDomainAssignAddresses() answered and the indentation fixed so that it matches what an editor's auto-indent would do (putting the following lines one space past the column of the opening "(" )
Honestly I'm not a big fan of column aligning, if there's any future find+replace function rename the indentation is off... there's many examples of this in libvirt code. But I fixed these cases manually and pushed now. Thanks for the reviews! - Cole