From f8210a5ba96334cc88ea876c1e496b132c1236c5 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Mon, 12 Feb 2024 15:36:29 +0000 Subject: [PATCH] [Test] Add unit tests --- src/libserver/http/http_message.c | 10 ++++++++++ src/libserver/http/http_message.h | 8 +++++--- test/rspamd_cxx_unit_utils.hxx | 29 ++++++++++++++++++++++++++++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/libserver/http/http_message.c b/src/libserver/http/http_message.c index 4b68d1ecb..e02827a76 100644 --- a/src/libserver/http/http_message.c +++ b/src/libserver/http/http_message.c @@ -736,4 +736,14 @@ bool rspamd_http_message_is_standard_port(struct rspamd_http_message *msg) } return msg->port == 80; +} + +const gchar *rspamd_http_message_get_url(struct rspamd_http_message *msg, gsize *len) +{ + if (msg->url) { + *len = msg->url->len; + return msg->url->str; + } + + return NULL; } \ No newline at end of file diff --git a/src/libserver/http/http_message.h b/src/libserver/http/http_message.h index fa8ed04c2..a483b316a 100644 --- a/src/libserver/http/http_message.h +++ b/src/libserver/http/http_message.h @@ -1,11 +1,11 @@ -/*- - * Copyright 2019 Vsevolod Stakhov +/* + * Copyright 2024 Vsevolod Stakhov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -247,6 +247,8 @@ const gchar *rspamd_http_message_get_http_host(struct rspamd_http_message *msg, */ bool rspamd_http_message_is_standard_port(struct rspamd_http_message *msg); +const gchar *rspamd_http_message_get_url(struct rspamd_http_message *msg, gsize *len); + #ifdef __cplusplus } #endif diff --git a/test/rspamd_cxx_unit_utils.hxx b/test/rspamd_cxx_unit_utils.hxx index 126253fd6..1dea7af9d 100644 --- a/test/rspamd_cxx_unit_utils.hxx +++ b/test/rspamd_cxx_unit_utils.hxx @@ -1,5 +1,5 @@ /* - * Copyright 2023 Vsevolod Stakhov + * Copyright 2024 Vsevolod Stakhov * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ #include "libmime/mime_headers.h" #include "contrib/libottery/ottery.h" #include "libcryptobox/cryptobox.h" +#include "libserver/http/http_message.h" #include #include @@ -204,6 +205,32 @@ TEST_SUITE("rspamd_utils") } } } + + TEST_CASE("rspamd_http_message_from_url") + { + std::vector> cases{ + {"http://example.com", "/"}, + {"http://example.com/", "/"}, + {"http://example.com/lol", "/lol"}, + {"http://example.com/lol#keke", "/lol"}, + {"http://example.com/lol?omg=huh&oh", "/lol?omg=huh&oh"}, + {"http://example.com/lol?omg=huh&oh#", "/lol?omg=huh&oh"}, + {"http://example.com/lol?omg=huh&oh#keke", "/lol?omg=huh&oh"}, + {"http://example.com/lol?", "/lol"}, + {"http://example.com/lol?#", "/lol"}, + }; + + for (const auto &c: cases) { + SUBCASE(("rspamd_http_message_from_url: " + c.first).c_str()) + { + auto *msg = rspamd_http_message_from_url(c.first.c_str()); + std::size_t nlen; + auto *path = rspamd_http_message_get_url(msg, &nlen); + CHECK(std::string{path, nlen} == c.second); + rspamd_http_message_unref(msg); + } + } + } } #endif -- 2.39.5