mirror of
https://github.com/lux-tel/libsession-util.git
synced 2026-10-30 20:25:11 +00:00
97 lines
4.2 KiB
C++
97 lines
4.2 KiB
C++
#include <fmt/format.h>
|
|
|
|
#include <catch2/catch_test_macros.hpp>
|
|
#include <session/network/backends/session_open_group_server.hpp>
|
|
|
|
#include "utils.hpp"
|
|
|
|
using namespace session::network;
|
|
|
|
TEST_CASE("Download url parsing", "[backend][session_open_group_server]") {
|
|
|
|
auto parsed_download_url =
|
|
open_group_server::parse_download_url("https://example.com/room/test/file/123"sv);
|
|
REQUIRE(parsed_download_url.has_value());
|
|
CHECK(parsed_download_url->base_url == "https://example.com"sv);
|
|
CHECK(parsed_download_url->room == "test"sv);
|
|
CHECK(parsed_download_url->file_id == 123);
|
|
CHECK_FALSE(parsed_download_url->wants_stream_decryption);
|
|
|
|
// Strips a trailing forward slash from the file_id
|
|
parsed_download_url =
|
|
open_group_server::parse_download_url("https://example.com/room/test/file/123/"sv);
|
|
REQUIRE(parsed_download_url.has_value());
|
|
CHECK(parsed_download_url->base_url == "https://example.com"sv);
|
|
CHECK(parsed_download_url->room == "test"sv);
|
|
CHECK(parsed_download_url->file_id == 123);
|
|
CHECK_FALSE(parsed_download_url->wants_stream_decryption);
|
|
|
|
// Identifies that the url wants stream-based decryption
|
|
parsed_download_url =
|
|
open_group_server::parse_download_url("https://example.com/room/test/file/123/#d"sv);
|
|
REQUIRE(parsed_download_url.has_value());
|
|
CHECK(parsed_download_url->base_url == "https://example.com"sv);
|
|
CHECK(parsed_download_url->room == "test"sv);
|
|
CHECK(parsed_download_url->file_id == 123);
|
|
CHECK(parsed_download_url->wants_stream_decryption);
|
|
|
|
// Maintains the room casing
|
|
parsed_download_url =
|
|
open_group_server::parse_download_url("https://example.com/room/TeST/file/123"sv);
|
|
REQUIRE(parsed_download_url.has_value());
|
|
CHECK(parsed_download_url->base_url == "https://example.com"sv);
|
|
CHECK(parsed_download_url->room == "TeST"sv);
|
|
CHECK(parsed_download_url->file_id == 123);
|
|
CHECK_FALSE(parsed_download_url->wants_stream_decryption);
|
|
|
|
// Falls back to the legacy room-less format (used by some older clients, e.g. Android),
|
|
// leaving the room empty for the caller to populate from context
|
|
parsed_download_url = open_group_server::parse_download_url("https://example.com/file/123"sv);
|
|
REQUIRE(parsed_download_url.has_value());
|
|
CHECK(parsed_download_url->base_url == "https://example.com"sv);
|
|
CHECK(parsed_download_url->room.empty());
|
|
CHECK(parsed_download_url->file_id == 123);
|
|
CHECK_FALSE(parsed_download_url->wants_stream_decryption);
|
|
|
|
// Handles the legacy room-less format with a trailing slash and stream-decryption fragment
|
|
parsed_download_url =
|
|
open_group_server::parse_download_url("https://example.com/file/123/#d"sv);
|
|
REQUIRE(parsed_download_url.has_value());
|
|
CHECK(parsed_download_url->base_url == "https://example.com"sv);
|
|
CHECK(parsed_download_url->room.empty());
|
|
CHECK(parsed_download_url->file_id == 123);
|
|
CHECK(parsed_download_url->wants_stream_decryption);
|
|
|
|
// Doesn't have an issue with a url that isn't in the right format
|
|
parsed_download_url =
|
|
open_group_server::parse_download_url("https://example.com/test/test2/test3/5432"sv);
|
|
CHECK_FALSE(parsed_download_url.has_value());
|
|
}
|
|
|
|
TEST_CASE("Download url generation", "[backend][session_open_group_server]") {
|
|
auto url = open_group_server::generate_download_url(
|
|
123,
|
|
{"https://example.com",
|
|
"test",
|
|
"0123456789abcdef0123456789abcdef00000000000000000000000000000000",
|
|
true});
|
|
CHECK(url == "https://example.com/room/test/file/123#d");
|
|
|
|
// Omits the stream encryption fragment when disabled
|
|
url = open_group_server::generate_download_url(
|
|
123,
|
|
{"https://example.com",
|
|
"test",
|
|
"0123456789abcdef0123456789abcdef00000000000000000000000000000000",
|
|
false});
|
|
CHECK(url == "https://example.com/room/test/file/123");
|
|
|
|
// Maintains the case of the room
|
|
url = open_group_server::generate_download_url(
|
|
123,
|
|
{"https://example.com",
|
|
"TeST",
|
|
"0123456789abcdef0123456789abcdef00000000000000000000000000000000",
|
|
true});
|
|
CHECK(url == "https://example.com/room/TeST/file/123#d");
|
|
} |