/*
This file is part of GNUnet
Copyright (C) 2008, 2009, 2012 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 testing/test_testing_sharedservices.c
* @brief test case for testing service sharing among peers started by testing
* @author Sree Harsha Totakura
*/
#include "platform.h"
#include "gnunet_util_lib.h"
#include "gnunet_testing_lib.h"
#define LOG(kind, ...) \
GNUNET_log (kind, __VA_ARGS__)
#define NUM_PEERS 4
/**
* The status of the test
*/
int status;
/**
* The testing context
*/
struct TestingContext
{
/**
* The testing system
*/
struct GNUNET_TESTING_System *system;
/**
* The peer which has been started by the testing system
*/
struct GNUNET_TESTING_Peer *peers[NUM_PEERS];
/**
* The running configuration of the peer
*/
struct GNUNET_CONFIGURATION_Handle *cfg;
};
/**
* Task for shutdown
*
* @param cls the testing context
*/
static void
do_shutdown (void *cls)
{
struct TestingContext *test_ctx = cls;
struct GNUNET_TESTING_Peer *peer;
unsigned int cnt;
GNUNET_assert (NULL != test_ctx);
for (cnt = 0; cnt < NUM_PEERS; cnt++)
{
peer = test_ctx->peers[cnt];
if (NULL == peer)
continue;
(void) GNUNET_TESTING_peer_stop (peer);
GNUNET_TESTING_peer_destroy (peer);
}
if (NULL != test_ctx->cfg)
GNUNET_CONFIGURATION_destroy (test_ctx->cfg);
if (NULL != test_ctx->system)
GNUNET_TESTING_system_destroy (test_ctx->system, GNUNET_YES);
GNUNET_free (test_ctx);
}
/**
* Main point of test execution
*/
static void
run (void *cls, char *const *args, const char *cfgfile,
const struct GNUNET_CONFIGURATION_Handle *cfg)
{
struct TestingContext *test_ctx;
char *emsg;
struct GNUNET_PeerIdentity id;
struct GNUNET_TESTING_SharedService ss[] = {
{ "peerinfo", cfg, 2 },
{ NULL, NULL, 0 }
};
struct GNUNET_TESTING_Peer *peer;
unsigned int cnt;
test_ctx = GNUNET_new (struct TestingContext);
test_ctx->system =
GNUNET_TESTING_system_create ("test-gnunet-testing",
"127.0.0.1", NULL, ss);
emsg = NULL;
if (NULL == test_ctx->system)
goto end;
test_ctx->cfg = GNUNET_CONFIGURATION_dup (cfg);
for (cnt = 0; cnt < NUM_PEERS; cnt++)
{
peer = GNUNET_TESTING_peer_configure (test_ctx->system,
test_ctx->cfg,
0, &id, &emsg);
if (NULL == peer)
{
if (NULL != emsg)
printf ("Test failed upon error: %s", emsg);
goto end;
}
if (GNUNET_OK != GNUNET_TESTING_peer_start (peer))
{
GNUNET_TESTING_peer_destroy (peer);
goto end;
}
test_ctx->peers[cnt] = peer;
}
status = GNUNET_OK;
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
&do_shutdown, test_ctx);
return;
end:
GNUNET_SCHEDULER_add_now (&do_shutdown, test_ctx);
GNUNET_free (emsg);
}
int
main (int argc, char *argv[])
{
struct GNUNET_GETOPT_CommandLineOption options[] = {
GNUNET_GETOPT_OPTION_END
};
char *const argv2[] = { "test_testing_sharedservices",
"-c", "test_testing_sharedservices.conf",
NULL };
status = GNUNET_SYSERR;
if (GNUNET_OK !=
GNUNET_PROGRAM_run ((sizeof(argv2) / sizeof(char *)) - 1, argv2,
"test_testing_sharedservices",
"test case for testing service sharing among peers started by testing",
options, &run, NULL))
return 1;
return (GNUNET_OK == status) ? 0 : 3;
}
/* end of test_testing_sharedservices.c */