003523087a17cbb1985116ca4727249601a39b75
[oweals/gnunet.git] / src / rps / test_service_rps_custommap.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 it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your 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      Affero General Public License for more details.
14
15      You should have received a copy of the GNU Affero General Public License
16      along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 */
18 /**
19  * @file rps/test_service_rps_custommap.c
20  * @brief testcase for gnunet-service-rps_peers.c
21  */
22 #include <platform.h>
23 #include "gnunet-service-rps_custommap.h"
24
25 #define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (NULL != c_m) CustomPeerMap_destroy(c_m); return 1; }
26 #define CHECK(c) { if (! (c)) ABORT(); }
27
28
29 static int
30 check ()
31 {
32
33   struct CustomPeerMap *c_m;
34   struct GNUNET_PeerIdentity k1;
35   struct GNUNET_PeerIdentity k2;
36   int j;
37
38   CHECK (NULL != (c_m = CustomPeerMap_create (4)));
39   memset (&k1, 0, sizeof (k1));
40   memset (&k2, 1, sizeof (k2));
41   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
42   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k2));
43   CHECK (GNUNET_NO == CustomPeerMap_remove_peer (c_m, &k1));
44   CHECK (GNUNET_NO == CustomPeerMap_remove_peer (c_m, &k2));
45   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 0));
46   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 0));
47   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 1));
48   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 1));
49   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 0));
50   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 0));
51   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 1));
52   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 1));
53   CustomPeerMap_clear (c_m); /* See if assertions trigger */
54   CHECK (0 == CustomPeerMap_size (c_m));
55
56   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
57   CHECK (1 == CustomPeerMap_size (c_m));
58   CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k1));
59   CHECK (1 == CustomPeerMap_size (c_m));
60   CHECK (GNUNET_YES == CustomPeerMap_contains_peer (c_m, &k1));
61   CHECK (GNUNET_OK == CustomPeerMap_remove_peer (c_m, &k1));
62   CHECK (0 == CustomPeerMap_size (c_m));
63   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
64   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k2));
65
66   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
67   CHECK (1 == CustomPeerMap_size (c_m));
68   for (j = 0; j < 16; j++)
69   {
70     CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k1));
71   }
72   CHECK (1 == CustomPeerMap_size (c_m));
73   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k2));
74   CHECK (2 == CustomPeerMap_size (c_m));
75   for (j = 0; j < 16; j++)
76   {
77     CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k2));
78   }
79   CHECK (2 == CustomPeerMap_size (c_m));
80
81   /* iterate */
82   for (j = 0; j < CustomPeerMap_size (c_m); j++)
83   {
84     CHECK (NULL != CustomPeerMap_get_peer_by_index (c_m, j));
85   }
86   CHECK ((0 == memcmp (CustomPeerMap_get_peer_by_index (c_m, 0),
87                        &k1, sizeof (k1))));
88   CHECK ((0 == memcmp (CustomPeerMap_get_peer_by_index (c_m, 1),
89                        &k2, sizeof (k2))));
90   CHECK (GNUNET_OK == CustomPeerMap_remove_peer (c_m, &k1));
91   CHECK (1 == CustomPeerMap_size (c_m));
92   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
93   CHECK (GNUNET_YES == CustomPeerMap_contains_peer (c_m, &k2));
94   CHECK (NULL != CustomPeerMap_get_peer_by_index (c_m, 0));
95
96   CustomPeerMap_clear (c_m);
97   CHECK (0 == CustomPeerMap_size (c_m));
98
99   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
100   CHECK (1 == CustomPeerMap_size (c_m));
101   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k2));
102   CHECK (2 == CustomPeerMap_size (c_m));
103   CustomPeerMap_clear (c_m);
104   CHECK (0 == CustomPeerMap_size (c_m));
105
106   CustomPeerMap_destroy (c_m);
107
108   return 0;
109 }
110
111
112 int
113 main (int argc, char *argv[])
114 {
115   (void) argc;
116   (void) argv;
117
118   GNUNET_log_setup ("test_service_rps_peers", 
119                     "WARNING",
120                     NULL);
121   return check ();
122 }
123
124 /* end of test_service_rps_custommap.c */