[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis] 02/03: worked on truth upload
From: |
gnunet |
Subject: |
[taler-anastasis] 02/03: worked on truth upload |
Date: |
Tue, 24 Nov 2020 11:19:01 +0100 |
This is an automated email from the git hooks/post-receive script.
dennis-neufeld pushed a commit to branch master
in repository anastasis.
commit 56af39d5ccdd84d73840c984f1976029c2e45d49
Author: Dennis Neufeld <dennis.neufeld@students.bfh.ch>
AuthorDate: Tue Nov 24 10:04:34 2020 +0100
worked on truth upload
---
src/cli/test_anastasis_reducer_enter_secret.sh | 59 ++++++++++++++++-
src/include/anastasis_redux.h | 4 +-
src/lib/anastasis_api_backup_redux.c | 87 +++++++++++++++++++++-----
3 files changed, 130 insertions(+), 20 deletions(-)
diff --git a/src/cli/test_anastasis_reducer_enter_secret.sh
b/src/cli/test_anastasis_reducer_enter_secret.sh
index 5165b31..61a7dab 100755
--- a/src/cli/test_anastasis_reducer_enter_secret.sh
+++ b/src/cli/test_anastasis_reducer_enter_secret.sh
@@ -21,11 +21,15 @@ function cleanup()
do
kill $n 2> /dev/null || true
done
- rm -f $SFILE
+ rm -f $TFILE $CONF_1 $CONF_2 $CONF_3 $CONF_4
wait
}
# Install cleanup handler (except for kill -9)
+CONF_1=`mktemp test_reducerXXXXXX_1.conf`
+CONF_2=`mktemp test_reducerXXXXXX_2.conf`
+CONF_3=`mktemp test_reducerXXXXXX_3.conf`
+CONF_4=`mktemp test_reducerXXXXXX_4.conf`
SFILE=test_reducer_stateSESTATE
TFILE=`mktemp test_reducer_stateXXXXXX`
@@ -36,6 +40,59 @@ echo -n "Testing for jq"
jq -h > /dev/null || exit_skip "jq required"
echo " FOUND"
+echo -n "Testing for anastasis-httpd"
+anastasis-httpd -h >/dev/null </dev/null || exit_skip " MISSING"
+echo " FOUND"
+
+# Name of the Postgres database we will use for the script.
+# Will be dropped, do NOT use anything that might be used
+# elsewhere
+TARGET_DB=anastasischeck
+
+# Configuration file will be edited, so we create one
+# from the template.
+cp test_anastasis_reducer.conf $CONF_1
+cp test_anastasis_reducer_1.conf $CONF_2
+cp test_anastasis_reducer_2.conf $CONF_3
+cp test_anastasis_reducer_3.conf $CONF_4
+
+# reset database
+dropdb $TARGET_DB >/dev/null 2>/dev/null || true
+createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
+
+# Launch services
+echo "Launching anastasis service"
+anastasis-httpd -c $CONF_1 2> anastasis-httpd_1.log &
+anastasis-httpd -c $CONF_2 2> anastasis-httpd_2.log &
+anastasis-httpd -c $CONF_3 2> anastasis-httpd_3.log &
+anastasis-httpd -c $CONF_4 2> anastasis-httpd_4.log &
+
+# Wait for anastasis service to be available
+for n in `seq 1 50`
+do
+ echo -n "."
+ sleep 0.1
+ OK=0
+ # anastasis_01
+ wget http://localhost:8086/ -o /dev/null -O /dev/null >/dev/null ||
continue
+ # anastasis_02
+ wget http://localhost:8087/ -o /dev/null -O /dev/null >/dev/null ||
continue
+ # anastasis_03
+ wget http://localhost:8088/ -o /dev/null -O /dev/null >/dev/null ||
continue
+ # anastasis_04
+ wget http://localhost:8089/ -o /dev/null -O /dev/null >/dev/null ||
continue
+ OK=1
+ break
+done
+
+if [ 1 != $OK ]
+then
+ exit_skip "Failed to launch anastasis services"
+fi
+
+echo " ANASTASIS SETUP DONE"
+echo " "
+echo " "
echo " "
echo "Beginning with actual reducer test"
diff --git a/src/include/anastasis_redux.h b/src/include/anastasis_redux.h
index 143c967..c7129b8 100644
--- a/src/include/anastasis_redux.h
+++ b/src/include/anastasis_redux.h
@@ -52,7 +52,7 @@ enum ANASTASIS_GenericState
REDUX_STATE (POLICIES_REVIEWING) \
REDUX_STATE (SECRET_EDITING) \
REDUX_STATE (POLICIES_PAYING) \
- REDUX_STATE (FINISHED)
+ REDUX_STATE (BACKUP_FINISHED)
#define GENERATE_BACKUP_ENUM(ENUM) ANASTASIS_BACKUP_STATE_ ## ENUM,
@@ -68,7 +68,7 @@ enum ANASTASIS_BackupState
REDUX_STATE (CHALLENGE_SELECTING) \
REDUX_STATE (CHALLENGE_PAYING) \
REDUX_STATE (CHALLENGE_SOLVING) \
- REDUX_STATE (FINISHED)
+ REDUX_STATE (RECOVERY_FINISHED)
#define GENERATE_RECOVERY_ENUM(ENUM) ANASTASIS_RECOVERY_STATE_ ## ENUM,
diff --git a/src/lib/anastasis_api_backup_redux.c
b/src/lib/anastasis_api_backup_redux.c
index 37e0dae..e08736e 100644
--- a/src/lib/anastasis_api_backup_redux.c
+++ b/src/lib/anastasis_api_backup_redux.c
@@ -115,9 +115,14 @@ struct TruthUploadState
struct ANASTASIS_TruthUpload *tuo;
/**
- * Closure for the payment callback.
+ * Action callback.
*/
- void *tpc_cls;
+ ANASTASIS_ActionCallback cb;
+
+ /**
+ * Closure for action callback.
+ */
+ void *cb_cls;
/**
* Truth object.
@@ -1045,6 +1050,34 @@ done_policy_review (json_t *state,
}
+/**
+ * Check if all uploads passed (status code 204).
+ *
+ * @param uploads json array representing uploads (truth, recovery document)
+ * @return true if all uploads passed, else false
+ */
+static bool
+check_uploads (json_t *uploads)
+{
+ GNUNET_assert (json_is_array (uploads));
+ size_t index;
+ json_t *upload;
+ bool pass = true;
+
+ json_array_foreach (uploads, index, upload)
+ {
+ int status = json_integer_value (json_object_get (upload,
+ "status"));
+ if (status != 204)
+ {
+ pass = false;
+ break;
+ }
+ }
+ return pass;
+}
+
+
/**
* Upload information
* caller MUST free 't' using ANASTASIS_truth_free()
@@ -1061,19 +1094,34 @@ truth_upload_cb (void *cls,
if (NULL == t)
{
- GNUNET_break (0);
+ ANASTASIS_redux_fail (tus->cb,
+ tus->cb_cls,
+ TALER_EC_ANASTASIS_REDUCER_ACTION_INVALID, // FIXME:
Error Code
+ "enter_secret or pay");
return;
}
- json_t *truth_upload = json_array_get (
- json_object_get (tus->state,
- "truth_uploads"),
- tus->index);
+ json_t *uploads = json_object_get (tus->state,
+ "truth_uploads");
+ json_t *truth_upload = json_array_get (uploads,
+ tus->index);
GNUNET_assert (NULL != truth_upload);
GNUNET_assert (0 ==
json_object_set (truth_upload,
"status",
json_integer ((json_int_t) 204)));
tus->truth = t;
+
+
+ if (check_uploads (uploads))
+ {
+ set_state (tus->state,
+ ANASTASIS_backup_state_to_string (
+ ANASTASIS_BACKUP_STATE_BACKUP_FINISHED));
+ }
+
+ tus->cb (tus->cb_cls,
+ ANASTASIS_EC_NONE,
+ tus->state);
}
@@ -1107,9 +1155,19 @@ truth_payment_cb (void *cls,
json_object_set (truth_upload,
"pay_url",
json_string (taler_pay_url)));
+ set_state (tus->state,
+ ANASTASIS_backup_state_to_string (
+ ANASTASIS_BACKUP_STATE_POLICIES_PAYING));
+ tus->cb (tus->cb_cls,
+ ANASTASIS_EC_NONE,
+ tus->state);
+ return;
}
+ ANASTASIS_redux_fail (tus->cb,
+ tus->cb_cls,
+ ec,
+ "enter_secret or pay");
// FIXME: Payment handling
- return;
}
@@ -1199,6 +1257,8 @@ enter_secret (json_t *state,
tus->id_data = json_object_get (state,
"identity_attributes");
tus->index = truth_index;
+ tus->cb = cb;
+ tus->cb_cls = cb_cls;
if (0 == strcmp ("question", tus->method))
{
@@ -1233,20 +1293,13 @@ enter_secret (json_t *state,
tus->truth_data,
tus->truth_data_size,
&truth_payment_cb,
- tus->tpc_cls,
+ tus,
&truth_upload_cb,
tus);
}
}
// try uploading recovery document
- set_state (state,
- ANASTASIS_backup_state_to_string (
- ANASTASIS_BACKUP_STATE_POLICIES_PAYING));
-
- cb (cb_cls,
- ANASTASIS_EC_NONE,
- state);
return NULL;
}
@@ -1405,7 +1458,7 @@ ANASTASIS_backup_action_ (struct GNUNET_CURL_Context *ctx,
&pay_policy
},
{
- ANASTASIS_BACKUP_STATE_FINISHED,
+ ANASTASIS_BACKUP_STATE_BACKUP_FINISHED,
"back",
&back_finished
},
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.