Тестовое правило Bazel, которое выполняется только при определенной конфигурации - PullRequest
0 голосов
/ 26 октября 2019

У меня есть пользовательское правило проверки, которое проверяет размер созданного двоичного файла. Я хочу, чтобы это правило выполнялось только в определенной конфигурации (оптимизировано, --compilation_mode=opt) и не выполнялось (или не выполнялось PASS) иначе.

В частности,

  • bazel test //my:example_size_test не должен запускать тест (предпочтительно, хотя выполнение и всегда прохождение допустимы)
  • bazel test -c opt //my:example_size_test должен запускать тест,прохождение на основе результатов теста

Есть ли способ достичь этого?

Я пытался использовать макрос для условного псевдонима правила:

  • size_test - это макрос, который создает экземпляр
    • $name_enabled_test, фактическую цель тестирования типа _size_test
    • $name_disabled_test, правило noop_test (пользовательское правило, которое по существу выполняетexit 0)
    • $name, alias, который выбирается между $name_enabled_test и $name_disabled_test в зависимости от конфигурации через select

Тем не менее, гипотетический bazel test //my:example_size_test строит, но не запускает тест. Это задокументировано :

Тесты не запускаются, если их псевдоним указан в командной строке. Чтобы определить псевдоним, который запускает указанный тест, используйте правило test_suite с единственной целью в атрибуте tests.

Я пытался использовать test_suite вместо alias:

  • size_test - это макрос, который создает
    • $name_enabled_test, фактическую цель тестирования типа _size_test
    • $name_disabled_test, a noop_test rule (пользовательское правило, которое по существу exit 0)
    • $name, test_suite, имеющее атрибут tests, который select s между $name_enabled_test и $name_disabled_test в зависимости от конфигурации

Однако это не работает, поскольку атрибут tests не настраивается .

Есть ли идиоматический (или даже окольным путем) способ достижения теста, который применим только к определенным конфигурациям?

1 Ответ

0 голосов
/ 28 октября 2019

Похоже на задание для select () .

Определите config_setting для -c opt и используйте select в атрибуте data тестазависеть от двоичного файла. Также передайте некоторый флаг в тест, чтобы указать, должен ли он проверять размер двоичного файла.

Я приведу вам пример с sh_test, потому что я не хочу предполагать что-либо о size_test:

some_test(
    name = "example_size_test",
    srcs = [...],  # you need to implement this
    deps = ["@bazel_tools//tools/bash/runfiles"],
    data = select({
        ":config_opt": ["//my:binary"],
        "//conditions:default": [],
    }),
    args = select({
        ":config_opt": [],
        "//conditions:default": ["do_not_run"],
    }),
)

Если $1 == "do_not_run", то тест должен завершиться 0, в противном случае он должен использовать библиотеку runfiles (см. Bash , C ++ , Java , Python ) для получения местоположения //my:binary и проверки его размера.

...