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

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

Действительно, временно запрещающие записи на диск к процессу должны быть достаточно.

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

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

31
задан Ilya Birman 12 January 2010 в 07:37
поделиться

12 ответов

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

28
ответ дан 27 November 2019 в 22:14
поделиться

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

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

2
ответ дан 27 November 2019 в 22:14
поделиться

Я использовал дисковод большого пальца, как объем для процесса.

4
ответ дан 27 November 2019 в 22:14
поделиться

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

-1
ответ дан 27 November 2019 в 22:14
поделиться

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

1
ответ дан 27 November 2019 в 22:14
поделиться

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

13
ответ дан 27 November 2019 в 22:14
поделиться

Рекурсивно Удалите все разрешения на запись из вашего WebFolder, папок и файлов Ваше приложение для записи.

0
ответ дан 27 November 2019 в 22:14
поделиться

Ответ на мой вопрос.

Windows имеет функцию WSADuplicateSocket, которая может использоваться для дублирования собственного сокета. Базовый сокет останется открытым до тех пор, пока не будут освобождены все дескрипторы для этого сокета.

http://msdn.microsoft.com/en-us/library/ms741565 (VS.85) .aspx

-121--4501688-

Я думаю, что вы неправильно поняли дженерики. Другим словом, которое можно использовать, является «шаблон», но этого можно избежать, поскольку оно используется для более продвинутых вещей в C++.

Ниже будет создан универсальный класс неопределенного в настоящее время типа T.

public class Class2<T>
{
    public T Property3 { get; set; }
}

Для этого необходимо указать отсутствующий тип:

var x = new Class2<int>();

Будет создан объект, имеющий Property3 свойства типа int.

... или...

var y = new Class2<string>();

Это приведет к созданию объекта, имеющего Property3 свойства со последовательностью типа.

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

-121--2959475-

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

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

3
ответ дан 27 November 2019 в 22:14
поделиться

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

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

2
ответ дан 27 November 2019 в 22:14
поделиться

Нет необходимости использовать предварительно заполненную фиктивную файловую систему.
Используйте disk _ free _ космос () для имитации FileSystem

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

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

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

и смоделировать полный FileSystem 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.

5
ответ дан 27 November 2019 в 22:14
поделиться

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

0
ответ дан 27 November 2019 в 22:14
поделиться

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

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

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

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

0
ответ дан 27 November 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: