tests: posix: add tests to ensure pthread_key_delete() works
Ensure that the correct key is deleted via pthread_key_delete().
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
(cherry picked from commit 0e11bcf5a0e748c29925199d9cbb634979e495d1)
diff --git a/tests/posix/common/src/key.c b/tests/posix/common/src/key.c
index ff01617..eeadf8f 100644
--- a/tests/posix/common/src/key.c
+++ b/tests/posix/common/src/key.c
@@ -213,3 +213,34 @@
}
printk("\n");
}
+
+ZTEST(posix_apis, test_key_resource_leak)
+{
+ pthread_key_t key;
+
+ for (size_t i = 0; i < CONFIG_MAX_PTHREAD_KEY_COUNT; ++i) {
+ zassert_ok(pthread_key_create(&key, NULL), "failed to create key %zu", i);
+ zassert_ok(pthread_key_delete(key), "failed to delete key %zu", i);
+ }
+}
+
+ZTEST(posix_apis, test_correct_key_is_deleted)
+{
+ pthread_key_t key;
+ size_t j = CONFIG_MAX_PTHREAD_KEY_COUNT - 1;
+ pthread_key_t keys[CONFIG_MAX_PTHREAD_KEY_COUNT];
+
+ for (size_t i = 0; i < ARRAY_SIZE(keys); ++i) {
+ zassert_ok(pthread_key_create(&keys[i], NULL), "failed to create key %zu", i);
+ }
+
+ key = keys[j];
+ zassert_ok(pthread_key_delete(keys[j]));
+ zassert_ok(pthread_key_create(&keys[j], NULL), "failed to create key %zu", j);
+
+ zassert_equal(key, keys[j], "deleted key %x instead of key %x", keys[j], key);
+
+ for (size_t i = 0; i < ARRAY_SIZE(keys); ++i) {
+ zassert_ok(pthread_key_delete(keys[i]), "failed to delete key %zu", i);
+ }
+}