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