-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 后才开始发生,因为我无法建立明显的连接。

4

1 回答 1

-1

似乎 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 测试任务完成后不久,端口开始关闭,但不是立即关闭。发生这种情况是因为我的管道的自动取消功能,因为我已经对该 PR 进行了另一次提交,所以我的管道取消了之前的构建。因为 gradle deamon 被强行杀死,所以端口有可能被使用,而 micronaut 将这些端口作为免费的,因为它使用了 Spring SocketUtils 的副本,该副本现在已完全针对此错误而弃用。禁用 autoCancel 可以解决这个问题,但这意味着我需要完成构建才能在下一次提交时开始下一次构建,这基本上是在浪费我的时间或构建代理。

于 2022-02-22T09:02:03.033 回答