diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/jaegertracing/thrift/lib/c_glib/test/testapplicationexception.c | |
parent | Initial commit. (diff) | |
download | ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/jaegertracing/thrift/lib/c_glib/test/testapplicationexception.c')
-rw-r--r-- | src/jaegertracing/thrift/lib/c_glib/test/testapplicationexception.c | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/lib/c_glib/test/testapplicationexception.c b/src/jaegertracing/thrift/lib/c_glib/test/testapplicationexception.c new file mode 100644 index 000000000..89e39e262 --- /dev/null +++ b/src/jaegertracing/thrift/lib/c_glib/test/testapplicationexception.c @@ -0,0 +1,180 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include <glib.h> +#include <string.h> + +#include <thrift/c_glib/thrift_application_exception.h> + +static void +test_create_and_destroy (void) +{ + GObject *object = NULL; + + /* A ThriftApplicationException can be created... */ + object = g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, NULL); + + g_assert (object != NULL); + g_assert (THRIFT_IS_APPLICATION_EXCEPTION (object)); + + /* ...and destroyed */ + g_object_unref (object); +} + +static void +test_initialize (void) +{ + ThriftApplicationException *xception = NULL; + gint32 type = THRIFT_APPLICATION_EXCEPTION_ERROR_INTERNAL_ERROR; + gchar *message = "Exception message"; + gint32 retrieved_type = 0; + gchar *retrieved_message = NULL; + + /* A ThriftApplicationException has "type" and "message" properties that can + be initialized at object creation */ + xception = + g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, + "type", type, + "message", message, + NULL); + + g_assert (xception != NULL); + + /* A ThriftApplicationException's properties can be retrieved */ + g_object_get (xception, + "type", &retrieved_type, + "message", &retrieved_message, + NULL); + + g_assert (retrieved_type == type); + g_assert (retrieved_message != NULL); + g_assert_cmpstr (retrieved_message, ==, message); + + g_free (retrieved_message); + g_object_unref (xception); +} + +static void +test_properties_test (void) +{ + ThriftApplicationException *xception = NULL; + gint32 retrieved_type; + + xception = g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, NULL); + +#define TEST_TYPE_VALUE(_type) \ + retrieved_type = -1; \ + g_object_set (xception, "type", _type, NULL); \ + g_object_get (xception, "type", &retrieved_type, NULL); \ + g_assert_cmpint (retrieved_type, ==, _type); + + /* The "type" property can be set to any valid Thrift exception type */ + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN_METHOD); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INVALID_MESSAGE_TYPE); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_WRONG_METHOD_NAME); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_BAD_SEQUENCE_ID); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_MISSING_RESULT); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INTERNAL_ERROR); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_PROTOCOL_ERROR); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INVALID_TRANSFORM); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_INVALID_PROTOCOL); + TEST_TYPE_VALUE (THRIFT_APPLICATION_EXCEPTION_ERROR_UNSUPPORTED_CLIENT_TYPE); + +/* "g_test_expect_message" is required for the property range tests below but is + not present in GLib before version 2.34 */ +#if (GLIB_CHECK_VERSION (2, 34, 0)) + g_object_set (xception, + "type", THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN, + NULL); + + /* The "type" property cannot be set to a value too low (less than zero) */ + g_test_expect_message ("GLib-GObject", + G_LOG_LEVEL_WARNING, + "value*out of range*type*"); + g_object_set (xception, "type", -1, NULL); + g_test_assert_expected_messages (); + + g_object_get (xception, "type", &retrieved_type, NULL); + g_assert_cmpint (retrieved_type, !=, -1); + g_assert_cmpint (retrieved_type, + ==, + THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN); + + /* The "type" property cannot be set to a value too high (greater than the + highest defined exception-type value) */ + g_test_expect_message ("GLib-GObject", + G_LOG_LEVEL_WARNING, + "value*out of range*type*"); + g_object_set (xception, "type", THRIFT_APPLICATION_EXCEPTION_ERROR_N, NULL); + g_test_assert_expected_messages (); + + g_object_get (xception, "type", &retrieved_type, NULL); + g_assert_cmpint (retrieved_type, !=, THRIFT_APPLICATION_EXCEPTION_ERROR_N); + g_assert_cmpint (retrieved_type, + ==, + THRIFT_APPLICATION_EXCEPTION_ERROR_UNKNOWN); +#endif + + g_object_unref (xception); +} + +static void +test_properties_message (void) +{ + ThriftApplicationException *xception = NULL; + gchar *message = "Exception message"; + gchar *retrieved_message; + + xception = g_object_new (THRIFT_TYPE_APPLICATION_EXCEPTION, NULL); + + /* The "message" property can be set to NULL */ + g_object_set (xception, "message", NULL, NULL); + g_object_get (xception, "message", &retrieved_message, NULL); + g_assert (retrieved_message == NULL); + + /* The "message" property can be set to a valid string */ + g_object_set (xception, "message", message, NULL); + g_object_get (xception, "message", &retrieved_message, NULL); + g_assert_cmpint (strcmp (retrieved_message, message), ==, 0); + + g_free (retrieved_message); + g_object_unref (xception); +} + +int +main (int argc, char **argv) +{ +#if (!GLIB_CHECK_VERSION (2, 36, 0)) + g_type_init (); +#endif + + g_test_init (&argc, &argv, NULL); + + g_test_add_func ("/testapplicationexception/CreateAndDestroy", + test_create_and_destroy); + g_test_add_func ("/testapplicationexception/Initialize", + test_initialize); + g_test_add_func ("/testapplicationexception/Properties/test", + test_properties_test); + g_test_add_func ("/testapplicationexception/Properties/message", + test_properties_message); + + return g_test_run (); +} |