1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/*
This file is part of GNUnet.
(C) 2006 Christian Grothoff (and other contributing authors)
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2, 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
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
/*
* @file applications/dstore/dstore_test.c
* @brief Test for the dstore implementations.
* @author Nils Durner
*/
#include "platform.h"
#include "gnunet_util.h"
#include "gnunet_protocols.h"
#include "gnunet_dstore_service.h"
#include "core.h"
#define ASSERT(x) do { if (! (x)) { printf("Error at %s:%d\n", __FILE__, __LINE__); goto FAILURE;} } while (0)
static int error;
static int
checkIt (const GNUNET_HashCode * key,
unsigned int type, unsigned int size, const char *data, void *cls)
{
if (size != sizeof (GNUNET_HashCode))
{
printf ("ERROR: Invalid size\n");
error = 2;
}
if (0 != memcmp (data, cls, size))
{
printf ("ERROR: Invalid data\n");
error = 3;
}
return GNUNET_OK;
}
/**
* Add testcode here!
*/
static int
test (GNUNET_Dstore_ServiceAPI * api)
{
GNUNET_HashCode k;
GNUNET_HashCode n;
GNUNET_CronTime exp;
unsigned int i;
exp = GNUNET_get_time () + 5 * GNUNET_CRON_MINUTES;
memset (&k, 0, sizeof (GNUNET_HashCode));
for (i = 0; i < 100; i++)
{
GNUNET_hash (&k, sizeof (GNUNET_HashCode), &n);
ASSERT (GNUNET_OK == api->put (&k,
i % 2,
exp, sizeof (GNUNET_HashCode),
(const char *) &n));
k = n;
}
memset (&k, 0, sizeof (GNUNET_HashCode));
for (i = 0; i < 100; i++)
{
GNUNET_hash (&k, sizeof (GNUNET_HashCode), &n);
ASSERT (1 == api->get (&k, i % 2, &checkIt, &n));
k = n;
}
return GNUNET_OK;
FAILURE:
return GNUNET_SYSERR;
}
#define TEST_DB "/tmp/GNUnet_dstore_test/"
int
main (int argc, char *argv[])
{
GNUNET_Dstore_ServiceAPI *api;
int ok;
struct GNUNET_GC_Configuration *cfg;
struct GNUNET_CronManager *cron;
GNUNET_disable_entropy_gathering ();
cfg = GNUNET_GC_create ();
if (-1 == GNUNET_GC_parse_configuration (cfg, "check.conf"))
{
GNUNET_GC_free (cfg);
return -1;
}
cron = GNUNET_cron_create (NULL);
GNUNET_CORE_init (NULL, cfg, cron, NULL);
api = GNUNET_CORE_request_service ("dstore");
if (api != NULL)
{
ok = test (api);
GNUNET_CORE_release_service (api);
}
else
ok = GNUNET_SYSERR;
GNUNET_CORE_done ();
if (ok == GNUNET_SYSERR)
return 1;
return error;
}
/* end of dstore_test.c */
|