1 /* libsecret - GLib wrapper for Secret Service
3 * Copyright 2012 Red Hat Inc.
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License as published
7 * by the Free Software Foundation; either version 2 of the licence or (at
8 * your option) any later version.
10 * See the included COPYING file for more information.
16 #include "secret-value.h"
17 #include "secret-private.h"
19 #include "egg/egg-testing.h"
20 #include "egg/egg-secure-memory.h"
27 EGG_SECURE_DECLARE (test_value);
35 value = secret_value_new ("blahblah", 4, "text/plain");
37 g_assert_cmpstr (secret_value_get (value, &length), ==, "blah");
38 g_assert_cmpuint (length, ==, 4);
40 g_assert_cmpstr (secret_value_get_content_type (value), ==, "text/plain");
42 secret_value_unref (value);
46 test_new_terminated (void)
51 value = secret_value_new ("blah", -1, "text/plain");
53 g_assert_cmpstr (secret_value_get (value, &length), ==, "blah");
54 g_assert_cmpuint (length, ==, 4);
56 g_assert_cmpstr (secret_value_get_content_type (value), ==, "text/plain");
58 secret_value_unref (value);
65 gchar *data = g_strdup ("blah");
68 value = secret_value_new_full (data, 4, "text/plain", g_free);
70 g_assert_cmpstr (secret_value_get (value, &length), ==, "blah");
71 g_assert_cmpuint (length, ==, 4);
73 /* No copy done here */
74 g_assert (secret_value_get (value, NULL) == data);
76 secret_value_unref (value);
80 test_new_full_terminated (void)
83 gchar *data = g_strdup ("blah");
86 value = secret_value_new_full (data, -1, "text/plain", g_free);
88 g_assert_cmpstr (secret_value_get (value, &length), ==, "blah");
89 g_assert_cmpuint (length, ==, 4);
91 /* No copy done here */
92 g_assert (secret_value_get (value, NULL) == data);
94 secret_value_unref (value);
101 const gchar *password;
104 value = secret_value_new (NULL, 0, "text/plain");
105 g_assert (value != NULL);
106 password = secret_value_get (value, &length);
107 g_assert_cmpuint (length, ==, 0);
108 g_assert_cmpstr (password, ==, "");
109 secret_value_unref (value);
111 value = secret_value_new ("", 0, "text/plain");
112 g_assert (value != NULL);
113 password = secret_value_get (value, &length);
114 g_assert_cmpuint (length, ==, 0);
115 g_assert_cmpstr (password, ==, "");
116 secret_value_unref (value);
120 test_ref_unref (void)
126 value = secret_value_new ("blah", 4, "text/plain");
127 value2 = secret_value_ref(value);
128 secret_value_unref (value);
130 g_assert_cmpstr (secret_value_get (value2, &length), ==, "blah");
131 g_assert_cmpuint (length, ==, 4);
133 secret_value_unref (value2);
143 value = secret_value_new ("blah", 4, "text/plain");
144 value2 = g_boxed_copy (SECRET_TYPE_VALUE, value);
145 g_boxed_free (SECRET_TYPE_VALUE, value);
147 g_assert_cmpstr (secret_value_get (value2, &length), ==, "blah");
148 g_assert_cmpuint (length, ==, 4);
150 g_boxed_free (SECRET_TYPE_VALUE, value2);
154 test_to_password (void)
159 value = secret_value_new_full (egg_secure_strdup ("blah"), -1,
160 "text/plain", egg_secure_free);
162 password = _secret_value_unref_to_password (value);
163 g_assert_cmpstr (password, ==, "blah");
165 egg_secure_free (password);
169 test_to_password_bad_destroy (void)
174 value = secret_value_new_full (g_strdup ("blah"), -1,
175 "text/plain", g_free);
177 password = _secret_value_unref_to_password (value);
178 g_assert_cmpstr (password, ==, "blah");
180 egg_secure_free (password);
184 test_to_password_bad_content (void)
189 value = secret_value_new_full (g_strdup ("w\xFFooowhee"), -1,
190 "application/octet-stream", g_free);
192 password = _secret_value_unref_to_password (value);
193 g_assert_cmpstr (password, ==, NULL);
197 test_to_password_extra_ref (void)
202 value = secret_value_new_full (egg_secure_strdup ("blah"), -1,
203 "text/plain", egg_secure_free);
204 secret_value_ref (value);
206 password = _secret_value_unref_to_password (value);
207 g_assert_cmpstr (password, ==, "blah");
209 egg_secure_free (password);
210 secret_value_unref (value);
214 main (int argc, char **argv)
216 g_test_init (&argc, &argv, NULL);
217 g_set_prgname ("test-value");
219 #if !GLIB_CHECK_VERSION(2,35,0)
223 g_test_add_func ("/value/new", test_new);
224 g_test_add_func ("/value/new-terminated", test_new_terminated);
225 g_test_add_func ("/value/new-full", test_new_full);
226 g_test_add_func ("/value/new-full-terminated", test_new_full_terminated);
227 g_test_add_func ("/value/new-empty", test_new_empty);
228 g_test_add_func ("/value/ref-unref", test_ref_unref);
229 g_test_add_func ("/value/boxed", test_boxed);
230 g_test_add_func ("/value/to-password", test_to_password);
231 g_test_add_func ("/value/to-password-bad-destroy", test_to_password_bad_destroy);
232 g_test_add_func ("/value/to-password-bad-content", test_to_password_bad_content);
233 g_test_add_func ("/value/to-password-extra-ref", test_to_password_extra_ref);
235 return egg_tests_run_with_loop ();