libvirt/tests
Eric Blake 0cd02bca6e event: don't allow mix of old- and new-style registration
Consider these two calls, in either order:

id1 = virConnectDomainEventRegisterAny(conn, NULL,
   VIR_DOMAIN_EVENT_ID_LIFECYCLE,
   VIR_DOMAIN_EVENT_CALLBACK(callback), NULL, NULL);
virConnectDomainEventRegister(conn, callback, NULL, NULL);

Right now, the second call fails, because under the hood, the
old-style function registration is tightly coupled to the
new style lifecycle eventID, and the two calls both try
to register the same global eventID callback representation.

We've alreay documented that users should avoid old-style
registration and deregistration, so anyone heeding the advice
won't run into this situation.  But it would be even nicer if
we pretend the two interfaces are completely separate, and
disallow any cross-linking.  That is, a call to old-style
deregister should never remove a new-style callback even if it
is the same function pointer, and a call to new-style callback
using only callbackIDs obtained legitimately should never
remove an old-style callback (of course, since our callback
IDs are sequential, and there is still coupling under the
hood, you can easily guess the callbackID of an old style
registration and use new-style deregistration to nuke it - but
that starts to be blatantly bad coding on your part rather
than a surprising result on what looks like reasonable
stand-alone API).

With this patch, you can now register a global lifecycle event
handler twice, by using both old and new APIs; if such an event
occurs, your callback will be entered twice.  But that is not a
problem in practice, since it is already possible to use the
new API to register both a global and per-domain event handler
using the same function, which will likewise fire your callback
twice for that domain.  Duplicates are still prevented when
using the same API with same parameters twice (old-style twice,
new-style global twice, or new-style per-domain with same domain
twice), and things are still bounded (it is not possible to
register a single function pointer more than N+2 times per event
id, where N is the number of domains available on the connection).
Besides, it has always been possible to register as many
separate function pointers on the same event id as desired,
through either old or new style API, where the bound there is
the physical limitation of writing a program with enough
distinct function pointers.

Adding another event registration in the testsuite is sufficient
to cover this, where the test fails without the rest of the patch.

* src/conf/object_event.c (_virObjectEventCallback): Add field.
(virObjectEventCallbackLookup): Add argument.
(virObjectEventCallbackListAddID, virObjectEventStateCallbackID):
Adjust callers.
* tests/objecteventtest.c (testDomainCreateXMLMixed): Enhance test.

Signed-off-by: Eric Blake <eblake@redhat.com>
2014-01-07 11:43:56 -07:00
..
capabilityschemadata capabilities: add baselabel per sec driver/virt type to secmodel 2013-10-29 07:06:04 -06:00
commanddata build: clean up stray files found by 'make distcheck' 2013-05-06 14:01:08 -06:00
confdata
cputestdata cpu: Add cpu test cases for PPC CPU driver. 2013-09-05 12:31:10 +01:00
domainschemadata Add XML config for resource partitions 2013-04-15 17:35:31 +01:00
domainsnapshotxml2xmlin domainsnapshotxml2xmltest: Add test case for empty driver element 2013-12-05 09:41:30 +01:00
domainsnapshotxml2xmlout domainsnapshotxml2xmltest: Add test case for empty driver element 2013-12-05 09:41:30 +01:00
fchostdata/fc_host tests: Add tests for fc_host 2013-05-13 17:24:18 +08:00
interfaceschemadata
lxcxml2xmldata Allow root directory in filesystem source dir schema 2013-11-07 18:43:15 +01:00
lxcxml2xmloutdata Allow root directory in filesystem source dir schema 2013-11-07 18:43:15 +01:00
networkxml2confdata Add forwarder attribute to <dns/> element 2013-09-17 17:47:33 -06:00
networkxml2xmlin Add forwarder attribute to <dns/> element 2013-09-17 17:47:33 -06:00
networkxml2xmlout Add forwarder attribute to <dns/> element 2013-09-17 17:47:33 -06:00
networkxml2xmlupdatein Test network update XML parsing 2013-08-28 08:05:46 +02:00
networkxml2xmlupdateout Test network update XML parsing 2013-08-28 08:05:46 +02:00
nodedevschemadata nodedev: add iommuGroup to node device object 2013-06-26 14:10:56 -04:00
nodeinfodata nodeinfotest: Add test data from a AMD bulldozer machine. 2012-11-13 00:35:36 +01:00
nwfilterxml2xmlin nwfilter: Add support for ipset 2012-05-21 06:26:34 -04:00
nwfilterxml2xmlout nwfilter: Add support for ipset 2012-05-21 06:26:34 -04:00
qemucapabilitiesdata qemu: ask for -enable-fips when FIPS is required 2013-12-18 07:05:29 -07:00
qemuhelpdata qemu: Support setting the 'removable' flag for USB disks 2013-09-02 14:45:38 +02:00
qemuhotplugtestdata qemuhotplugtest: Add tests for virtio SCSI disk hotplug 2013-08-26 16:09:56 +02:00
qemumonitorjsondata qemu: Add monitor APIs to fetch CPUID data from QEMU 2013-11-08 09:44:36 +01:00
qemuxml2argvdata AArch64: Porting of armv7l conditons to run qemu for aarch64. 2014-01-06 11:02:24 -05:00
qemuxml2xmloutdata conf: don't format memtune with unlimited values 2013-12-10 09:11:26 +01:00
qemuxmlnsdata qemu: Set QEMU_AUDIO_DRV=none with -nographic 2013-09-02 16:53:39 -04:00
securityselinuxlabeldata selinux: enhance test to cover nfs label failure 2013-08-20 10:46:58 -06:00
sexpr2xmldata storage: treat 'aio' like 'raw' at parse time 2012-10-19 17:35:09 -06:00
storagepoolschemadata schema: require target path in storage pool xml 2013-05-17 08:33:22 +02:00
storagepoolxml2xmlin storage: document gluster pool 2013-11-25 11:03:19 -07:00
storagepoolxml2xmlout storage: document gluster pool 2013-11-25 11:03:19 -07:00
storagevolschemadata schema: make source optional in volume XML 2013-05-17 08:35:08 +02:00
storagevolxml2argvdata Always specify qcow2 compat level on qemu-img command line 2013-08-27 12:45:58 +02:00
storagevolxml2xmlin storage: improve directory support in gluster pool 2013-11-25 12:46:19 -07:00
storagevolxml2xmlout storage: improve directory support in gluster pool 2013-11-25 12:46:19 -07:00
sysinfodata aarch64: Fix sysinfo test. 2014-01-01 16:34:13 +00:00
virfiledata Fix bug in identifying sub-mounts 2013-11-28 11:49:01 +00:00
virpcitestdata Read PCI class from sysfs class file instead of config space. 2014-01-07 17:33:59 +01:00
vmwareverdata VMware: Add Fusion version test 2013-09-30 16:58:37 -05:00
vmx2xmldata esx: Fix floppy.fileName handling in the vmx file parser 2013-10-15 11:39:02 +01:00
xencapsdata
xmconfigdata
xml2sexprdata
xml2vmxdata esx: Fix floppy.fileName handling in the vmx file parser 2013-10-15 11:39:02 +01:00
.valgrind.supp valgrind: Adjust filter for _dl_allocate_tls 2013-08-01 17:04:28 -04:00
capabilityschematest
commandhelper.c testutils: Resolve Coverity issues 2013-07-11 14:18:11 -04:00
commandtest.c Make virCommand env handling robust in setuid env 2013-10-21 14:03:52 +01:00
cpuset virBitmapParse: Fix behavior in case of error and fix up callers 2013-08-22 11:38:36 +02:00
cputest.c tests: guarantee abs_srcdir in all C tests 2013-11-27 14:39:56 -07:00
define-dev-segfault
domainschematest LXC: Fix handling of RAM filesystem size units 2013-10-09 17:44:45 +02:00
domainsnapshotschematest
domainsnapshotxml2xmltest.c domainsnapshotxml2xmltest: Add test case for empty driver element 2013-12-05 09:41:30 +01:00
esxutilstest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
eventtest.c Convert 'int i' to 'size_t i' in tests/ files 2013-07-10 17:40:13 +01:00
fchosttest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
fdstreamtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
int-overflow
interfaceschematest
interfacexml2xmltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
jsontest.c Error out on unterminated arrays and objects in JSON parser 2013-11-20 12:35:44 +01:00
libvirtd-fail
libvirtd-pool
libvirtdconftest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
lxcxml2xmltest.c Allow root directory in filesystem source dir schema 2013-11-07 18:43:15 +01:00
Makefile.am Added domain start/stop/define/undefine event unit tests 2013-12-10 11:23:20 +00:00
metadatatest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
networkschematest
networkxml2conftest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
networkxml2xmltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
networkxml2xmlupdatetest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
nodedevschematest
nodedevxml2xmltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
nodeinfotest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
nwfilterschematest
nwfilterxml2xmltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
object-locking.ml Rename 'DeviceMonitor' to 'NodeDeviceDriver' 2013-04-24 10:59:53 +01:00
objecteventtest.c event: don't allow mix of old- and new-style registration 2014-01-07 11:43:56 -07:00
oomtrace.pl Remove tabs from all perl files & enforce this 2012-07-30 13:09:57 +01:00
openvzutilstest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
openvzutilstest.conf
pkix_asn1_tab.c
qemuagenttest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
qemuargv2xmltest.c virsh domxml-from-native to treat SCSI as the bus type for pseries by default 2013-11-25 10:44:46 -05:00
qemucapabilitiestest.c qemu: ask for -enable-fips when FIPS is required 2013-12-18 07:05:29 -07:00
qemuhelptest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
qemuhotplugtest.c Renamed virDomainEventState to virObjectEventState 2013-12-10 11:35:34 +00:00
qemumonitorjsontest.c qemumonitorjsontest: Introduce GetNonExistingCPUData test 2013-11-19 16:30:28 +01:00
qemumonitortest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
qemumonitortestutils.c Remove (nearly) all use of getuid()/getgid() 2013-10-21 14:03:52 +01:00
qemumonitortestutils.h tests: Learn qemuMonitorTestNew optional greeting 2013-10-01 10:48:47 +02:00
qemuxml2argvtest.c AArch64: Porting of armv7l conditons to run qemu for aarch64. 2014-01-06 11:02:24 -05:00
qemuxml2xmltest.c qemu: add support for -device pvpanic 2013-12-13 05:53:33 -07:00
qemuxmlnstest.c tests: guarantee abs_srcdir in all C tests 2013-11-27 14:39:56 -07:00
read-bufsiz maint: avoid regression on copyright listings 2012-07-27 07:42:34 -06:00
read-non-seekable maint: avoid regression on copyright listings 2012-07-27 07:42:34 -06:00
reconnect.c test: Refactor setting of dummy error handlers 2013-09-17 16:45:53 +02:00
schematestutils.sh tests: skip schema validation tests if xmllint is missing 2013-08-23 15:23:44 -06:00
seclabeltest.c tests: uniformly report test failures 2013-02-25 17:38:11 -07:00
securityselinuxhelper.c tests: avoid compile failure on linux kernels older than 2.6.19 2013-10-07 08:40:30 -06:00
securityselinuxlabeltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
securityselinuxtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
sexpr2xmltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
shunloadhelper.c shunloadtest: Resolve Coverity CHECKED_RETURN error 2013-05-21 09:22:21 -04:00
shunloadtest.c build: fix shunloadtest breakage 2013-07-29 13:09:39 -06:00
sockettest.c virsocket: Introduce virSocketAddrIsWildcard 2013-10-11 11:05:06 +02:00
ssh.c build: fix shunloadtest breakage 2013-07-29 13:09:39 -06:00
start maint: avoid regression on copyright listings 2012-07-27 07:42:34 -06:00
statstest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
storagebackendsheepdogtest.c Build breaker - requires VIR_FROM_THIS 2013-05-10 08:52:43 -04:00
storagepoolschematest schema: require target path in storage pool xml 2013-05-17 08:33:22 +02:00
storagepoolxml2xmltest.c storage: document gluster pool 2013-11-25 11:03:19 -07:00
storagevolschematest schema: make source optional in volume XML 2013-05-17 08:35:08 +02:00
storagevolxml2argvtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
storagevolxml2xmltest.c storage: improve directory support in gluster pool 2013-11-25 12:46:19 -07:00
sysinfotest.c tests: sysinfotest: Actual/expected were swapped in error message. 2014-01-01 16:34:13 +00:00
test_conf.c viralloc: Report OOM error on failure 2013-07-10 11:07:31 +02:00
test_conf.sh rename tests/conftest.c 2013-03-19 13:13:28 -06:00
test-lib.sh test-lib: Make case skipping possible 2013-09-13 10:25:56 +02:00
testutils.c tests: guarantee abs_srcdir in all C tests 2013-11-27 14:39:56 -07:00
testutils.h tests: guarantee abs_srcdir in all C tests 2013-11-27 14:39:56 -07:00
testutilslxc.c virCaps: get rid of defaultConsoleTargetType callback 2013-04-04 22:42:39 +02:00
testutilslxc.h
testutilsqemu.c AArch64: Porting of armv7l conditons to run qemu for aarch64. 2014-01-06 11:02:24 -05:00
testutilsqemu.h build: skip qemu in tests when !WITH_QEMU 2013-05-31 11:35:34 -06:00
testutilsxen.c virCaps: get rid of defaultConsoleTargetType callback 2013-04-04 22:42:39 +02:00
testutilsxen.h virCaps: get rid of defaultConsoleTargetType callback 2013-04-04 22:42:39 +02:00
utiltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
vcpupin maint: avoid regression on copyright listings 2012-07-27 07:42:34 -06:00
viratomictest.c maint: fix comma style issues: tests, tools 2013-11-20 09:14:55 -07:00
virauthconfigtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virbitmaptest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virbuftest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
vircgroupmock.c maint: fix comma style issues: tests, tools 2013-11-20 09:14:55 -07:00
vircgrouptest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virdbustest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virdrivermoduletest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virendiantest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virfiletest.c Fix bug in identifying sub-mounts 2013-11-28 11:49:01 +00:00
virhashdata.h
virhashtest.c maint: avoid 'const fooPtr' in hashes 2013-10-14 11:40:24 -06:00
viridentitytest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virkeycodetest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virkeyfiletest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virlockspacetest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virlogtest.c Fix flaw in detecting log format 2013-10-14 10:31:01 +01:00
virnetmessagetest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virnetserverclientmock.c Add test case for virNetServerClient object identity code 2013-09-24 09:37:26 +01:00
virnetserverclienttest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virnetsockettest.c tests: fix syntax in previous patch 2014-01-01 09:58:27 -07:00
virnettlscontexttest.c virnettlscontexttest fails with GNUTLS 3.0.28 2013-12-23 13:16:07 -07:00
virnettlshelpers.c Fix parallel runs of TLS test suites 2013-08-09 11:54:41 +01:00
virnettlshelpers.h Fix parallel runs of TLS test suites 2013-08-09 11:54:41 +01:00
virnettlssessiontest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virpcimock.c Read PCI class from sysfs class file instead of config space. 2014-01-07 17:33:59 +01:00
virpcitest.c Read PCI class from sysfs class file instead of config space. 2014-01-07 17:33:59 +01:00
virportallocatortest.c Return -1 in virPortAllocatorAcquire if all ports are used 2013-11-18 12:28:07 +01:00
virsh-all tests: Skip virsh-all test as expensive 2013-08-12 18:47:56 +02:00
virsh-optparse virsh: add snapshot-create-as memspec support 2012-11-07 09:04:18 -07:00
virsh-schedinfo Allow multiple parameters for schedinfo 2013-04-03 08:49:30 +02:00
virsh-synopsis maint: avoid regression on copyright listings 2012-07-27 07:42:34 -06:00
virsh-undefine build: avoid confusing make with raw name 'undefine' 2012-09-12 11:27:22 -06:00
virsh-uriprecedence tests: Don't test user config file if ran as root 2013-09-13 10:25:56 +02:00
virshtest.c virsh: allow alias to expand to opt=value pair 2013-10-24 11:17:41 +01:00
virstoragetest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virstringtest.c Introduce standard methods for sorting strings with qsort 2013-11-28 11:29:46 +00:00
virsystemdmock.c Fix crash in virsystemdtest with dbus 1.7.6 2013-12-19 11:20:05 +00:00
virsystemdtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
virt-aa-helper-test add vnc unix sockets to apparmor policy 2012-12-11 14:32:39 -07:00
virtimetest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
viruritest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
vmwarevertest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
vmx2xmltest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
xencapstest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
xmconfigtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
xml2sexprtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00
xml2vmxtest.c Remove test case average timing 2013-10-08 12:39:30 +01:00