Domanda

Ho bisogno di testare la mia web app in uno scenario in cui non c'è spazio su disco rimanente, vale a dire non posso scrivere altri file. Ma io non voglio riempire il mio disco rigido con spazzatura solo per assicurarsi che non c'è davvero più spazio. Quello che voglio è quello di simulare questa situazione withing un determinato processo (in realtà, un'applicazione PHP).

In effetti, il divieto temporaneo su disco scrive a un processo deve essere sufficiente.

Qual è il modo più semplice per farlo? Sto utilizzando Mac OS X 10.6.2 con built-in Apache fascio / PHP. Grazie.

Modifica : Disk controllare lo spazio libero non sta per essere affidabile dal momento che può cambiare da un momento all'altro. Molte pagine vengono serviti contemporaneamente. Non ci può essere sufficiente spazio libero durante il controllo, ma nessuno dal momento in cui si scrive qualcosa in realtà. Inoltre, il controllo di spazio libero su disco sarà necessario modificare il codice in tutto il mondo che scrivo un file, che non è quello che voglio :-) Infine, questa soluzione è esattamente il contrario di quello che sto cercando di prova: come la mia applicazione si comporterà quando essa non può scrivere più.

È stato utile?

Soluzione

Scommetto che si potrebbe anche creare il proprio file .dmg con il sistema di file di dimensioni ... diciamo 2Mb e scrivere. Se funziona, allora è super-facile per i test - basta montare e di attivare il percorso per il test. Se il dmg è abbastanza piccolo, probabilmente si potrebbe anche caricarlo sul controllo del codice sorgente.

Altri suggerimenti

Quando avevo bisogno di fare questo ho creato una macchina virtuale con spazio limitato assegnato al disco virtuale.

Non c'è bisogno di utilizzare un filesystem fittizio preriempita.
Utilizzare disk_free_space() per deridere il FileSystem

  

disk_free_space () - Data una stringa contenente una directory,   questa funzione restituisce il numero   di byte disponibili sul   file system o disco corrispondente   partizione.

Per simulare, basta avvolgere la funzione in una Classe FileSystem. Poi iniettare alla classe facendo il risparmio come una dipendenza e verificare se l'unità è piena prima di fare il risparmio effettivo. Nella tua unittest, basta scambiare la classe regolare con la classe beffardo un file system completo e il gioco è fatto. In questo modo non c'è bisogno di ricreare l'unità completa del disco o di tenere l'unità con il file di progetto per tutto il tempo ogni volta che si desidera eseguire nuovamente il test, per es.

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

e di simulare un filesystem fare

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

Se si vuole sovraccaricare la funzione per restituire 0 in ogni momento, è possibile utilizzare l'estensione RunKit Pecl e fare:

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

In uno sguardo alternativo in vfsStream :

  

vfsStream è un wrapper flusso per un file system virtuale che può essere utile per unit test per prendere in giro il sistema di file reale. Può essere utilizzato con qualsiasi quadro unit test, come PHPUnit o SimpleTest.

Ho usato un azionamento del pollice, come il volume per il processo.

Non sono sicuro di come farlo su OSX, ma su Linux, probabilmente sarei messo un quota del disco sul mio utente di prova e quindi eseguire l'applicazione.

O forse creare un file vuoto (uno piccolo), formato come una partizione ext3, montarlo utilizzando il dispositivo di loopback ed eseguire l'applicazione di PHP al suo interno. Questo sarebbe più vicino a un disco fisico che è a corto di spazio.

Una soluzione rapida e semplice sarebbe la creazione di una quota per un account utente specializzato. sostegno quote su Mac OS X

Se non ti dispiace il fastidio per configurarlo, e il fatto che, probabilmente, è necessario per il sistema operativo una seconda licenza, una macchina virtuale è probabilmente la migliore idea con il maggior numero di possibilità a lungo termine.

Crea un'immagine disco / file system in un file regolare (di dimensioni limitate) e ciclo montarlo.

Ma se vi ritroverete a fare questo spesso mi piacerebbe creare un'opportunità di trovare-machine avrete modo virtuale per riutilizzarlo.

Non puoi usare un Mock, e sostituire la parte del codice che scrive in realtà su disco, con una sostituzione di prova falsa che generare l'eccezione (s) si aspetta di vedere?

rimuovere in modo ricorsivo tutti i permessi di scrittura dal tuo WebFolder, cartelle e file vostra applicazione sta per scrivere.

Linea di fondo; non farlo. Scherzi a parte - ci sono tante cose che vanno terribilmente male quando un volume esaurisce lo spazio. A meno che il volume mirato è non il volume di avvio e ha non un'altra richiesta scritta ad esso , il comportamento come i riempimenti del disco sarà fuori dal vostro controllo in ogni caso.

Se è l'unità di avvio, il sistema sarà molto probabilmente il panico o un crash sul disco pieno comunque. Oppure, se non, sarà comportarsi in modo irregolare.

Se si sta parlando di un volume di dati, è tuo il solo app che sta scrivendo ad esso? Se qualsiasi altra applicazione è la scrittura, si fa so per certo come potrebbero mancare?

Lo spazio su disco è così sporco buon mercato in questi giorni che si è molto meglio garantire che lo spazio su disco sarà semplicemente mai accadere. Drop un 2TB e mettere un allarme quando raggiunge la capacità del 50%. Molto più economico da implementare (a meno che il vostro tempo è libero) e molto più affidabile.

Hai provato a montare con -r -f? Non è lo spazio su disco davvero basso, ma dovrebbe generare un errore dello stesso livello.

Credo che l'idea con la classe finta è la direzione giusta. Io di solito prova il mio codice in questo modo troppo. Se possibile, io uso un quadro di ciò, però, invece di scrivere quelle classi io stesso. Non so PHP molto bene (più di programmazione con C # e Java), ma questo sembra essere bello. https://github.com/padraic/mockery

Ovunque si ottiene lo spazio su disco rimanente, basta lasciare un commento, fuori e correre la vostra applicazione con un valori di ricambio, come 0,1, 0, -1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top