Micronaut 随机端口无法启动测试
Micronaut Random Port fails to start Tests
我维护着一个相当大的 micronaut 应用程序,其中包含数千个测试。最近我迁移到 Azure 并开始看到这些不稳定的测试并出现此错误
Test initializationError FAILED
io.micronaut.http.server.exceptions.ServerStartupException: Unable to start Micronaut server on port: 43218
申请-test.yml
---
micronaut:
server:
port: ${random.port}
示例测试
@MicronautTest
class MathServiceSpec extends Specification {
@Inject
MathService mathService
@Unroll
void "should compute #num times 4"() {
when:
def result = mathService.compute(num)
then:
result == expected
where:
num | expected
2 | 8
3 | 12
}
我看不出有任何明显的原因可以解释为什么 micronaut 选择一个端口用于 random.port,或者为什么这只是在迁移到 Azure 之后才开始发生,因为我无法建立明显的联系。
似乎 micronaut 使用的是有问题的已弃用的 SocketUtils
https://github.com/micronaut-projects/micronaut-core/blob/5a8a7a7318d0f041f5fdfb667a9da5af1860a8e2/inject/src/main/java/io/micronaut/context/env/PropertySourcePropertyResolver.java#L595
发布来自 Spring 的报告
https://github.com/spring-projects/spring-framework/issues/28052
我相信这就是问题所在。
为了清楚地描述我的问题:
gradle 测试任务完成后不久,端口开始关闭,但不是立即关闭。发生这种情况是因为我的管道的 autoCancel 功能,因为我已经对该 PR 进行了另一次提交,因此我的管道取消了之前的构建。因为 gradle 守护进程被强行杀死,所以端口有机会被使用,而 micronaut 会免费使用这个端口,因为它使用了 Spring SocketUtils 的副本,现在正是因为这个错误而弃用了。禁用 autoCancel 可以解决这个问题,但意味着我需要完成构建才能在下一次提交时开始下一个构建,这基本上是在浪费我的时间或构建代理。
micronaut:
server:
port: -1
帮我解决了问题
我维护着一个相当大的 micronaut 应用程序,其中包含数千个测试。最近我迁移到 Azure 并开始看到这些不稳定的测试并出现此错误
Test initializationError FAILED
io.micronaut.http.server.exceptions.ServerStartupException: Unable to start Micronaut server on port: 43218
申请-test.yml
---
micronaut:
server:
port: ${random.port}
示例测试
@MicronautTest
class MathServiceSpec extends Specification {
@Inject
MathService mathService
@Unroll
void "should compute #num times 4"() {
when:
def result = mathService.compute(num)
then:
result == expected
where:
num | expected
2 | 8
3 | 12
}
我看不出有任何明显的原因可以解释为什么 micronaut 选择一个端口用于 random.port,或者为什么这只是在迁移到 Azure 之后才开始发生,因为我无法建立明显的联系。
似乎 micronaut 使用的是有问题的已弃用的 SocketUtils https://github.com/micronaut-projects/micronaut-core/blob/5a8a7a7318d0f041f5fdfb667a9da5af1860a8e2/inject/src/main/java/io/micronaut/context/env/PropertySourcePropertyResolver.java#L595
发布来自 Spring 的报告 https://github.com/spring-projects/spring-framework/issues/28052
我相信这就是问题所在。
为了清楚地描述我的问题: gradle 测试任务完成后不久,端口开始关闭,但不是立即关闭。发生这种情况是因为我的管道的 autoCancel 功能,因为我已经对该 PR 进行了另一次提交,因此我的管道取消了之前的构建。因为 gradle 守护进程被强行杀死,所以端口有机会被使用,而 micronaut 会免费使用这个端口,因为它使用了 Spring SocketUtils 的副本,现在正是因为这个错误而弃用了。禁用 autoCancel 可以解决这个问题,但意味着我需要完成构建才能在下一次提交时开始下一个构建,这基本上是在浪费我的时间或构建代理。
micronaut:
server:
port: -1
帮我解决了问题