Blame 0008-testsuite-add-unittests-for-uReport-API.patch

Jakub Filak c5487ab
From c20aa59614de15a5840dfcf44bcfc674a56795ab Mon Sep 17 00:00:00 2001
Jakub Filak c5487ab
From: Matej Habrnal <mhabrnal@redhat.com>
Jakub Filak c5487ab
Date: Wed, 22 Oct 2014 00:14:55 +0200
Jakub Filak c5487ab
Subject: [PATCH] testsuite: add unittests for uReport API
Jakub Filak c5487ab
Jakub Filak c5487ab
Fixes #294
Jakub Filak c5487ab
Jakub Filak c5487ab
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
Jakub Filak c5487ab
---
Jakub Filak c5487ab
 tests/Makefile.am                                  |    3 +-
Jakub Filak c5487ab
 tests/testsuite.at                                 |    1 +
Jakub Filak c5487ab
 tests/ureport.at                                   | 1101 ++++++++++++++++++++
Jakub Filak c5487ab
 tests/ureport/certs/correct/cert-key.pem           |    5 +
Jakub Filak c5487ab
 tests/ureport/certs/correct/cert.pem               |   13 +
Jakub Filak c5487ab
 tests/ureport/certs/incorrect_content/cert-key.pem |    5 +
Jakub Filak c5487ab
 tests/ureport/certs/incorrect_content/cert.pem     |    0
Jakub Filak c5487ab
 tests/ureport/rhsm/__init__.py                     |    0
Jakub Filak c5487ab
 tests/ureport/rhsm/config.py                       |    8 +
Jakub Filak c5487ab
 9 files changed, 1135 insertions(+), 1 deletion(-)
Jakub Filak c5487ab
 create mode 100644 tests/ureport.at
Jakub Filak c5487ab
 create mode 100644 tests/ureport/certs/correct/cert-key.pem
Jakub Filak c5487ab
 create mode 100644 tests/ureport/certs/correct/cert.pem
Jakub Filak c5487ab
 create mode 100644 tests/ureport/certs/incorrect_content/cert-key.pem
Jakub Filak c5487ab
 create mode 100644 tests/ureport/certs/incorrect_content/cert.pem
Jakub Filak c5487ab
 create mode 100644 tests/ureport/rhsm/__init__.py
Jakub Filak c5487ab
 create mode 100644 tests/ureport/rhsm/config.py
Jakub Filak c5487ab
Jakub Filak c5487ab
diff --git a/tests/Makefile.am b/tests/Makefile.am
Jakub Filak c5487ab
index 4731bad..cda9375 100644
Jakub Filak c5487ab
--- a/tests/Makefile.am
Jakub Filak c5487ab
+++ b/tests/Makefile.am
Jakub Filak c5487ab
@@ -41,7 +41,8 @@ TESTSUITE_AT = \
Jakub Filak c5487ab
   xml_definition.at \
Jakub Filak c5487ab
   report_python.at \
Jakub Filak c5487ab
   xfuncs.at \
Jakub Filak c5487ab
-  string_list.at
Jakub Filak c5487ab
+  string_list.at \
Jakub Filak c5487ab
+  ureport.at
Jakub Filak c5487ab
 
Jakub Filak c5487ab
 EXTRA_DIST += $(TESTSUITE_AT)
Jakub Filak c5487ab
 TESTSUITE = $(srcdir)/testsuite
Jakub Filak c5487ab
diff --git a/tests/testsuite.at b/tests/testsuite.at
Jakub Filak c5487ab
index 60b2e94..abad32b 100644
Jakub Filak c5487ab
--- a/tests/testsuite.at
Jakub Filak c5487ab
+++ b/tests/testsuite.at
Jakub Filak c5487ab
@@ -16,3 +16,4 @@ m4_include([libreport_types.at])
Jakub Filak c5487ab
 m4_include([xml_definition.at])
Jakub Filak c5487ab
 m4_include([report_python.at])
Jakub Filak c5487ab
 m4_include([string_list.at])
Jakub Filak c5487ab
+m4_include([ureport.at])
Jakub Filak c5487ab
diff --git a/tests/ureport.at b/tests/ureport.at
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..22d34e9
Jakub Filak c5487ab
--- /dev/null
Jakub Filak c5487ab
+++ b/tests/ureport.at
Jakub Filak c5487ab
@@ -0,0 +1,1101 @@
Jakub Filak c5487ab
+# -*- Autotest -*-
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_BANNER([ureport])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ---------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_config_init  ##
Jakub Filak c5487ab
+## ---------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_config_init],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define DESTROYED_POINTER (void *)0xdeadbeef
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(config.ur_url == NULL);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == true);
Jakub Filak c5487ab
+    assert(config.ur_client_cert == NULL);
Jakub Filak c5487ab
+    assert(config.ur_client_key == NULL);
Jakub Filak c5487ab
+    assert(config.ur_username == NULL);
Jakub Filak c5487ab
+    assert(config.ur_password == NULL);
Jakub Filak c5487ab
+    assert(config.ur_http_headers != NULL);
Jakub Filak c5487ab
+    assert(config.ur_prefs.urp_auth_items == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    config.ur_url = (char *)"url";
Jakub Filak c5487ab
+    config.ur_ssl_verify = false;
Jakub Filak c5487ab
+    config.ur_client_cert = (char *)"cert";
Jakub Filak c5487ab
+    config.ur_client_key = (char *)"key";
Jakub Filak c5487ab
+    config.ur_username = (char *)"username";
Jakub Filak c5487ab
+    config.ur_password = (char *)"password";
Jakub Filak c5487ab
+    free_map_string(config.ur_http_headers);
Jakub Filak c5487ab
+    config.ur_prefs.urp_auth_items = DESTROYED_POINTER;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(config.ur_url == NULL);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == true);
Jakub Filak c5487ab
+    assert(config.ur_client_cert == NULL);
Jakub Filak c5487ab
+    assert(config.ur_client_key == NULL);
Jakub Filak c5487ab
+    assert(config.ur_username == NULL);
Jakub Filak c5487ab
+    assert(config.ur_password == NULL);
Jakub Filak c5487ab
+    assert(config.ur_http_headers != NULL);
Jakub Filak c5487ab
+    assert(config.ur_prefs.urp_auth_items == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ------------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_config_destroy  ##
Jakub Filak c5487ab
+## ------------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_config_destroy],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define DESTROYED_POINTER (void *)0xdeadbeef
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    config.ur_url = strdup("url");
Jakub Filak c5487ab
+    config.ur_client_cert = strdup("cert");
Jakub Filak c5487ab
+    config.ur_client_key = strdup("key");
Jakub Filak c5487ab
+    config.ur_username = strdup("username");
Jakub Filak c5487ab
+    config.ur_password = strdup("password");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "url") == 0);
Jakub Filak c5487ab
+    assert(strcmp(config.ur_client_cert, "cert") == 0);
Jakub Filak c5487ab
+    assert(strcmp(config.ur_client_key, "key") == 0);
Jakub Filak c5487ab
+    assert(strcmp(config.ur_username, "username") == 0);
Jakub Filak c5487ab
+    assert(strcmp(config.ur_password , "password") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(config.ur_url == DESTROYED_POINTER);
Jakub Filak c5487ab
+    assert(config.ur_client_cert == DESTROYED_POINTER);
Jakub Filak c5487ab
+    assert(config.ur_client_key == DESTROYED_POINTER);
Jakub Filak c5487ab
+    assert(config.ur_username == DESTROYED_POINTER);
Jakub Filak c5487ab
+    assert(config.ur_password == DESTROYED_POINTER);
Jakub Filak c5487ab
+    assert(config.ur_prefs.urp_auth_items == DESTROYED_POINTER);
Jakub Filak c5487ab
+    assert(config.ur_http_headers == DESTROYED_POINTER);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ---------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_config_load  ##
Jakub Filak c5487ab
+## ---------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_config_load],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* value from env */
Jakub Filak c5487ab
+    /* IncludeAuthData set to 'no' */
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("uReport_URL", "env_url", 1);
Jakub Filak c5487ab
+    setenv("uReport_SSLVerify", "yes", 1);
Jakub Filak c5487ab
+    setenv("SSLClientAuth", "", 1);
Jakub Filak c5487ab
+    setenv("uReport_IncludeAuthData", "no", 1);
Jakub Filak c5487ab
+    setenv("uReport_AuthDataItems", "hostname", 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    map_string_t *settings = new_map_string();
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "env_url") == 0);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == true);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    GList *l = config.ur_prefs.urp_auth_items;
Jakub Filak c5487ab
+    assert(l == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* value from env */
Jakub Filak c5487ab
+    /* IncludeAuthData set to 'yes' but AuthDataItems is empty. */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("uReport_URL", "env_url", 1);
Jakub Filak c5487ab
+    setenv("uReport_SSLVerify", "yes", 1);
Jakub Filak c5487ab
+    setenv("SSLClientAuth", "", 1);
Jakub Filak c5487ab
+    setenv("uReport_IncludeAuthData", "yes", 1);
Jakub Filak c5487ab
+    setenv("uReport_AuthDataItems", "", 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "env_url") == 0);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == true);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    l = config.ur_prefs.urp_auth_items;
Jakub Filak c5487ab
+    assert(l == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* value from env */
Jakub Filak c5487ab
+    /* IncludeAuthData set to 'yes' */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("uReport_URL", "env_url", 1);
Jakub Filak c5487ab
+    setenv("uReport_SSLVerify", "no", 1);
Jakub Filak c5487ab
+    setenv("SSLClientAuth", "", 1);
Jakub Filak c5487ab
+    setenv("uReport_IncludeAuthData", "yes", 1);
Jakub Filak c5487ab
+    setenv("uReport_AuthDataItems", "hostname, time", 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "env_url") == 0);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == false);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    l = config.ur_prefs.urp_auth_items;
Jakub Filak c5487ab
+    assert(strcmp(l->data, "hostname") == 0);
Jakub Filak c5487ab
+    assert(strcmp(l->next->data, "time") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* value from settings */
Jakub Filak c5487ab
+    /* IncludeAuthData set to 'no' */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    unsetenv("uReport_URL");
Jakub Filak c5487ab
+    unsetenv("uReport_SSLVerify");
Jakub Filak c5487ab
+    unsetenv("uReport_IncludeAuthData");
Jakub Filak c5487ab
+    unsetenv("uReport_AuthDataItems");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("URL"), xstrdup("settings_url"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("SSLVerify"), xstrdup("yes"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("SSLClientAuth"), xstrdup(""));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("IncludeAuthData"), xstrdup("no"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("AuthDataItems"), xstrdup("hostname"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "settings_url") == 0);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == true);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    l = config.ur_prefs.urp_auth_items;
Jakub Filak c5487ab
+    assert(l == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    free_map_string(settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* value from settings */
Jakub Filak c5487ab
+    /* IncludeAuthData set to 'yes' but AuthDataItems is empty. */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    settings = new_map_string();
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("URL"), xstrdup("settings_url"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("SSLVerify"), xstrdup("yes"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("SSLClientAuth"), xstrdup(""));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("IncludeAuthData"), xstrdup("yes"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("AuthDataItems"), xstrdup(""));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "settings_url") == 0);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == true);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    l = config.ur_prefs.urp_auth_items;
Jakub Filak c5487ab
+    assert(l == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    free_map_string(settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* value from settings */
Jakub Filak c5487ab
+    /* IncludeAuthData set to 'yes' */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    settings = new_map_string();
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("URL"), xstrdup("settings_url"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("SSLVerify"), xstrdup("no"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("SSLClientAuth"), xstrdup(""));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("IncludeAuthData"), xstrdup("yes"));
Jakub Filak c5487ab
+    insert_map_string(settings, xstrdup("AuthDataItems"), xstrdup("hostname, type"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "settings_url") == 0);
Jakub Filak c5487ab
+    assert(config.ur_ssl_verify == false);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    l = config.ur_prefs.urp_auth_items;
Jakub Filak c5487ab
+    assert(strcmp(l->data, "hostname") == 0);
Jakub Filak c5487ab
+    assert(strcmp(l->next->data, "type") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    free_map_string(settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ------------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_config_set_url  ##
Jakub Filak c5487ab
+## ------------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_config_set_url],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define DESTROYED_POINTER (void *)0xdeadbeef
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_url(&config, strdup("url"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "url") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_url(&config, strdup("next.url"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(config.ur_url, "next.url") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## --------------------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_config_set_client_auth  ##
Jakub Filak c5487ab
+## --------------------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_config_set_client_auth],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define DESTROYED_POINTER (void *)0xdeadbeef
Jakub Filak c5487ab
+#define RHSM_WEB_SERVICE_URL "https://api.access.redhat.com/rs/telemetry/abrt"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define TESTING_CERTS_CORRECT_DIR_PATH "../../ureport/certs/correct"
Jakub Filak c5487ab
+#define TESTING_CERTS_INCORRECT_CONTENT_DIR_PATH "../../ureport/certs/incorrect_content"
Jakub Filak c5487ab
+#define TESTING_PYTHONPATH "../../ureport/"
Jakub Filak c5487ab
+#define WRONG_TESTING_PYTHONPATH "../../ureportxxxxxx/"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define RHSMENT_PEM_DIR_PATH "/etc/pki/entitlement"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define RHSMENT_ENT_DATA_BEGIN_TAG "-----BEGIN ENTITLEMENT DATA-----"
Jakub Filak c5487ab
+#define RHSMENT_ENT_DATA_END_TAG "-----END ENTITLEMENT DATA-----"
Jakub Filak c5487ab
+#define RHSMENT_SIG_DATA_BEGIN_TAG "-----BEGIN RSA SIGNATURE-----"
Jakub Filak c5487ab
+#define RHSMENT_SIG_DATA_END_TAG "-----END RSA SIGNATURE-----"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+char *my_strdup(const char *str)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    if (str == NULL)
Jakub Filak c5487ab
+        return NULL;
Jakub Filak c5487ab
+    else
Jakub Filak c5487ab
+        return strdup(str);
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+void set_ureport_server_config(struct ureport_server_config *config,
Jakub Filak c5487ab
+                                const char *url,
Jakub Filak c5487ab
+                                bool ver,
Jakub Filak c5487ab
+                                const char *cert,
Jakub Filak c5487ab
+                                const char *key,
Jakub Filak c5487ab
+                                const char *uname,
Jakub Filak c5487ab
+                                const char *passwd)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    config->ur_url = my_strdup(url);
Jakub Filak c5487ab
+    config->ur_ssl_verify = ver;
Jakub Filak c5487ab
+    config->ur_client_cert = my_strdup(cert);
Jakub Filak c5487ab
+    config->ur_client_key = my_strdup(key);
Jakub Filak c5487ab
+    config->ur_username = my_strdup(uname);
Jakub Filak c5487ab
+    config->ur_password = my_strdup(passwd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+void my_assert(const char *str1, const char *str2)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    if (str1 == NULL || str2 == NULL)
Jakub Filak c5487ab
+        assert( str1 == NULL && str2 == NULL );
Jakub Filak c5487ab
+    else
Jakub Filak c5487ab
+        assert(strcmp(str1, str2) == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+void assert_ureport_server_config(struct ureport_server_config *config,
Jakub Filak c5487ab
+                                const char *url,
Jakub Filak c5487ab
+                                bool ver,
Jakub Filak c5487ab
+                                const char *cert,
Jakub Filak c5487ab
+                                const char *key,
Jakub Filak c5487ab
+                                const char *username,
Jakub Filak c5487ab
+                                const char *password)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    my_assert(config->ur_url, url);
Jakub Filak c5487ab
+    assert(config->ur_ssl_verify == ver);
Jakub Filak c5487ab
+    my_assert(config->ur_client_cert, cert);
Jakub Filak c5487ab
+    my_assert(config->ur_client_key, key);
Jakub Filak c5487ab
+    my_assert(config->ur_username, username);
Jakub Filak c5487ab
+    my_assert(config->ur_password , password);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int test_ureport_server_config_set_client_auth_exit_code(struct ureport_server_config *config,
Jakub Filak c5487ab
+                                                         const char *client_auth)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    ureport_server_config_init(config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    pid_t pid = fork();
Jakub Filak c5487ab
+    if (pid < 0)
Jakub Filak c5487ab
+    {
Jakub Filak c5487ab
+        perror_msg("fork");
Jakub Filak c5487ab
+        return -1;
Jakub Filak c5487ab
+    }
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    if (pid == 0)
Jakub Filak c5487ab
+    {
Jakub Filak c5487ab
+        ureport_server_config_set_client_auth(config, client_auth);
Jakub Filak c5487ab
+        exit(0);
Jakub Filak c5487ab
+    }
Jakub Filak c5487ab
+    int status;
Jakub Filak c5487ab
+    wait(&status);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return status;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    set_ureport_server_config(&config, "url", true, "cert", "key", "username", "passwd");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == NULL */
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, NULL);
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, "url", true, "cert", "key", "username", "passwd");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == "" */
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, "");
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, "url", true, NULL, NULL, "username", "passwd");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == rhsm */
Jakub Filak c5487ab
+    /* ur_url == NULL */
Jakub Filak c5487ab
+    /* no certs */
Jakub Filak c5487ab
+    char *empty_cert_dir = mkdtemp(strdup("/tmp/cert_XXXXXX"));
Jakub Filak c5487ab
+    assert(empty_cert_dir);
Jakub Filak c5487ab
+    setenv("LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH", empty_cert_dir, 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    int status = test_ureport_server_config_set_client_auth_exit_code(&config, "rhsm");
Jakub Filak c5487ab
+    assert(status != 0 && status != -1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(rmdir(empty_cert_dir) == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == rhsm */
Jakub Filak c5487ab
+    /* ur_url == NULL */
Jakub Filak c5487ab
+    /* certs exists (incorrect content) */
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH", TESTING_CERTS_INCORRECT_CONTENT_DIR_PATH, 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    status = test_ureport_server_config_set_client_auth_exit_code(&config, "rhsm");
Jakub Filak c5487ab
+    assert(status != 0 && status != -1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == rhsm */
Jakub Filak c5487ab
+    /* ur_url == NULL */
Jakub Filak c5487ab
+    /* certs exists (correct) */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH", TESTING_CERTS_CORRECT_DIR_PATH, 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, "rhsm");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, RHSM_WEB_SERVICE_URL, true,
Jakub Filak c5487ab
+                                TESTING_CERTS_CORRECT_DIR_PATH"/cert.pem",
Jakub Filak c5487ab
+                                TESTING_CERTS_CORRECT_DIR_PATH"/cert-key.pem",
Jakub Filak c5487ab
+                                NULL, NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *ent = xasprintf(RHSMENT_ENT_DATA_BEGIN_TAG"%s"RHSMENT_ENT_DATA_END_TAG, "entitlementdata");
Jakub Filak c5487ab
+    assert(0 == strcmp(ent,
Jakub Filak c5487ab
+                        get_map_string_item_or_NULL(config.ur_http_headers, "X-RH-Entitlement-Data")));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *sig= xasprintf(RHSMENT_SIG_DATA_BEGIN_TAG"%s"RHSMENT_SIG_DATA_END_TAG, "rsasignature");
Jakub Filak c5487ab
+    assert(0 == strcmp(sig,
Jakub Filak c5487ab
+                        get_map_string_item_or_NULL(config.ur_http_headers, "X-RH-Entitlement-Sig")));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    free(ent);
Jakub Filak c5487ab
+    free(sig);
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == cert:key */
Jakub Filak c5487ab
+    /* ur_url == NULL */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    set_ureport_server_config(&config, NULL, true, NULL, NULL, "username", "passwd");
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, "cert:key");
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, NULL, true, "cert", "key", NULL, NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* client_auth == cert:key */
Jakub Filak c5487ab
+    /* ur_url != NULL */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    set_ureport_server_config(&config, "url", true, NULL, NULL, "username", "passwd");
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, "cert:key");
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, "url", true, "cert", "key", NULL, NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* wrong client_auth */
Jakub Filak c5487ab
+    int ret_val = test_ureport_server_config_set_client_auth_exit_code(&config, "cert:");
Jakub Filak c5487ab
+    assert(ret_val != 0 && ret_val != -1);
Jakub Filak c5487ab
+    ret_val = test_ureport_server_config_set_client_auth_exit_code(&config, ":key");
Jakub Filak c5487ab
+    assert(ret_val != 0 && ret_val != -1);
Jakub Filak c5487ab
+    ret_val = test_ureport_server_config_set_client_auth_exit_code(&config, "cert");
Jakub Filak c5487ab
+    assert(ret_val != 0 && ret_val != -1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+/* rhsm_config_get_entitlement_cert_dir */
Jakub Filak c5487ab
+/* certs exists (correct content) */
Jakub Filak c5487ab
+    unsetenv("LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH");
Jakub Filak c5487ab
+    setenv("PYTHONPATH", TESTING_PYTHONPATH, 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    ureport_server_config_set_client_auth(&config, "rhsm");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *abs_path_cert = realpath(TESTING_CERTS_CORRECT_DIR_PATH"/cert.pem", NULL);
Jakub Filak c5487ab
+    char *abs_path_key = realpath(TESTING_CERTS_CORRECT_DIR_PATH"/cert-key.pem", NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, RHSM_WEB_SERVICE_URL, true,
Jakub Filak c5487ab
+                                abs_path_cert,
Jakub Filak c5487ab
+                                abs_path_key,
Jakub Filak c5487ab
+                                NULL, NULL);
Jakub Filak c5487ab
+    free(abs_path_cert);
Jakub Filak c5487ab
+    free(abs_path_key);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ent = xasprintf(RHSMENT_ENT_DATA_BEGIN_TAG"%s"RHSMENT_ENT_DATA_END_TAG, "entitlementdata");
Jakub Filak c5487ab
+    assert(0 == strcmp(ent,
Jakub Filak c5487ab
+                        get_map_string_item_or_NULL(config.ur_http_headers, "X-RH-Entitlement-Data")));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    sig= xasprintf(RHSMENT_SIG_DATA_BEGIN_TAG"%s"RHSMENT_SIG_DATA_END_TAG, "rsasignature");
Jakub Filak c5487ab
+    assert(0 == strcmp(sig,
Jakub Filak c5487ab
+                        get_map_string_item_or_NULL(config.ur_http_headers, "X-RH-Entitlement-Sig")));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    free(ent);
Jakub Filak c5487ab
+    free(sig);
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* python script fails, '/etc/pki/entitlement' is returned  */
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* set cert dir path to '/etc/pki/entitlement' */
Jakub Filak c5487ab
+    /* store return value of ureport_server_config_set_client_auth */
Jakub Filak c5487ab
+    setenv("LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH", RHSMENT_PEM_DIR_PATH, 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    int exp_ret_val = test_ureport_server_config_set_client_auth_exit_code(&config, "rhsm");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* Do the same with unset LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH and wrong PYTHONPATH */
Jakub Filak c5487ab
+    /* function rhsm_config_get_entitlement_cert_dir has to return RHSMENT_PEM_DIR_PATH */
Jakub Filak c5487ab
+    unsetenv("LIBREPORT_DEBUG_RHSMENT_PEM_DIR_PATH");
Jakub Filak c5487ab
+    setenv("PYTHONPATH", WRONG_TESTING_PYTHONPATH, 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    int rec_ret_val = test_ureport_server_config_set_client_auth_exit_code(&config, "rhsm");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* we expect the same return value */
Jakub Filak c5487ab
+//    assert(exp_ret_val == rec_ret_val);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## -------------------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_config_set_basic_auth  ##
Jakub Filak c5487ab
+## -------------------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_config_set_basic_auth],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+void my_assert(const char *str1, const char *str2)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    if (str1 == NULL || str2 == NULL)
Jakub Filak c5487ab
+        assert( str1 == NULL && str2 == NULL );
Jakub Filak c5487ab
+    else
Jakub Filak c5487ab
+        assert(strcmp(str1, str2) == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+void assert_ureport_server_config(struct ureport_server_config *config,
Jakub Filak c5487ab
+                                const char *url,
Jakub Filak c5487ab
+                                bool ver,
Jakub Filak c5487ab
+                                const char *cert,
Jakub Filak c5487ab
+                                const char *key,
Jakub Filak c5487ab
+                                const char *username,
Jakub Filak c5487ab
+                                const char *password)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    my_assert(config->ur_url, url);
Jakub Filak c5487ab
+    assert(config->ur_ssl_verify == ver);
Jakub Filak c5487ab
+    my_assert(config->ur_client_cert, cert);
Jakub Filak c5487ab
+    my_assert(config->ur_client_key, key);
Jakub Filak c5487ab
+    my_assert(config->ur_username, username);
Jakub Filak c5487ab
+    my_assert(config->ur_password , password);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_basic_auth(&config, NULL, NULL);
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, NULL, true, NULL, NULL, NULL, NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_basic_auth(&config, "usr", NULL);
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, NULL, true, NULL, NULL, "usr", NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_basic_auth(&config, NULL, "passwd");
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, NULL, true, NULL, NULL, NULL, "passwd");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_basic_auth(&config, "usr", "passwd");
Jakub Filak c5487ab
+    assert_ureport_server_config(&config, NULL, true, NULL, NULL, "usr", "passwd");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ------------------------------------ ##
Jakub Filak c5487ab
+##  ureport_server_response_from_reply  ##
Jakub Filak c5487ab
+## ------------------------------------ ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_response_from_reply],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* curl_resul is not CURL_OK */
Jakub Filak c5487ab
+    struct post_state ps;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ps.curl_result = 1;
Jakub Filak c5487ab
+    strcpy(ps.errmsg, "err");
Jakub Filak c5487ab
+    ps.body = (char *)"body";
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_set_url(&config, strdup("url"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* curl_resul is CURLE_OK */
Jakub Filak c5487ab
+    /* http_resp_code == 404 */
Jakub Filak c5487ab
+    ps.curl_result = CURLE_OK;
Jakub Filak c5487ab
+    ps.http_resp_code = 404;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ps.http_resp_code = 500;
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ps.http_resp_code = 503;
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ps.http_resp_code = 404;
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ps.http_resp_code = 201;
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* unable parse json */
Jakub Filak c5487ab
+    ps.http_resp_code = 202;
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* correct json && invalid format */
Jakub Filak c5487ab
+    ps.body = (char *)"{ \"resultxxxxxxxx\" : true }";
Jakub Filak c5487ab
+    assert(ureport_server_response_from_reply(&ps, &config) == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* correct json && valid format */
Jakub Filak c5487ab
+    ps.body = (char *)"{ 'result' : true, \
Jakub Filak c5487ab
+                         'message': 'message', \
Jakub Filak c5487ab
+                         'bthash': '691cf824e3e07457156125636e86c50279e29496', \
Jakub Filak c5487ab
+                         'reported_to': [ { 'type': 'url', \
Jakub Filak c5487ab
+                         'value': 'value', \
Jakub Filak c5487ab
+                         'reporter': 'ABRT Server' } ] }";
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_response *response = ureport_server_response_from_reply(&ps, &config);
Jakub Filak c5487ab
+    assert(strcmp(response->urr_value, "true") == 0);
Jakub Filak c5487ab
+    assert(strcmp(response->urr_message, "message") == 0);
Jakub Filak c5487ab
+    assert(strcmp(response->urr_bthash, "691cf824e3e07457156125636e86c50279e29496") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    GList *urr_reported_to_list = response->urr_reported_to_list;
Jakub Filak c5487ab
+    assert(strcmp(urr_reported_to_list->data, "ABRT Server: URL=value") == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_response_free(response);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ----------------------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_response_save_in_dump_dir ##
Jakub Filak c5487ab
+## ----------------------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_response_save_in_dump_dir],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "dump_dir.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* reported to*/
Jakub Filak c5487ab
+    struct post_state ps;
Jakub Filak c5487ab
+    ps.curl_result = CURLE_OK;
Jakub Filak c5487ab
+    ps.http_resp_code = 202;
Jakub Filak c5487ab
+    ps.body = (char *)"{ 'result' : true, \
Jakub Filak c5487ab
+                         'message': 'message', \
Jakub Filak c5487ab
+                         'bthash': '691cf824e3e07457156125636e86c50279e29496', \
Jakub Filak c5487ab
+                         'reported_to': [ { 'type': 'url', \
Jakub Filak c5487ab
+                         'value': 'value', \
Jakub Filak c5487ab
+                         'reporter': 'ABRT Server' } ] }";
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    ureport_server_config_set_url(&config, strdup("url"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct dump_dir *dd = dd_create("./test", (uid_t)-1L, DEFAULT_DUMP_DIR_MODE);
Jakub Filak c5487ab
+    assert(dd != NULL);
Jakub Filak c5487ab
+    dd_create_basic_files(dd, (uid_t)-1L, NULL);
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_TYPE, "CCpp");
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_response *response = ureport_server_response_from_reply(&ps, &config);
Jakub Filak c5487ab
+    assert(ureport_server_response_save_in_dump_dir(response, "./test", &config));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* dump dir do not exist */
Jakub Filak c5487ab
+    assert(false == ureport_server_response_save_in_dump_dir(response, "not_existing_dir", &config));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    dd = dd_opendir("./test", 0);
Jakub Filak c5487ab
+    char *reported_to = dd_load_text_ext(dd, FILENAME_REPORTED_TO, DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strstr(reported_to, "uReport: BTHASH=691cf824e3e07457156125636e86c50279e29496") != NULL);
Jakub Filak c5487ab
+    assert(strstr(reported_to, "url/reports/bthash/691cf824e3e07457156125636e86c50279e29496") != NULL);
Jakub Filak c5487ab
+    assert(strstr(reported_to, "ABRT Server: URL=value") != NULL);
Jakub Filak c5487ab
+    /* not-reportable must not exist */
Jakub Filak c5487ab
+    assert(!dd_exist(dd, FILENAME_NOT_REPORTABLE));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    free(config.ur_url);
Jakub Filak c5487ab
+    ureport_server_response_free(response);
Jakub Filak c5487ab
+    free(reported_to);
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+    delete_dump_dir("./test");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* not-reportable*/
Jakub Filak c5487ab
+    ps.curl_result = CURLE_OK;
Jakub Filak c5487ab
+    ps.http_resp_code = 202;
Jakub Filak c5487ab
+    ps.body = (char *)"{ 'result' : true, \
Jakub Filak c5487ab
+                         'message': 'message', \
Jakub Filak c5487ab
+                         'solutions': [ { 'cause': 'solution_cause', \
Jakub Filak c5487ab
+                         'url': 'solution_url', \
Jakub Filak c5487ab
+                         'note': 'solution_note' } ], \
Jakub Filak c5487ab
+                         'bthash': '691cf824e3e07457156125636e86c50279e29496', \
Jakub Filak c5487ab
+                         'reported_to': [ { 'type': 'url', \
Jakub Filak c5487ab
+                         'value': 'value', \
Jakub Filak c5487ab
+                         'reporter': 'ABRT Server' } ] }";
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    ureport_server_config_set_url(&config, strdup("url"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    dd = dd_create("./test", (uid_t)-1L, DEFAULT_DUMP_DIR_MODE);
Jakub Filak c5487ab
+    assert(dd != NULL);
Jakub Filak c5487ab
+    dd_create_basic_files(dd, (uid_t)-1L, NULL);
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_TYPE, "CCpp");
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    response = ureport_server_response_from_reply(&ps, &config);
Jakub Filak c5487ab
+    assert(ureport_server_response_save_in_dump_dir(response, "./test", &config));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    dd = dd_opendir("./test", 0);
Jakub Filak c5487ab
+    reported_to = dd_load_text_ext(dd, FILENAME_REPORTED_TO, DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strstr(reported_to, "uReport: BTHASH=691cf824e3e07457156125636e86c50279e29496") != NULL);
Jakub Filak c5487ab
+    assert(strstr(reported_to, "url/reports/bthash/691cf824e3e07457156125636e86c50279e29496") != NULL);
Jakub Filak c5487ab
+    assert(strstr(reported_to, "ABRT Server: URL=value") != NULL);
Jakub Filak c5487ab
+    /* not-reportable must exist */
Jakub Filak c5487ab
+    char *not_reportable = dd_load_text_ext(dd, FILENAME_NOT_REPORTABLE, DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strstr(not_reportable, "Your problem seems to be caused by solution_cause") != NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    free(config.ur_url);
Jakub Filak c5487ab
+    ureport_server_response_free(response);
Jakub Filak c5487ab
+    free(reported_to);
Jakub Filak c5487ab
+    free(not_reportable);
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+    delete_dump_dir("./test");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## --------------------------------------- ##
Jakub Filak c5487ab
+##  ureport_server_response_get_report_url ##
Jakub Filak c5487ab
+## --------------------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_server_response_get_report_url],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+#define BTHASH_URL_SFX "reports/bthash/"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* reported to*/
Jakub Filak c5487ab
+    struct post_state ps;
Jakub Filak c5487ab
+    ps.curl_result = CURLE_OK;
Jakub Filak c5487ab
+    ps.http_resp_code = 202;
Jakub Filak c5487ab
+    ps.body = (char *)"{ 'result' : true, \
Jakub Filak c5487ab
+                         'message': 'message', \
Jakub Filak c5487ab
+                         'bthash': '691cf824e3e07457156125636e86c50279e29496', \
Jakub Filak c5487ab
+                         'reported_to': [ { 'type': 'url', \
Jakub Filak c5487ab
+                         'value': 'value', \
Jakub Filak c5487ab
+                         'reporter': 'ABRT Server' } ] }";
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    ureport_server_config_set_url(&config, strdup("url"));
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_response *response = ureport_server_response_from_reply(&ps, &config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *report_url = ureport_server_response_get_report_url(response, &config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *expect_bthash_url = concat_path_file(config.ur_url, BTHASH_URL_SFX);
Jakub Filak c5487ab
+    char *expect_report_url = concat_path_file(expect_bthash_url, response->urr_bthash);
Jakub Filak c5487ab
+    free(expect_bthash_url);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(strcmp(report_url, expect_report_url) == 0);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    free(config.ur_url);
Jakub Filak c5487ab
+    free(expect_report_url);
Jakub Filak c5487ab
+    free(report_url);
Jakub Filak c5487ab
+    ureport_server_response_free(response);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ---------------- ##
Jakub Filak c5487ab
+##  ureport_do_post ##
Jakub Filak c5487ab
+## ---------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_do_post],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct dump_dir *dd = dd_create("./test", (uid_t)-1L, DEFAULT_DUMP_DIR_MODE);
Jakub Filak c5487ab
+    assert(dd != NULL);
Jakub Filak c5487ab
+    dd_create_basic_files(dd, (uid_t)-1L, NULL);
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_TYPE, "CCpp");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_ANALYZER, "CCpp");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_EPOCH, "pkg_epoch");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_ARCH, "pkg_arch");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_RELEASE, "pkg_release");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_VERSION, "pkg_version");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_NAME, "pkg_name");
Jakub Filak c5487ab
+    const char *bt = "{ \"signal\": 6, \"executable\": \"/usr/bin/will_abort\" }";
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_CORE_BACKTRACE, bt);
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *json = ureport_from_dump_dir_ext("./test", NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* wrong url */
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    struct post_state *post_state = ureport_do_post(json, &config, "not_exist");
Jakub Filak c5487ab
+    assert(post_state->curl_result == CURLE_COULDNT_RESOLVE_HOST);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    free(post_state);
Jakub Filak c5487ab
+    free(json);
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    delete_dump_dir("./test");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## --------------- ##
Jakub Filak c5487ab
+##  ureport_submit ##
Jakub Filak c5487ab
+## --------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_submit],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct dump_dir *dd = dd_create("./test", (uid_t)-1L, DEFAULT_DUMP_DIR_MODE);
Jakub Filak c5487ab
+    assert(dd != NULL);
Jakub Filak c5487ab
+    dd_create_basic_files(dd, (uid_t)-1L, NULL);
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_TYPE, "CCpp");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_ANALYZER, "CCpp");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_EPOCH, "pkg_epoch");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_ARCH, "pkg_arch");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_RELEASE, "pkg_release");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_VERSION, "pkg_version");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_NAME, "pkg_name");
Jakub Filak c5487ab
+    const char *bt = "{ \"signal\": 6, \"executable\": \"/usr/bin/will_abort\" }";
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_CORE_BACKTRACE, bt);
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *json = ureport_from_dump_dir_ext("./test", NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* wrong url */
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+    struct ureport_server_response *response = ureport_submit(json, &config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    assert(response == NULL);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_response_free(response);
Jakub Filak c5487ab
+    free(json);
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    delete_dump_dir("./test");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## --------------------------- ##
Jakub Filak c5487ab
+## ureport_json_attachment_new ##
Jakub Filak c5487ab
+## --------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_json_attachment_new],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    char *json = ureport_json_attachment_new("data_bthash", "data_type", "data_data");
Jakub Filak c5487ab
+    assert(strcmp(json, "{ \"bthash\": \"data_bthash\", \"type\": \"data_type\", \"data\": \"data_data\" }") == 0);
Jakub Filak c5487ab
+    free(json);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    json = ureport_json_attachment_new("", "", "");
Jakub Filak c5487ab
+    assert(strcmp(json, "{ \"bthash\": \"\", \"type\": \"\", \"data\": \"\" }") == 0);
Jakub Filak c5487ab
+    free(json);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## --------------------- ##
Jakub Filak c5487ab
+## ureport_attach_string ##
Jakub Filak c5487ab
+## --------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_attach_string],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* wrong url */
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    bool res = ureport_attach_string("691cf824e3e07457156125636e86c50279e29496", "email", "abrt@email.com", &config);
Jakub Filak c5487ab
+    assert(res == true);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ------------------ ##
Jakub Filak c5487ab
+## ureport_attach_int ##
Jakub Filak c5487ab
+## ------------------ ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_attach_int],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* wrong url */
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    bool res = ureport_attach_int("691cf824e3e07457156125636e86c50279e29496", "count", 5, &config);
Jakub Filak c5487ab
+    assert(res == true);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+## ------------------------- ##
Jakub Filak c5487ab
+## ureport_from_dump_dir_ext ##
Jakub Filak c5487ab
+## ------------------------- ##
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+AT_TESTFUN([ureport_from_dump_dir_ext],
Jakub Filak c5487ab
+[[
Jakub Filak c5487ab
+#include "internal_libreport.h"
Jakub Filak c5487ab
+#include "ureport.h"
Jakub Filak c5487ab
+#include <assert.h>
Jakub Filak c5487ab
+#include "libreport_curl.h"
Jakub Filak c5487ab
+#include "problem_data.h"
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+int main(void)
Jakub Filak c5487ab
+{
Jakub Filak c5487ab
+    g_verbose=3;
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct dump_dir *dd = dd_create("./test", (uid_t)-1L, DEFAULT_DUMP_DIR_MODE);
Jakub Filak c5487ab
+    assert(dd != NULL);
Jakub Filak c5487ab
+    dd_create_basic_files(dd, (uid_t)-1L, NULL);
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_TYPE, "CCpp");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_ANALYZER, "CCpp");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_EPOCH, "pkg_epoch");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_ARCH, "pkg_arch");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_RELEASE, "pkg_release");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_VERSION, "pkg_version");
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_PKG_NAME, "pkg_name");
Jakub Filak c5487ab
+    const char *bt = "{ \"signal\": 6, \"executable\": \"/usr/bin/will_abort\" }";
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_CORE_BACKTRACE, bt);
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* no auth */
Jakub Filak c5487ab
+    char *ureport = ureport_from_dump_dir_ext("./test", NULL);
Jakub Filak c5487ab
+    assert(strstr(ureport, "auth") == NULL);
Jakub Filak c5487ab
+    free(ureport);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* auth */
Jakub Filak c5487ab
+    dd = dd_opendir("./test", 0);
Jakub Filak c5487ab
+    dd_save_text(dd, FILENAME_HOSTNAME, "env_hostname");
Jakub Filak c5487ab
+    dd_close(dd);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    struct ureport_server_config config;
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    map_string_t *settings = new_map_string();
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("uReport_IncludeAuthData", "yes", 1);
Jakub Filak c5487ab
+    setenv("uReport_AuthDataItems", "hostname", 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport = ureport_from_dump_dir_ext("./test", &config.ur_prefs);
Jakub Filak c5487ab
+    assert(strstr(ureport, "auth") != NULL);
Jakub Filak c5487ab
+    assert(strstr(ureport, "\"hostname\": \"env_hostname\"") != NULL);
Jakub Filak c5487ab
+    free(ureport);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    free_map_string(settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    /* auth with unknown uReport_AuthDataItems */
Jakub Filak c5487ab
+    ureport_server_config_init(&config);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    settings = new_map_string();
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    setenv("uReport_AuthDataItems", "hostname, unknown", 1);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_load(&config, settings);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport = ureport_from_dump_dir_ext("./test", &config.ur_prefs);
Jakub Filak c5487ab
+    assert(strstr(ureport, "auth") != NULL);
Jakub Filak c5487ab
+    assert(strstr(ureport, "\"hostname\": \"env_hostname\"") != NULL);
Jakub Filak c5487ab
+    assert(strstr(ureport, "unknown") == NULL);
Jakub Filak c5487ab
+    free(ureport);
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    ureport_server_config_destroy(&config);
Jakub Filak c5487ab
+    free_map_string(settings);
Jakub Filak c5487ab
+    delete_dump_dir("./test");
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+    return 0;
Jakub Filak c5487ab
+}
Jakub Filak c5487ab
+]])
Jakub Filak c5487ab
+
Jakub Filak c5487ab
diff --git a/tests/ureport/certs/correct/cert-key.pem b/tests/ureport/certs/correct/cert-key.pem
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..1516328
Jakub Filak c5487ab
--- /dev/null
Jakub Filak c5487ab
+++ b/tests/ureport/certs/correct/cert-key.pem
Jakub Filak c5487ab
@@ -0,0 +1,5 @@
Jakub Filak c5487ab
+-----BEGIN RSA PRIVATE KEY-----
Jakub Filak c5487ab
+rsa
Jakub Filak c5487ab
+private
Jakub Filak c5487ab
+key
Jakub Filak c5487ab
+-----END RSA PRIVATE KEY-----
Jakub Filak c5487ab
diff --git a/tests/ureport/certs/correct/cert.pem b/tests/ureport/certs/correct/cert.pem
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..ee54de3
Jakub Filak c5487ab
--- /dev/null
Jakub Filak c5487ab
+++ b/tests/ureport/certs/correct/cert.pem
Jakub Filak c5487ab
@@ -0,0 +1,13 @@
Jakub Filak c5487ab
+-----BEGIN CERTIFICATE-----
Jakub Filak c5487ab
+cer
Jakub Filak c5487ab
+tifica
Jakub Filak c5487ab
+te
Jakub Filak c5487ab
+-----END CERTIFICATE-----
Jakub Filak c5487ab
+-----BEGIN ENTITLEMENT DATA-----
Jakub Filak c5487ab
+entitlement
Jakub Filak c5487ab
+data
Jakub Filak c5487ab
+-----END ENTITLEMENT DATA-----
Jakub Filak c5487ab
+-----BEGIN RSA SIGNATURE-----
Jakub Filak c5487ab
+rsa
Jakub Filak c5487ab
+signature
Jakub Filak c5487ab
+-----END RSA SIGNATURE-----
Jakub Filak c5487ab
diff --git a/tests/ureport/certs/incorrect_content/cert-key.pem b/tests/ureport/certs/incorrect_content/cert-key.pem
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..1516328
Jakub Filak c5487ab
--- /dev/null
Jakub Filak c5487ab
+++ b/tests/ureport/certs/incorrect_content/cert-key.pem
Jakub Filak c5487ab
@@ -0,0 +1,5 @@
Jakub Filak c5487ab
+-----BEGIN RSA PRIVATE KEY-----
Jakub Filak c5487ab
+rsa
Jakub Filak c5487ab
+private
Jakub Filak c5487ab
+key
Jakub Filak c5487ab
+-----END RSA PRIVATE KEY-----
Jakub Filak c5487ab
diff --git a/tests/ureport/certs/incorrect_content/cert.pem b/tests/ureport/certs/incorrect_content/cert.pem
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..e69de29
Jakub Filak c5487ab
diff --git a/tests/ureport/rhsm/__init__.py b/tests/ureport/rhsm/__init__.py
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..e69de29
Jakub Filak c5487ab
diff --git a/tests/ureport/rhsm/config.py b/tests/ureport/rhsm/config.py
Jakub Filak c5487ab
new file mode 100644
Jakub Filak c5487ab
index 0000000..44483d8
Jakub Filak c5487ab
--- /dev/null
Jakub Filak c5487ab
+++ b/tests/ureport/rhsm/config.py
Jakub Filak c5487ab
@@ -0,0 +1,8 @@
Jakub Filak c5487ab
+import os
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+def initConfig():
Jakub Filak c5487ab
+    return myConfig()
Jakub Filak c5487ab
+
Jakub Filak c5487ab
+class myConfig():
Jakub Filak c5487ab
+    def get(self, key, value):
Jakub Filak c5487ab
+        return os.path.abspath("../../ureport/certs/correct")
Jakub Filak c5487ab
-- 
Jakub Filak c5487ab
2.1.0
Jakub Filak c5487ab