From 6f816da47f2fa17a28c00cf175dd837e5a13727a Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Thu, 20 Dec 2012 21:30:25 +0000 Subject: [PATCH] efl/eet_suite: fix handling of certificate. - do not chdir() during test, that's bad! - try exhaustively to find the pem. SVN revision: 81486 --- src/Makefile_Eet.am | 3 +- src/tests/eet/eet_suite.c | 72 ++++++++++++++++++++++++++++++--------- 2 files changed, 58 insertions(+), 17 deletions(-) diff --git a/src/Makefile_Eet.am b/src/Makefile_Eet.am index 7c7e8beca5..83c24759f1 100644 --- a/src/Makefile_Eet.am +++ b/src/Makefile_Eet.am @@ -87,7 +87,8 @@ tests_eet_eet_suite_CPPFLAGS = \ -I$(top_srcdir)/src/lib/eina \ -I$(top_builddir)/src/lib/eina \ -I$(top_srcdir)/src/lib/eet \ --DTESTS_SRC_DIR=\"`pwd`/$(top_srcdir)\" \ +-DTESTS_WD=\"`pwd`\" \ +-DTESTS_SRC_DIR=\"$(top_srcdir)/src/tests/eet\" \ @CHECK_CFLAGS@ \ @EET_CFLAGS@ diff --git a/src/tests/eet/eet_suite.c b/src/tests/eet/eet_suite.c index dd2fbc5676..44ca9e7c72 100644 --- a/src/tests/eet/eet_suite.c +++ b/src/tests/eet/eet_suite.c @@ -24,7 +24,11 @@ #include "eet_suite.h" -#define CERT_DIR ((*TESTS_SRC_DIR == '/') ? TESTS_SRC_DIR"/src/tests/eet/" : "src/tests/eet/") +static char _key_pem[PATH_MAX] = ""; +static char _cert_pem[PATH_MAX] = ""; +static char _key_enc[PATH_MAX] = ""; +static char _key_enc_pem[PATH_MAX] = ""; +static char _key_enc_none_pem[PATH_MAX] = ""; START_TEST(eet_test_init) { @@ -1642,7 +1646,6 @@ START_TEST(eet_identity_simple) eet_init(); fail_if(!(file = tmpnam(file))); - fail_if(chdir(CERT_DIR)); fail_if(!(noread = fopen("/dev/null", "w"))); /* Sign an eet file. */ @@ -1651,7 +1654,7 @@ START_TEST(eet_identity_simple) fail_if(!eet_write(ef, "keys/tests", buffer, strlen(buffer) + 1, 0)); - k = eet_identity_open("cert.pem", "key.pem", NULL); + k = eet_identity_open(_cert_pem, _key_pem, NULL); fail_if(!k); fail_if(eet_identity_set(ef, k) != EET_ERROR_NONE); @@ -1709,9 +1712,7 @@ START_TEST(eet_identity_open_simple) eet_init(); - fail_if(chdir(CERT_DIR)); - - k = eet_identity_open("cert.pem", "key.pem", NULL); + k = eet_identity_open(_cert_pem, _key_pem, NULL); fail_if(!k); if (k) @@ -1727,9 +1728,7 @@ START_TEST(eet_identity_open_pkcs8) eet_init(); - fail_if(chdir(CERT_DIR)); - - k = eet_identity_open("cert.pem", "key_enc_none.pem", NULL); + k = eet_identity_open(_cert_pem, _key_enc_none_pem, NULL); fail_if(!k); if (k) @@ -1776,21 +1775,19 @@ START_TEST(eet_identity_open_pkcs8_enc) eet_init(); - fail_if(chdir(CERT_DIR)); - - k = eet_identity_open("cert.pem", "key_enc.pem", NULL); + k = eet_identity_open(_cert_pem, _key_enc_pem, NULL); fail_if(k); if (k) eet_identity_close(k); - k = eet_identity_open("cert.pem", "key_enc.pem", &badpass_get); + k = eet_identity_open(_cert_pem, _key_enc_pem, &badpass_get); fail_if(k); if (k) eet_identity_close(k); - k = eet_identity_open("cert.pem", "key_enc.pem", &pass_get); + k = eet_identity_open(_cert_pem, _key_enc_pem, &pass_get); fail_if(!k); if (k) @@ -1812,7 +1809,6 @@ START_TEST(eet_cipher_decipher_simple) eet_init(); fail_if(!(file = tmpnam(file))); - fail_if(chdir(CERT_DIR)); /* Crypt an eet file. */ ef = eet_open(file, EET_FILE_MODE_WRITE); @@ -2761,12 +2757,56 @@ eet_suite(void) return s; } /* eet_suite */ +static const char *_cert_dir_find(const char *argv0) +{ + static char base[PATH_MAX] = ""; + char path[PATH_MAX]; + struct stat st; + + eina_strlcpy(base, TESTS_SRC_DIR, sizeof(base)); + eina_str_join(path, sizeof(path), '/', base, "key.pem"); + if (stat(path, &st) == 0) + return base; + + if (base[0] != '/') + { + snprintf(base, sizeof(base), "%s/%s", TESTS_WD, TESTS_SRC_DIR); + eina_str_join(path, sizeof(path), '/', base, "key.pem"); + if (stat(path, &st) == 0) + return base; + } + + eina_strlcpy(base, argv0, sizeof(base)); + do + { + char *p = strrchr(base, '/'); + if (!p) + { + base[0] = '\0'; + break; + } + *p = '\0'; + eina_str_join(path, sizeof(path), '/', base, "key.pem"); + } + while (stat(path, &st) != 0); + + return base; +} + int -main(void) +main(int argc EINA_UNUSED, char *argv[]) { Suite *s; SRunner *sr; int failed_count; + const char *base = _cert_dir_find(argv[0]); + + eina_str_join(_key_pem, sizeof(_key_pem), '/', base, "key.pem"); + eina_str_join(_cert_pem, sizeof(_cert_pem), '/', base,"cert.pem"); + eina_str_join(_key_enc, sizeof(_key_enc), '/', base, "key.enc"); + eina_str_join(_key_enc_pem, sizeof(_key_enc_pem), '/', base, "key_enc.pem"); + eina_str_join(_key_enc_none_pem, sizeof(_key_enc_none_pem), '/', + base, "key_enc_none.pem"); s = eet_suite(); sr = srunner_create(s);