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