我们的应用程序连接到Lotus Domino服务器并在其数据库上运行。一旦我们在我们的客户端服务器中看到一个无法使用Lotus Notes客户端打开的损坏数据库。不幸的是,在我们提出副本之前,客户的工作人员已将其删除,但我们也希望用这种腐败的数据库测试应用程序的错误处理。
我们还尝试使用十六进制编辑器修改一个好的数据库中的一些随机字节,以使其损坏而不成功。我们正在寻找一种方法来创建一个腐败的数据库或一个可免费下载的数据库。
答案 0 :(得分:3)
IBM没有记录NSF文件的详细内部结构,因此模拟损坏的数据库确实没有很好的指南。
但是,如果将所有字节修改为零,那肯定会给你一个非常破坏的数据库。测试应用程序的行为并不是特别有用,这很可能与您在客户端服务器上看到的腐败类型不同。
NSF可能有多种方式被破坏。有些是由服务器自动修复的。有些会阻止数据库被打开。有些将允许您打开数据库但阻止发生读取或更新。有些可能会导致API调用返回的数据丢失或损坏。有些会使Notes API核心DLL崩溃。我真的不认为可以针对所有可能类型的损坏来测试代码的行为。无论如何,不是在合理数量的测试用例中。 (即,我猜测大约1000个随机归零一个最小尺寸NSF中的一个非零字节的情况将很有可能造成大部分可能的不同类型的损坏。)
答案 1 :(得分:1)
Lotus Notes / Domino数据库的内部结构最好描述为容器模型,以获取您需要访问受其ACL(访问控制列表)保护的数据库容器的数据。一旦你的内部几乎所有东西都是'文件',它是由其UNID识别的唯一记录。其中一些“文档”是设计元素,如表单,代理,视图(甚至其ACL)等,而其他文档则是实际的数据记录。腐败涉及一个或多个这些破坏,具体取决于它是什么以及破坏程度取决于当您尝试打开数据库或通过Web,客户注释或第三方软件访问它时将会遇到的情况。
鉴于上述情况,我在尝试创建一个“腐败”数据库进行测试时看不到多少好处,因为为了使这个数据有效,你需要知道你破坏了什么。 IBM保护这一点,并始终保护这些专有信息,因为他们不希望任何人构建备用Notes客户端。
我要补充的最后一件事是,在近十五年的Notes开发工作中,我遇到了很少的损坏,以至于编写代码来分析很少发生的损坏,良好的错误处理没有太多的商业案例在绝大多数情况下,你的代码中绰绰有余。