Testing Files Generator
Bahasa Indonesia

Cara membuat file rusak untuk pengujian

Validator yang hanya pernah diberi file sehat belum benar-benar diuji. Inilah cara mendapatkan file yang sengaja dirusak, keluar dengan tepat sebesar yang Anda minta, dan membawa manifes yang menyatakan apa yang harus dilakukan sistem Anda terhadapnya.

Jawaban singkat

tfg generate --format png --size 2mb --damage zero-head --out ./out menulis PNG berukuran tepat 2097152 byte yang byte pertamanya nol, dan manifes di sebelahnya mencatat bahwa sistem Anda harus menolaknya.

Cara yang biasa

Mengapa file yang dirusak dengan tangan adalah tes yang buruk

Cara yang biasa adalah editor hex, skrip yang membalik beberapa byte acak, atau memotong file dengan head atau truncate. Berhasil sekali, lalu merugikan Anda:

Yang Anda dapatkan

File yang rusak tetap berukuran seperti yang Anda minta

File dibuat seperti biasa lalu dirusak, dalam perjalanan ke disk. Ukurannya tetap seperti yang Anda minta, dan perintah yang sama menulis byte yang sama lagi.

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

Pengaturan ditulis setelah titik dua. Opsi ini bisa diulang, dan kerusakan diterapkan menurut urutan yang Anda tulis. Berlaku untuk semua 26 format.

Yang bisa dilakukan

Kerusakan apa saja yang ada?

Ini daftar yang dicetak program, dibaca darinya saat halaman ini dibangun. tfg damage mencetak daftar yang sama, dan tfg damage <id> menjelaskan apa yang diterima salah satunya.

Kerusakan Yang dilakukannya pada byte File terkecil Pengaturan
zero-head Menimpa byte pertama file dengan nol tanpa mengubah panjangnya. Sebagian besar pembaca melihat ke sana lebih dulu, jadi hampir semua hal menyadari kerusakan ini. 8 bytes

zero-head menulis nol di atas awal file. Sebagian besar pembaca melihat ke sana lebih dulu, ke tanda pengenal dan header yang menyatakan file itu apa, jadi hampir semua pembaca menyadarinya. Teks biasa dan log tidak punya tanda pengenal dan juga ditolak, karena deretan byte nol bukan teks. Di bawah empat byte, sebagian format keluar dengan kerusakan yang tidak dikeluhkan pembaca mana pun, itulah sebabnya pengaturan dimulai dari empat.

Yang dikatakan manifes

Manifes yang menyatakan apa yang harus terjadi

Setiap file yang rusak mendapat catatan yang menyatakan sistem Anda harus menolaknya, dengan kerusakannya dicatat di sampingnya:

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

Dua permintaan ditolak sebelum apa pun ditulis, karena masing-masing akan meninggalkan file di disk yang dijelaskan keliru oleh manifes:

Dalam resep

File sehat dan rusak dalam satu proses

Taruh keduanya dalam satu resep, dan manifes membawa harapan setiap file, sehingga tes tidak butuh daftar mana yang mana:

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

Dalam tes

Menjadikannya tes

Tes membaca manifes dan memeriksa bahwa yang terjadi sama dengan yang dinyatakan. Tidak perlu daftar nama file:

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

Penolakan yang baik adalah penolakan yang bersih. Pesan yang menyebut apa yang salah adalah jawaban yang Anda inginkan. Kesalahan server, macet, atau file yang tersimpan setengah adalah cacat yang ingin ditemukan tes ini.

Berikutnya

Ke mana dari sini