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