added a custom list/peer-/hashmap structure for use in rps
[oweals/gnunet.git] / src / rps / test_service_rps_peers.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C)
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 3, 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., 51 Franklin Street, Fifth Floor,
18      Boston, MA 02110-1301, USA.
19 */
20 /**
21  * @file rps/test_service_rps_peers.c
22  * @brief testcase for gnunet-service-rps_peers.c
23  */
24 #include <gnunet/platform.h>
25 #include "gnunet-service-rps_peers.h"
26
27 #define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (NULL != c_m) CustomPeerMap_destroy(c_m); return 1; }
28 #define CHECK(c) { if (! (c)) ABORT(); }
29
30
31 static int
32 check ()
33 {
34
35   struct CustomPeerMap *c_m;
36   struct GNUNET_PeerIdentity k1;
37   struct GNUNET_PeerIdentity k2;
38   int j;
39
40   CHECK (NULL != (c_m = CustomPeerMap_create (4)));
41   memset (&k1, 0, sizeof (k1));
42   memset (&k2, 1, sizeof (k2));
43   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
44   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k2));
45   CHECK (GNUNET_NO == CustomPeerMap_remove_peer (c_m, &k1));
46   CHECK (GNUNET_NO == CustomPeerMap_remove_peer (c_m, &k2));
47   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 0));
48   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 0));
49   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 1));
50   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 1));
51   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 0));
52   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 0));
53   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 1));
54   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 1));
55   CustomPeerMap_clear (c_m); /* See if assertions trigger */
56   CHECK (0 == CustomPeerMap_size (c_m));
57
58   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
59   CHECK (1 == CustomPeerMap_size (c_m));
60   /*ret = GNUNET_CONTAINER_multipeermap_get (m, &k1);
61   GNUNET_assert (ret != NULL);
62   CHECK (0 == strcmp ("v1", ret));*/
63   CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k1));
64   CHECK (1 == CustomPeerMap_size (c_m));
65   CHECK (GNUNET_YES == CustomPeerMap_contains_peer (c_m, &k1));
66   CHECK (GNUNET_OK == CustomPeerMap_remove_peer (c_m, &k1));
67   CHECK (0 == CustomPeerMap_size (c_m));
68   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
69   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k2));
70
71   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
72   for (j = 0; j < 16; j++)
73   {
74     CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k1));
75   }
76   CHECK (1 == CustomPeerMap_size (c_m));
77   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k2));
78   for (j = 0; j < 16; j++)
79   {
80     CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k2));
81   }
82   CHECK (2 == CustomPeerMap_size (c_m));
83
84   /* iterate */
85   for (j = 0; j < CustomPeerMap_size (c_m); j++)
86   {
87     CHECK (NULL != CustomPeerMap_get_peer_by_index (c_m, j));
88   }
89   CHECK ((0 == memcmp (CustomPeerMap_get_peer_by_index (c_m, 0),
90                        &k1, sizeof (k1))));
91   CHECK ((0 == memcmp (CustomPeerMap_get_peer_by_index (c_m, 1),
92                        &k2, sizeof (k2))));
93   CHECK (GNUNET_OK == CustomPeerMap_remove_peer (c_m, &k1));
94   CHECK (1 == CustomPeerMap_size (c_m));
95   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
96   CHECK (GNUNET_YES == CustomPeerMap_contains_peer (c_m, &k2));
97   CHECK (NULL != CustomPeerMap_get_peer_by_index (c_m, 0));
98
99   CustomPeerMap_destroy (c_m);
100
101   return 0;
102 }
103
104
105 int
106 main (int argc, char *argv[])
107 {
108   GNUNET_log_setup ("test_service_rps_peers", 
109                     "WARNING",
110                     NULL);
111   return check ();
112 }
113
114 /* end of test_rps_api.c */