Question

J'ai besoin de tester mon application Web dans un scénario où il n'y a plus d'espace disque, c'est-à-dire que je ne peux plus écrire de fichiers. Mais je ne veux pas remplir mon disque dur de déchets juste pour m'assurer qu'il n'y a vraiment plus d'espace. Ce que je veux, c'est simuler cette situation avec un processus particulier (en fait, une application PHP).

En effet, interdire temporairement les écritures de disque à un processus doivent être suffisantes.

Quelle est la façon la plus simple de faire cela? J'utilise Mac OS X 10.6.2 avec un faisceau Apache / PHP intégré. Merci.

Éditer: La vérification de l'espace libre du disque ne sera pas fiable car elle peut changer n'importe quel moment. De nombreuses pages sont servies simultanément. Il peut y avoir suffisamment d'espace libre lors de la vérification, mais aucun au moment où vous écrivez réellement quelque chose. De plus, la vérification de l'espace libre de disque nécessitera de changer le code partout où j'écris un fichier, ce qui n'est pas ce que je veux :-) Enfin, cette solution est exactement l'opposé de ce que j'essaie de tester: comment mon application se comportera lorsque il ne peut plus écrire.

Était-ce utile?

La solution

Je parie que vous pouvez également créer votre propre fichier .dmg avec un système de fichiers de taille ... disons 2 Mo et y écrire. Si cela fonctionne, il est super facile à tester - vous le montez simplement et changez le chemin pour les tests. Si le DMG est suffisamment petit, vous pourriez probablement même le télécharger sur le contrôle de la source.

Autres conseils

Quand j'avais besoin de le faire, j'ai créé une machine virtuelle avec un espace limité alloué au disque virtuel.

Pas besoin d'utiliser un système de fichiers factice prérempli.
Utilisation disk_free_space() Pour se moquer du système de fichiers

disk_free_space () - Compte tenu d'une chaîne contenant un répertoire, cette fonction renverra le nombre d'octets disponibles sur le système de fichiers ou la partition de disque correspondant.

Pour simuler, enveloppez simplement la fonction dans une classe de système de fichiers. Injectez-le ensuite à votre classe faisant la sauvegarde comme dépendance et vérifiez si le lecteur est plein avant de faire la sauvegarde réelle. Dans votre unité, échangez simplement la classe ordinaire avec la classe se moquant d'un système de fichiers complet et vous avez terminé. De cette façon, vous n'avez pas à recréer le lecteur de disque complet ou à conserver le lecteur avec vos fichiers de projet tout le temps chaque fois que vous souhaitez relancer votre test, par exemple

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

et pour simuler un système de fichiers complet

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

Si vous souhaitez surcharger la fonction pour retourner 0 à tout moment, vous pouvez utiliser l'extension Runkit PECL et faire:

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

Comme un regard alternatif sur vfsstream:

VFSStream est un wrapper de flux pour un système de fichiers virtuel qui peut être utile dans les tests unitaires pour se moquer du système de fichiers réel. Il peut être utilisé avec n'importe quel cadre de test unitaire, comme le phpunit ou le plus simple.

J'ai utilisé un lecteur de pouce, comme volume pour le processus.

Je ne sais pas comment le faire sur OSX mais sur Linux, je mettrais probablement un quota de disque sur mon utilisateur de test, puis exécuterais l'application.

Ou peut-être créer un fichier nul (un petit), le formater sous forme de partition EXT3, montez-le à l'aide du périphérique de bouclage et exécutez l'application PHP à l'intérieur. Ce serait plus proche d'un disque physique à court d'espace.

Une solution rapide et facile serait de configurer un quota pour un compte utilisateur spécialisé. Prise en charge du quota sur Mac OS X

Si cela ne vous dérange pas les tracas pour le configurer, et le fait que vous avez probablement besoin d'une deuxième licence pour votre système d'exploitation, une machine virtuelle est probablement la meilleure idée avec les possibilités les plus longues.

Créez une image de disque / système de fichiers dans un fichier régulier (de taille limitée) et de le monter en boucle.

Mais si vous le faisiez souvent, je créerais une machine virtuelle - vous trouverez la possibilité de la réutiliser.

Ne pouvez-vous pas utiliser une simulation et remplacer la partie de votre code qui écrit réellement sur le disque, avec un faux remplacement de test qui lancera l'exception que vous vous attendez à voir?

Supprimez récursivement toutes les autorisations d'écriture de votre webfolder, les dossiers et les fichiers de votre application vont écrire.

Conclusion; Ne fais pas ça. Sérieusement - il y a tant de choses Cela va horriblement mal lorsqu'un volume manque d'espace. À moins que le volume ciblé soit ne pas le volume de démarrage et a Pas une autre application qui y écrive, le comportement à mesure que le disque remplit sera hors de votre contrôle de toute façon.

S'il s'agit du lecteur de démarrage, le système paniquera ou s'écrasera probablement sur un disque complet de toute façon. Ou, sinon, cela se comportera de façon irrégulière.

Si vous parlez d'un volume de données, vous êtes le vôtre seulement application qui y écrit? Si une autre application écrit, connaître pour certain comment ils pourraient échouer?

L'espace disque est si bon bon marché ces jours-ci que vous faites mieux de vous assurer que hors de l'espace disque ne se produira jamais. Déposez un entraînement de 2 To et mettez une alarme lorsqu'elle atteint une capacité de 50%. Beaucoup moins cher à implémenter (sauf si votre temps est gratuit) et beaucoup plus fiable.

Avez-vous essayé de monter avec -f -r? Ce n'est pas vraiment un espace disque, mais il devrait lancer une erreur du même niveau.

Je pense que l'idée avec la classe simulée est la bonne direction. Je teste généralement mon code de cette façon aussi. Si possible, j'utilise un framework pour cela, au lieu d'écrire ces classes moi-même. Je ne connais pas très bien PHP (plus de programmation avec C # et Java), mais cela semble être sympa.https://github.com/padraic/mockery

Partout où vous obtenez l'espace disque restant, commentez-le et exécutez votre application avec des valeurs de remplacement telles que 0,1, 0, -1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top