Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
KCGIREGRESS(3)		     Library Functions Manual		  KCGIREGRESS(3)

NAME
     kcgiregress,  kcgi_regress_cgi,  kcgi_regress_fcgi  -- regression framework
     for kcgi

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) func-
     tions are usually used to test behaviour.	The client callback communicates
     with the server  over  port  17123.   Usually  this  is  orchestrated  with
     libcurl(3).   The port number is fixed.  Clients are restricted to the HTTP
     GET, OPTIONS, and POST methods.

     Both of these callbacks must return zero on failure, non-zero on success.

     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)  identifiers,
     such  as "kcgi-json" for kcgijson(3) output.  Applications using libcurl(3)
     should further use curl-config(1) as well, or  on	some  systems,	pkg-con-
     fig(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), kcgij-
     son(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-con-
     fig(1), which isn't always the case: sometimes curl-config(1) is required.

AUTHORS
     Written by Kristaps Dzonsons <kristaps@bsd.lv>.

FreeBSD ports 15.quarterly	   $Mdocdate$			  KCGIREGRESS(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=kcgiregress&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help