dht changes i don't want to have only on my machine
[oweals/gnunet.git] / src / dht / test_dhtlog.c
1 /*
2      This file is part of GNUnet.
3      (C) 2006, 2009 Christian Grothoff (and other contributing authors)
4
5      GNUnet is free software; you can redistribute it and/or modify
6      it under the terms of the GNU General Public License as published
7      by the Free Software Foundation; either version 2, or (at your
8      option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      General Public License for more details.
14
15      You should have received a copy of the GNU General Public License
16      along with GNUnet; see the file COPYING.  If not, write to the
17      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20 /*
21  * @file src/dht/test_dhtlog.c
22  * @brief Test of the dhtlog service
23  * @author Nathan Evans
24  */
25
26 #include "platform.h"
27 #include "gnunet_util_lib.h"
28 #include "gnunet_protocols.h"
29 #include "dhtlog.h"
30
31 #define VERBOSE GNUNET_YES
32
33 static int ok;
34
35 #define CHECK(a) if (a != GNUNET_OK) return a
36 /**
37  * Actual test of the service operations
38  */
39 static int
40 test (struct GNUNET_DHTLOG_Handle * api)
41 {
42   struct GNUNET_PeerIdentity p1;
43   struct GNUNET_PeerIdentity p2;
44   struct GNUNET_PeerIdentity p3;
45   struct GNUNET_PeerIdentity p4;
46
47   GNUNET_HashCode k1;
48   GNUNET_HashCode k2;
49
50   int ret;
51   unsigned int i = 42;
52   unsigned long long trialuid;
53   unsigned long long sqlqueryuid;
54   unsigned long long sqlrouteuid = 0;
55   unsigned long long nodeuid = 0;
56   unsigned long long internaluid = 1010223344LL;
57   unsigned long long dhtkeyuid = 0;
58   memset (&p1.hashPubKey, 3, sizeof (GNUNET_HashCode));
59   memset (&p2.hashPubKey, 4, sizeof (GNUNET_HashCode));
60   memset (&p3.hashPubKey, 5, sizeof (GNUNET_HashCode));
61   memset (&p4.hashPubKey, 6, sizeof (GNUNET_HashCode));
62
63   memset (&k1, 0, sizeof (GNUNET_HashCode));
64   memset (&k2, 1, sizeof (GNUNET_HashCode));
65
66   ret =
67     api->insert_trial (&trialuid, i, 5, 4, 3, 2,
68                        .75, .25, .5, 42, 14,
69                        5, 1, 12, 0, 0, 0, 1, 0, 1,
70                        0, 1, 0, "TEST INSERT TRIAL");
71   CHECK(ret);
72   ret = api->insert_topology(500);
73   CHECK(ret);
74   ret = api->insert_node (&nodeuid, &p1);
75   ret = api->insert_node (&nodeuid, &p2);
76   ret = api->insert_node (&nodeuid, &p3);
77   ret = api->insert_node (&nodeuid, &p4);
78   ret = api->set_malicious(&p1);
79   CHECK(ret);
80   ret = api->insert_topology(0);
81   ret = api->insert_extended_topology(&p1, &p2);
82   ret = api->insert_extended_topology(&p3, &p4);
83   ret = api->update_topology(101);
84   CHECK(ret);
85   ret = api->insert_dhtkey (&dhtkeyuid, &k1);
86   ret = api->insert_dhtkey (&dhtkeyuid, &k2);
87   CHECK(ret);
88   ret = api->insert_query (&sqlqueryuid, internaluid, 2, 4, 0, &p2, &k1);
89   ret =
90     api->insert_route (&sqlrouteuid, sqlqueryuid, 1, 1, DHTLOG_GET, &p1, &k2,
91                        &p4, &p3);
92   ret =
93     api->insert_route (&sqlrouteuid, sqlqueryuid, 2, 0, DHTLOG_PUT, &p3, &k1,
94                        &p4, &p2);
95   ret =
96     api->insert_route (&sqlrouteuid, sqlqueryuid, 3, 1, DHTLOG_ROUTE, &p3, &k2,
97                        &p2, NULL);
98   ret =
99     api->insert_route (&sqlrouteuid, sqlqueryuid, 4, 7, DHTLOG_ROUTE, &p3, &k2,
100                        NULL, NULL);
101   sleep (1);
102   ret = api->insert_stat(&p1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);
103   ret = api->insert_stat(&p2, 12, 23, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
104   CHECK(ret);
105   ret = api->update_trial (trialuid, 787);
106   ret = api->add_generic_stat (&p2, "nonsense", "section", 77765);
107   CHECK(ret);
108   return 0;
109 }
110
111
112
113 static void
114 run (void *cls,
115      struct GNUNET_SCHEDULER_Handle *sched,
116      char *const *args,
117      const char *cfgfile,
118      const struct GNUNET_CONFIGURATION_Handle *cfg)
119 {
120   struct GNUNET_DHTLOG_Handle *api;
121   ok = 0;
122   api = GNUNET_DHTLOG_connect (cfg);
123
124   if (api == NULL)
125     {
126       ok = 1;
127       return;
128     }
129   ok = test(api);
130
131   GNUNET_DHTLOG_disconnect(api);
132 }
133
134
135 static int
136 check ()
137 {
138   char *const argv[] = { "test-dhtlog-api",
139     "-c",
140     "test_dhtlog_data.conf",
141 #if VERBOSE
142     "-L", "DEBUG",
143 #endif
144     NULL
145   };
146   struct GNUNET_GETOPT_CommandLineOption options[] = {
147     GNUNET_GETOPT_OPTION_END
148   };
149   GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
150                       argv, "test-dhtlog-api", "nohelp",
151                       options, &run, NULL);
152   if (ok != 0)
153     fprintf (stderr, "Test failed with error code: %d\n", ok);
154   return ok;
155 }
156
157
158 int
159 main (int argc, char *argv[])
160 {
161   int ret;
162
163   GNUNET_log_setup ("test-datacache-api",
164 #if VERBOSE
165                     "DEBUG",
166 #else
167                     "WARNING",
168 #endif
169                     NULL);
170   ret = check ();
171
172   return ret;
173 }
174
175 /* end of test_dhtlog.c */