commit 27db70733b03e11b8cdcb5ca18267cbca5889b8f from: Aleksey Ryndin date: Wed Aug 23 17:18:11 2023 UTC Add reports/0.0.2.gmi commit - 7669b92b9f35561c838abf6f2ea1162f219d2afc commit + 27db70733b03e11b8cdcb5ca18267cbca5889b8f blob - 258f33cdad38b7db92a4aba9b52f17cea02afa6b blob + fb0dbb4183dd86f846c475d54c0dde6eaf64ae47 --- README.gmi +++ README.gmi @@ -13,12 +13,12 @@ $ make run_server ## Development blog (in Russian) +=> /reports/0.0.2.gmi v0.0.2 (2023-08-23) => /reports/0.0.1.gmi v0.0.1 (2023-08-17) ## See also -=> gemini://gemini.circumlunar.space/docs/specification.gmi Project Gemini (Speculative specification) => ssh://anonymous@got.any-key.press/vostok vostok source code (git) => https://got.any-key.press/?action=summary&path=vostok.git vostok source code (web) -Contact: vostok@to.any-key.press +Send your patches, questions and suggestions to e-mail vostok@to.any-key.press blob - 4030892ce71b38d26f868649996fcc9a33260f38 blob + 22680a86b8c4e5b70209ac079b7a420405fbe82c --- reports/0.0.2.gmi +++ reports/0.0.2.gmi @@ -1,17 +1,26 @@ # vostok: сервер Gemini, версия 0.0.2 +Ого, энтузиазма хватила на вторую версию сервера? Это уже что-то значит... наверное) + +Что нового в версии 0.0.2: +* открытие директории перенаправляется на открытие файла index.gmi в этой диреткории; +* в URL запроса схема (протокол) теперь регистро независимы; +* код начал покрываться тестами. + ## Тесты -Начал покрывать код тестами. Для тестов выделена новая под-директория tests/, со своим Makefile. В Makefile корневой директории проекта добавлена новая цель tests, которая собирает исполняемые файлы тестов и запускает их: +Начал покрывать код тестами. Для тестов выделена новая поддиректория tests/, со своим Makefile. В Makefile корневой директории проекта добавлена новая цель tests, которая собирает исполняемые файлы тестов и запускает их: ``` $ make tests make -C tests ./test_parse_url test_parse_url successfully passed! +./test_open_file +test_open_file successfully passed! ``` -Для начала тестами покрыл наиболее чувствительный велосипед - разбор URL, файл tests/test_parse_url.cc тестирует vostok/parse_url.cc. В файле tests/tests.h набросал условный "фреймворк" для тестирования с тремя макросами: TEST_START(name), IS_TRUE(...) и TEST_END(). В результате тест выглядит как-то так: +Для начала тестами покрыл наиболее чувствительный "велосипед" - разбор 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 @@ -21,7 +30,6 @@ test_parse_url successfully passed! namespace vostok { - TEST_START(test_parse_url) zs_url_path_t zs_url_path; @@ -33,27 +41,30 @@ TEST_START(test_parse_url) 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 должна не чувствительной к регистру символов +## Чувствительность к регистру схемы в URI -Сделан небольшой фикс, который позволяет работать серверу в соответствии с RFC 3986 (Uniform Resource Identifier). В разделе 3.1. Scheme недвусмысленно сказано, что сервера должны воспринимать схему (то есть в нашем случае начало строки - "gemini://") в любом регистре: +Сделан небольшой фикс, который позволяет работать серверу в соответствии с 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 +## Редирект на index.gmi +Перечитал документ "Best practices for Gemini implementations" и обнаружил там прямое указание на то, что попытка открытия директории должна перенаправляться на открытие файла "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. +Раз такое дело, то решил добавить такую логику в vostok. Попутно код, открывающий файл по пути из URL, вынес в отдельный модуль. А для отдельного модуля уже грех и тесты не написать. В итоге: редирект добавил, новый модуль тестами покрыл. + ## Спасибо! -Отдельная большая благодарность всем, кто присылает патчи. +Отдельная большая благодарность всем, кто присылает патчи. В частности: * la-ninpre , Makefile: compile files separately blob - bede0e95bc124cb941fa1b8bbfc0f60f0989adb6 blob + 2741426f19320b6b2998b33cef55bda253c294b5 --- reports/index.gmi +++ reports/index.gmi @@ -1,5 +1,5 @@ # Development blog (in Russian) +=> /reports/0.0.2.gmi v0.0.2 (2023-08-23) => /reports/0.0.1.gmi v0.0.1 (2023-08-17) -