diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-03-20 11:22:49 +0100 |
---|---|---|
committer | Luiz Capitulino <lcapitulino@redhat.com> | 2012-03-27 09:11:00 -0300 |
commit | 9e9eace89e2a8180f0a5fd312bb87e53e6f2004b (patch) | |
tree | 56377c4794bb8296d8e87b615ecaf31489f3c826 | |
parent | f24582d6ad8a080e008974c000bf0ae635d036ac (diff) | |
download | qemu-9e9eace89e2a8180f0a5fd312bb87e53e6f2004b.zip qemu-9e9eace89e2a8180f0a5fd312bb87e53e6f2004b.tar.gz qemu-9e9eace89e2a8180f0a5fd312bb87e53e6f2004b.tar.bz2 |
qapi: add struct-errors test case to test-qmp-output-visitor
This test case verifies that invalid native enums are caught, and causes
qapi to tear down the QObject tree under construction, exercising the
previous patch.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
-rw-r--r-- | qapi-schema-test.json | 2 | ||||
-rw-r--r-- | test-qmp-output-visitor.c | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/qapi-schema-test.json b/qapi-schema-test.json index 8c7f9f7..9eae350 100644 --- a/qapi-schema-test.json +++ b/qapi-schema-test.json @@ -8,7 +8,7 @@ # for testing nested structs { 'type': 'UserDefOne', - 'data': { 'integer': 'int', 'string': 'str' } } + 'data': { 'integer': 'int', 'string': 'str', '*enum1': 'EnumOne' } } { 'type': 'UserDefTwo', 'data': { 'string': 'str', diff --git a/test-qmp-output-visitor.c b/test-qmp-output-visitor.c index 4d6c4d4..24a6359 100644 --- a/test-qmp-output-visitor.c +++ b/test-qmp-output-visitor.c @@ -274,6 +274,24 @@ static void test_visitor_out_struct_nested(TestOutputVisitorData *data, qapi_free_UserDefNested(ud2); } +static void test_visitor_out_struct_errors(TestOutputVisitorData *data, + const void *unused) +{ + EnumOne bad_values[] = { ENUM_ONE_MAX, -1 }; + UserDefOne u = { 0 }, *pu = &u; + Error *errp; + int i; + + for (i = 0; i < ARRAY_SIZE(bad_values) ; i++) { + errp = NULL; + u.has_enum1 = true; + u.enum1 = bad_values[i]; + visit_type_UserDefOne(data->ov, &pu, "unused", &errp); + g_assert(error_is_set(&errp) == true); + error_free(errp); + } +} + typedef struct TestStructList { TestStruct *value; @@ -444,6 +462,8 @@ int main(int argc, char **argv) &out_visitor_data, test_visitor_out_struct); output_visitor_test_add("/visitor/output/struct-nested", &out_visitor_data, test_visitor_out_struct_nested); + output_visitor_test_add("/visitor/output/struct-errors", + &out_visitor_data, test_visitor_out_struct_errors); output_visitor_test_add("/visitor/output/list", &out_visitor_data, test_visitor_out_list); output_visitor_test_add("/visitor/output/list-qapi-free", |