[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v12 34/36] qapi: Add positive tests to qapi-schema-t
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v12 34/36] qapi: Add positive tests to qapi-schema-test |
Date: |
Wed, 18 Nov 2015 01:53:09 -0700 |
Add positive tests to qapi-schema-test for things that were
made possible by recent patches but which caused compile errors
due to collisions prior to that point. The focus is mainly on
collisions due to names we have reserved for qapi, even though
it is unlikely that anyone will want to abuse these names in
actual .json files.
The added tests includes:
Use of a member name ending in 'Kind' or 'List' [1, 3]
Use of a type name starting with 'has_' [1, 4]
Use of a type named 'u' [1, 5]
Use of a union branch name of 'u' [2, 5]
Use of a union branch name starting with 'has_' [2, 4]
[1] Never broken, but could break if reservations are too strict
[2] Broken prior to commit e4ba22b
[3] See reservations in commit 4dc2e69 and 255960d
[4] See reservations in commit 9fb081e
[5] See reservation in commit 5e59baf
Not worth testing here: we no longer have a collision with a
member named 'base' (commit ddf2190), with a branch named
'type' (commit e4ba22b), or with an alternate member named
'max' (previous commits); these names were more accidental
namespace pollutions than intentional reservations.
Signed-off-by: Eric Blake <address@hidden>
---
v12: no change
v11 (no v10): drop test of 'max'
v9: reorder in series (was 9/17); fewer tests of 'base' and
'type' non-collision; fold in alternate 'max' test; update commit
message
v8: new, but collects portions of subset B v10 patches 2, 3, and
16 and subset C v7 patch 6 that were deferred to later.
It might be worth dropping or simplifying this patch, depending
on how many corner cases we actually want to test.
---
tests/qapi-schema/qapi-schema-test.json | 16 ++++++++++++++++
tests/qapi-schema/qapi-schema-test.out | 26 ++++++++++++++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/tests/qapi-schema/qapi-schema-test.json
b/tests/qapi-schema/qapi-schema-test.json
index 4b89527..793323d 100644
--- a/tests/qapi-schema/qapi-schema-test.json
+++ b/tests/qapi-schema/qapi-schema-test.json
@@ -113,6 +113,22 @@
'sizes': ['size'],
'any': ['any'] } }
+# Even though 'u' and 'has_*' are forbidden as struct member names, they
+# should still be valid as a type or union branch name. And although
+# '*Kind' and '*List' are forbidden as type names, they should not be
+# forbidden as a member or branch name. Flat union branches do not
+# collide with base members.
+{ 'enum': 'EnumName', 'data': [ 'value1', 'has_a', 'u' ] }
+{ 'struct': 'has_a', 'data': { 'MyKind': 'int', 'MyList': ['int'],
+ 'value1': 'EnumName' } }
+{ 'union': 'u', 'data': { 'u': 'uint8', 'myKind': 'has_a',
+ 'myList': 'has_a', 'has_a': 'has_a' } }
+{ 'union': 'UnionName', 'base': 'has_a', 'discriminator': 'value1',
+ 'data': { 'value1': 'UserDefZero', 'has_a': 'UserDefZero',
+ 'u': 'UserDefZero' } }
+{ 'alternate': 'AltName', 'data': { 'type': 'int', 'u': 'bool',
+ 'myKind': 'has_a' } }
+
# testing commands
{ 'command': 'user_def_cmd', 'data': {} }
{ 'command': 'user_def_cmd1', 'data': {'ud1a': 'UserDefOne'} }
diff --git a/tests/qapi-schema/qapi-schema-test.out
b/tests/qapi-schema/qapi-schema-test.out
index 2c546b7..03c465b 100644
--- a/tests/qapi-schema/qapi-schema-test.out
+++ b/tests/qapi-schema/qapi-schema-test.out
@@ -22,6 +22,8 @@ object :obj-guest-get-time-arg
member b: int optional=True
object :obj-guest-sync-arg
member arg: any optional=False
+object :obj-has_a-wrapper
+ member data: has_a optional=False
object :obj-int16List-wrapper
member data: int16List optional=False
object :obj-int32List-wrapper
@@ -46,6 +48,8 @@ object :obj-uint32List-wrapper
member data: uint32List optional=False
object :obj-uint64List-wrapper
member data: uint64List optional=False
+object :obj-uint8-wrapper
+ member data: uint8 optional=False
object :obj-uint8List-wrapper
member data: uint8List optional=False
object :obj-user_def_cmd1-arg
@@ -56,6 +60,10 @@ object :obj-user_def_cmd2-arg
alternate AltIntNum
case i: int
case n: number
+alternate AltName
+ case type: int
+ case u: bool
+ case myKind: has_a
alternate AltNumInt
case n: number
case i: int
@@ -78,6 +86,7 @@ event EVENT_D :obj-EVENT_D-arg
object Empty1
object Empty2
base Empty1
+enum EnumName ['value1', 'has_a', 'u']
enum EnumOne ['value1', 'value2', 'value3']
object EventStructOne
member struct1: UserDefOne optional=False
@@ -101,6 +110,12 @@ object TestStruct
member integer: int optional=False
member boolean: bool optional=False
member string: str optional=False
+object UnionName
+ base has_a
+ tag value1
+ case value1: UserDefZero
+ case has_a: UserDefZero
+ case u: UserDefZero
object UserDefA
member boolean: bool optional=False
member a_b: int optional=True
@@ -196,6 +211,17 @@ command guest-get-time :obj-guest-get-time-arg -> int
gen=True success_response=True
command guest-sync :obj-guest-sync-arg -> any
gen=True success_response=True
+object has_a
+ member MyKind: int optional=False
+ member MyList: intList optional=False
+ member value1: EnumName optional=False
+object u
+ member type: uKind optional=False
+ case u: :obj-uint8-wrapper
+ case myKind: :obj-has_a-wrapper
+ case myList: :obj-has_a-wrapper
+ case has_a: :obj-has_a-wrapper
+enum uKind ['u', 'myKind', 'myList', 'has_a']
command user_def_cmd None -> None
gen=True success_response=True
command user_def_cmd1 :obj-user_def_cmd1-arg -> None
--
2.4.3
- Re: [Qemu-devel] [PATCH v12 26/36] qapi: Change munging of CamelCase enum values, (continued)
- [Qemu-devel] [PATCH v12 14/36] qapi: Remove outdated tests related to QMP/branch collisions, Eric Blake, 2015/11/18
- [Qemu-devel] [PATCH v12 23/36] qapi: Remove dead tests for max collision, Eric Blake, 2015/11/18
- [Qemu-devel] [PATCH v12 32/36] qapi: Inline _make_implicit_tag(), Eric Blake, 2015/11/18
- [Qemu-devel] [PATCH v12 30/36] qapi: Convert QType into qapi builtin enum type, Eric Blake, 2015/11/18
- [Qemu-devel] [PATCH v12 34/36] qapi: Add positive tests to qapi-schema-test,
Eric Blake <=
- [Qemu-devel] [PATCH v12 36/36] qapi: Shorter visits of optional fields, Eric Blake, 2015/11/18
- [Qemu-devel] [PATCH v12 22/36] qapi: Don't let implicit enum MAX member collide, Eric Blake, 2015/11/18
- [Qemu-devel] [PATCH v12 24/36] cpu: Convert CpuInfo into flat union, Eric Blake, 2015/11/18