Я реализовал клиентский протокол для BaseX (база данных с открытым исходным кодом XML) в R-пакете (RBaseX). Люди из CRAN попросили меня добавить testthat
-тесты к источникам, и благодаря этим тестам я обнаружил (и исправил) некоторые ошибки.
Пакет был разработан на linux -клиенте. BaseX также был установлен на клиенте.
Когда не работает ни один basexserver, все тесты должны провалиться. Поэтому каждый test_that
-раздел начинается с вызова следующей функции, которая проверяет, можно ли создать socketConnection:
skip_unless_socket_available <- function() {
tryCatch({
sock <- base::socketConnection(
host = "localhost", 1984,
open = "w+b", server = FALSE, blocking = TRUE, encoding = "utf-8")
close(sock)
TRUE
}, error = function(e) {
skip(paste0("basexserver not available:\n'", conditionMessage(e), "'"))
})
}
На клиенте linux - или Windows с работающим сервером basexserver. доступно, test_check("RBaseX")
завершается без ошибок. Когда недоступен basexserver, клиент linux test_check("RBaseX")
также завершает работу без ошибок.
Но клиент Windows зависает, не возвращая ошибок или предупреждений.
Как правильно проверить в Windows возможность создания socketConnection для подключения к серверу?
Ben