Глядя на раздел 3.1 (OOM):
OOM тестирование выполняется
симуляция ошибок OOM. SQLite позволяет
заявление о замене
альтернативная реализация malloc ()
с использованием
sqlite3_config (SQLITE_CONFIG_MALLOC, ...)
интерфейс. Тест TCL и TH3
жгуты оба способны
вставив измененную версию
malloc (), который может быть настроен на неудачу
после определенного количества выделений.
Эти инструментальные mallocs могут быть установлены
потерпеть неудачу только один раз, а затем начать
работать снова или продолжать неудачу
после первой неудачи. OOM тесты
сделано в цикле. На первой итерации
петли, инструментальный malloc
фальсифицируется, чтобы потерпеть неудачу на первом
распределение. Тогда какая-то операция SQLite
проводится и проверки сделаны
убедитесь, что SQLite обработал ошибку OOM
правильно. Тогда время до отказа
счетчик на инструментальной маллок
увеличивается на единицу, и тест
повторяется. Цикл продолжается до
вся операция проходит до завершения
никогда не сталкиваясь с моделируемой
ООМ провал. Такие тесты проводятся
дважды, один раз с
malloc устанавливается на неудачу только один раз, и
снова с набором инструментов Malloc
постоянно терпеть неудачу после первого
отказ.
Обратите внимание, что в разделе 7 явно указано 100% покрытие ядра, как определено gcov. Я согласен с Donal Fellows в том, что тестовая среда в значительной степени отвечает за покрытие тестами, помимо того, что может предложить график вызовов. Совсем другое дело видеть, что malloc () вводится nn раз и писать для него тест, чем писать десятки тестов, предназначенных для имитации сред, в которых malloc () может дать сбой.
Да, итоговое покрытие является артефактом старательности, однако так же, как и выбор тестовой структуры, которая обеспечивает такой вид старательности.
Наконец, повторяя очевидное, malloc()
принимает только один пустой указатель. Это говорит о том, что тесты, написанные вокруг него, являются преднамеренными, а не генерируются автоматически.