0f4a227d3cdf32a330b7238484be903b1a9398f1
[oweals/gnunet.git] / src / util / test_peer.c
1 /*
2      This file is part of GNUnet.
3      (C) 2009 Christian Grothoff (and other contributing authors)
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 2, 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., 59 Temple Place - Suite 330,
18      Boston, MA 02111-1307, USA.
19 */
20 /**
21  * @file util/test_peer.c
22  * @brief testcase for peer.c
23  * @author Safey Mohammed
24  */
25
26 #include "platform.h"
27 #include "gnunet_crypto_lib.h"
28 #include "gnunet_peer_lib.h"
29
30 #define NUMBER_OF_PEERS 10
31 /*#define DEBUG*/
32
33 /**
34  * A list of Peer ID's to play with 
35  */
36 static struct GNUNET_PeerIdentity pidArr[NUMBER_OF_PEERS];
37
38
39 static void generatePeerIdList()
40 {
41   int i;
42
43   for (i = 0; i < NUMBER_OF_PEERS; i++ ) {
44     GNUNET_CRYPTO_hash_create_random (GNUNET_CRYPTO_QUALITY_WEAK, &pidArr[i].hashPubKey);    
45 #ifdef DEBUG
46     printf ("Peer %d: %s\n", 
47             i,
48             GNUNET_i2s (&pidArr[i]));  
49 #endif
50   }
51 }
52
53
54 static int check()
55 {
56   int i;
57   GNUNET_PEER_Id pid;
58         
59   /* Insert Peers into PeerEntry table and hashmap */
60   for (i=0; i < NUMBER_OF_PEERS; i++) {
61     pid = GNUNET_PEER_intern(&pidArr[i]);
62     if ( pid != (i + 1)) {
63       fprintf(stderr, "Unexpected Peer ID returned by intern function \n");
64       return 1;
65     }
66   }
67         
68   /* Referencing the first 3 peers once again */
69   for (i = 0; i < 3; i++) {
70     pid = GNUNET_PEER_intern(&pidArr[i]);
71     if (pid != (i + 1)) {
72       fprintf(stderr, "Unexpcted Peer ID returned by intern function \n");
73       return 1;
74     }
75   }
76         
77   /* Dereferencing the first 3 peers once [decrementing their reference count] */
78   {
79     GNUNET_PEER_Id ids[] = {1, 2, 3};
80     GNUNET_PEER_decrement_rcs(ids, 3);
81   }
82   
83   /* re-referencing the first 3 peers using the change_rc function */
84   for (i = 0; i < 3; i++) {
85     GNUNET_PEER_change_rc(i, 1);
86   }
87   
88   /* Removing the second Peer from the PeerEntry hash map */
89   GNUNET_PEER_change_rc(2, -2);
90   
91   /* convert the pid of the first PeerEntry into that of the third */
92   GNUNET_PEER_resolve(1, &pidArr[3]);
93         
94   return 0;
95 }
96
97
98 int main()
99 {
100   GNUNET_log_setup ("test-peer", "ERROR", NULL);
101   generatePeerIdList();
102   return check();
103 }
104
105 /* end of test_peer.c */