013-global-discovery.cpp 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "catch.hpp"
  2. #include "test-utils.h"
  3. #include "proto/discovery_support.h"
  4. #include "utils/error_code.h"
  5. #include <boost/filesystem.hpp>
  6. #include <iostream>
  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", "[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. REQUIRE((bool)o);
  33. auto &c = o.value();
  34. CHECK(c.uris.size() == 9);
  35. CHECK(c.uris[0].full == "quic://192.168.100.15:22000");
  36. }
  37. TEST_CASE("malformed url", "[support]") {
  38. http::response<http::string_body> res;
  39. res.result(200);
  40. SECTION("malformed url") {
  41. res.body() = R""( {"seen":"2020-10-13T18:41:37.02287354Z", "addresses":["q uic://192.168.100.15:22000" ]})"";
  42. auto r = parse_contact(res);
  43. CHECK(r.error() == make_error_code(error_code_t::malformed_url));
  44. }
  45. SECTION("malformed json") {
  46. res.body() = R""( {"seen":"2020-10-13T18:41:37.02287354Z" "addresses":["qic://192.168.100.15:22000" ]})"";
  47. auto r = parse_contact(res);
  48. CHECK(r.error() == make_error_code(error_code_t::malformed_json));
  49. }
  50. SECTION("incorrect json") {
  51. res.body() = R""( {"seen":"2020-10-13T18:41:37.02287354Z", "Addresses":["quic://192.168.100.15:22000" ]})"";
  52. auto r = parse_contact(res);
  53. CHECK(r.error() == make_error_code(error_code_t::incorrect_json));
  54. }
  55. SECTION("malformed date") {
  56. res.body() = R""( {"seen":"2020-99-13T18:41:37.02287354Z", "addresses":["qic://192.168.100.15:22000" ]})"";
  57. auto r = parse_contact(res);
  58. CHECK(r.error() == make_error_code(error_code_t::malformed_date));
  59. }
  60. SECTION("wrong code") {
  61. res.result(500);
  62. auto r = parse_contact(res);
  63. CHECK(r.error() == make_error_code(error_code_t::unexpected_response_code));
  64. }
  65. SECTION("not found") {
  66. res.result(404);
  67. auto r = parse_contact(res);
  68. REQUIRE((bool)r);
  69. CHECK(!(bool)r.value());
  70. }
  71. }