Message ID | 20200624194809.26600-3-eric.auger@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Avoid abort on QMP attempt to add an object with duplicate id | expand |
On 24/06/20 21:48, Eric Auger wrote: > This new test checks that attempting to create an object > with an existing ID gracefully fails. > > Signed-off-by: Eric Auger <eric.auger@redhat.com> > Acked-by: Thomas Huth <thuth@redhat.com> > --- > tests/qtest/qmp-cmd-test.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c > index 9f5228cd99..ceb3296691 100644 > --- a/tests/qtest/qmp-cmd-test.c > +++ b/tests/qtest/qmp-cmd-test.c > @@ -213,6 +213,23 @@ static void test_object_add_without_props(void) > qtest_quit(qts); > } > > +static void test_object_add_with_duplicate_id(void) > +{ > + QTestState *qts; > + QDict *resp; > + > + qts = qtest_init(common_args); > + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > + " {'qom-type': 'memory-backend-ram', 'id': 'ram1', 'props': {'size': 4294967296 } } }"); > + g_assert_nonnull(resp); > + g_assert(qdict_haskey(resp, "return")); > + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > + " {'qom-type': 'memory-backend-ram', 'id': 'ram1', 'props': {'size': 4294967296 } } }"); > + g_assert_nonnull(resp); > + qmp_assert_error_class(resp, "GenericError"); > + qtest_quit(qts); > +} > + > int main(int argc, char *argv[]) > { > QmpSchema schema; > @@ -225,6 +242,8 @@ int main(int argc, char *argv[]) > > qtest_add_func("qmp/object-add-without-props", > test_object_add_without_props); > + qtest_add_func("qmp/object-add-duplicate-id", > + test_object_add_with_duplicate_id); > /* TODO: add coverage of generic object-add failure modes */ > > ret = g_test_run(); > It would be nice also to add a test for adding the same object twice, first failing and then succeeding (the difference between v2 and v3). However it can be added as a separate patch. Paolo
Eric Auger <eric.auger@redhat.com> writes: > This new test checks that attempting to create an object > with an existing ID gracefully fails. > > Signed-off-by: Eric Auger <eric.auger@redhat.com> > Acked-by: Thomas Huth <thuth@redhat.com> > --- > tests/qtest/qmp-cmd-test.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c > index 9f5228cd99..ceb3296691 100644 > --- a/tests/qtest/qmp-cmd-test.c > +++ b/tests/qtest/qmp-cmd-test.c > @@ -213,6 +213,23 @@ static void test_object_add_without_props(void) > qtest_quit(qts); > } > > +static void test_object_add_with_duplicate_id(void) > +{ > + QTestState *qts; > + QDict *resp; > + > + qts = qtest_init(common_args); > + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > + " {'qom-type': 'memory-backend-ram', 'id': 'ram1', 'props': {'size': 4294967296 } } }"); > + g_assert_nonnull(resp); > + g_assert(qdict_haskey(resp, "return")); > + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" > + " {'qom-type': 'memory-backend-ram', 'id': 'ram1', 'props': {'size': 4294967296 } } }"); > + g_assert_nonnull(resp); > + qmp_assert_error_class(resp, "GenericError"); > + qtest_quit(qts); > +} > + > int main(int argc, char *argv[]) > { > QmpSchema schema; > @@ -225,6 +242,8 @@ int main(int argc, char *argv[]) > > qtest_add_func("qmp/object-add-without-props", > test_object_add_without_props); > + qtest_add_func("qmp/object-add-duplicate-id", > + test_object_add_with_duplicate_id); > /* TODO: add coverage of generic object-add failure modes */ > > ret = g_test_run(); One test case per error gets tedious real quick. I'd add a test case for generic failures (resolving the TODO), test duplicate ID there, and add a TODO for the remaining generic failures. No reason to withhold my Reviewed-by: Markus Armbruster <armbru@redhat.com>
diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c index 9f5228cd99..ceb3296691 100644 --- a/tests/qtest/qmp-cmd-test.c +++ b/tests/qtest/qmp-cmd-test.c @@ -213,6 +213,23 @@ static void test_object_add_without_props(void) qtest_quit(qts); } +static void test_object_add_with_duplicate_id(void) +{ + QTestState *qts; + QDict *resp; + + qts = qtest_init(common_args); + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" + " {'qom-type': 'memory-backend-ram', 'id': 'ram1', 'props': {'size': 4294967296 } } }"); + g_assert_nonnull(resp); + g_assert(qdict_haskey(resp, "return")); + resp = qtest_qmp(qts, "{'execute': 'object-add', 'arguments':" + " {'qom-type': 'memory-backend-ram', 'id': 'ram1', 'props': {'size': 4294967296 } } }"); + g_assert_nonnull(resp); + qmp_assert_error_class(resp, "GenericError"); + qtest_quit(qts); +} + int main(int argc, char *argv[]) { QmpSchema schema; @@ -225,6 +242,8 @@ int main(int argc, char *argv[]) qtest_add_func("qmp/object-add-without-props", test_object_add_without_props); + qtest_add_func("qmp/object-add-duplicate-id", + test_object_add_with_duplicate_id); /* TODO: add coverage of generic object-add failure modes */ ret = g_test_run();