lib:util: Add test for talloc_keep_secret()
authorAndreas Schneider <asn@samba.org>
Tue, 19 Mar 2019 10:18:47 +0000 (11:18 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 3 Apr 2019 06:48:21 +0000 (06:48 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlet <abartlet@samba.org>
lib/util/tests/test_talloc_keep_secret.c [new file with mode: 0644]
lib/util/wscript_build
selftest/tests.py

diff --git a/lib/util/tests/test_talloc_keep_secret.c b/lib/util/tests/test_talloc_keep_secret.c
new file mode 100644 (file)
index 0000000..1462dab
--- /dev/null
@@ -0,0 +1,94 @@
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <string.h>
+#include <talloc.h>
+#include "lib/util/talloc_keep_secret.h"
+
+int rep_memset_s(void *dest, size_t destsz, int ch, size_t count);
+
+int rep_memset_s(void *dest, size_t destsz, int ch, size_t count)
+{
+       check_expected_ptr(dest);
+       check_expected(destsz);
+       check_expected(ch);
+       check_expected(count);
+
+       return 0;
+}
+
+static void test_talloc_keep_secret(void ** state)
+{
+       TALLOC_CTX *pool = NULL;
+       char *ptr1 = NULL;
+       char *ptr2 = NULL;
+       const char *ptr1_talloc_name = NULL;
+       size_t ptr1_size;
+       size_t i;
+
+       pool = talloc_pool(NULL, 256);
+       assert_non_null(pool);
+
+       ptr1 = talloc_strdup(pool, "secret");
+       assert_non_null(ptr1);
+       assert_string_equal(ptr1, "secret");
+
+       talloc_keep_secret(ptr1);
+
+       ptr1_talloc_name = talloc_get_name(ptr1);
+       assert_string_equal(ptr1_talloc_name, "ptr1");
+
+       ptr1_size = talloc_get_size(ptr1);
+       assert_int_equal(ptr1_size, strlen(ptr1) + 1);
+
+       expect_string(rep_memset_s, dest, "secret");
+       expect_value(rep_memset_s, destsz, strlen(ptr1) + 1);
+       expect_value(rep_memset_s, ch, (int)'\0');
+       expect_value(rep_memset_s, count, strlen(ptr1) + 1);
+
+       talloc_free(ptr1);
+
+       ptr2 = talloc_size(pool, ptr1_size);
+       assert_ptr_equal(ptr1, ptr2);
+
+       for (i = 1; i < ptr1_size; i++) {
+               assert_int_not_equal(ptr2[0], ptr2[i]);
+       }
+
+       talloc_free(pool);
+}
+
+static void test_talloc_keep_secret_validate_memset(void **state)
+{
+       TALLOC_CTX *mem_ctx = NULL;
+       char *password = NULL;
+
+       mem_ctx = talloc_new(NULL);
+       assert_non_null(mem_ctx);
+
+       password = talloc_strdup(mem_ctx, "secret");
+       assert_non_null(password);
+       talloc_keep_secret(password);
+
+       expect_string(rep_memset_s, dest, "secret");
+       expect_value(rep_memset_s, destsz, strlen(password) + 1);
+       expect_value(rep_memset_s, ch, (int)'\0');
+       expect_value(rep_memset_s, count, strlen(password) + 1);
+
+       talloc_free(mem_ctx);
+}
+
+int main(void)
+{
+    const struct CMUnitTest tests[] = {
+        cmocka_unit_test(test_talloc_keep_secret),
+        cmocka_unit_test(test_talloc_keep_secret_validate_memset),
+    };
+
+    cmocka_set_message_output(CM_OUTPUT_SUBUNIT);
+
+    return cmocka_run_group_tests(tests, NULL, NULL);
+}
index 0a3fb09981f2f43c5836b866bec8281d88f18240..9af1bb5d801bb05c36c8a7f41e28745335278bd1 100644 (file)
@@ -269,3 +269,9 @@ else:
                      deps='cmocka replace samba-util',
                      local_include=False,
                      install=False)
+
+    bld.SAMBA_BINARY('test_talloc_keep_secret',
+                     source='tests/test_talloc_keep_secret.c',
+                     deps='cmocka replace samba-util',
+                     local_include=False,
+                     install=False)
index 01afdaea2d08fe08dd61e455396cc5a2e8e1fbb3..133f227ab82dd8d5e29352eecb9e4444fd46d680 100644 (file)
@@ -246,6 +246,9 @@ plantestsuite("samba.unittests.lib_util_modules", "none",
 plantestsuite("samba.unittests.smb1cli_session", "none",
               [os.path.join(bindir(), "default/libcli/smb/test_smb1cli_session")])
 
+plantestsuite("samba.unittests.talloc_keep_secret", "none",
+              [os.path.join(bindir(), "default/lib/util/test_talloc_keep_secret")])
+
 plantestsuite("samba.unittests.tldap", "none",
               [os.path.join(bindir(), "default/source3/test_tldap")])
 plantestsuite("samba.unittests.rfc1738", "none",