0

我们的应用程序连接到 Lotus Domino 服务器并在其数据库上运行。一旦我们在我们的一个客户端服务器中看到一个损坏的数据库,它无法用 Lotus Notes 客户端打开。不幸的是,客户的工作人员在我们要求副本之前将其删除,但我们也想测试使用这种损坏的数据库的应用程序的错误处理。

我们还尝试使用十六进制编辑器修改一个好的数据库中的一些随机字节,使其在没有成功的情况下损坏。我们正在寻找一种方法来创建损坏的数据库或可免费下载的数据库。

4

2 回答 2

3

IBM 没有记录 NSF 文件的详细内部结构,因此实际上没有很好的指南来模拟损坏的数据库。

但是,如果您将所有字节都修改为零,那肯定会给您一个非常损坏的数据库。测试应用程序的行为不会特别有用,而且这很可能与您在客户端服务器上看到的损坏类型不同。

NSF 被破坏的方式有很多种。有些是由服务器自动修复的。有些会阻止打开数据库。有些允许您打开数据库,但阻止读取或更新发生。有些可能会导致 API 调用返回的数据丢失或损坏。有些会导致 Notes API 核心 DLL 崩溃。我真的认为不可能针对所有可能的损坏类型测试您的代码行为。无论如何,不​​在合理数量的测试用例中。(即,我猜测大约 1,000 次将最小大小的 NSF 中的单个非零字节随机归零的情况很有可能造成大多数可能的不同类型的损坏。)

于 2012-06-01T16:36:06.383 回答
1

Lotus Notes/Domino 数据库的内部结构最好描述为容器模型,要获取内部数据,您需要访问受其 ACL(访问控制列表)保护的数据库容器。一旦你的内部几乎所有东西都是“文档”,它是由其 UNID 标识的唯一记录。其中一些“文档”是设计元素,如表单、代理、视图(甚至它的 ACL)等,而另一些则是实际的数据记录。损坏涉及其中一个或多个破坏,具体取决于它是什么以及破坏的程度取决于您在尝试打开数据库或通过 Web、Notes 客户端或第三方软件访问它时会遇到什么。

鉴于上述情况,我看不出尝试创建一个“损坏的”数据库进行测试有多大好处,因为要使这有效,您需要知道您正在破坏什么位。IBM 对此进行保护,并将始终保护这些专有信息,因为他们不希望任何人构建替代的 Notes 客户端。

我要补充的最后一件事是,在将近 15 年的 Notes 开发工作中,我很少遇到损坏,因此没有太多的商业案例来编写代码来分析很少发生的损坏,在代码中进行良好的错误处理在绝大多数情况下将绰绰有余。

于 2012-06-05T10:59:13.937 回答