glitch in the license text detected by hyazinthe, thank you!
[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 /**
16  * @file rps/test_service_rps_custommap.c
17  * @brief testcase for gnunet-service-rps_peers.c
18  */
19 #include <platform.h>
20 #include "gnunet-service-rps_custommap.h"
21
22 #define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); if (NULL != c_m) CustomPeerMap_destroy(c_m); return 1; }
23 #define CHECK(c) { if (! (c)) ABORT(); }
24
25
26 static int
27 check ()
28 {
29
30   struct CustomPeerMap *c_m;
31   struct GNUNET_PeerIdentity k1;
32   struct GNUNET_PeerIdentity k2;
33   int j;
34
35   CHECK (NULL != (c_m = CustomPeerMap_create (4)));
36   memset (&k1, 0, sizeof (k1));
37   memset (&k2, 1, sizeof (k2));
38   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
39   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k2));
40   CHECK (GNUNET_NO == CustomPeerMap_remove_peer (c_m, &k1));
41   CHECK (GNUNET_NO == CustomPeerMap_remove_peer (c_m, &k2));
42   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 0));
43   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 0));
44   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 1));
45   CHECK (GNUNET_NO == CustomPeerMap_remove_peer_by_index (c_m, 1));
46   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 0));
47   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 0));
48   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 1));
49   CHECK (NULL == CustomPeerMap_get_peer_by_index (c_m, 1));
50   CustomPeerMap_clear (c_m); /* See if assertions trigger */
51   CHECK (0 == CustomPeerMap_size (c_m));
52
53   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
54   CHECK (1 == CustomPeerMap_size (c_m));
55   CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k1));
56   CHECK (1 == CustomPeerMap_size (c_m));
57   CHECK (GNUNET_YES == CustomPeerMap_contains_peer (c_m, &k1));
58   CHECK (GNUNET_OK == CustomPeerMap_remove_peer (c_m, &k1));
59   CHECK (0 == CustomPeerMap_size (c_m));
60   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
61   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k2));
62
63   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
64   CHECK (1 == CustomPeerMap_size (c_m));
65   for (j = 0; j < 16; j++)
66   {
67     CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k1));
68   }
69   CHECK (1 == CustomPeerMap_size (c_m));
70   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k2));
71   CHECK (2 == CustomPeerMap_size (c_m));
72   for (j = 0; j < 16; j++)
73   {
74     CHECK (GNUNET_NO == CustomPeerMap_put (c_m, &k2));
75   }
76   CHECK (2 == CustomPeerMap_size (c_m));
77
78   /* iterate */
79   for (j = 0; j < CustomPeerMap_size (c_m); j++)
80   {
81     CHECK (NULL != CustomPeerMap_get_peer_by_index (c_m, j));
82   }
83   CHECK ((0 == memcmp (CustomPeerMap_get_peer_by_index (c_m, 0),
84                        &k1, sizeof (k1))));
85   CHECK ((0 == memcmp (CustomPeerMap_get_peer_by_index (c_m, 1),
86                        &k2, sizeof (k2))));
87   CHECK (GNUNET_OK == CustomPeerMap_remove_peer (c_m, &k1));
88   CHECK (1 == CustomPeerMap_size (c_m));
89   CHECK (GNUNET_NO == CustomPeerMap_contains_peer (c_m, &k1));
90   CHECK (GNUNET_YES == CustomPeerMap_contains_peer (c_m, &k2));
91   CHECK (NULL != CustomPeerMap_get_peer_by_index (c_m, 0));
92
93   CustomPeerMap_clear (c_m);
94   CHECK (0 == CustomPeerMap_size (c_m));
95
96   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k1));
97   CHECK (1 == CustomPeerMap_size (c_m));
98   CHECK (GNUNET_OK == CustomPeerMap_put (c_m, &k2));
99   CHECK (2 == CustomPeerMap_size (c_m));
100   CustomPeerMap_clear (c_m);
101   CHECK (0 == CustomPeerMap_size (c_m));
102
103   CustomPeerMap_destroy (c_m);
104
105   return 0;
106 }
107
108
109 int
110 main (int argc, char *argv[])
111 {
112   GNUNET_log_setup ("test_service_rps_peers", 
113                     "WARNING",
114                     NULL);
115   return check ();
116 }
117
118 /* end of test_service_rps_custommap.c */