/* This file is part of GNUnet. Copyright (C) 2014 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 . SPDX-License-Identifier: AGPL3.0-or-later */ /** * @file secretsharing/test_secretsharing_api.c * @brief testcase for the secretsharing api */ #include "platform.h" #include "gnunet_util_lib.h" #include "gnunet_testing_lib.h" #include "gnunet_secretsharing_service.h" static int success; static struct GNUNET_SECRETSHARING_Session *keygen; static void secret_ready_cb (void *cls, struct GNUNET_SECRETSHARING_Share *my_share, struct GNUNET_SECRETSHARING_PublicKey *public_key, unsigned int num_ready_peers, const struct GNUNET_PeerIdentity *ready_peers) { keygen = NULL; if (num_ready_peers == 1) success = 1; // FIXME: check that our share is valid, which we can do as there's only // one peer. GNUNET_log (GNUNET_ERROR_TYPE_INFO, "secret ready, shutting down\n"); GNUNET_SCHEDULER_shutdown (); } static void handle_shutdown (void *cls) { if (NULL != keygen) { GNUNET_SECRETSHARING_session_destroy (keygen); keygen = NULL; } } static void run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg, struct GNUNET_TESTING_Peer *peer) { struct GNUNET_HashCode session_id; struct GNUNET_TIME_Absolute start; struct GNUNET_TIME_Absolute deadline; GNUNET_SCHEDULER_add_shutdown (&handle_shutdown, NULL); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "testing secretsharing api\n"); GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &session_id); start = GNUNET_TIME_absolute_get (); deadline = GNUNET_TIME_absolute_add (start, GNUNET_TIME_UNIT_SECONDS); keygen = GNUNET_SECRETSHARING_create_session (cfg, 0, NULL, /* only the local peer */ &session_id, start, deadline, 1, secret_ready_cb, NULL); } int main (int argc, char **argv) { int ret; ret = GNUNET_TESTING_peer_run ("test_secretsharing_api", "test_secretsharing.conf", &run, NULL); if (0 != ret) return ret; return (GNUNET_YES == success) ? 0 : 1; }