test_service_rps_view.c 4.6 KB

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