-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixes for util unit tests #288
Conversation
b034840
to
b52f212
Compare
1e53829
to
e7cdc1e
Compare
If the variable CCACHE_PATH is already set before the call (as a normal or cache variable) then the search will not occur.
e7cdc1e
to
e115cc8
Compare
e115cc8
to
23c91c3
Compare
'direct_io_ut' from 'util/stream' doesn't remove its file, so 'direct_io_ut' from 'util/system' failed checking if the same file doesn't exist
libc 'open' (in implementation of TFile) doesn't create non-existed parent directories in given path, so we have to do that for it
23c91c3
to
043286f
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@tsayukov Привет, по поводу предложений:
util/system/direct_io_ut
иutil/stream/direct_io_ut
. Бинари к этим тестам располагались в разных директориях, тут и тут, поэтому коллизий не было. Лучше разнеси сами тестыutil/system/fstat_ut
. Наша система сборки Ya Make сама перед запуском тестов создает пути WorkPath и OutputPath. В данном случае лучше сделать это через CMake, в виде необязательного параметра в add_ydb_testutil/system/type_name_ut
. Этот тест не должен запускаться с системной стандартной библиотекой, он явно выключен. Просто не подключай егоutil/system/unaligned_mem_ut
тут придется возвращать либу, заведи issue на этот тест, права вроде у тебя естьutil/generic/string_transparent_hash_ut
во внутреннем репозитории у нас уже C++20, даже макросы не нужны. Замена должна пройти достаточно просто, этот фикс я донесу к намutil/random/common_ops_ut
все же на мой взгляд проверок на компилируемость тут недостаточно, такой фикс вряд ли пропустят, этот тест можно не запускать совсем, сделай макрос, который будет этот тест выключать
@Gazizonoki Привет, добавил в
Открыл issue: Также добавил новых пресетов. |
Вынеси куда нибудь все фиксы, которые надо донести. Так мне будет удобнее |
@tsayukov Заведи issue на патча теста string_transparent_hash_ut, пока я донести фикс не могу, руки не доходят, а то, что это надо сделать, потеряется. Если получится, было бы круто приложить к issue сам патч |
@Gazizonoki Готово! Я тебя отметил в issues, как assignee, если ты не против... |
Часть коммитов здесь затрагивает только CMake файлы, а самые последние коммиты – это с изменениями в
util
– скорее иллюстрация, как я предлагаю решить проблему. Перед финальным мёржем эти изменения собираюсь откатить.Здесь собрал все оставшиеся юнит-тесты из
util
, а именно:В списке #146 не было
util/draft
, но если ничего не пропустил, эта либа нигде не используется, может, убрать?Теперь к деталям.
Падающие тесты:
util/system
, а именно, вsrc_root_ut
иsrc_location_ut
проверялась корректная работа макроса__SOURCE_FILE__
, который брал макро переменныеARCADIA_ROOT
илиARCADIA_BUILD_ROOT
и обрезал у__FILE__
совпадающий префикс.ARCADIA_ROOT
иARCADIA_BUILD_ROOT
передавались через-D
опцию как${YDB_SDK_SOURCE_DIR}
и${YDB_SDK_BINARY_DIR}
соответственно, и это всегда абсолютные пути. Однако если__FILE__
вернёт относительный путь, тогда всё сломается. В нашем случае это происходило из-за использованияccache
вместе с переменной окруженияCCACHE_BASEDIR
, а именно, "if you specify an absolute path to the source code file,__FILE__
macros will be expanded to a relative path instead". Не вижу, как можно заранее понять на стороне CMake, что потом будет использоватьсяCCACHE_BASEDIR
, поэтому пока захаркодил нужные пути вbuild/action.yaml
.util/random/common_ops_ut
падал тестTestStlCompatibility
. Насколько я понимаю, здесь тестировалась совместимость с STL, то есть чтобыTRng
мог передаваться вstd::normal_distribution::operator()
, и всё компилировалось бы. Для этого достаточно проверок, которые всегда выполняются, – какие предлагаю я. Магические числа в предыдущем варианте скорее всего подбирались таким образом, чтобыIntHash
от числа17
совпадал с результатом от вызоваstd::normal_distribution::operator()
, но возможно, внутренняя реализация поменялась, и теперь это не так.util/system/direct_io_ut
падал тестTDirectIoErrorHandling::Constructor
, там проверялось, что при попытке открытия несуществующего файла./test.file
будет выброшено исключение. Но если файл уже существует, то тест падает. Оказалось, такой файл создавался вutil/stream/direct_io_ut
в функцииTest
. Поэтому в конце функции я теперь удаляю этот файл, всё равно каждый раз он создаётся заново (из-за опцииCreateAlways
).util/system/fstat_ut
падали тесты из-за того, чтоTFile
не создаёт для файла родительскую директорию, если такой не существует (по крайней мереopen
на линуксе не создаёт). Добавил создание и удаление директорий.util/system/type_name_ut
падали тесты, когда проверяли имя типа с вложенными типовыми параметрами, например,std::basic_string<char, std::char_traits<char>, std::allocator<char>>
. Внутренняя реализация в libstdc++ ещё добавляет пробел между двумя подряд закрывающимися угловыми скобками. Я решил вutil/system/type_name
в функцииTypeName
ещё добавить замену всех>
на>
.Отсутствующие библиотеки:
util/system/unaligned_mem_ut
зависит от отсутствующей либыlibrary/cpp/testing/benchmark
, там нужна функцияNBench::Clobber
, это барьер против оптимизации памяти. Думаю, придётся притащить эту либу. Этот тест я пока закомментировал.util/generic/string_transparent_hash_ut
зависит от отсутствующей либыlibrary/cpp/containers/absl_flat_hash
. Но там единственное, что нужно, это способностьstd::unordered_set
уметь в transparent в методеfind
(C++20). Может, просто навесить макросы, как я предлагаю? Ну или нужно притащить либу.Мелочи:
cmake/ccache.cmake
убрал ненужную проверку наCCACHE_PATH
передfind_program(CCACHE_PATH ccache)
. В прошлый раз сгоряча её поставил. На самом деле, "if the variable is already set before the call (as a normal or cache variable) then the search will not occur".