2012-06-01 3 views
0

Наше приложение подключается к серверу Lotus Domino и работает с его базами данных. Как только мы увидели поврежденную базу данных на одном из серверов нашего клиента, который не мог быть открыт клиентом Lotus Notes. К сожалению, сотрудники клиента удалили его, прежде чем мы могли запросить копию, но мы хотели бы протестировать обработку ошибок приложения с помощью таких коррумпированных баз данных.Создание поврежденной базы данных Lotus

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

ответ

3

IBM не задокументировала подробную внутреннюю структуру файла NSF, поэтому действительно нет хорошего руководства по моделированию поврежденных баз данных.

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

Существует множество способов, по которым NSF может быть поврежден. Некоторые из них автоматически фиксируются сервером. Некоторые из них будут препятствовать открытию базы данных. Некоторые из них позволят вам открыть базу данных, но предотвратить появление прочтений или обновлений. Некоторые могут привести к потере или искажению данных, возвращаемых вызовами API. Некоторые из них будут разбивать основные DLL-файлы Notes API. Я действительно не думаю, что можно протестировать поведение вашего кода для всех возможных типов коррупции. Во всяком случае, не в разумном количестве тестовых случаев. (Т.е., я предполагаю, что около 1000 случаев случайного обнуления одного из отдельных ненулевых байтов в NSF минимального размера имели бы хорошую вероятность причинения большей части различных видов повреждений, которые возможны.)

1

Внутренняя структура базы данных Lotus Notes/Domino лучше всего описывается как модель контейнера, чтобы получить доступ к данным внутри, вам нужно получить доступ к контейнеру базы данных, который защищен его ACL (списком контроля доступа). Как только ваша внутренняя часть почти все является «Документом», уникальной записью, идентифицированной ее UNID. Некоторые из этих «документов» представляют собой элементы дизайна, такие как формы, агенты, представления (и даже его ACL) и т. Д., В то время как другие являются фактическими данными. Коррупция включает в себя одно или несколько из этих нарушений, в зависимости от того, что это такое и насколько оно нарушено, зависит от того, что вы испытаете при попытке открыть базу данных или получить доступ к ней через Интернет, отмечает клиент или стороннюю часть программного обеспечения.

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

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

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