013-global-discovery.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. // SPDX-FileCopyrightText: 2019-2024 Ivan Baidakou
  3. #include "test-utils.h"
  4. #include "proto/discovery_support.h"
  5. #include "utils/error_code.h"
  6. #include <boost/filesystem.hpp>
  7. namespace sys = boost::system;
  8. namespace fs = boost::filesystem;
  9. using namespace syncspirit::proto;
  10. using namespace syncspirit::utils;
  11. using namespace syncspirit::test;
  12. TEST_CASE("parse valid announce sample 1", "[support]") {
  13. std::string body =
  14. R""(
  15. {"seen":"2020-10-13T18:41:37.02287354Z",
  16. "addresses":["quic://192.168.100.15:22000",
  17. "quic://81.52.93.44:22000",
  18. "quic://81.52.93.44:22000",
  19. "relay://188.68.32.45:22067/?id=O4LHPKG-O6BQ36W-MUOVKTI-MKAVHSC-Y7EC3U4-DHNLEDE-MZBJWQN-UIX6QAL&pingInterval=1m0s&networkTimeout=2m0s&sessionLimitBps=0&globalLimitBps=0&statusAddr=22070",
  20. "tcp://192.168.100.15:22000",
  21. "tcp://81.52.93.44:22000",
  22. "tcp://81.52.93.44:22000",
  23. "tcp://81.52.93.44:55386",
  24. "tcp://81.52.93.44:55386"]}
  25. )"";
  26. http::response<http::string_body> res;
  27. res.result(200);
  28. res.body() = body;
  29. auto r = parse_contact(res);
  30. REQUIRE((bool)r);
  31. auto &o = r.value();
  32. CHECK(o.size() == 9);
  33. CHECK(o[0]->buffer() == "quic://192.168.100.15:22000");
  34. }
  35. TEST_CASE("parse valid announce sample 2", "[support]") {
  36. std::string body =
  37. R""(
  38. {
  39. "seen": "2023-10-31T09:38:31Z",
  40. "addresses": [
  41. "relay://93.31.21.95:443/?id=QUJWY5Q-YUKKWZF-OWOJ66C-NWAPXYC-LWU4IPC-TO6UBKB-67R5JV5-BILNNA7"
  42. ]
  43. }
  44. )"";
  45. http::response<http::string_body> res;
  46. res.result(200);
  47. res.body() = body;
  48. auto r = parse_contact(res);
  49. REQUIRE((bool)r);
  50. auto &o = r.value();
  51. CHECK(o.size() == 1);
  52. CHECK(o[0]->buffer() ==
  53. "relay://93.31.21.95:443/?id=QUJWY5Q-YUKKWZF-OWOJ66C-NWAPXYC-LWU4IPC-TO6UBKB-67R5JV5-BILNNA7");
  54. }
  55. TEST_CASE("malformed url", "[support]") {
  56. http::response<http::string_body> res;
  57. res.result(200);
  58. SECTION("malformed url") {
  59. res.body() = R""( {"seen":"2020-10-13T18:41:37.02287354Z", "addresses":["q uic://192.168.100.15:22000" ]})"";
  60. auto r = parse_contact(res);
  61. CHECK(r.error() == make_error_code(error_code_t::malformed_url));
  62. }
  63. SECTION("malformed json") {
  64. res.body() = R""( {"seen":"2020-10-13T18:41:37.02287354Z" "addresses":["qic://192.168.100.15:22000" ]})"";
  65. auto r = parse_contact(res);
  66. CHECK(r.error() == make_error_code(error_code_t::malformed_json));
  67. }
  68. SECTION("incorrect json") {
  69. res.body() = R""( {"seen":"2020-10-13T18:41:37.02287354Z", "Addresses":["quic://192.168.100.15:22000" ]})"";
  70. auto r = parse_contact(res);
  71. CHECK(r.error() == make_error_code(error_code_t::incorrect_json));
  72. }
  73. SECTION("malformed date") {
  74. res.body() = R""( {"seen":"2020-99-13T18:41:37.02287354Z", "addresses":["qic://192.168.100.15:22000" ]})"";
  75. auto r = parse_contact(res);
  76. CHECK(r.error() == make_error_code(error_code_t::malformed_date));
  77. }
  78. SECTION("wrong code") {
  79. res.result(500);
  80. auto r = parse_contact(res);
  81. CHECK(r.error() == make_error_code(error_code_t::unexpected_response_code));
  82. }
  83. SECTION("not found") {
  84. res.result(404);
  85. auto r = parse_contact(res);
  86. REQUIRE((bool)r);
  87. CHECK(r.value().empty());
  88. }
  89. }