diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 12:24:36 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 12:24:36 +0000 |
commit | 06eaf7232e9a920468c0f8d74dcf2fe8b555501c (patch) | |
tree | e2c7b5777f728320e5b5542b6213fd3591ba51e2 /storage/maria/libmarias3/tests/custom_malloc.c | |
parent | Initial commit. (diff) | |
download | mariadb-06eaf7232e9a920468c0f8d74dcf2fe8b555501c.tar.xz mariadb-06eaf7232e9a920468c0f8d74dcf2fe8b555501c.zip |
Adding upstream version 1:10.11.6.upstream/1%10.11.6
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'storage/maria/libmarias3/tests/custom_malloc.c')
-rw-r--r-- | storage/maria/libmarias3/tests/custom_malloc.c | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/storage/maria/libmarias3/tests/custom_malloc.c b/storage/maria/libmarias3/tests/custom_malloc.c new file mode 100644 index 00000000..80f1b393 --- /dev/null +++ b/storage/maria/libmarias3/tests/custom_malloc.c @@ -0,0 +1,207 @@ +/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: + * Copyright 2019 MariaDB Corporation Ab. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ + +#include <yatl/lite.h> +#include <libmarias3/marias3.h> + +/* Tests functions using custom allocators */ + +static void *cust_malloc(size_t size) +{ + printf("Malloc of %zu bytes\n", size); + return malloc(size); +} + +static void cust_free(void *ptr) +{ + printf("Free called\n"); + free(ptr); +} + +static void *cust_realloc(void *ptr, size_t size) +{ + printf("Realloc of %zu bytes\n", size); + return realloc(ptr, size); +} + +static char *cust_strdup(const char *str) +{ + printf("Strdup called\n"); + return strdup(str); +} + +static void *cust_calloc(size_t nmemb, size_t size) +{ + printf("Calloc of %zu elements, %zu size\n", nmemb, size); + return calloc(nmemb, size); +} + +int main(int argc, char *argv[]) +{ + int res; + int i; + ms3_list_st *list = NULL, *list_it = NULL; + uint8_t *data; + size_t length; + bool found; + uint8_t list_version; + const char *test_string = "Another one bites the dust"; + ms3_status_st status; + ms3_st *ms3; + char *s3key = getenv("S3KEY"); + char *s3secret = getenv("S3SECRET"); + char *s3region = getenv("S3REGION"); + char *s3bucket = getenv("S3BUCKET"); + char *s3host = getenv("S3HOST"); + char *s3noverify = getenv("S3NOVERIFY"); + char *s3usehttp = getenv("S3USEHTTP"); + char *s3port = getenv("S3PORT"); + + SKIP_IF_(!s3key, "Environemnt variable S3KEY missing"); + SKIP_IF_(!s3secret, "Environemnt variable S3SECRET missing"); + SKIP_IF_(!s3region, "Environemnt variable S3REGION missing"); + SKIP_IF_(!s3bucket, "Environemnt variable S3BUCKET missing"); + + (void) argc; + (void) argv; + + ms3_library_init_malloc(cust_malloc, cust_free, cust_realloc, cust_strdup, + cust_calloc); + ms3 = ms3_init(s3key, s3secret, s3region, s3host); + + if (s3noverify && !strcmp(s3noverify, "1")) + { + ms3_set_option(ms3, MS3_OPT_DISABLE_SSL_VERIFY, NULL); + } + + if (s3usehttp && !strcmp(s3usehttp, "1")) + { + ms3_set_option(ms3, MS3_OPT_USE_HTTP, NULL); + } + + if (s3port) + { + int port = atol(s3port); + ms3_set_option(ms3, MS3_OPT_PORT_NUMBER, &port); + } + +// ms3_debug(true); + ASSERT_NOT_NULL(ms3); + + res = ms3_put(ms3, s3bucket, "test/custom_malloc.txt", + (const uint8_t *)test_string, + strlen(test_string)); + ASSERT_EQ_(res, 0, "Result: %u", res); + + // A prefix that will give no results; + res = ms3_list(ms3, s3bucket, "asdfghjkl", &list); + ASSERT_EQ_(res, 0, "Result: %u", res); + ASSERT_NULL_(list, "List not empty"); + + res = ms3_list(ms3, s3bucket, NULL, &list); + ASSERT_EQ_(res, 0, "Result: %u", res); + found = false; + list_it = list; + + while (list_it) + { + if (!strncmp(list_it->key, "test/custom_malloc.txt", 12)) + { + found = true; + break; + } + + list_it = list_it->next; + } + + ASSERT_EQ_(found, 1, "Created file not found"); + + if (list_it) + { + ASSERT_EQ_(list_it->length, 26, "Created file is unexpected length"); + ASSERT_NEQ_(list_it->created, 0, "Created file timestamp is bad"); + } + else + { + ASSERT_TRUE_(false, "No resuts from list"); + } + + // Retry list with V1 API + list_version = 1; + list = NULL; + ms3_set_option(ms3, MS3_OPT_FORCE_LIST_VERSION, &list_version); + res = ms3_list(ms3, s3bucket, NULL, &list); + ASSERT_EQ_(res, 0, "Result: %u", res); + found = false; + list_it = list; + + while (list_it) + { + if (!strncmp(list_it->key, "test/custom_malloc.txt", 12)) + { + found = true; + break; + } + + list_it = list_it->next; + } + + ASSERT_EQ_(found, 1, "Created file not found"); + + if (list_it) + { + ASSERT_EQ_(list_it->length, 26, "Created file is unexpected length"); + ASSERT_NEQ_(list_it->created, 0, "Created file timestamp is bad"); + } + else + { + ASSERT_TRUE_(false, "No resuts from list"); + } + + res = ms3_get(ms3, s3bucket, "test/custom_malloc.txt", &data, &length); + ASSERT_EQ_(res, 0, "Result: %u", res); + ASSERT_EQ(length, 26); + ASSERT_STREQ((char *)data, test_string); + + for (i = 0; i <= 3; i++) + { + res = ms3_status(ms3, s3bucket, "test/custom_malloc.txt", &status); + + if (res == MS3_ERR_NOT_FOUND) + { + continue; + } + + ASSERT_EQ_(res, 0, "Result: %u", res); + + if (res == 0) + { + break; + } + } + + ASSERT_EQ(status.length, 26); + ASSERT_NEQ(status.created, 0); + res = ms3_delete(ms3, s3bucket, "test/custom_malloc.txt"); + ASSERT_EQ_(res, 0, "Result: %u", res); + ms3_free(data); + ms3_deinit(ms3); + ms3_library_deinit(); + return 0; +} |