2009-08-14 4 views
3

Я знаю, что может показаться смешным, что вы намеренно захотите испортить файл, но я заверяю вас в этом по уважительной причине.Программа для повреждения файла?

В моем приложении у меня много сериализации xml. Это, в свою очередь, также означает, что у меня много десериализации.

Сегодня я попробовал некоторые сценарии катастрофы. Я перезагружаю сервер во время операции сериализации, как и ожидалось, он исказил файл xml.

Проблема заключается в том, что попытка «выключить» сервер в нужное время, чтобы повредить файл, на самом деле не оптимальна, во-первых, его удача поймать операцию во время записи .0001 мс, а во-вторых, сервер затем необходимо перезагрузить. Также его просто плохая идея, чтобы вытащить вилку с сервера по другим причинам.

Есть ли приложение, которое может эффективно испортить файл, чтобы этот файл можно было использовать для тестирования в моем приложении?

ответ

20

Откройте его в hex editor и получайте удовольствие от скручивания битов?

+1

Не думал об этом. это может быть одним из способов «разбить файл» –

+0

Еще проще, просто создайте пустой файл с именем, которое вам нужно для тестирования. – EBGreen

+1

Зависит от того, что вы подразумеваете под «Коррупцией», конечно. – EBGreen

2

Вы пытаетесь проверить частично деградированный файл?

Если вы хотите проверить, как ваша программа реагирует на плохие данные, почему бы просто не использовать какой-либо случайный текстовый файл для ввода?

+0

Хотите попробовать и эмулировать ту же коррупцию, которая произошла во время реальной операции записи, которая не была завершена. Настолько, насколько это возможно. –

+1

Если вы используете * nix, посмотрите на dd и «/ dev/urandom» - не может быть более случайным, чем это - например. dd if =/dev/urandom of =/my/random/file bs = 1024 count = 1024 -> 1 мега полностью случайный файл – Matt

+0

Хорошее решение для Linux, но это основано на Windows :) –

0

согласен с опцией Hex редактор, так как это позволит вам ввести нетекстовые значения в файл, например нулям (0x00) и т.д.

+5

Просто, чтобы помочь вам, StackOverflow способ предоставить этот вход должен был бы добавить его в качестве комментария к другому ответу, так как это совсем не отдельный ответ. – EBGreen

+0

Наверняка сложно получить репутацию только с комментариями. – Robert

+0

Добрый, трудно получить репутацию, когда вы опускаетесь, - проголосовали за фермерство. ;) – WCWedin

5

Это своего рода подход за Fuzz Testing, т.е. ввести случайные варианты и посмотреть, как справляется ваше приложение. Вы можете посмотреть некоторые из фреймов тестирования fuzz, упомянутых в цитируемой ссылке. Но в вашем случае было бы просто использовать случайный генератор и вставлять биты в эти позиции, чтобы повредить его. Если у вас есть известный случай, то вы можете просто использовать существующий поврежденный файл, конечно.

0

Если вы пытаетесь моделировать прерванную запись, вы можете просто усечь строку, представляющую сериализованные данные. Это было бы особенно удобно, если вы используете модульные тесты, но все же вполне выполнимы с помощью Блокнота.

Конечно, это всего лишь один вид плохих данных, но стоит отметить, что XML, который каким-либо образом искажен, по существу, больше не является XML, и большинство парсеров отклонят его из-за руки при первом знаке синтаксиса ошибка.

2

Существует несколько способов извлечения XML-файла. Думая о некоторых: - Неполные теги XML (усеченный XML). - Неожиданный контент на данные (Binary/more text). Во-первых, я бы скопировал «правильный/полный» XML-файл и изменил бы его вручную. Для второго я бы конкатенировал частичный файл XML с любым двоичным файлом в файловой системе.

Hex редактора кажется немного слишком много для меня;)

1

Я очень рекомендую вам Dont сделать «случайные байты» коррупции для тестирования. Мало того, что вы не знаете точно, какое состояние тестирования вы делаете, если вы найдете ошибку, вам будет трудно нажать, чтобы гарантировать, что следующий тест проверит исправление.

Моя рекомендация состоит в том, чтобы вручную (или программно) повредить файл предсказуемым образом, чтобы вы знали, что тестируете, и как воспроизвести тест, если нужно.(конечно, вам, вероятно, понадобятся несколько предсказуемых способов обеспечения защиты от коррупции в любом месте файла)

+0

Существуют определенные классы проблем, которые лучше всего тестируются со случайными данными - например, когда характер операции приводит к комбинаторному взрыву действительного ввода. Это не один из таких случаев; +1. Не уверен, почему это было отклонено. – WCWedin

Смежные вопросы