Testing Files Generator
Türkçe

Test için bozuk dosya nasıl yapılır

Yalnızca sağlam dosyalar gösterilmiş bir doğrulayıcı gerçekten sınanmış sayılmaz. İşte kasıtlı bozulmuş, tam istediğiniz boyutta çıkan ve sisteminizin onunla ne yapması gerektiğini söyleyen bir bildirimle gelen bir dosyayı nasıl elde edeceğiniz.

Kısa yanıt

tfg generate --format png --size 2mb --damage zero-head --out ./out tam 2097152 bayt boyutunda, ilk baytları sıfır olan bir PNG yazar ve yanındaki bildirim sisteminizin onu reddetmesi gerektiğini kaydeder.

Olağan yol

Elle bozulmuş bir dosya neden kötü bir testtir

Olağan yollar bir onaltılık düzenleyici, birkaç rastgele baytı çeviren bir betik ya da bir dosyayı head veya truncate ile kısaltmaktır. Bir kez işe yarar, sonra size pahalıya mal olur:

Ne elde edersiniz

Hasarlı bir dosya yine istediğiniz boyuttadır

Dosya normal üretilir, sonra diske giderken bozulur. İstediğiniz boyutu korur ve aynı komut yine aynı baytları yazar.

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

Ayarlar iki noktadan sonra yazılır. Seçenek tekrarlanabilir ve hasarlar yazdığınız sırayla uygulanır. 26 biçimin her biriyle çalışır.

Neler yapabilir

Hangi hasarlar var?

Bu, programın yazdırdığı listedir ve bu sayfa oluşturulurken programdan okunur. tfg damage aynısını yazdırır, tfg damage <id> ise birinin neyi kabul ettiğini söyler.

Hasar Baytlara ne yapar En küçük dosya Ayarlar
zero-head Dosyanın ilk baytlarını uzunluğuna dokunmadan sıfırlarla ezer. Okuyucuların çoğu önce oraya bakar, bu yüzden hemen her şey bu hasarı fark eder. 8 bytes

zero-head dosyanın başına sıfırlar yazar. Okuyucuların çoğu önce oraya bakar, dosyanın ne olduğunu söyleyen imzaya ve başlığa, bu yüzden hemen her okuyucu fark eder. Düz metin ve günlüklerin imzası yoktur ve onlar da reddedilir, çünkü bir sıfır baytı dizisi metin değildir. Dört baytın altında bazı biçimler hiçbir okuyucunun şikâyet etmediği bir hasarla çıkar, ayarın dörtten başlamasının nedeni budur.

Bildirim ne söyler

Ne olması gerektiğini söyleyen bir bildirim

Hasarlı her dosya, sisteminizin onu reddetmesi gerektiğini söyleyen bir kayıt alır ve hasar yanına yazılır:

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

İki istek, bir şey yazılmadan önce reddedilir, çünkü her biri diskte bildirimin yanlış tarif ettiği bir dosya bırakırdı:

Bir tarifte

Tek çalıştırmada sağlam ve bozuk dosyalar

İkisini de tek bir tarife koyun, bildirim her dosyanın beklentisini taşır. Böylece testin hangisinin hangisi olduğuna dair bir listeye ihtiyacı kalmaz:

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

Bir testte

Bunu bir teste dönüştürmek

Test bildirimi okur ve olanın bildirilenle aynı olup olmadığına bakar. Dosya adı listesine ihtiyacı yoktur:

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

İyi bir ret temiz bir rettir. Neyin yanlış olduğunu söyleyen bir ileti istediğiniz yanıttır. Sunucu hatası, takılma ya da yarım kaydedilmiş dosya, bu testin bulmak için var olduğu kusurdur.

Sonraki

Buradan nereye gidilir