FreeBSD Manual Pages
KCGIREGRESS(3) Library Functions Manual KCGIREGRESS(3) NAME kcgiregress, kcgi_regress_cgi, kcgi_regress_fcgi -- regression frame- work for kcgi LIBRARY library "libkcgiregress" SYNOPSIS #include <kcgiregress.h> int kcgi_regress_cgi(int (*client)(void *), void *clientData, int (*server)(void *), void *serverData); int kcgi_regress_fcgi(int (*client)(void *), void *clientData, int (*server)(void *), void *serverData); DESCRIPTION Automated testing platform for kcgi(3). Allow for emulated CGI or FastCGI environments over a local network port. The server callback is invoked with argument serverArg within a CGI or FastCGI environment as if it were spawned by a web server, upon which the usual khttp_parse(3) or khttp_fcgi_init(3) and khttp_fcgi_parse(3) functions are usually used to test behaviour. The client callback com- municates with the server over port 17123. Usually this is orches- trated with libcurl(3). The port number is fixed. Clients are re- stricted to the HTTP GET, OPTIONS, and POST methods. Both of these callbacks must return zero on failure, non-zero on suc- cess. To compile and link, use pkg-config(1) as follows: % cc `pkg-config --cflags kcgi-regress` -c -o sample.o sample.c % cc -o sample sample.o `pkg-config --libs kcgi-regress` kcgi(3) components should use their respective pkg-config(1) identi- fiers, such as "kcgi-json" for kcgijson(3) output. Applications using libcurl(3) should further use curl-config(1) as well, or on some sys- tems, pkg-config(1) with "libcurl". RETURN VALUES These functions return zero on failure, non-zero on success. EXAMPLES The following regression test simply checks that the server responds. Its only check is for operation and HTTP status code (201). #include <stdarg.h> #include <stdint.h> #include <stdlib.h> #include <curl/curl.h> #include <kcgi.h> #include <kcgijson.h> #include <kcgiregress.h> static int server(void *arg) { struct kreq r; if (khttp_parse(&r, NULL, 0, NULL, 0, 0) != KCGI_OK) return 0; khttp_head(&r, kresps[KRESP_STATUS], "%s", khttps[KHTTP_201]); khttp_head(&r, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[KMIME_APP_JSON]); khttp_body(&r); khttp_free(&r); return 1; } static int client(void *arg) { CURL *curl; long http; if ((curl = curl_easy_init()) == NULL) return 0; curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:17123/index.json"); if (curl_easy_perform(curl) != CURLE_OK) return 0; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http); curl_easy_cleanup(curl); curl_global_cleanup(); return http == 201; } int main(void) { return kcgi_regress_cgi (client, NULL, server, NULL) ? 0 : 1; } To compile this simple regression test, the kcgi(3), kcgiregress(3), kcgijson(3), and libcurl(3) libraries and headers are needed, along with further dependencies. Let the file be named sample.c. % export PKGS="kcgi-regress kcgi-json libcurl" % cc `pkg-config --cflags $PKGS` -c sample.c % cc -o sample sample.o `pkg-config --libs $PKGS` This assumes that libcurl(3) has its configuration recognised by pkg-config(1), which isn't always the case: sometimes curl-config(1) is required. AUTHORS Written by Kristaps Dzonsons <kristaps@bsd.lv>. FreeBSD Ports 14.quarterly $Mdocdate$ KCGIREGRESS(3)
NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | EXAMPLES | AUTHORS
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=kcgiregress&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>
