gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [gnunet] branch master updated: add test for json_mhd.c log


From: gnunet
Subject: [GNUnet-SVN] [gnunet] branch master updated: add test for json_mhd.c logic
Date: Fri, 03 May 2019 15:11:04 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository gnunet.

The following commit(s) were added to refs/heads/master by this push:
     new 4444fb802 add test for json_mhd.c logic
4444fb802 is described below

commit 4444fb80284aa86fe24f3640a0b1e4c841a98f9a
Author: Christian Grothoff <address@hidden>
AuthorDate: Fri May 3 15:10:26 2019 +0200

    add test for json_mhd.c logic
---
 src/Makefile.am          |   2 +
 src/json/Makefile.am     |  26 +++++++-
 src/json/test_json.c     | 129 +++++++++++++++-------------------------
 src/json/test_json_mhd.c | 151 +++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 224 insertions(+), 84 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index ab8731fc2..5ae328f9a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -23,6 +23,7 @@ if HAVE_JSON
 endif
 endif
 
+if HAVE_MHD
 if HAVE_JSON
   JSON_DIR = json
 if HAVE_LIBGNURL
@@ -33,6 +34,7 @@ if HAVE_LIBCURL
 endif
 endif
 endif
+endif
 
 if BUILD_PULSE_HELPERS
 CONVERSATION_DIR = conversation
diff --git a/src/json/Makefile.am b/src/json/Makefile.am
index f3fa28d69..f030c3016 100644
--- a/src/json/Makefile.am
+++ b/src/json/Makefile.am
@@ -25,7 +25,8 @@ libgnunetjson_la_LIBADD = \
   $(XLIB)
 
 check_PROGRAMS = \
-  test_json
+  test_json \
+  test_json_mhd
 
 TESTS = \
   $(check_PROGRAMS)
@@ -36,3 +37,26 @@ test_json_LDADD = \
   libgnunetjson.la \
   $(top_builddir)/src/util/libgnunetutil.la \
   -ljansson
+
+
+if HAVE_LIBGNURL
address@hidden@
address@hidden@
+else
+if HAVE_LIBCURL
address@hidden@
address@hidden@
+endif
+endif
+
+
+test_json_mhd_SOURCES = \
+  test_json_mhd.c
+test_json_mhd_LDADD = \
+  libgnunetjson.la \
+  $(top_builddir)/src/util/libgnunetutil.la \
+  -ljansson \
+  -lmicrohttpd \
+  $(LIB_GNURL)
+test_json_mhd_CPPFLAGS = \
+ $(CPP_GNURL) $(AM_CPPFLAGS)
diff --git a/src/json/test_json.c b/src/json/test_json.c
index dd957eb8e..40fb7f090 100644
--- a/src/json/test_json.c
+++ b/src/json/test_json.c
@@ -11,7 +11,7 @@
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Affero General Public License for more details.
- 
+
   You should have received a copy of the GNU Affero General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
@@ -39,32 +39,26 @@ test_abs_time ()
   json_t *j;
   struct GNUNET_TIME_Absolute a1;
   struct GNUNET_TIME_Absolute a2;
-  struct GNUNET_JSON_Specification s1[] = {
-    GNUNET_JSON_spec_absolute_time (NULL, &a2),
-    GNUNET_JSON_spec_end()
-  };
-  struct GNUNET_JSON_Specification s2[] = {
-    GNUNET_JSON_spec_absolute_time (NULL, &a2),
-    GNUNET_JSON_spec_end()
-  };
+  struct GNUNET_JSON_Specification s1[] = {GNUNET_JSON_spec_absolute_time 
(NULL,
+                                                                           
&a2),
+                                           GNUNET_JSON_spec_end ()};
+  struct GNUNET_JSON_Specification s2[] = {GNUNET_JSON_spec_absolute_time 
(NULL,
+                                                                           
&a2),
+                                           GNUNET_JSON_spec_end ()};
 
   a1 = GNUNET_TIME_absolute_get ();
   GNUNET_TIME_round_abs (&a1);
   j = GNUNET_JSON_from_time_abs (a1);
   GNUNET_assert (NULL != j);
-  GNUNET_assert (GNUNET_OK ==
-                GNUNET_JSON_parse (j, s1, NULL, NULL));
-  GNUNET_assert (a1.abs_value_us ==
-                a2.abs_value_us);
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (j, s1, NULL, NULL));
+  GNUNET_assert (a1.abs_value_us == a2.abs_value_us);
   json_decref (j);
 
   a1 = GNUNET_TIME_UNIT_FOREVER_ABS;
   j = GNUNET_JSON_from_time_abs (a1);
   GNUNET_assert (NULL != j);
-  GNUNET_assert (GNUNET_OK ==
-                GNUNET_JSON_parse (j, s2, NULL, NULL));
-  GNUNET_assert (a1.abs_value_us ==
-                a2.abs_value_us);
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (j, s2, NULL, NULL));
+  GNUNET_assert (a1.abs_value_us == a2.abs_value_us);
   json_decref (j);
   return 0;
 }
@@ -81,31 +75,25 @@ test_rel_time ()
   json_t *j;
   struct GNUNET_TIME_Relative r1;
   struct GNUNET_TIME_Relative r2;
-  struct GNUNET_JSON_Specification s1[] = {
-    GNUNET_JSON_spec_relative_time (NULL, &r2),
-    GNUNET_JSON_spec_end()
-  };
-  struct GNUNET_JSON_Specification s2[] = {
-    GNUNET_JSON_spec_relative_time (NULL, &r2),
-    GNUNET_JSON_spec_end()
-  };
+  struct GNUNET_JSON_Specification s1[] = {GNUNET_JSON_spec_relative_time 
(NULL,
+                                                                           
&r2),
+                                           GNUNET_JSON_spec_end ()};
+  struct GNUNET_JSON_Specification s2[] = {GNUNET_JSON_spec_relative_time 
(NULL,
+                                                                           
&r2),
+                                           GNUNET_JSON_spec_end ()};
 
   r1 = GNUNET_TIME_UNIT_SECONDS;
   j = GNUNET_JSON_from_time_rel (r1);
   GNUNET_assert (NULL != j);
-  GNUNET_assert (GNUNET_OK ==
-                GNUNET_JSON_parse (j, s1, NULL, NULL));
-  GNUNET_assert (r1.rel_value_us ==
-                r2.rel_value_us);
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (j, s1, NULL, NULL));
+  GNUNET_assert (r1.rel_value_us == r2.rel_value_us);
   json_decref (j);
 
   r1 = GNUNET_TIME_UNIT_FOREVER_REL;
   j = GNUNET_JSON_from_time_rel (r1);
   GNUNET_assert (NULL != j);
-  GNUNET_assert (GNUNET_OK ==
-                GNUNET_JSON_parse (j, s2, NULL, NULL));
-  GNUNET_assert (r1.rel_value_us ==
-                r2.rel_value_us);
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (j, s2, NULL, NULL));
+  GNUNET_assert (r1.rel_value_us == r2.rel_value_us);
   json_decref (j);
   return 0;
 }
@@ -123,24 +111,19 @@ test_raw ()
   unsigned int i;
   json_t *j;
 
-  for (i=0;i<=256;i++)
+  for (i = 0; i <= 256; i++)
   {
     char blob2[256];
-    struct GNUNET_JSON_Specification spec[] = {
-      GNUNET_JSON_spec_fixed (NULL, blob2, i),
-      GNUNET_JSON_spec_end()
-    };
+    struct GNUNET_JSON_Specification spec[] = {GNUNET_JSON_spec_fixed (NULL,
+                                                                       blob2,
+                                                                       i),
+                                               GNUNET_JSON_spec_end ()};
 
     memset (blob, i, i);
     j = GNUNET_JSON_from_data (blob, i);
     GNUNET_assert (NULL != j);
-    GNUNET_assert (GNUNET_OK ==
-                  GNUNET_JSON_parse (j, spec,
-                                      NULL, NULL));
-    GNUNET_assert (0 ==
-                  memcmp (blob,
-                          blob2,
-                          i));
+    GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (j, spec, NULL, NULL));
+    GNUNET_assert (0 == memcmp (blob, blob2, i));
   }
   return 0;
 }
@@ -156,16 +139,12 @@ test_rsa ()
 {
   struct GNUNET_CRYPTO_RsaPublicKey *pub;
   struct GNUNET_CRYPTO_RsaPublicKey *pub2;
-  struct GNUNET_JSON_Specification pspec[] = {
-    GNUNET_JSON_spec_rsa_public_key (NULL, &pub2),
-    GNUNET_JSON_spec_end()
-  };
+  struct GNUNET_JSON_Specification pspec[] =
+    {GNUNET_JSON_spec_rsa_public_key (NULL, &pub2), GNUNET_JSON_spec_end ()};
   struct GNUNET_CRYPTO_RsaSignature *sig;
   struct GNUNET_CRYPTO_RsaSignature *sig2;
-  struct GNUNET_JSON_Specification sspec[] = {
-    GNUNET_JSON_spec_rsa_signature (NULL, &sig2),
-    GNUNET_JSON_spec_end()
-  };
+  struct GNUNET_JSON_Specification sspec[] =
+    {GNUNET_JSON_spec_rsa_signature (NULL, &sig2), GNUNET_JSON_spec_end ()};
   struct GNUNET_CRYPTO_RsaPrivateKey *priv;
   struct GNUNET_HashCode msg;
   json_t *jp;
@@ -174,22 +153,13 @@ test_rsa ()
   priv = GNUNET_CRYPTO_rsa_private_key_create (1024);
   pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv);
   memset (&msg, 42, sizeof (msg));
-  sig = GNUNET_CRYPTO_rsa_sign_fdh (priv,
-                                    &msg);
+  sig = GNUNET_CRYPTO_rsa_sign_fdh (priv, &msg);
   GNUNET_assert (NULL != (jp = GNUNET_JSON_from_rsa_public_key (pub)));
   GNUNET_assert (NULL != (js = GNUNET_JSON_from_rsa_signature (sig)));
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_JSON_parse (jp, pspec,
-                                    NULL, NULL));
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_JSON_parse (js, sspec,
-                                    NULL, NULL));
-  GNUNET_break (0 ==
-               GNUNET_CRYPTO_rsa_signature_cmp (sig,
-                                                sig2));
-  GNUNET_break (0 ==
-               GNUNET_CRYPTO_rsa_public_key_cmp (pub,
-                                                 pub2));
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (jp, pspec, NULL, NULL));
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (js, sspec, NULL, NULL));
+  GNUNET_break (0 == GNUNET_CRYPTO_rsa_signature_cmp (sig, sig2));
+  GNUNET_break (0 == GNUNET_CRYPTO_rsa_public_key_cmp (pub, pub2));
   GNUNET_CRYPTO_rsa_signature_free (sig);
   GNUNET_CRYPTO_rsa_signature_free (sig2);
   GNUNET_CRYPTO_rsa_private_key_free (priv);
@@ -210,40 +180,33 @@ test_boolean ()
   int b1;
   int b2;
   json_t *json;
-  struct GNUNET_JSON_Specification pspec[] = {
-    GNUNET_JSON_spec_boolean ("b1", &b1),
-    GNUNET_JSON_spec_boolean ("b2", &b2),
-    GNUNET_JSON_spec_end()
-  };
+  struct GNUNET_JSON_Specification pspec[] = {GNUNET_JSON_spec_boolean ("b1",
+                                                                        &b1),
+                                              GNUNET_JSON_spec_boolean ("b2",
+                                                                        &b2),
+                                              GNUNET_JSON_spec_end ()};
 
   json = json_object ();
   json_object_set_new (json, "b1", json_true ());
   json_object_set_new (json, "b2", json_false ());
 
-  GNUNET_assert (GNUNET_OK ==
-                 GNUNET_JSON_parse (json, pspec,
-                                    NULL, NULL));
+  GNUNET_assert (GNUNET_OK == GNUNET_JSON_parse (json, pspec, NULL, NULL));
 
   GNUNET_assert (GNUNET_YES == b1);
   GNUNET_assert (GNUNET_NO == b2);
 
   json_object_set_new (json, "b1", json_integer (42));
 
-  GNUNET_assert (GNUNET_OK !=
-                 GNUNET_JSON_parse (json, pspec,
-                                    NULL, NULL));
+  GNUNET_assert (GNUNET_OK != GNUNET_JSON_parse (json, pspec, NULL, NULL));
 
   return 0;
 }
 
 
 int
-main(int argc,
-     const char *const argv[])
+main (int argc, const char *const argv[])
 {
-  GNUNET_log_setup ("test-json",
-                   "WARNING",
-                   NULL);
+  GNUNET_log_setup ("test-json", "WARNING", NULL);
   if (0 != test_abs_time ())
     return 1;
   if (0 != test_rel_time ())
diff --git a/src/json/test_json_mhd.c b/src/json/test_json_mhd.c
new file mode 100644
index 000000000..665fd140e
--- /dev/null
+++ b/src/json/test_json_mhd.c
@@ -0,0 +1,151 @@
+/*
+  This file is part of GNUnet
+  (C) 2019 GNUnet e.V.
+
+  GNUnet is free software: you can redistribute it and/or modify it
+  under the terms of the GNU Affero General Public License as published
+  by the Free Software Foundation, either version 3 of the License,
+  or (at your option) any later version.
+
+  GNUnet is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  Affero General Public License for more details.
+
+  You should have received a copy of the GNU Affero General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+     SPDX-License-Identifier: AGPL3.0-or-later
+*/
+
+/**
+ * @file json/test_json_mhd.c
+ * @brief Tests for JSON MHD integration functions
+ * @author Christian Grothoff <address@hidden>
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_json_lib.h"
+#include "gnunet_curl_lib.h"
+
+#define MAX_SIZE 1024 * 1024
+
+static json_t *bigj;
+
+static int global_ret;
+
+
+static int
+access_handler_cb (void *cls,
+                   struct MHD_Connection *connection,
+                   const char *url,
+                   const char *method,
+                   const char *version,
+                   const char *upload_data,
+                   size_t *upload_data_size,
+                   void **con_cls)
+{
+  int ret;
+  json_t *json;
+  struct MHD_Response *resp;
+
+  json = NULL;
+  ret = GNUNET_JSON_post_parser (MAX_SIZE,
+                                 connection,
+                                 con_cls,
+                                 upload_data,
+                                 upload_data_size,
+                                 &json);
+  switch (ret)
+  {
+  case GNUNET_JSON_PR_SUCCESS:
+    if (json_equal (bigj, json))
+    {
+      global_ret = 0;
+    }
+    else
+    {
+      GNUNET_break (0);
+      global_ret = 6;
+    }
+    json_decref (json);
+    resp = MHD_create_response_from_buffer (2, "OK", MHD_RESPMEM_PERSISTENT);
+    ret = MHD_queue_response (connection, MHD_HTTP_OK, resp);
+    MHD_destroy_response (resp);
+    return ret;
+  case GNUNET_JSON_PR_CONTINUE:
+    return MHD_YES;
+  case GNUNET_JSON_PR_OUT_OF_MEMORY:
+    GNUNET_break (0);
+    global_ret = 3;
+    break;
+  case GNUNET_JSON_PR_REQUEST_TOO_LARGE:
+    GNUNET_break (0);
+    global_ret = 4;
+    break;
+  case GNUNET_JSON_PR_JSON_INVALID:
+    GNUNET_break (0);
+    global_ret = 5;
+    break;
+  }
+  GNUNET_break (0);
+  return MHD_NO;
+}
+
+
+int
+main (int argc, const char *const argv[])
+{
+  struct MHD_Daemon *daemon;
+  uint16_t port;
+  CURL *easy;
+  char *url;
+  long post_data_size;
+  void *post_data;
+
+  GNUNET_log_setup ("test-json-mhd", "WARNING", NULL);
+  global_ret = 2;
+  daemon = MHD_start_daemon (MHD_USE_DUAL_STACK | MHD_USE_AUTO_INTERNAL_THREAD,
+                             0,
+                             NULL,
+                             NULL,
+                             &access_handler_cb,
+                             NULL,
+                             MHD_OPTION_END);
+  if (NULL == daemon)
+    return 77;
+  bigj = json_object ();
+  json_object_set_new (bigj, "test", json_string ("value"));
+  for (unsigned int i = 0; i < 1000; i++)
+  {
+    char tmp[5];
+
+    GNUNET_snprintf (tmp, sizeof (tmp), "%u", i);
+    json_object_set_new (bigj, tmp, json_string (tmp));
+  }
+  post_data = json_dumps (bigj, JSON_INDENT (2));
+  post_data_size = strlen (post_data);
+
+  port = MHD_get_daemon_info (daemon, MHD_DAEMON_INFO_BIND_PORT)->port;
+  easy = curl_easy_init ();
+  GNUNET_asprintf (&url, "http://localhost:%u/";, (unsigned int) port);
+  curl_easy_setopt (easy, CURLOPT_VERBOSE, 1);
+  curl_easy_setopt (easy, CURLOPT_URL, url);
+  curl_easy_setopt (easy, CURLOPT_POST, 1);
+  curl_easy_setopt (easy, CURLOPT_POSTFIELDS, post_data);
+  curl_easy_setopt (easy, CURLOPT_POSTFIELDSIZE, post_data_size);
+  if (0 != curl_easy_perform (easy))
+  {
+    GNUNET_break (0);
+    MHD_stop_daemon (daemon);
+    GNUNET_free (url);
+    json_decref (bigj);
+    return 1;
+  }
+  MHD_stop_daemon (daemon);
+  GNUNET_free (url);
+  json_decref (bigj);
+  return global_ret;
+}
+
+/* end of test_json_mhd.c */

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]