fix
[oweals/gnunet.git] / src / rps / test_service_rps_view.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_view.c
20  * @brief testcase for gnunet-service-rps_view.c
21  */
22 #include <platform.h>
23 #include "gnunet-service-rps_view.h"
24
25 #define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); View_destroy(); return 1; }
26 #define CHECK(c) { if (! (c)) ABORT(); }
27
28
29 static int
30 check ()
31 {
32   struct GNUNET_PeerIdentity k1;
33   struct GNUNET_PeerIdentity k2;
34   const struct GNUNET_PeerIdentity *array;
35   int j;
36
37   View_create (3);
38   memset (&k1, 0, sizeof (k1));
39   memset (&k2, 1, sizeof (k2));
40   CHECK (GNUNET_NO == View_contains_peer (&k1));
41   CHECK (GNUNET_NO == View_contains_peer (&k2));
42   CHECK (GNUNET_NO == View_remove_peer (&k1));
43   CHECK (GNUNET_NO == View_remove_peer (&k2));
44   CHECK (NULL == View_get_peer_by_index (0));
45   CHECK (NULL == View_get_peer_by_index (1));
46   View_clear (); /* See if assertions trigger */
47   CHECK (0 == View_size ());
48
49   CHECK (GNUNET_OK == View_put (&k1));
50   CHECK (1 == View_size ());
51   CHECK (GNUNET_NO == View_put (&k1));
52   CHECK (1 == View_size ());
53   CHECK (GNUNET_YES == View_contains_peer (&k1));
54   CHECK (GNUNET_OK == View_remove_peer (&k1));
55   CHECK (0 == View_size ());
56   CHECK (GNUNET_NO == View_contains_peer (&k1));
57   CHECK (GNUNET_NO == View_contains_peer (&k2));
58
59   CHECK (GNUNET_OK == View_put (&k1));
60   CHECK (1 == View_size ());
61   for (j = 0; j < 16; j++)
62   {
63     CHECK (GNUNET_NO == View_put (&k1));
64   }
65   CHECK (1 == View_size ());
66   CHECK (GNUNET_OK == View_put (&k2));
67   CHECK (2 == View_size ());
68   for (j = 0; j < 16; j++)
69   {
70     CHECK (GNUNET_NO == View_put (&k2));
71   }
72   CHECK (2 == View_size ());
73
74   /* iterate */
75   for (j = 0; j < View_size (); j++)
76   {
77     CHECK (NULL != View_get_peer_by_index (j));
78   }
79   CHECK ((0 == memcmp (View_get_peer_by_index (0),
80                        &k1, sizeof (k1))));
81   CHECK ((0 == memcmp (View_get_peer_by_index (1),
82                        &k2, sizeof (k2))));
83   CHECK (GNUNET_OK == View_remove_peer (&k1));
84   CHECK (1 == View_size ());
85   CHECK (GNUNET_NO == View_contains_peer (&k1));
86   CHECK (GNUNET_YES == View_contains_peer (&k2));
87   CHECK (NULL != View_get_peer_by_index (0));
88   CHECK (NULL == View_get_peer_by_index (1));
89
90   View_clear ();
91   CHECK (0 == View_size ());
92
93   CHECK (GNUNET_OK == View_put (&k1));
94   CHECK (1 == View_size ());
95   CHECK (GNUNET_YES == View_contains_peer (&k1));
96   CHECK (GNUNET_OK == View_put (&k2));
97   CHECK (2 == View_size ());
98   CHECK (GNUNET_YES == View_contains_peer (&k2));
99   array = View_get_as_array ();
100   CHECK (0 == memcmp (&array[0], &k1, sizeof (k1)));
101   CHECK (0 == memcmp (&array[1], &k2, sizeof (k2)));
102   View_clear ();
103   CHECK (0 == View_size ());
104
105   /*View_change_len () */
106   CHECK (GNUNET_OK == View_put (&k1));
107   CHECK (GNUNET_OK == View_put (&k2));
108   CHECK (2 == View_size ());
109   View_change_len (4);
110   CHECK (2 == View_size ());
111   CHECK (GNUNET_YES == View_contains_peer (&k1));
112   CHECK (GNUNET_YES == View_contains_peer (&k2));
113   array = View_get_as_array ();
114   CHECK (0 == memcmp (&array[0], &k1, sizeof (k1)));
115   CHECK (0 == memcmp (&array[1], &k2, sizeof (k2)));
116   View_change_len (1);
117   CHECK (1 == View_size ());
118   CHECK (GNUNET_YES == View_contains_peer (&k1));
119   CHECK (GNUNET_NO  == View_contains_peer (&k2));
120   array = View_get_as_array ();
121   CHECK (0 == memcmp (&array[0], &k1, sizeof (k1)));
122   View_clear ();
123   CHECK (0 == View_size ());
124
125   View_destroy ();
126
127   return 0;
128 }
129
130
131 int
132 main (int argc, char *argv[])
133 {
134   GNUNET_log_setup ("test_service_rps_peers", 
135                     "WARNING",
136                     NULL);
137   return check ();
138 }
139
140 /* end of test_service_rps_view.c */