32 votes

Le moyen le plus simple de simuler une situation d’espace disque libre?

J'ai besoin de tester mon application web dans un scénario où il n'y a pas d'espace disque restant, c'est à dire je ne peux pas écrire plus de fichiers. Mais je ne veux pas remplir mon disque dur avec l'ordure juste pour s'assurer que il n'y a vraiment pas d'espace à gauche. Ce que je veux, c'est pour simuler cette situation à l'intérieur d'un processus particulier (en fait, un PHP app).

En effet, l'interdiction temporaire de disque de l'écriture d'un processus doit être suffisant.

Quelle est la meilleure façon de le faire? Je suis sous Mac OS X 10.6.2 avec construit-dans Apache/PHP bundle. Merci.

Edit: vérification de l'espace libre sur le Disque n'est pas fiable car elle peut changer à tout moment. De nombreuses pages sont servies simultanément. Il peut y avoir suffisamment d'espace libre lors de la vérification, mais aucun pour le moment vous avez réellement écrire quelque chose. Aussi, la vérification de l'espace libre du disque, il faudra modifier le code partout où je écrire un fichier, ce qui n'est pas ce que je veux :-) Enfin, cette solution est exactement le contraire de ce que je suis en train de tester: comment mon application va se comporter quand il ne peut pas écrire plus.

28voto

Hamish Grubijan Points 2078

Je parie que vous pourriez également créer votre propre fichier .dmg avec un système de fichiers de taille ... disons 2 Mo et y écrire. Si cela fonctionne, le test est extrêmement facile: il vous suffit de le monter et de changer de chemin pour le test. Si dmg est suffisamment petit, vous pouvez probablement même le télécharger sur le contrôle de source.

13voto

ryeguy Points 24980

Lorsque j'ai eu besoin de faire cela, j'ai créé une machine virtuelle avec un espace limité alloué au disque virtuel.

5voto

Gordon Points 156415

Pas besoin d'utiliser une seringue à factice système de fichiers.
Utiliser disk_free_space() en dérision le système de fichiers

disk_free_space() - étant Donné une chaîne de caractères contenant un répertoire, cette fonction retourne le nombre d'octets disponibles sur le correspondant le système de fichier ou de la disquette la partition.

Pour simuler, juste envelopper de la fonction dans un système de fichiers de Classe. Puis à l'injecter dans votre classe, de faire l'économie d'une dépendance et de vérifier si le disque est plein avant de vous faire de réelles économies. Dans votre UnitTest, il vous suffit de changer de classe normale à la classe, se moquant d'un plein système de fichiers et vous avez terminé. De cette façon, vous n'avez pas à recréer l'intégralité du disque dur ou le disque dur avec les fichiers de votre projet tout le temps chaque fois que vous voulez exécuter de nouveau votre test, par ex.

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

et pour simuler un système de fichiers complet ne

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

Si vous voulez surcharger la fonction retourne 0 en tout temps, vous pouvez utiliser le RunKit extension Pecl et à faire:

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

Comme une alternative à regarder en vfsStream:

vfsStream est un gestionnaire de flux pour un système de fichiers virtuel qui peut être utile pour des tests unitaires pour s'en moquer réel du système de fichiers. Il peut être utilisé avec n'importe quelle unité framework de test, comme PHPUnit ou de SimpleTest.

4voto

Cheeso Points 87022

J'ai utilisé une clé USB, en tant que volume pour le processus.

3voto

Noufal Ibrahim Points 32200

Je ne suis pas sûr de savoir comment le faire sous OSX, mais sous Linux, je mettrais probablement un quota de disque sur mon utilisateur test et lancerais ensuite l'application.

Vous pouvez également créer un fichier NULL (un petit fichier), le formater en tant que partition ext3, le monter à l'aide du périphérique de bouclage et exécuter l'application PHP qu'il contient. Ce serait plus proche d'un disque physique qui manque d'espace.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X