commit 86a71674eb8c8c15fcae904bfbc8801629f1742d from: Aleksey Ryndin date: Tue Aug 22 19:46:48 2023 UTC Add v0.0.2 changes to report commit - 1e30bfdb1787b3aeda4ab3bc82f29d8a13272aeb commit + 86a71674eb8c8c15fcae904bfbc8801629f1742d blob - d8fc1cb834198f91de0f04a4a981c92c9b05729a blob + 4030892ce71b38d26f868649996fcc9a33260f38 --- reports/0.0.2.gmi +++ reports/0.0.2.gmi @@ -1,5 +1,58 @@ # vostok: сервер Gemini, версия 0.0.2 +## Тесты + +Начал покрывать код тестами. Для тестов выделена новая под-директория tests/, со своим Makefile. В Makefile корневой директории проекта добавлена новая цель tests, которая собирает исполняемые файлы тестов и запускает их: + +``` +$ make tests +make -C tests +./test_parse_url +test_parse_url successfully passed! +``` + +Для начала тестами покрыл наиболее чувствительный велосипед - разбор URL, файл tests/test_parse_url.cc тестирует vostok/parse_url.cc. В файле tests/tests.h набросал условный "фреймворк" для тестирования с тремя макросами: TEST_START(name), IS_TRUE(...) и TEST_END(). В результате тест выглядит как-то так: +``` +#include "parse_url.h" +#include +#include + +#include "tests.h" + +namespace vostok +{ + +TEST_START(test_parse_url) + zs_url_path_t zs_url_path; + + IS_TRUE(parse_url(cut_null("gemini://host"), zs_url_path) == url_ok + && strcmp(zs_url_path.begin(), "") == 0); + + // <...> + + IS_TRUE(parse_url(cut_null("GeMiNi://host"), zs_url_path) == url_ok + && strcmp(zs_url_path.begin(), "") == 0); +TEST_END() + +} // namespace vostok + +extern "C" int main(int, char **){ return vostok::test_parse_url(); } +``` + +## Схема (протокол) в URI должна не чувствительной к регистру символов + +Сделан небольшой фикс, который позволяет работать серверу в соответствии с RFC 3986 (Uniform Resource Identifier). В разделе 3.1. Scheme недвусмысленно сказано, что сервера должны воспринимать схему (то есть в нашем случае начало строки - "gemini://") в любом регистре: + +> An implementation should accept uppercase letters as equivalent to lowercase in scheme names (e.g., allow "HTTP" as well as "http") for the sake of robustness but should only produce lowercase scheme names for consistency. + +Сказано - сделано. Благо именно этот код был покрыт тестами и вносить изменения в него теперь намного спокойнее. + +## index.gmi + +=> gemini://gemini.circumlunar.space/docs/best-practices.gmi Best practices for Gemini implementations + +> Following the convention for webservers, if a request is received for a path which maps to a directory in the server's filesystem and a file named index.gmi or index.gemini exists in that directory, it is served up for that path. + ## Спасибо! Отдельная большая благодарность всем, кто присылает патчи. blob - /dev/null blob + bede0e95bc124cb941fa1b8bbfc0f60f0989adb6 (mode 644) --- /dev/null +++ reports/index.gmi @@ -0,0 +1,5 @@ +# Development blog (in Russian) + +=> /reports/0.0.1.gmi v0.0.1 (2023-08-17) + +