aboutsummaryrefslogtreecommitdiff
path: root/src/mock/libcurl.c
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2021-06-06 17:10:10 +0200
committerJan200101 <sentrycraft123@gmail.com>2021-06-06 17:10:10 +0200
commit537994756d80178bdaf25e96968f34d2e144797f (patch)
treea093dfc43a8487c5866808e74e7250a6818cf6e0 /src/mock/libcurl.c
parentdf1df2929646abd77955b80e3ded3574ac005179 (diff)
downloadpolecat-537994756d80178bdaf25e96968f34d2e144797f.tar.gz
polecat-537994756d80178bdaf25e96968f34d2e144797f.zip
fix win env, add proper mocking code to test implementation
Diffstat (limited to 'src/mock/libcurl.c')
-rw-r--r--src/mock/libcurl.c134
1 files changed, 96 insertions, 38 deletions
diff --git a/src/mock/libcurl.c b/src/mock/libcurl.c
index 95901be..1e58b15 100644
--- a/src/mock/libcurl.c
+++ b/src/mock/libcurl.c
@@ -1,11 +1,28 @@
#include <stdio.h>
#include <stdarg.h>
+#include <string.h>
#include <curl/curl.h>
#include "../defines.h"
+#include "wine_mock_tar_xz.h"
+#include "wine_json.h"
+
+typedef size_t (*callback_t)(const void*, size_t, size_t, void*);
+typedef int (*xfercallback_t)(void*, curl_off_t, curl_off_t, curl_off_t, curl_off_t);
+
+#ifndef NDEBUG
+#define debug_printf(...) printf(__VA_ARGS__)
+#else
+#define debug_printf(...)
+#endif
+
+callback_t callbackfunc = NULL;
+xfercallback_t xfercallbackfunc = NULL;
char* url = NULL;
void* data = NULL;
+long noprogress = 0;
+
#ifdef curl_easy_setopt
#undef curl_easy_setopt
@@ -13,48 +30,89 @@ void* data = NULL;
CURLcode curl_global_init(UNUSED long flags)
{
- puts("[MOCK] curl_global_init(...)");
- return CURLE_OK;
+ debug_printf("[MOCK] %s(...)\n", __func__);
+ return CURLE_OK;
}
CURL* curl_easy_init()
{
- puts("[MOCK] curl_easy_init(...)");
- return NULL;
+ debug_printf("[MOCK] %s(...)\n", __func__);
+ return NULL;
}
CURLcode curl_easy_setopt(UNUSED CURL *handle, CURLoption option, ...)
{
- puts("[MOCK] curl_easy_setopt(...)");
+ debug_printf("[MOCK] %s(...)\n", __func__);
+
+ va_list arg;
+ va_start(arg, option);
+
+ switch (option)
+ {
+ case CURLOPT_URL:
+ url = va_arg(arg, char*);
+ debug_printf("CURLOPT_URL\t%s\n", url);
+ break;
+
+ case CURLOPT_WRITEDATA:
+ data = va_arg(arg, void*);
+ debug_printf("CURLOPT_WRITEDATA\t%p\n", data);
+ break;
- va_list arg;
- va_start(arg, option);
+ case CURLOPT_WRITEFUNCTION:
+ callbackfunc = va_arg(arg, callback_t);
+ debug_printf("CURLOPT_WRITEFUNCTION\n");
+ break;
- switch (option)
- {
- case CURLOPT_URL:
- url = va_arg(arg, char*);
- printf("CURLOPT_URL\t%s\n", url);
- break;
+ case CURLOPT_XFERINFOFUNCTION:
+ xfercallbackfunc = va_arg(arg, xfercallback_t);
+ debug_printf("CURLOPT_XFERINFOFUNCTION\n");
+ break;
- case CURLOPT_WRITEDATA:
- data = va_arg(arg, void*);
- printf("CURLOPT_WRITEDATA\t%p\n", data);
- break;
+ case CURLOPT_NOPROGRESS:
+ noprogress = va_arg(arg, long);
+ debug_printf("CURLOPT_NOPROGRESS\t%li\n", noprogress);
+ break;
- default:
- break;
- }
+ default:
+ break;
+ }
- va_end(arg);
+ va_end(arg);
- return CURLE_OK;
+ return CURLE_OK;
}
CURLcode curl_easy_perform(UNUSED CURL *easy_handle)
{
- puts("[MOCK] curl_easy_perform(...)");
- return CURLE_OK;
+ const void* output = NULL;
+ size_t output_size = 0;
+
+ debug_printf("[MOCK] %s(...)\n", __func__);
+ if (!strcmp(url, WINE_API))
+ {
+ output = wine_json;
+ output_size = wine_json_size;
+ }
+ else if (!strcmp(url, "mockurl"))
+ {
+ output = wine_mock_tar_xz;
+ output_size = wine_mock_tar_xz_size;
+ }
+
+ if (output && data && callbackfunc)
+ {
+ callbackfunc(output, 1, output_size, data);
+
+ if (xfercallbackfunc && !noprogress)
+ {
+ xfercallbackfunc(data, (curl_off_t)output_size, (curl_off_t)output_size, 0, 0);
+ }
+
+ return CURLE_OK;
+ }
+
+ return CURLE_UNSUPPORTED_PROTOCOL;
}
#ifdef curl_easy_getinfo
@@ -63,33 +121,33 @@ CURLcode curl_easy_perform(UNUSED CURL *easy_handle)
CURLcode curl_easy_getinfo(UNUSED CURL *curl, CURLINFO info, ...)
{
- puts("[MOCK] curl_easy_getinfo(...)");
+ debug_printf("[MOCK] %s(...)\n", __func__);
- if (info == CURLINFO_RESPONSE_CODE)
- {
- va_list arg;
- va_start(arg, info);
- long* http_code = va_arg(arg, long*);
- *http_code = 200;
- va_end(arg);
- }
+ if (info == CURLINFO_RESPONSE_CODE)
+ {
+ va_list arg;
+ va_start(arg, info);
+ long* http_code = va_arg(arg, long*);
+ *http_code = 200;
+ va_end(arg);
+ }
- return CURLE_OK;
+ return CURLE_OK;
}
const char* curl_easy_strerror(UNUSED CURLcode error)
{
- puts("[MOCK] curl_easy_strerror(...)");
- return "error";
+ debug_printf("[MOCK] %s(...)\n", __func__);
+ return __func__;;
}
void curl_easy_cleanup(CURL *handle)
{
- puts("[MOCK] curl_easy_cleanup(...)");
+ debug_printf("[MOCK] %s(...)\n", __func__);
}
void curl_global_cleanup()
{
- puts("[MOCK] curl_global_cleanup(...)");
+ debug_printf("[MOCK] %s(...)\n", __func__);
} \ No newline at end of file