[vlc-commits] test: fix keystore test suite
Thomas Guillem
git at videolan.org
Fri Jan 8 11:22:26 CET 2016
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Fri Jan 8 11:18:11 2016 +0100| [6f5bec4fd5bf0a4ba7c0648ec3a9cc012d8f726a] | committer: Thomas Guillem
test: fix keystore test suite
- Create a libvlc instance, in order to init the module bank, before testing if
modules exist.
- Use mkstemp to create a unique temporary file used by plaintext
- Don't test secret and kwallet by default in order to don't pollute
developer's keystores (run this test with "-a" argv to test every keystores).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6f5bec4fd5bf0a4ba7c0648ec3a9cc012d8f726a
---
test/modules/keystore/test.c | 99 ++++++++++++++++++++++++++----------------
1 file changed, 61 insertions(+), 38 deletions(-)
diff --git a/test/modules/keystore/test.c b/test/modules/keystore/test.c
index b742b59..b9ea009 100644
--- a/test/modules/keystore/test.c
+++ b/test/modules/keystore/test.c
@@ -33,29 +33,17 @@
#include <assert.h>
-#define PLAINTEXT_TEST_FILE "/tmp/vlc.test.keystore"
-
-/* If 1, tester will have time to check keystore entries via an external
- * program */
-#define LET_CHECK_VALUES 0
-
static const struct
{
const char *psz_module;
- int argc;
- const char * const *argv;
+ bool b_test_default;
} keystore_args[] =
{
- { "plaintext", 2, (const char *[]) {
- "--keystore=plaintext,none",
- "--keystore-plaintext-file=" PLAINTEXT_TEST_FILE
- } },
- { "secret", 1, (const char *[]) {
- "--keystore=secret,none"
- } },
- { "kwallet", 1, (const char *[]) {
- "--keystore=kwallet,none"
- } },
+ { "plaintext", true },
+ /* Following keystores are tested only when asked explicitly by the tester
+ * (with "-a" argv) */
+ { "secret", false },
+ { "kwallet", false }
};
static void
@@ -109,7 +97,8 @@ ks_store(vlc_keystore *p_keystore, const char *const ppsz_values[KEY_MAX],
}
static void
-test_module(const char *psz_module, int argc, const char * const *argv)
+test_module(const char *psz_module, bool b_test_all,
+ int argc, const char * const *argv)
{
#define VALUES_INSERT(i_key, psz_value) ppsz_values[i_key] = psz_value
#define VALUES_REINIT() values_reinit(ppsz_values)
@@ -127,10 +116,6 @@ test_module(const char *psz_module, int argc, const char * const *argv)
libvlc_instance_t *p_libvlc = libvlc_new(argc, argv);
assert(p_libvlc != NULL);
- /* See TODO in kwallet.cpp, VLCKWallet::connect() */
- if (strcmp(psz_module, "kwallet") == 0)
- assert(libvlc_InternalAddIntf(p_libvlc->p_libvlc_int, "qt") == VLC_SUCCESS);
-
vlc_interrupt_t *ctx = vlc_interrupt_create();
assert(ctx != NULL);
@@ -235,10 +220,11 @@ test_module(const char *psz_module, int argc, const char * const *argv)
KS_FIND();
assert(i_entries == 4);
-#if LET_CHECK_VALUES
- printf("\nPress ENTER to remove entries\n");
- getchar();
-#endif
+ if (b_test_all)
+ {
+ printf("\nPress ENTER to remove entries\n");
+ getchar();
+ }
printf("testing removing entries that match user => user1\n");
VALUES_REINIT();
@@ -270,27 +256,64 @@ test_module(const char *psz_module, int argc, const char * const *argv)
}
int
-main(void)
+main(int i_argc, char *ppsz_argv[])
{
-#if !LET_CHECK_VALUES
- alarm(10);
-#endif
+ /* If b_test_all is true, this test could pollute the developer´s keystores */
+ bool b_test_all = i_argc > 1 && strcmp(ppsz_argv[1], "-a") == 0;
+
+ if (!b_test_all)
+ alarm(3);
setenv("VLC_PLUGIN_PATH", "../modules", 1);
- unlink(PLAINTEXT_TEST_FILE);
+
+ /* Create a dummy libvlc to initialize module bank, needed by module_exists */
+ libvlc_instance_t *p_libvlc = libvlc_new(0, NULL);
+ assert(p_libvlc != NULL);
for (unsigned int i = 0; i < sizeof(keystore_args)/sizeof(*keystore_args); ++i)
{
const char *psz_module = keystore_args[i].psz_module;
- int argc = keystore_args[i].argc;
- const char * const *argv = keystore_args[i].argv;
- if (module_exists(psz_module))
- test_module(psz_module, argc, argv);
+ if ((b_test_all || keystore_args[i].b_test_default)
+ && module_exists(psz_module))
+ {
+ int i_vlc_argc = 1;
+ char *ppsz_vlc_argv[2] = { 0 };
+ int i_tmp_fd = -1;
+ char psz_tmp_path[] = "/tmp/libvlc_XXXXXX";
+
+ assert(asprintf(&ppsz_vlc_argv[0], "--keystore=%s,none",
+ psz_module) != -1);
+
+ if (strcmp(psz_module, "plaintext") == 0)
+ {
+ assert((i_tmp_fd = mkstemp(psz_tmp_path)) != -1);
+ printf("plaintext tmp file: '%s'\n", psz_tmp_path);
+ assert(asprintf(&ppsz_vlc_argv[1],
+ "--keystore-plaintext-file=%s", psz_tmp_path) != -1);
+ i_vlc_argc++;
+ }
+ else if (strcmp(psz_module, "kwallet") == 0)
+ {
+ /* See TODO in kwallet.cpp, VLCKWallet::connect() */
+ assert(libvlc_InternalAddIntf(p_libvlc->p_libvlc_int, "qt") == VLC_SUCCESS);
+ }
+
+ test_module(psz_module, b_test_all, i_vlc_argc,
+ (const char * const *)ppsz_vlc_argv);
+
+ if (i_tmp_fd != -1)
+ {
+ close(i_tmp_fd);
+ unlink(psz_tmp_path);
+ }
+ free(ppsz_vlc_argv[0]);
+ free(ppsz_vlc_argv[1]);
+ }
else
- printf("not testing %s since the plugin is not found\n", psz_module);
+ printf("not testing %s\n", psz_module);
}
- unlink(PLAINTEXT_TEST_FILE);
+ libvlc_release(p_libvlc);
return 0;
}
More information about the vlc-commits
mailing list