1/* 2 This file is part of libmicrohttpd 3 Copyright (C) 2007 Christian Grothoff 4 5 libmicrohttpd is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published 7 by the Free Software Foundation; either version 2, or (at your 8 option) any later version. 9 10 libmicrohttpd is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with libmicrohttpd; see the file COPYING. If not, write to the 17 Free Software Foundation, Inc., 59 Temple Place - Suite 330, 18 Boston, MA 02111-1307, USA. 19 */ 20 21/** 22 * @file mhds_get_test.c 23 * @brief Testcase for libmicrohttpd HTTPS GET operations 24 * @author Sagie Amir 25 */ 26 27#include "platform.h" 28#include "microhttpd.h" 29 30#define MHD_E_MEM "Error: memory error\n" 31#define MHD_E_SERVER_INIT "Error: failed to start server\n" 32 33const int DEBUG_GNUTLS_LOG_LEVEL = 0; 34const char *test_file_name = "https_test_file"; 35const char test_file_data[] = "Hello World\n"; 36 37static int 38ahc_echo (void *cls, 39 struct MHD_Connection *connection, 40 const char *url, 41 const char *method, 42 const char *version, 43 const char *upload_data, size_t *upload_data_size, 44 void **unused) 45{ 46 return 0; 47} 48 49int 50test_wrap (char *test_name, int (*test) (void)) 51{ 52 int ret; 53 54 fprintf (stdout, "running test: %s ", test_name); 55 ret = test (); 56 if (ret == 0) 57 { 58 fprintf (stdout, "[pass]\n"); 59 } 60 else 61 { 62 fprintf (stdout, "[fail]\n"); 63 } 64 return ret; 65} 66 67 68/** 69 * Test daemon initialization with the MHD_OPTION_SOCK_ADDR option 70 */ 71static int 72test_ip_addr_option () 73{ 74 struct MHD_Daemon *d; 75 struct sockaddr_in daemon_ip_addr; 76#if HAVE_INET6 77 struct sockaddr_in6 daemon_ip_addr6; 78#endif 79 80 memset (&daemon_ip_addr, 0, sizeof (struct sockaddr_in)); 81 daemon_ip_addr.sin_family = AF_INET; 82 daemon_ip_addr.sin_port = htons (4233); 83 daemon_ip_addr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); 84 85#if HAVE_INET6 86 memset (&daemon_ip_addr6, 0, sizeof (struct sockaddr_in6)); 87 daemon_ip_addr6.sin6_family = AF_INET6; 88 daemon_ip_addr6.sin6_port = htons (4233); 89 daemon_ip_addr6.sin6_addr = in6addr_loopback; 90#endif 91 92 d = MHD_start_daemon (MHD_USE_DEBUG, 4233, 93 NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR, 94 &daemon_ip_addr, MHD_OPTION_END); 95 96 if (d == 0) 97 return -1; 98 99 MHD_stop_daemon (d); 100 101#if HAVE_INET6 102 d = MHD_start_daemon (MHD_USE_DEBUG | MHD_USE_IPv6, 4233, 103 NULL, NULL, &ahc_echo, NULL, MHD_OPTION_SOCK_ADDR, 104 &daemon_ip_addr6, MHD_OPTION_END); 105 106 if (d == 0) 107 return -1; 108 109 MHD_stop_daemon (d); 110#endif 111 112 return 0; 113} 114 115/* setup a temporary transfer test file */ 116int 117main (int argc, char *const *argv) 118{ 119 unsigned int errorCount = 0; 120 121 errorCount += test_wrap ("ip addr option", &test_ip_addr_option); 122 123 return errorCount != 0; 124} 125