Testing Files Generator
Українська

Як створити файл точного розміру

У кожній системі для цього є команда, і всі три наведено нижче. Вони дають файл із точною кількістю байтів, а для багатьох тестів цього досить. Кожну команду на цій сторінці було виконано до публікації у тій системі, до якої вона належить.

Коротка відповідь

Windows: fsutil file createnew name 10485760. Linux: dd if=/dev/zero of=name bs=1M count=10. macOS: mkfile 10m name. Розміри вказуються в байтах, а 10 МБ, пораховані так, як рахує ваш файловий менеджер, - це 10485760.

Windows

fsutil і варіант на PowerShell, якому не потрібно нічого додаткового

fsutil входить до Windows. Він приймає розмір у байтах, тому спершу порахуйте число: 10 МБ - це 10485760, 100 МБ - 104857600, 1 ГБ - 1073741824.

fsutil file createnew test10mb.bin 10485760

Виміряно у Windows 11: працює зі звичайного командного рядка без підвищених прав, і файл виходить рівно в 10485760 байт.

PowerShell може зробити те саме, не викликаючи іншу програму, і розуміє одиниці:

$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()

10MB у PowerShell означає 10485760 байт, той самий рахунок за основою 1024, що його використовує Провідник, тому дві команди вище дають той самий розмір.

Linux

dd, truncate і fallocate, і різниця, що ловить людей

dd знають усі. Він справді записує байти:

dd if=/dev/zero of=test10mb.bin bs=1M count=10

truncate спрацьовує миттєво, і в цьому підступ. Виміряно в Alpine Linux: файл повідомляє 10485760 байт і займає нуль блоків - це розріджений файл. Усе, що його читає, отримує десять мегабайт нулів, але диск місця так і не віддав:

truncate -s 10M test10mb.bin

Для перевірки ліміту завантаження це нормально, а для перевірки дискової квоти вводить в оману. fallocate - те, до чого варто вдатися, коли місце має бути справжнім:

fallocate -l 10M test10mb.bin

А коли вміст має бути нестисливим, щоб архіватор не міг знову його стиснути:

head -c 10485760 /dev/urandom > test10mb.bin

macOS

mkfile, що не є розрідженим, і дві команди, які ви вже знаєте

У macOS є mkfile. Виміряно в macOS 26.6.2: 10485760 байт і 20480 блоків, тобто місце справді виділено, а не обіцяно:

mkfile 10m test10mb.bin

dd і truncate теж є й поводяться як у Linux:

dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin

Де це перестає працювати

Файл правильного розміру - не файл правильного виду

Усе сказане вище дає блок нулів. Цього досить, коли тестоване дивиться лише на розмір: ліміт завантаження, квота, передача. Цього перестає вистачати, щойно щось відкриває файл.

Виміряно, і варто перевірити самому: зробіть файл на 2 МБ командою fsutil, назвіть його photo.png і передайте бібліотеці роботи із зображеннями. Pillow відповість cannot identify image file. Це не PNG. Він ним ніколи й не був, так казало лише ім'я.

Це важливіше, ніж здається, через те, в який бік тест тоді провалюється. Ваша точка завантаження відхиляє файл, ваш тест зеленіє, і ви робите висновок, що ліміт розміру працює. Вона відхилила його не через розмір. Вона відхилила його тому, що байти не були зображенням, і правило, яке ви хотіли перевірити, так і не було досягнуте.

Інший шлях

Справжній файл цього формату точно того розміру, який ви запросили

Саме це робить Testing Files Generator. Файл - справжній файл свого формату, він відкривається у своїй програмі, і в ньому рівно стільки байтів, скільки ви запросили, з точністю до байта:

tfg generate --format png --size 10mb --out ./fixtures

Запросіть розмір, якого формат не може досягти, і ви отримаєте помилку з назвою мінімуму та причиною, а не файл неправильного розміру. Сторінка форматів перелічує кожен формат з найменшим файлом, який він може створити.

А ліміт - це три тестові випадки, а не один, тому інструмент збирає всі три:

tfg generate --format pdf --boundary 10mb --out ./edges

Ви отримаєте 10485759, 10485760 і 10485761 байт та маніфест, що каже, які з них ваша система має прийняти, а які відхилити. Сторінка сценаріїв розбирає це та ще чотири завдання, для яких інструмент створений.

Безкоштовно, відкритий код, GPL-3.0. Без реєстрації. Збірки для Windows і macOS підписані та запускаються без попереджень.

Тож що використовувати?

Обидві є на цій сторінці, бо обидві бувають слушними. Помилка, якої слід уникати, - використати першу там, де потрібна друга, і сприйняти зелений тест за доказ.