嵌入式Java HTTPS服务器进行集成测试

圭多

我正在为通过HTTPS连接到外部API的Mule ESB应用程序编写集成测试。我想模拟外部API并在Maven构建过程中运行端到端集成测试。我的问题是关于设置嵌入式HTTPS服务器。我尝试使用Jersey,但它仅提供HTTP。我在看这个例子

https://github.com/jersey/jersey/tree/master/examples/https-clientserver-grizzly

我想知道是否还涉及一些手动步骤,或者它是否可以在每次启动构建时自动设置所有内容。

有什么建议或想法吗?

编辑。我的最终目标是在可通过HTTPS访问的嵌入式服务器中部署JAX-RS服务。而且不需要客户端密钥/证书配置。

编辑2.现在,我的问题与证书有关。集成测试的重点是模拟外部组件并验证我的应用程序是否正常运行。现在,如果我设置了嵌入式HTTPS服务器并使用cmd-line构建的证书,则需要在客户端中添加SSL配置(如@Ryan Hoegg所指出的)。这不是我理想中想要的:是否有解决方案可以使它工作无需修改我的客户端应用程序代码?这应该是一个超越Mule的通用Java问题。

瑞安·霍格(Ryan Hoegg)

为此使用confluex-mock-http在后台,它使用Jetty,但它会为您完成所有配置。创建MockHttpsServer会立即启动HTTPS服务器:

public static final int PORT = 1443;
private MockHttpsServer mockServer;

@Before
public void initHttps() {
    mockServer = new MockHttpsServer(PORT);
    mockServer.respondTo(get("a-service/resource")).withBody(expectedResponse);
}

您可以将Mule应用程序设置为信任模拟服务器使用的证书。类路径上提供了JKS格式的信任库,您可以将其提供给HTTPS连接器,如下所示:

<https:connector name="someHttpsConnector">
    <https:tls-server path="confluex-mock.truststore" storePassword="confluex" />
</https:connector>

我认为某些较旧的Mule版本在使用此方法时会遇到麻烦,因为我需要在此处使用替代方法

编辑:仅当使用Spring概要文件运行测试时,才可以为HTTPS连接器包括此配置

<spring:beans profile="test">
    <mule>
        <!-- connector configuration goes here -->
    </mule>
</spring:beans>

确保配置文件在测试运行时确实处于活动状态的一种方法是,只需在@BeforeClass方法中对其进行设置:

@BeforeClass
public void initEnvironment() {
    System.setProperty("spring.profiles.active", "test");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章