GNU libmicrohttpd  0.9.5
postprocessor_large_test.c
Go to the documentation of this file.
1 /*
2  This file is part of libmicrohttpd
3  (C) 2008 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 
27 #include "platform.h"
28 #include "microhttpd.h"
29 #include "internal.h"
30 
31 #ifndef WINDOWS
32 #include <unistd.h>
33 #endif
34 
35 static int
36 value_checker (void *cls,
37  enum MHD_ValueKind kind,
38  const char *key,
39  const char *filename,
40  const char *content_type,
41  const char *transfer_encoding,
42  const char *data, uint64_t off, size_t size)
43 {
44  unsigned int *pos = cls;
45 #if 0
46  fprintf (stderr,
47  "VC: %llu %u `%s' `%s' `%s' `%s' `%.*s'\n",
48  off, size,
49  key, filename, content_type, transfer_encoding, size, data);
50 #endif
51  if (size == 0)
52  return MHD_YES;
53  *pos += size;
54  return MHD_YES;
55 
56 }
57 
58 
59 static int
61 {
62  struct MHD_Connection connection;
63  struct MHD_HTTP_Header header;
64  struct MHD_PostProcessor *pp;
65  int i;
66  int delta;
67  size_t size;
68  char data[102400];
69  unsigned int pos;
70 
71  pos = 0;
72  memset (data, 'A', sizeof (data));
73  memcpy (data, "key=", 4);
74  data[sizeof (data) - 1] = '\0';
75  memset (&connection, 0, sizeof (struct MHD_Connection));
76  memset (&header, 0, sizeof (struct MHD_HTTP_Header));
77  connection.headers_received = &header;
80  header.kind = MHD_HEADER_KIND;
81  pp = MHD_create_post_processor (&connection, 1024, &value_checker, &pos);
82  i = 0;
83  size = strlen (data);
84  while (i < size)
85  {
86  delta = 1 + RANDOM () % (size - i);
87  MHD_post_process (pp, &data[i], delta);
88  i += delta;
89  }
91  if (pos != sizeof (data) - 5) /* minus 0-termination and 'key=' */
92  return 1;
93  return 0;
94 }
95 
96 int
97 main (int argc, char *const *argv)
98 {
99  unsigned int errorCount = 0;
100 
101  errorCount += test_simple_large ();
102  if (errorCount != 0)
103  fprintf (stderr, "Error (code: %u)\n", errorCount);
104  return errorCount != 0; /* 0 == pass */
105 }