qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

tests/qapi-schema: Demonstrate misleading optional tag error

Test flat-union-optional-discriminator declares its union tag as
'*switch': 'Enum', and points to it with 'discriminator': '*switch'.
This gets rejected as "discriminator of flat union 'MyUnion' uses
invalid name '*switch'". Correct; member 'discriminator' doesn't
accept a '*' prefix.

However, this merely tests name validity checking, which we already
cover elsewhere. More interesting is testing the valid name 'switch'.
This reports "discriminator 'switch' is not a member of base struct
'Base'", which is misleading.

Copy the existing 'discriminator': '*switch' test to
flat-union-discriminator-bad-name, and rewrite its comment. Change
flat-union-optional-discriminator to test 'discriminator': 'switch',
and mark it FIXME.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20190914153506.2151-4-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>

+17 -2
+1
tests/Makefile.include
··· 388 388 qapi-schema += flat-union-base-any.json 389 389 qapi-schema += flat-union-base-union.json 390 390 qapi-schema += flat-union-clash-member.json 391 + qapi-schema += flat-union-discriminator-bad-name.json 391 392 qapi-schema += flat-union-empty.json 392 393 qapi-schema += flat-union-inline.json 393 394 qapi-schema += flat-union-inline-invalid-dict.json
+1
tests/qapi-schema/flat-union-discriminator-bad-name.err
··· 1 + tests/qapi-schema/flat-union-discriminator-bad-name.json:7: Discriminator of flat union 'MyUnion' does not allow optional name '*switch'
+1
tests/qapi-schema/flat-union-discriminator-bad-name.exit
··· 1 + 1
+11
tests/qapi-schema/flat-union-discriminator-bad-name.json
··· 1 + # discriminator '*switch' isn't a member of base, 'switch' is 2 + # reports "does not allow optional name", which is good enough 3 + { 'enum': 'Enum', 'data': [ 'one', 'two' ] } 4 + { 'struct': 'Base', 5 + 'data': { '*switch': 'Enum' } } 6 + { 'struct': 'Branch', 'data': { 'name': 'str' } } 7 + { 'union': 'MyUnion', 8 + 'base': 'Base', 9 + 'discriminator': '*switch', 10 + 'data': { 'one': 'Branch', 11 + 'two': 'Branch' } }
tests/qapi-schema/flat-union-discriminator-bad-name.out

This is a binary file and will not be displayed.

+1 -1
tests/qapi-schema/flat-union-optional-discriminator.err
··· 1 - tests/qapi-schema/flat-union-optional-discriminator.json:6: Discriminator of flat union 'MyUnion' does not allow optional name '*switch' 1 + tests/qapi-schema/flat-union-optional-discriminator.json:7: Discriminator 'switch' is not a member of base struct 'Base'
+2 -1
tests/qapi-schema/flat-union-optional-discriminator.json
··· 1 1 # we require the discriminator to be non-optional 2 + # FIXME reports "discriminator 'switch' is not a member of base struct 'Base'" 2 3 { 'enum': 'Enum', 'data': [ 'one', 'two' ] } 3 4 { 'struct': 'Base', 4 5 'data': { '*switch': 'Enum' } } 5 6 { 'struct': 'Branch', 'data': { 'name': 'str' } } 6 7 { 'union': 'MyUnion', 7 8 'base': 'Base', 8 - 'discriminator': '*switch', 9 + 'discriminator': 'switch', 9 10 'data': { 'one': 'Branch', 10 11 'two': 'Branch' } }