test_service_rps_view.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. This file is part of GNUnet.
  3. Copyright (C)
  4. GNUnet is free software: you can redistribute it and/or modify it
  5. under the terms of the GNU Affero General Public License as published
  6. by the Free Software Foundation, either version 3 of the License,
  7. or (at your option) any later version.
  8. GNUnet is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. Affero General Public License for more details.
  12. You should have received a copy of the GNU Affero General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. SPDX-License-Identifier: AGPL3.0-or-later
  15. */
  16. /**
  17. * @file rps/test_service_rps_view.c
  18. * @brief testcase for gnunet-service-rps_view.c
  19. */
  20. #include <platform.h>
  21. #include "gnunet-service-rps_view.h"
  22. #define ABORT() { fprintf (stderr, "Error at %s:%d\n", __FILE__, __LINE__); \
  23. View_destroy (view); return 1; }
  24. #define CHECK(c) { if (! (c)) ABORT (); }
  25. static int
  26. check ()
  27. {
  28. struct View *view;
  29. struct GNUNET_PeerIdentity k1;
  30. struct GNUNET_PeerIdentity k2;
  31. const struct GNUNET_PeerIdentity *array;
  32. unsigned int j;
  33. view = View_create (3);
  34. memset (&k1, 0, sizeof(k1));
  35. memset (&k2, 1, sizeof(k2));
  36. CHECK (GNUNET_NO == View_contains_peer (view, &k1));
  37. CHECK (GNUNET_NO == View_contains_peer (view, &k2));
  38. CHECK (GNUNET_NO == View_remove_peer (view, &k1));
  39. CHECK (GNUNET_NO == View_remove_peer (view, &k2));
  40. CHECK (NULL == View_get_peer_by_index (view, 0));
  41. CHECK (NULL == View_get_peer_by_index (view, 1));
  42. View_clear (view); /* See if assertions trigger */
  43. CHECK (0 == View_size (view));
  44. CHECK (GNUNET_OK == View_put (view, &k1));
  45. CHECK (1 == View_size (view));
  46. CHECK (GNUNET_NO == View_put (view, &k1));
  47. CHECK (1 == View_size (view));
  48. CHECK (GNUNET_YES == View_contains_peer (view, &k1));
  49. CHECK (GNUNET_OK == View_remove_peer (view, &k1));
  50. CHECK (0 == View_size (view));
  51. CHECK (GNUNET_NO == View_contains_peer (view, &k1));
  52. CHECK (GNUNET_NO == View_contains_peer (view, &k2));
  53. CHECK (GNUNET_OK == View_put (view, &k1));
  54. CHECK (1 == View_size (view));
  55. for (j = 0; j < 16; j++)
  56. {
  57. CHECK (GNUNET_NO == View_put (view, &k1));
  58. }
  59. CHECK (1 == View_size (view));
  60. CHECK (GNUNET_OK == View_put (view, &k2));
  61. CHECK (2 == View_size (view));
  62. for (j = 0; j < 16; j++)
  63. {
  64. CHECK (GNUNET_NO == View_put (view, &k2));
  65. }
  66. CHECK (2 == View_size (view));
  67. /* iterate */
  68. for (j = 0; j < View_size (view); j++)
  69. {
  70. CHECK (NULL != View_get_peer_by_index (view, j));
  71. }
  72. CHECK ((0 == memcmp (View_get_peer_by_index (view, 0),
  73. &k1, sizeof(k1))));
  74. CHECK ((0 == memcmp (View_get_peer_by_index (view, 1),
  75. &k2, sizeof(k2))));
  76. CHECK (GNUNET_OK == View_remove_peer (view, &k1));
  77. CHECK (1 == View_size (view));
  78. CHECK (GNUNET_NO == View_contains_peer (view, &k1));
  79. CHECK (GNUNET_YES == View_contains_peer (view, &k2));
  80. CHECK (NULL != View_get_peer_by_index (view, 0));
  81. CHECK (NULL == View_get_peer_by_index (view, 1));
  82. View_clear (view);
  83. CHECK (0 == View_size (view));
  84. CHECK (GNUNET_OK == View_put (view, &k1));
  85. CHECK (1 == View_size (view));
  86. CHECK (GNUNET_YES == View_contains_peer (view, &k1));
  87. CHECK (GNUNET_OK == View_put (view, &k2));
  88. CHECK (2 == View_size (view));
  89. CHECK (GNUNET_YES == View_contains_peer (view, &k2));
  90. array = View_get_as_array (view);
  91. CHECK (0 == memcmp (&array[0], &k1, sizeof(k1)));
  92. CHECK (0 == memcmp (&array[1], &k2, sizeof(k2)));
  93. View_clear (view);
  94. CHECK (0 == View_size (view));
  95. /*View_change_len () */
  96. CHECK (GNUNET_OK == View_put (view, &k1));
  97. CHECK (GNUNET_OK == View_put (view, &k2));
  98. CHECK (2 == View_size (view));
  99. View_change_len (view, 4);
  100. CHECK (2 == View_size (view));
  101. CHECK (GNUNET_YES == View_contains_peer (view, &k1));
  102. CHECK (GNUNET_YES == View_contains_peer (view, &k2));
  103. array = View_get_as_array (view);
  104. CHECK (0 == memcmp (&array[0], &k1, sizeof(k1)));
  105. CHECK (0 == memcmp (&array[1], &k2, sizeof(k2)));
  106. View_change_len (view, 1);
  107. CHECK (1 == View_size (view));
  108. CHECK (GNUNET_YES == View_contains_peer (view, &k1));
  109. CHECK (GNUNET_NO == View_contains_peer (view, &k2));
  110. array = View_get_as_array (view);
  111. CHECK (0 == memcmp (&array[0], &k1, sizeof(k1)));
  112. View_clear (view);
  113. CHECK (0 == View_size (view));
  114. View_destroy (view);
  115. return 0;
  116. }
  117. int
  118. main ()
  119. {
  120. GNUNET_log_setup ("test_service_rps_peers",
  121. "WARNING",
  122. NULL);
  123. return check ();
  124. }
  125. /* end of test_service_rps_view.c */