gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-twister] 02/02: implement char-flipper.


From: gnunet
Subject: [GNUnet-SVN] [taler-twister] 02/02: implement char-flipper.
Date: Thu, 22 Mar 2018 16:42:04 +0100

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

marcello pushed a commit to branch master
in repository twister.

commit 8fbd7583ac35df5e8f8af5088544e5360b59ed77
Author: Marcello Stanisci <address@hidden>
AuthorDate: Thu Mar 22 16:41:45 2018 +0100

    implement char-flipper.
---
 src/test/test_twister.sh            |  2 +-
 src/twister/taler-twister-service.c | 75 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 75 insertions(+), 2 deletions(-)

diff --git a/src/test/test_twister.sh b/src/test/test_twister.sh
index 60c7a36..dae8697 100755
--- a/src/test/test_twister.sh
+++ b/src/test/test_twister.sh
@@ -46,7 +46,7 @@ flip_field=$(echo $flip_body | tr -d '"}{' | awk -F, '{print 
$2}' | awk -F: '{pr
 
 # check if pointed object was flipped.
 if test "$flip_field" = 'today'; then
-  printf "Response body (%s) has not been flipped as expected\n" "$flip_body"
+  printf "Response body (%s vs. %s) has not been flipped as expected\n" 
"$flip_body" "$flip_field"
   kill $web_server_pid
   kill $twister_service_pid
   exit 1
diff --git a/src/twister/taler-twister-service.c 
b/src/twister/taler-twister-service.c
index bed6f2a..d3687e2 100644
--- a/src/twister/taler-twister-service.c
+++ b/src/twister/taler-twister-service.c
@@ -895,7 +895,12 @@ walk_response_object (const char *path,
   last_token = strrchr (path_dup, '.') + 1;
   /* Give first nondelim char. */
   token = strtok (path_dup, ".");
-  element = hr->json;
+
+  if (NULL == (element = hr->json))
+  {
+    TALER_LOG_ERROR ("Attempting to walk a non JSON response!\n");
+    return GNUNET_SYSERR;
+  }
 
   while (last_token != token)
   {
@@ -1014,6 +1019,67 @@ modify_object (struct MHD_Connection *con,
     return;
 }
 
+static void
+flip_object (struct MHD_Connection *con,
+             struct HttpRequest *hr)
+{
+  char *target;
+  json_t *parent;
+
+  if (GNUNET_OK != walk_response_object (flip_path,
+                                         &parent,
+                                         &target,
+                                         hr))
+    return;
+
+  /* here, element is the parent of the element to be deleted. */
+  int ret_flip = -1;
+  json_t *child = NULL;
+  const char *current_value;
+  char *current_value_flip;
+  uint32_t index;
+
+  if (json_is_object (parent))
+    child = json_object_get (parent, target);
+
+  if (json_is_array (parent))
+    child = json_array_get
+      (parent, (unsigned int) strtoul (target,
+                                       NULL,
+                                       10));
+
+  /* json walker is such that at this point the
+   * child's parent is always a object or array.  */
+  GNUNET_assert (NULL != child);
+
+  current_value = json_string_value (child);
+
+  #warning When free this?
+  current_value_flip = GNUNET_strdup (current_value);
+  index = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
+                                    strlen (current_value_flip));
+
+  /* flip the LSB.  */
+  current_value_flip[index] ^= 1;
+  if (0 == json_string_set
+      (child,
+       (const char *) current_value_flip))
+    ret_flip = GNUNET_YES;
+
+  if (-1 == ret_flip)
+    TALER_LOG_WARNING ("Could not flip '%s'\n", target);
+  else
+    TALER_LOG_INFO ("Flipped to %s, from %s\n",
+                    current_value_flip,
+                    current_value);
+
+  flip_path[0] = '\0';
+  GNUNET_free (target);
+  return;
+}
+
+
+
 /**
  * Delete object within the proxied response.
  * Always queues a response; only deletes the object if it is
@@ -1351,6 +1417,13 @@ create_response (void *cls,
     hack_response_code = 0; /* reset for next request */
   }
 
+  if ('\0' != flip_path[0])
+  {
+    TALER_LOG_DEBUG ("Will flip path: %s\n",
+                     flip_path);
+    flip_object (con, hr);
+  }
+
   if ('\0' != delete_path[0])
   {
     TALER_LOG_DEBUG ("Will delete path: %s\n",

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



reply via email to

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