Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Socket:如何模拟真实的LDAP客户端连接?_C#_Unit Testing_Networking_Ldap - Fatal编程技术网

C#Socket:如何模拟真实的LDAP客户端连接?

C#Socket:如何模拟真实的LDAP客户端连接?,c#,unit-testing,networking,ldap,C#,Unit Testing,Networking,Ldap,我的连接处理代码中有一个错误条件。此错误导致我的服务器在某些请求上冻结,但这是随机的。重要的是要求是一致的。假设其中25%会导致服务器冻结 这里有一个陷阱:只有在发出第一个测试请求时,服务器才会冻结。在无限多的后续测试请求中,它不会失败。。。这非常重要:只有在使用单元测试进行测试时才会发生 我的测试只是运行DirectoryEntryquery。它创建nDirectoryEntry对象,查询它们,然后对每个对象调用Close,然后重复该过程m次 如果失败,则在第一次查询时失败 但如果我连接像Ld

我的连接处理代码中有一个错误条件。此错误导致我的服务器在某些请求上冻结,但这是随机的。重要的是要求是一致的。假设其中25%会导致服务器冻结

这里有一个陷阱:只有在发出第一个测试请求时,服务器才会冻结。在无限多的后续测试请求中,它不会失败。。。这非常重要:只有在使用单元测试进行测试时才会发生

我的测试只是运行
DirectoryEntry
query。它创建
n
DirectoryEntry
对象,查询它们,然后对每个对象调用
Close
,然后重复该过程
m

如果失败,则在第一次查询时失败

但如果我连接像LdapAdmin这样的真实LDAP客户机,它的行为会完全不同!服务器崩溃的几率非常高,超过50%。显然,真正的客户端在连接时会做一些不同的事情,而且很明显,即使是我的C#test代码也会做一些崩溃的事情,但这只是第一次。我随后的测试查询根本不测试服务器。它们对检测“客户端连接”冻结的效率为零。

现在,我通过多次手动运行我的测试“exe”文件来测试它。经过8次尝试后,被冻住的概率接近100%。现在我希望我的单元测试能为我做到这一点——做令人不快的动作,比如说8次,如果它冻结一次就会失败

不幸的是,在应用程序启动和后续调用时,连接客户端的状态不同。我的问题是到底有什么不同?我测试了它不是测试中的服务器。通过从外部客户端连接到它,我可以随时使它崩溃。第一次尝试-成功,客户端已连接,客户端可以尝试对我的服务器进行DDOS攻击,祝你好运,这不会发生。但当我再次尝试连接时,服务器死机。我试图在测试中模拟这种行为,但失败了。要么我在第一次尝试时检测到崩溃,要么我获得无限多个成功连接。我需要一种方法来真正重置我的测试客户端,这样它们的行为就像一个新的客户端应用程序第一次连接到我的服务器
Close
Dispose
目录条目的
methods
无法实现该目标,否则会涉及其他内容

没有代码示例,因为
DirectoryEntry
查询是一行。我的测试应该只执行这样的查询,但也应该在之后断开连接,忘记它曾经连接到服务器。我希望每个
DirectoryEntry
查询都像应用程序启动时一样新鲜

顺便说一句,我已经找到了这个特定冻结的原因,现在我希望我的单元测试能够检测到这种情况,以避免代码更改时出现类似问题

另一个奇怪的发现:当我尝试将10k客户端连接到我的服务器时,它通过了。。。或者第一次尝试失败

也尝试过: 我等待
DirectoryEntry
对象的
Disposed
事件。没有帮助。还是没有快乐。为了赶上冻结,我必须运行相同的测试几次

尝试处置所有对象,包括测试服务器,并在测试期间多次重新创建它们。还是没有快乐。要么在启动时失败,要么无论此测试迭代多少次都不会失败