2 This file is part of GNUnet.
3 Copyright (C) 2009 GNUnet e.V.
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.
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.
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/>.
18 SPDX-License-Identifier: AGPL3.0-or-later
21 * @file util/test_peer.c
22 * @brief testcase for peer.c
23 * @author Safey Mohammed
27 #include "gnunet_util_lib.h"
30 #define NUMBER_OF_PEERS 10
33 * A list of Peer ID's to play with
35 static struct GNUNET_PeerIdentity pidArr[NUMBER_OF_PEERS];
43 for (i = 0; i < NUMBER_OF_PEERS; i++)
45 gcry_randomize (&pidArr[i],
46 sizeof (struct GNUNET_PeerIdentity),
48 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
49 "Peer %d: %s\n", i, GNUNET_i2s (&pidArr[i]));
59 struct GNUNET_PeerIdentity res;
60 struct GNUNET_PeerIdentity zero;
61 GNUNET_PEER_Id ids[] = { 1, 2, 3 };
63 GNUNET_assert (0 == GNUNET_PEER_intern (NULL));
64 /* Insert Peers into PeerEntry table and hashmap */
65 for (i = 0; i < NUMBER_OF_PEERS; i++)
67 pid = GNUNET_PEER_intern (&pidArr[i]);
70 FPRINTF (stderr, "%s", "Unexpected Peer ID returned by intern function\n");
75 /* Referencing the first 3 peers once again */
76 for (i = 0; i < 3; i++)
78 pid = GNUNET_PEER_intern (&pidArr[i]);
81 FPRINTF (stderr, "%s", "Unexpected Peer ID returned by intern function\n");
86 /* Dereferencing the first 3 peers once [decrementing their reference count] */
87 GNUNET_PEER_decrement_rcs (ids, 3);
89 /* re-referencing the first 3 peers using the change_rc function */
90 for (i = 1; i <= 3; i++)
91 GNUNET_PEER_change_rc (i, 1);
93 /* Removing the second Peer from the PeerEntry hash map */
94 GNUNET_PEER_change_rc (2, -2);
96 /* convert the pid of the first PeerEntry into that of the third */
97 GNUNET_PEER_resolve (1, &res);
98 GNUNET_assert (0 == memcmp (&res, &pidArr[0], sizeof (res)));
101 * Attempt to convert pid = 0 (which is reserved)
102 * into a peer identity object, the peer identity memory
103 * is expected to be set to zero
105 memset (&zero, 0, sizeof (struct GNUNET_PeerIdentity));
106 GNUNET_log_skip (1, GNUNET_YES);
107 GNUNET_PEER_resolve (0, &res);
108 GNUNET_assert (0 == memcmp (&res, &zero, sizeof (res)));
110 /* Removing peer entries 1 and 3 from table using the list decrement function */
111 /* If count = 0, nothing should be done whatsoever */
112 GNUNET_PEER_decrement_rcs (ids, 0);
115 GNUNET_PEER_decrement_rcs (ids, 2);
116 GNUNET_PEER_decrement_rcs (ids, 2);
127 GNUNET_log_setup ("test-peer", "ERROR", NULL);
128 for (i = 0; i < 1; i++)
130 generatePeerIdList ();
137 /* end of test_peer.c */