myriad changes
[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   CHECK(ret);
79   ret = api->insert_topology(0);
80   ret = api->insert_extended_topology(&p1, &p2);
81   ret = api->insert_extended_topology(&p3, &p4);
82   ret = api->update_topology(101);
83   CHECK(ret);
84   ret = api->insert_dhtkey (&dhtkeyuid, &k1);
85   ret = api->insert_dhtkey (&dhtkeyuid, &k2);
86   CHECK(ret);
87   ret = api->insert_query (&sqlqueryuid, internaluid, 2, 4, 0, &p2, &k1);
88   ret =
89     api->insert_route (&sqlrouteuid, sqlqueryuid, 1, 1, DHTLOG_GET, &p1, &k2,
90                        &p4, &p3);
91   ret =
92     api->insert_route (&sqlrouteuid, sqlqueryuid, 2, 0, DHTLOG_PUT, &p3, &k1,
93                        &p4, &p2);
94   ret =
95     api->insert_route (&sqlrouteuid, sqlqueryuid, 3, 1, DHTLOG_ROUTE, &p3, &k2,
96                        &p2, NULL);
97   ret =
98     api->insert_route (&sqlrouteuid, sqlqueryuid, 4, 7, DHTLOG_ROUTE, &p3, &k2,
99                        NULL, NULL);
100   sleep (1);
101   ret = api->insert_stat(&p1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17);
102   ret = api->insert_stat(&p2, 12, 23, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
103   CHECK(ret);
104   ret = api->update_trial (trialuid, 787);
105   CHECK(ret);
106   return 0;
107 }
108
109
110
111 static void
112 run (void *cls,
113      struct GNUNET_SCHEDULER_Handle *sched,
114      char *const *args,
115      const char *cfgfile,
116      const struct GNUNET_CONFIGURATION_Handle *cfg)
117 {
118   struct GNUNET_DHTLOG_Handle *api;
119   ok = 0;
120   api = GNUNET_DHTLOG_connect (cfg);
121
122   if (api == NULL)
123     {
124       ok = 1;
125       return;
126     }
127   ok = test(api);
128
129   GNUNET_DHTLOG_disconnect(api);
130 }
131
132
133 static int
134 check ()
135 {
136   char *const argv[] = { "test-dhtlog-api",
137     "-c",
138     "test_dhtlog_data.conf",
139 #if VERBOSE
140     "-L", "DEBUG",
141 #endif
142     NULL
143   };
144   struct GNUNET_GETOPT_CommandLineOption options[] = {
145     GNUNET_GETOPT_OPTION_END
146   };
147   GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
148                       argv, "test-dhtlog-api", "nohelp",
149                       options, &run, NULL);
150   if (ok != 0)
151     fprintf (stderr, "Test failed with error code: %d\n", ok);
152   return ok;
153 }
154
155
156 int
157 main (int argc, char *argv[])
158 {
159   int ret;
160
161   GNUNET_log_setup ("test-datacache-api",
162 #if VERBOSE
163                     "DEBUG",
164 #else
165                     "WARNING",
166 #endif
167                     NULL);
168   ret = check ();
169
170   return ret;
171 }
172
173 /* end of test_dhtlog.c */