2010-01-11 8 views
31

मुझे अपने वेब ऐप को उस परिदृश्य में परीक्षण करने की आवश्यकता है जहां कोई डिस्क स्पेस शेष नहीं है, यानी मैं और भी फाइल नहीं लिख सकता। लेकिन मैं यह सुनिश्चित करने के लिए कि वास्तव में कोई जगह नहीं छोड़ी गई है, मैं सिर्फ अपनी हार्ड ड्राइव को जंक के साथ भरना नहीं चाहता हूं। मैं चाहता हूं कि इस स्थिति को एक विशेष प्रक्रिया (वास्तव में, एक PHP ऐप) के साथ अनुकरण करना है।कोई खाली डिस्क स्पेस स्थिति अनुकरण करने का सबसे आसान तरीका?

दरअसल, अस्थायी रूप से डिस्क को एक प्रक्रिया में लिखने पर रोक लगाना पर्याप्त होना चाहिए।

ऐसा करने का सबसे आसान तरीका क्या है? मैं मैक ओएस एक्स 10.6.2 का उपयोग कर निर्मित अपाचे/PHP बंडल के साथ कर रहा हूं। धन्यवाद।

संपादित करें: डिस्क फ्री स्पेस चेक विश्वसनीय नहीं होने के बाद से यह किसी भी पल को बदल सकता है। कई पेज एक साथ परोसा जा रहा है। जांच करते समय पर्याप्त खाली स्थान हो सकता है, लेकिन उस क्षण तक कोई भी वास्तव में आप कुछ लिखते हैं। साथ ही, डिस्क फ्री स्पेस की जांच करने के लिए हर जगह कोड लिखने की आवश्यकता होगी, जो मैं एक फाइल लिखता हूं, जो मैं नहीं चाहता हूं :-) अंत में, यह समाधान बिल्कुल ठीक है जो मैं परीक्षण करने की कोशिश कर रहा हूं: मेरा ऐप कब व्यवहार करेगा यह और नहीं लिख सकता है।

उत्तर

28

मुझे यकीन है कि आप अपनी खुद की .dmg फ़ाइल को आकार की फ़ाइल सिस्टम के साथ भी बना सकते हैं ... 2 एमबी कहें और इसे लिखें। यदि यह काम करता है, तो यह परीक्षण के लिए अति-आसान है - आप बस इसे माउंट करें और परीक्षण के लिए पथ स्विच करें। यदि डीएमजी काफी छोटा है, तो आप इसे स्रोत नियंत्रण में भी अपलोड कर सकते हैं।

+4

या एक सिम्लिंक का उपयोग करें। – Matt

13

जब मुझे ऐसा करने की आवश्यकता होती है तो मैंने वर्चुअल डिस्क को आवंटित सीमित स्थान के साथ वर्चुअल मशीन बनाई।

4

मैंने प्रक्रिया के लिए वॉल्यूम के रूप में अंगूठे ड्राइव का उपयोग किया।

2

एक त्वरित और आसान समाधान एक विशेष उपयोगकर्ता खाते के लिए कोटा स्थापित करेगा। Quota support on Mac OS X

यदि आपको इसे स्थापित करने में परेशानी नहीं है, और तथ्य यह है कि आपको शायद अपने ऑपरेटिंग सिस्टम के लिए दूसरा लाइसेंस चाहिए, तो वर्चुअल मशीन शायद सबसे लंबी अवधि की संभावनाओं के साथ सबसे अच्छा विचार है।

-1

आप कहीं भी शेष डिस्क स्थान प्राप्त है, बस उसे बाहर टिप्पणी और इस तरह 0.1, 0 के रूप में एक स्थानापन्न के मूल्यों के साथ अपने अनुप्रयोग चलाने, -1

+1

यदि आप किसी प्रकार के "नोफ्रीडिस्क स्पेस" अपवाद पर निर्भर थे तो यह काम नहीं करेगा। –

3

मैं कैसे पर OSX लेकिन पर यह करने के लिए के बारे में सुनिश्चित नहीं कर रहा हूँ लिनक्स, मैं शायद अपने टेस्ट उपयोगकर्ता पर डिस्क कोटा डालूंगा और फिर ऐप चलाऊंगा।

या शायद एक शून्य फ़ाइल (एक छोटा सा) बनाएं, इसे ext3 विभाजन के रूप में प्रारूपित करें, इसे लूपबैक डिवाइस का उपयोग करके माउंट करें और इसके अंदर PHP ऐप चलाएं। यह एक भौतिक डिस्क के करीब होगा जो अंतरिक्ष से कम है।

5

प्रीफ़िल्ल्ड डमी फाइल सिस्टम का उपयोग करने की आवश्यकता नहीं है।
उपयोग disk_free_space() FileSystem उपहास करने के लिए

disk_free_space() - एक स्ट्रिंग एक निर्देशिका युक्त को देखते हुए, इस समारोह बाइट की संख्या इसी फाइल सिस्टम या डिस्क विभाजन पर उपलब्ध वापस आ जाएगी।

अनुकरण करने के लिए, बस फ़ंक्शन को सिस्टम सिस्टम सिस्टम में लपेटें। फिर अपनी कक्षा को निर्भरता के रूप में बचत करने के लिए इंजेक्ट करें और जांच करें कि वास्तविक बचत करने से पहले ड्राइव पूर्ण हो गई है या नहीं। अपने यूनिटटेस्ट में, बस एक पूर्ण फ़ाइल सिस्टम का मज़ाक उड़ाते हुए कक्षा के साथ नियमित कक्षा को स्वैप करें और आप कर चुके हैं।इस तरह आपको पूर्ण डिस्क ड्राइव को फिर से बनाने की ज़रूरत नहीं है या जब भी आप अपना परीक्षण दोबारा शुरू करना चाहते हैं, तो ड्राइव को अपनी प्रोजेक्ट फ़ाइलों के साथ हर समय रखें, उदा।

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

और एक पूर्ण FileSystem करते

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।

+3

मैं php भाग के बारे में दृढ़ता से अक्षम हूं, लेकिन यह आपकी निर्भरता का मज़ाक उड़ाता है, जो वास्तव में मैं करने की कोशिश करता हूं। – Mathias

+0

@ माथीस: हाँ, यही वह होना चाहिए। ओपी के कोड में फिट होने के लिए इसे कुछ tweaking की आवश्यकता हो सकती है, लेकिन यह एक नकली है। मैंने इसे स्पष्ट करने के लिए उत्तर अपडेट किया है। – Gordon

+0

दौड़ की स्थिति के लिए उम्मीदवार की तरह लगता है। –

2

एक नियमित फ़ाइल (सीमित आकार के) में डिस्क/फाइल सिस्टम छवि बनाएं और लूप इसे माउंट करें।

लेकिन यदि आप अक्सर ऐसा करेंगे तो मैं वर्चुअल मशीन — बनाउंगा, आपको इसका पुन: उपयोग करने का अवसर मिलेगा।

1

क्या आप एक नकली का उपयोग नहीं कर सकते हैं, और वास्तव में डिस्क पर लिखने वाले आपके कोड के हिस्से को प्रतिस्थापित कर सकते हैं, नकली परीक्षण प्रतिस्थापन के साथ जो आप को देखने के लिए अपवाद फेंक देगा?

0

आपके वेबफोल्डर, फ़ोल्डर्स और फ़ाइलों से आपके सभी एप लिखने जा रहे फाइलों से सभी लिखने की अनुमतियों को दोबारा हटा दें।

0

नीचे की रेखा; ऐसा मत करो। गंभीरता से - इतनी सारी चीज़ें हैं जो वॉल्यूम से बाहर होने पर बहुत गलत हो जाती हैं। जब तक लक्षित वॉल्यूम बूट वॉल्यूम नहीं है और पर एक अन्य एप्लिकेशन लेखन नहीं है, तो डिस्क भरने के व्यवहार को आपके नियंत्रण से बाहर किया जाएगा।

यदि यह बूट ड्राइव है, तो सिस्टम पूरी तरह से पूर्ण डिस्क पर घबराहट या दुर्घटनाग्रस्त हो जाएगा। या, यदि नहीं, तो यह गलत तरीके से व्यवहार करेगा।

यदि आप डेटा वॉल्यूम के बारे में बात कर रहे हैं, तो क्या यह केवल ऐप है जो इसे लिख रहा है? यदि कोई अन्य ऐप लिख रहा है, तो क्या आप जानते हैं कि निश्चित रूप से वे कैसे असफल हो सकते हैं?

डिस्क स्पेस इतनी गंदगी है कि आप डिस्क स्पेस से सुनिश्चित करने से कहीं अधिक बेहतर हैं। एक 2 टीबी ड्राइव ड्रॉप करें और 50% क्षमता तक पहुंचने पर अलार्म डालें। लागू करने के लिए बहुत सस्ता है (जब तक आपका समय मुक्त न हो) और कहीं अधिक विश्वसनीय।

0

क्या आपने -f -r के साथ माउंट करने की कोशिश की है? यह वास्तव में कम डिस्क स्थान नहीं है, लेकिन इसे एक ही स्तर से एक त्रुटि फेंकना चाहिए।

0

मुझे लगता है कि नकली वर्ग के साथ विचार सही दिशा है। मैं आमतौर पर इस तरह से अपने कोड का परीक्षण भी करता हूं। यदि संभव हो तो मैं उन वर्गों को लिखने के बजाय, इसके लिए एक ढांचा का उपयोग करता हूं। मैं PHP को बहुत अच्छी तरह से नहीं जानता (सी # और जावा के साथ अधिक प्रोग्रामिंग), लेकिन यह अच्छा लगता है। https://github.com/padraic/mockery

संबंधित मुद्दे