Что происходит при переполнении диска во время копирования файлов
Что проверяют
Умеете ли вы превратить бытовой сценарий в набор проверок. Тестировщика тут спрашивают не про устройство файловой системы, а про поведение при исчерпании ресурса: что система обязана сделать, что останется на диске после сбоя и как это воспроизвести не на живой машине.
Как отвечать
Сначала ожидаемое поведение: запись возвращает отказ по нехватке места (в POSIX это ENOSPC), приложение обязано его заметить и остановиться. Хороший результат: операция откатывается, недописанный файл удаляется, пользователь видит понятное сообщение, а после освобождения места повтор проходит успешно.
Дальше чек-лист:
- код и текст ошибки, приложение не падает и не зависает;
- приёмник: нет обрезанного файла, нет забытого временного;
- исходный файл цел, контрольная сумма совпадает;
- событие попало в журнал, а не проглочено;
- повтор после очистки завершается нормально;
- границы: места ровно столько, сколько нужно, и на байт меньше.
Отдельно скажите про стенд: небольшой образ, смонтированный в отдельную точку, или квота на пользователя, а нужный остаток задаётся заранее созданным файлом. Это повторяемо и не задевает остальную систему.
Где спотыкаются
Проверяют только всплывшее сообщение и закрывают тест. Половина дефектов живёт дальше: недописанный файл остаётся и выглядит как настоящий, следующий шаг сценария читает его и получает мусор.
Второе: ждут отказ там, где его не будет. При отложенной записи вызов записи уже вернул успех, а реальный отказ приходит на закрытии файла или на сбросе буферов. Код, который проверяет только запись, теряет данные молча, и тест обязан смотреть на итоговый файл, а не на возврат первой операции.
Третье: считают, что место меряется только байтами. Кончаются иноды, и тогда свободные гигабайты есть, а создать файл нельзя; срабатывает квота; часть блоков зарезервирована под системного пользователя, поэтому обычный процесс получает отказ раньше, чем утилита покажет ноль.