Testing Files Generator
हिन्दी

परीक्षण के लिए खराब फ़ाइल कैसे बनाएँ

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

छोटा जवाब

tfg generate --format png --size 2mb --damage zero-head --out ./out ठीक 2097152 बाइट की एक PNG लिखता है जिसके शुरुआती बाइट शून्य हैं, और उसके बगल का मैनिफ़ेस्ट दर्ज करता है कि आपके सिस्टम को उसे अस्वीकार करना चाहिए।

आम तरीका

हाथ से बिगाड़ी गई फ़ाइल खराब टेस्ट क्यों है

आम तरीके हैं हेक्स एडिटर, कुछ यादृच्छिक बाइट पलटने वाली स्क्रिप्ट, या head अथवा truncate से फ़ाइल को छोटा काट देना। ये एक बार चलते हैं, फिर महँगे पड़ते हैं:

आपको क्या मिलता है

खराब फ़ाइल का आकार वही रहता है जो आपने माँगा था

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

tfg generate --format png --size 2mb --damage zero-head --out ./out
tfg generate --format pdf --size 1mb --count 5 --damage zero-head:bytes=16 --out ./broken

सेटिंग कोलन के बाद लिखी जाती है। विकल्प दोहराया जा सकता है, और बिगाड़ आपके लिखे क्रम में लागू होते हैं। यह सभी 26 फ़ॉर्मैट के साथ चलता है।

यह क्या कर सकता है

कौन-कौन से बिगाड़ हैं?

यह वह सूची है जो प्रोग्राम छापता है, इस पेज को बनाते समय उसी से पढ़ी गई। tfg damage यही सूची छापता है, और tfg damage <id> बताता है कि उनमें से एक क्या लेता है।

बिगाड़ बाइट के साथ क्या करता है सबसे छोटी फ़ाइल सेटिंग
zero-head फ़ाइल के शुरुआती बाइट को शून्य से ढक देता है और लंबाई नहीं छेड़ता। ज़्यादातर रीडर सबसे पहले वहीं देखते हैं, इसलिए यह बिगाड़ लगभग हर चीज़ पकड़ लेती है। 8 bytes

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

मैनिफ़ेस्ट क्या कहता है

एक मैनिफ़ेस्ट जो बताता है कि क्या होना चाहिए

हर खराब फ़ाइल को एक प्रविष्टि मिलती है जो कहती है कि आपके सिस्टम को उसे अस्वीकार करना चाहिए, और बिगाड़ उसके बगल में दर्ज रहता है:

"expected": {
  "outcome": "reject",
  "reason": "content_malformed",
  "confidence": "certain"
},
"damage": [
  {
    "type": "zero-head",
    "settings": {
      "bytes": "8"
    }
  }
]

दो अनुरोध कुछ भी लिखे जाने से पहले ठुकरा दिए जाते हैं, क्योंकि हर एक डिस्क पर ऐसी फ़ाइल छोड़ देता जिसका मैनिफ़ेस्ट गलत वर्णन करता:

रेसिपी में

एक रन में स्वस्थ और खराब फ़ाइलें

दोनों को एक रेसिपी में रखें, और मैनिफ़ेस्ट हर फ़ाइल की अपेक्षा साथ रखता है, इसलिए टेस्ट को यह बताने वाली सूची नहीं चाहिए कि कौन-सी कौन-सी है:

version: 1
targets:
  - id: healthy
    format: pdf
    size: 1mb
    expected: accept
  - id: broken
    format: pdf
    size: 1mb
    damage:
      - zero-head

टेस्ट में

इसे टेस्ट बनाना

टेस्ट मैनिफ़ेस्ट पढ़ता है और जाँचता है कि जो हुआ वही है जो घोषित किया गया था। उसे फ़ाइल नामों की सूची नहीं चाहिए:

import json, os

directory = "healthy-and-broken"
manifest = json.load(open(os.path.join(directory, "manifest.json")))

for entry in manifest["files"]:
    response = upload(os.path.join(directory, entry["path"]))
    if entry["expected"]["outcome"] == "reject":
        assert not response.ok
    else:
        assert response.ok

अच्छा इनकार साफ़ इनकार होता है। जो संदेश बताए कि क्या गलत था, वही वह जवाब है जो आप चाहते हैं। सर्वर त्रुटि, अटक जाना या आधी सहेजी फ़ाइल वह खराबी है जिसे ढूँढ़ने के लिए यह टेस्ट है।

आगे

यहाँ से कहाँ जाएँ