summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2018-03-22 14:52:10 +0100
committerMarcello Stanisci <stanisci.m@gmail.com>2018-03-22 14:52:10 +0100
commit600c003c034fac5b15866a24ab5274192ede8840 (patch)
treeca74bc8ffe8be72084f0408bcdba0f7527b4b7f5
parent60a030c66cbbec85a0718e845729dc9cd0aa4f83 (diff)
downloadtwister-600c003c034fac5b15866a24ab5274192ede8840.tar.gz
twister-600c003c034fac5b15866a24ab5274192ede8840.tar.bz2
twister-600c003c034fac5b15866a24ab5274192ede8840.zip
adding flip command, boilerplate (including failing test)
-rw-r--r--src/include/taler_twister_service.h19
-rwxr-xr-xsrc/test/test_twister.sh15
-rw-r--r--src/twister/taler-twister-service.c28
-rw-r--r--src/twister/taler-twister.c21
-rw-r--r--src/twister/twister.h28
-rw-r--r--src/twister/twister_api.c40
6 files changed, 149 insertions, 2 deletions
diff --git a/src/include/taler_twister_service.h b/src/include/taler_twister_service.h
index 486baf2..7adf40e 100644
--- a/src/include/taler_twister_service.h
+++ b/src/include/taler_twister_service.h
@@ -96,6 +96,25 @@ TALER_TWISTER_modify_path (struct TALER_TWISTER_Handle *h,
void *cb_cls);
/**
+ * Randomly flip a character into the JSON string
+ * object pointed to by @a path.
+ *
+ * @param h twister instance to control
+ * @param path object-like notation to point the string
+ * object where we seek a character to flip.
+ * @param cb function to call once twister is ready
+ * @param cb_cls closure for @a cb
+ * @return operation handle (to possibly abort)
+ */
+struct TALER_TWISTER_Operation *
+TALER_TWISTER_flip_path
+ (struct TALER_TWISTER_Handle *h,
+ const char *path,
+ GNUNET_SCHEDULER_TaskCallback cb,
+ void *cb_cls);
+
+
+/**
* Change the next response code to @a new_rc.
*
* @param h twister instance to control
diff --git a/src/test/test_twister.sh b/src/test/test_twister.sh
index 1413a0d..60c7a36 100755
--- a/src/test/test_twister.sh
+++ b/src/test/test_twister.sh
@@ -39,11 +39,24 @@ if test '{"hello":[{"this":"browser!"}],"when":"today"}' = \
fi
+# flip string.
+taler-twister -c ./test_twister.conf -f "when"
+flip_body=$(curl -s ${TWISTER_URL})
+flip_field=$(echo $flip_body | tr -d '"}{' | awk -F, '{print $2}' | awk -F: '{print $2}')
+
+# 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"
+ kill $web_server_pid
+ kill $twister_service_pid
+ exit 1
+fi
+
# delete object.
taler-twister -c ./test_twister.conf -d "hello.0"
emptied_body=$(curl -s ${TWISTER_URL})
-# check response body has been emptied
+# check if pointed object was deleted.
if ! test '{"hello":[],"when":"today"}' = "$emptied_body"; then
printf "Response body (%s) has not been emptied as expected\n" \
"$emptied_body"
diff --git a/src/twister/taler-twister-service.c b/src/twister/taler-twister-service.c
index 8eda2a6..bed6f2a 100644
--- a/src/twister/taler-twister-service.c
+++ b/src/twister/taler-twister-service.c
@@ -253,6 +253,12 @@ static unsigned int hack_response_code;
static char delete_path[TWISTER_PATH_LENGTH] = {'\0'};
/**
+ * Will point to a JSON string object which will get a
+ * character flipped.
+ */
+static char flip_path[TWISTER_PATH_LENGTH] = {'\0'};
+
+/**
* Will point to a JSON object to modify
*/
static char modify_path[TWISTER_PATH_LENGTH] = {'\0'};
@@ -1872,6 +1878,21 @@ handle_modify_path (void *cls,
send_acknowledgement (c);
}
+/**
+ * Control handler for deleting JSON objects
+ *
+ * @param cls message queue for sending replies
+ * @param src received message
+ */
+static void
+handle_flip_path (void *cls,
+ const struct TWISTER_FlipPath *src)
+{
+ struct GNUNET_SERVICE_Client *c = cls;
+
+ strcpy (flip_path, src->path);
+ send_acknowledgement (c);
+}
/**
* Control handler for deleting JSON objects
@@ -1889,7 +1910,6 @@ handle_delete_path (void *cls,
send_acknowledgement (c);
}
-
/**
* Control handler for changing the response code
*
@@ -1942,6 +1962,12 @@ GNUNET_SERVICE_MAIN
struct TWISTER_DeletePath,
NULL),
+ GNUNET_MQ_hd_fixed_size (flip_path,
+ TWISTER_MESSAGE_TYPE_FLIP_PATH,
+ struct TWISTER_FlipPath,
+ NULL),
+
+
GNUNET_MQ_handler_end ());
diff --git a/src/twister/taler-twister.c b/src/twister/taler-twister.c
index ce39104..3ff4a04 100644
--- a/src/twister/taler-twister.c
+++ b/src/twister/taler-twister.c
@@ -63,6 +63,11 @@ static int malform_response;
static int malform_upload;
/**
+ * Path to the string json object to flip.
+ */
+static char *flip_path;
+
+/**
* Path to the object to modify.
*/
static char *modify_path;
@@ -175,6 +180,14 @@ run (void *cls,
/* TODO: add other operations here */
+ if ( (NULL != flip_path) &&
+ (NULL != TALER_TWISTER_flip_path
+ (tth,
+ flip_path,
+ &handle_acknowledgement,
+ NULL)) )
+ num_ops++;
+
if ( (NULL != delete_path) &&
(NULL != TALER_TWISTER_delete_path
(tth,
@@ -230,6 +243,14 @@ main (int argc,
&modify_path),
GNUNET_GETOPT_option_string
+ ('f',
+ "flip",
+ "PATH",
+ gettext_noop
+ ("Flip a char in the _string_ object pointed by PATH.\n"),
+ &flip_path),
+
+ GNUNET_GETOPT_option_string
('V',
"value",
"VALUE",
diff --git a/src/twister/twister.h b/src/twister/twister.h
index c1ebeef..3e943f7 100644
--- a/src/twister/twister.h
+++ b/src/twister/twister.h
@@ -51,6 +51,8 @@
#define TWISTER_MESSAGE_TYPE_MALFORM_UPLOAD 6
+#define TWISTER_MESSAGE_TYPE_FLIP_PATH 7
+
GNUNET_NETWORK_STRUCT_BEGIN
struct TWISTER_Malform
{
@@ -92,6 +94,32 @@ GNUNET_NETWORK_STRUCT_BEGIN
* standard deviation of known estimates.
*
*/
+struct TWISTER_FlipPath
+{
+ /**
+ * Type: #TWISTER_MESSAGE_TYPE_DELETE_PATH
+ */
+ struct GNUNET_MessageHeader header;
+
+ /**
+ * The new response code, in big endian.
+ */
+ char path[TWISTER_PATH_LENGTH];
+};
+
+GNUNET_NETWORK_STRUCT_END
+
+
+
+GNUNET_NETWORK_STRUCT_BEGIN
+
+/**
+ * Network size estimate sent from the service
+ * to clients. Contains the current size estimate
+ * (or 0 if none has been calculated) and the
+ * standard deviation of known estimates.
+ *
+ */
struct TWISTER_DeletePath
{
/**
diff --git a/src/twister/twister_api.c b/src/twister/twister_api.c
index 477b774..aa96e6f 100644
--- a/src/twister/twister_api.c
+++ b/src/twister/twister_api.c
@@ -276,6 +276,46 @@ TALER_TWISTER_malform
/**
+ * Randomly flip a character into the JSON string
+ * object pointed to by @a path.
+ *
+ * @param h twister instance to control
+ * @param path object-like notation to point the string
+ * object where we seek a character to flip.
+ * @param cb function to call once twister is ready
+ * @param cb_cls closure for @a cb
+ * @return operation handle (to possibly abort)
+ */
+struct TALER_TWISTER_Operation *
+TALER_TWISTER_flip_path
+ (struct TALER_TWISTER_Handle *h,
+ const char *path,
+ GNUNET_SCHEDULER_TaskCallback cb,
+ void *cb_cls)
+{
+ struct TALER_TWISTER_Operation *op;
+ struct GNUNET_MQ_Envelope *env;
+ struct TWISTER_FlipPath *src; //FIXME 'src' right name?
+
+ op = GNUNET_new (struct TALER_TWISTER_Operation);
+ op->h = h;
+ op->cb = cb;
+ op->cb_cls = cb_cls;
+ GNUNET_CONTAINER_DLL_insert_tail (h->op_head,
+ h->op_tail,
+ op);
+ /* Prepare *env*elope. */
+ env = GNUNET_MQ_msg
+ (src, TWISTER_MESSAGE_TYPE_FLIP_PATH);
+ /* Put data into the envelope. */
+ strcpy (src->path, path);
+ /* Send message. */
+ GNUNET_MQ_send (h->mq, env);
+ return op;
+}
+
+
+/**
* Delete the object pointed to by @a path.
*
* @param h twister instance to control