【问题标题】:How to refuse connection on purpose?如何故意拒绝连接?
【发布时间】:2020-07-06 12:13:54
【问题描述】:

我有功能测试来测试一个与一些内部模拟 HTTP 服务器建立 HTTP 连接的系统。通过模拟,我的意思是它们是真实的服务器,只是由我自己实现以模拟实际的 3rd 方服务器。他们在java中,使用码头。

到目前为止,为了测试这些 HTTP 服务器何时关闭,我一直在开始测试之前停止模拟服务器,然后重新启动它们。这工作正常,但它现在妨碍了测试并行运行。

模拟 HTTP 服务器根据请求做出不同的回复或不回复。

我的问题是,有没有办法让模拟 HTTP 服务器拒绝某些连接,例如基于请求?

我猜这是 Jetty 特有的,但如果需要,我很乐意使用另一个库。

【问题讨论】:

    标签: java jetty functional-testing parallel-testing


    【解决方案1】:

    您不能根据来自已接受连接的流数据拒绝连接。

    真正的问题是:

    • 为什么要使用模拟?
    • 为什么只使用 1 个服务器实例?

    启动一个真正的嵌入式服务器,每个并行测试单元,在该单元完成后停止它。 (“并行测试单元”是并行测试使用的任何切片,可以是测试方法、测试用例、测试套件等。)

    让真实服务器使用动态绑定的端口(设置ServerConnector.setPort(0)),然后使用Server.getURI() 了解基本服务器URI(包括方案、主机、端口和默认上下文路径)。

    How to run jetty server for java junit testing

    【讨论】:

    • 所以有多种环境。这些是针对位于环境中的应用程序服务器运行的功能测试 (bdd),其中所有第三方 http 服务器都被“本地”http 服务器替换,这些服务器根据输入进行回复。功能测试并没有办法在应用服务器上启动模拟服务器。
    【解决方案2】:

    您不能拒绝来自应用程序的连接。

    一个简单的替代方法是让客户端使用错误的端口进行测试。如果您让客户端尝试连接到端口 12345,则会收到连接被拒绝错误。

    当操作系统网络堆栈发现没有应用程序正在侦听连接的目标端口时,会生成连接被拒绝错误。但是你的模拟服务器正在监听它的端口。

    【讨论】:

    • 明白你的意思,拒绝已经接受的连接是不可能的。我知道我必须进行一些架构更改。
    猜你喜欢
    • 2017-08-08
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多