Intereting Posts
Как вы предлагаете пользователям уникальные имена пользователей в PHP? Прямая загрузка на s3 без использования производственного сервера Как создать событие Календаря Google без напоминания / Как получить учетные записи службы для олицетворения пользователей Добавление страницы администратора в OpenCart версии 2 Редактирование XML с помощью PHP. Почему работает только первый раз? Как вы используете библиотеку PHP OpenPGP? Вызов функции PHP в теге <a>, теге привязки отправлять данные на localhost в приложении для Android Отправлять html и текстовое сообщение одновременно с PHP Mailer Производительность: если else vs switch, а vs for, для каждого vs for, print vs printf PHP или Apache, кажется, кэшируют файлы, прочитанные через file_get_contents или включают (нежелательное поведение) Состояние переключателя обновления php в db неопределенная ошибка индекса в запросе mysql Проблемы с OpenSSL на PHP – различное поведение для разных версий Обнаруживать будущие повторяющиеся значения, в то время как итерация через MySQL приводит к PHP

Самый простой способ имитировать отсутствие свободного места на диске?

Мне нужно проверить мое веб-приложение в сценарии, в котором нет свободного места на диске, т.е. я не могу писать больше файлов. Но я не хочу заполнять свой жесткий диск мусором, чтобы убедиться, что на самом деле нет свободного места. Я хочу, чтобы имитировать эту ситуацию с определенным процессом (на самом деле, PHP-приложение).

Действительно, достаточно временно запретить запись на диск в процесс.

Какой самый простой способ сделать это? Я использую Mac OS X 10.6.2 со встроенным пакетом Apache / PHP. Благодарю.

Изменить : проверка свободного места на диске не будет надежной, так как она может изменить любой момент. Одновременно подаются многие страницы. При проверке может быть достаточно свободного места, но пока вы на самом деле ничего не пишете. Кроме того, проверка свободного места на диске потребует изменения кода везде, где я пишу файл, чего я не хочу 🙂 Наконец, это решение в точности противоположно тому, что я пытаюсь проверить: как мое приложение будет вести себя, когда он больше не может писать.

Related of "Самый простой способ имитировать отсутствие свободного места на диске?"

Бьюсь об заклад, вы также можете создать свой собственный .dmg-файл с файловой системой размера … скажите 2Mb и напишите на него. Если это работает, то это очень просто для тестирования – вы просто монтируете его и переключаете путь для тестирования. Если dmg достаточно мал, возможно, вы даже можете загрузить его в исходный элемент управления.

Когда мне это нужно, я создал виртуальную машину с ограниченным пространством, выделенным для виртуального диска.

Не нужно использовать предварительно заполненную файловую систему.
Используйте disk_free_space() чтобы disk_free_space() систему

disk_free_space () – С учетом строки, содержащей каталог, эта функция вернет количество байтов, доступных в соответствующей файловой системе или разделе диска.

Чтобы имитировать, просто оберните функцию в класс FileSystem. Затем введите его в класс, выполнив сохранение как зависимость, и проверьте, заполнен ли диск до фактической экономии. В своем UnitTest просто замените обычный класс классом, высмеивающим полную файловую систему, и все готово. Таким образом, вам не нужно воссоздавать полный диск или поддерживать диск с вашими проектными файлами все время, когда вы хотите повторно запустить свой тест, например

 class MyFileSystem { public static function df($drive) { return disk_free_space($drive); } } 

и для имитации полной файловой системы do

 class MyFileSystemFull { public static function df($drive) { return 0; } } 

Если вы хотите постоянно перегружать функцию для возврата 0, вы можете использовать расширение RunKit Pecl и выполнять:

 runkit_function_redefine('disk_free_space','string','return 0;'); 

Как альтернативный взгляд на vfsStream :

vfsStream – это потоковая оболочка для виртуальной файловой системы, которая может быть полезна в модульных тестах, чтобы высмеять реальную файловую систему. Он может использоваться с любой модульной тестовой средой, такой как PHPUnit или SimpleTest.

В качестве объема для процесса я использовал флэш-накопитель.

Я не уверен, как это сделать на OSX, но в Linux я бы, скорее всего, установил дисковый квот для своего тестового пользователя, а затем запустил приложение.

Или, возможно, создайте нулевой файл (маленький), отформатируйте его как раздел ext3, смонтируйте его с помощью устройства loopback и запустите приложение PHP внутри него. Это будет ближе к физическому диску, в котором нет места.

Быстрое и простое решение – создать квоту для специализированной учетной записи пользователя. Поддержка квот в Mac OS X

Если вы не возражаете против хлопот, чтобы настроить его, и тем фактом, что вам, вероятно, нужна вторая лицензия для вашей операционной системы, виртуальная машина, вероятно, является лучшей идеей с самыми долгосрочными возможностями.

Создайте образ диска / файловой системы в обычном файле (ограниченного размера) и установите его петлю.

Но если вы будете делать это часто, я бы создал виртуальную машину – вы найдете возможность ее повторно использовать.

Не можете ли вы использовать Mock и заменить часть своего кода, который фактически записывает на диск, с поддельной заменой теста, которая будет генерировать исключение (ы), которое вы ожидаете увидеть?

рекурсивно удалите все разрешения на запись из своей веб-папки, папок и файлов, к которым приложение будет писать.

Нижняя линия; не делайте этого. Серьезно – есть так много вещей, которые идут ужасно неправильно, когда объем заканчивается из космоса. Если целевой объем не является загрузочным томом и не имеет ни одного другого приложения, написанного на нем , поведение, которое заполняет диск, в любом случае будет вне вашего контроля.

Если это загрузочный диск, система, скорее всего, будет паниковать или сбой на полном диске в любом случае. Или, если нет, это будет вести себя беспорядочно.

Если вы говорите об объеме данных, ваше единственное приложение, которое пишет на него? Если какое-либо другое приложение пишет, знаете ли вы наверняка, как они могут потерпеть неудачу?

В наши дни дисковое пространство настолько грязно дешево, что вам намного лучше обеспечить, чтобы из-за дискового пространства просто не случалось. Вставьте диск 2 ТБ и включите будильник, когда он достигнет 50% емкости. Намного дешевле реализовать (если ваше время не бесплатное) и гораздо надежнее.

Вы пробовали монтировать с -f -r? Это не очень небольшое дисковое пространство, но оно должно вызывать ошибку с одного уровня.

Я думаю, что идея с макетным классом – правильное направление. Обычно я тоже тестирую свой код. Если возможно, я использую для этого рамки, но вместо того, чтобы писать эти классы самостоятельно. Я не очень хорошо знаю PHP (больше программирования на C # и Java), но это кажется приятным. https://github.com/padraic/mockery

Где бы вы ни находили оставшееся место на диске, просто прокомментируйте его и запустите приложение с заменяющими значениями, такими как 0,1, 0, -1