|
Packit |
875988 |
/*
|
|
Packit |
875988 |
This file is part of libmicrohttpd
|
|
Packit |
875988 |
Copyright (C) 2007, 2017 Christian Grothoff
|
|
Packit |
875988 |
|
|
Packit |
875988 |
libmicrohttpd is free software; you can redistribute it and/or modify
|
|
Packit |
875988 |
it under the terms of the GNU General Public License as published
|
|
Packit |
875988 |
by the Free Software Foundation; either version 2, or (at your
|
|
Packit |
875988 |
option) any later version.
|
|
Packit |
875988 |
|
|
Packit |
875988 |
libmicrohttpd is distributed in the hope that it will be useful, but
|
|
Packit |
875988 |
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
875988 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
875988 |
General Public License for more details.
|
|
Packit |
875988 |
|
|
Packit |
875988 |
You should have received a copy of the GNU General Public License
|
|
Packit |
875988 |
along with libmicrohttpd; see the file COPYING. If not, write to the
|
|
Packit |
875988 |
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Packit |
875988 |
Boston, MA 02110-1301, USA.
|
|
Packit |
875988 |
*/
|
|
Packit |
875988 |
|
|
Packit |
875988 |
/**
|
|
Packit |
875988 |
* @file test_daemon.c
|
|
Packit |
875988 |
* @brief Testcase for libmicrohttpd starts and stops
|
|
Packit |
875988 |
* @author Christian Grothoff
|
|
Packit |
875988 |
*/
|
|
Packit |
875988 |
|
|
Packit |
875988 |
#include "platform.h"
|
|
Packit |
875988 |
#include "microhttpd.h"
|
|
Packit |
875988 |
#include <stdlib.h>
|
|
Packit |
875988 |
#include <string.h>
|
|
Packit |
875988 |
#include <stdio.h>
|
|
Packit |
875988 |
|
|
Packit |
875988 |
#ifndef WINDOWS
|
|
Packit |
875988 |
#include <unistd.h>
|
|
Packit |
875988 |
#endif
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
testStartError ()
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
struct MHD_Daemon *d;
|
|
Packit |
875988 |
|
|
Packit |
875988 |
d = MHD_start_daemon (MHD_USE_ERROR_LOG, 0, NULL, NULL, NULL, NULL);
|
|
Packit |
875988 |
if (NULL != d)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Succeeded to start without MHD_AccessHandlerCallback?\n");
|
|
Packit |
875988 |
return 1;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
return 0;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
apc_nothing (void *cls,
|
|
Packit |
875988 |
const struct sockaddr *addr,
|
|
Packit |
875988 |
socklen_t addrlen)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
(void)cls; (void)addr; (void)addrlen; /* Unused. Silent compiler warning. */
|
|
Packit |
875988 |
|
|
Packit |
875988 |
return MHD_NO;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
apc_all (void *cls,
|
|
Packit |
875988 |
const struct sockaddr *addr,
|
|
Packit |
875988 |
socklen_t addrlen)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
(void)cls; (void)addr; (void)addrlen; /* Unused. Silent compiler warning. */
|
|
Packit |
875988 |
|
|
Packit |
875988 |
return MHD_YES;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
ahc_nothing (void *cls,
|
|
Packit |
875988 |
struct MHD_Connection *connection,
|
|
Packit |
875988 |
const char *url,
|
|
Packit |
875988 |
const char *method,
|
|
Packit |
875988 |
const char *version,
|
|
Packit |
875988 |
const char *upload_data, size_t *upload_data_size,
|
|
Packit |
875988 |
void **unused)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
(void)cls;(void)connection;(void)url; /* Unused. Silent compiler warning. */
|
|
Packit |
875988 |
(void)method;(void)version;(void)upload_data; /* Unused. Silent compiler warning. */
|
|
Packit |
875988 |
(void)upload_data_size;(void)unused; /* Unused. Silent compiler warning. */
|
|
Packit |
875988 |
|
|
Packit |
875988 |
return MHD_NO;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
testStartStop ()
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
struct MHD_Daemon *d;
|
|
Packit |
875988 |
|
|
Packit |
875988 |
d = MHD_start_daemon (MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_ERROR_LOG,
|
|
Packit |
875988 |
0,
|
|
Packit |
875988 |
&apc_nothing, NULL,
|
|
Packit |
875988 |
&ahc_nothing, NULL,
|
|
Packit |
875988 |
MHD_OPTION_END);
|
|
Packit |
875988 |
if (NULL == d)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed to start daemon on port %u\n",
|
|
Packit |
875988 |
0);
|
|
Packit |
875988 |
exit (77);
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
return 0;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
testExternalRun ()
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
struct MHD_Daemon *d;
|
|
Packit |
875988 |
fd_set rs;
|
|
Packit |
875988 |
MHD_socket maxfd;
|
|
Packit |
875988 |
int i;
|
|
Packit |
875988 |
|
|
Packit |
875988 |
d = MHD_start_daemon (MHD_USE_ERROR_LOG,
|
|
Packit |
875988 |
0,
|
|
Packit |
875988 |
&apc_all, NULL,
|
|
Packit |
875988 |
&ahc_nothing, NULL,
|
|
Packit |
875988 |
MHD_OPTION_END);
|
|
Packit |
875988 |
|
|
Packit |
875988 |
if (NULL == d)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed to start daemon on port %u\n",
|
|
Packit |
875988 |
0);
|
|
Packit |
875988 |
exit (77);
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
i = 0;
|
|
Packit |
875988 |
while (i < 15)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
maxfd = 0;
|
|
Packit |
875988 |
FD_ZERO (&rs);
|
|
Packit |
875988 |
if (MHD_YES != MHD_get_fdset (d, &rs, &rs, &rs, &maxfd))
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed in MHD_get_fdset()\n");
|
|
Packit |
875988 |
return 256;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
if (MHD_run (d) == MHD_NO)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed in MHD_run()\n");
|
|
Packit |
875988 |
return 8;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
i++;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
return 0;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
testThread ()
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
struct MHD_Daemon *d;
|
|
Packit |
875988 |
|
|
Packit |
875988 |
d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_INTERNAL_POLLING_THREAD,
|
|
Packit |
875988 |
0,
|
|
Packit |
875988 |
&apc_all, NULL,
|
|
Packit |
875988 |
&ahc_nothing, NULL,
|
|
Packit |
875988 |
MHD_OPTION_END);
|
|
Packit |
875988 |
|
|
Packit |
875988 |
if (NULL == d)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed to start daemon on port %u\n",
|
|
Packit |
875988 |
1082);
|
|
Packit |
875988 |
exit (77);
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
if (MHD_run (d) != MHD_NO)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed in MHD_run()\n");
|
|
Packit |
875988 |
return 32;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
return 0;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
static int
|
|
Packit |
875988 |
testMultithread ()
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
struct MHD_Daemon *d;
|
|
Packit |
875988 |
|
|
Packit |
875988 |
d = MHD_start_daemon (MHD_USE_ERROR_LOG | MHD_USE_INTERNAL_POLLING_THREAD | MHD_USE_THREAD_PER_CONNECTION,
|
|
Packit |
875988 |
0,
|
|
Packit |
875988 |
&apc_all, NULL,
|
|
Packit |
875988 |
&ahc_nothing, NULL,
|
|
Packit |
875988 |
MHD_OPTION_END);
|
|
Packit |
875988 |
|
|
Packit |
875988 |
if (NULL == d)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed to start daemon on port %u\n",
|
|
Packit |
875988 |
0);
|
|
Packit |
875988 |
exit (77);
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
if (MHD_run (d) != MHD_NO)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Failed in MHD_run()\n");
|
|
Packit |
875988 |
return 128;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
MHD_stop_daemon (d);
|
|
Packit |
875988 |
return 0;
|
|
Packit |
875988 |
}
|
|
Packit |
875988 |
|
|
Packit |
875988 |
|
|
Packit |
875988 |
int
|
|
Packit |
875988 |
main (int argc,
|
|
Packit |
875988 |
char *const *argv)
|
|
Packit |
875988 |
{
|
|
Packit |
875988 |
int errorCount = 0;
|
|
Packit |
875988 |
(void)argc; (void)argv; /* Unused. Silent compiler warning. */
|
|
Packit |
875988 |
|
|
Packit |
875988 |
errorCount += testStartError ();
|
|
Packit |
875988 |
errorCount += testStartStop ();
|
|
Packit |
875988 |
errorCount += testExternalRun ();
|
|
Packit |
875988 |
errorCount += testThread ();
|
|
Packit |
875988 |
errorCount += testMultithread ();
|
|
Packit |
875988 |
if (0 != errorCount)
|
|
Packit |
875988 |
fprintf (stderr,
|
|
Packit |
875988 |
"Error (code: %u)\n",
|
|
Packit |
875988 |
errorCount);
|
|
Packit |
875988 |
return 0 != errorCount; /* 0 == pass */
|
|
Packit |
875988 |
}
|