Unit testing Quarkus kubernetesMockServer用于应用程序初始化

Unit testing Quarkus kubernetesMockServer用于应用程序初始化,unit-testing,kubernetes,junit,quarkus,fabric8,Unit Testing,Kubernetes,Junit,Quarkus,Fabric8,我作为OpenShift/Kubernetes集群中的操作员,正在开发一个Quarkus应用程序到acct。当使用kubernetesMockServer编写测试时,对已开发应用程序的REST调用工作正常,但当代码在初始化块内运行时,它失败了,在日志中,我看到模拟服务器正在回复404错误: 2020-02-17 11:04:12,148 INFO [okh.moc.MockWebServer] (MockWebServer /127.0.0.1:53048) MockWebServer[575

我作为OpenShift/Kubernetes集群中的操作员,正在开发一个Quarkus应用程序到acct。当使用kubernetesMockServer编写测试时,对已开发应用程序的REST调用工作正常,但当代码在初始化块内运行时,它失败了,在日志中,我看到模拟服务器正在回复404错误:

2020-02-17 11:04:12,148 INFO  [okh.moc.MockWebServer] (MockWebServer /127.0.0.1:53048) MockWebServer[57577] received request: GET /apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions HTTP/1.1 and responded: HTTP/1.1 404 Client Error
关于测试代码,我有:

@QuarkusTestResource(KubernetesMockServerTestResource.class)
@夸克斯特
类测试控制器{
@模拟服务器
KubernetesMockServer;
私人客户资源定义crd;
私有客户资源定义列表crdlist;
@之前
在()之前公开无效{
crd=新的CustomResourceDefinitionBuilder()
.带有APIVersion(“APIVensions.k8s.io/v1beta1”)
.withNewMetadata().withName(“types.openshift.example cloud.com”)
.endMetadata()
.withNewSpec()
.withNewNames()
.withKind(“类型”)
.以复数形式(“类型”)
.endNames()
.withGroup(“openshift.example cloud.com”)
.withVersion(“v1”)
.withScope(“名称空间”)
.endSpec()
.build();
crdlist=新建CustomResourceDefinitionListBuilder().withItems(crd).build();
mockServer.expect().get().withPath(“/api/apiextensions.k8s.io/v1beta1/customresourcedefinitions”)
andReturn先生(200,客户名单)
.总是();
}
@试验
无效测试(){
重新启动.when().get(“/dummy”).then().body(“size()”,Is.Is(0));
}
}
虚拟rest使用相同的代码来搜索CRD,事实上,在没有类观察启动事件的情况下运行时,它工作正常

@Path(“/dummy”)
公共类虚拟{
私有静态最终记录器Logger=LoggerFactory.getLogger(Dummy.class);
@得到
@产生(MediaType.APPLICATION_JSON)
公共响应列表CRDS(){
KubernetesClient oc=新的默认KubernetesClient();
CustomResourceDefinition crd=oc.customResourceDefinitions()
.list().getItems().stream()
.filter(ob->ob.getMetadata().getName().equals(“types.openshift.example cloud.com”))
.findFirst().get();
info(“CRD名称为{}”,CRD.getMetadata().getName());
返回Response.ok(newarraylist()).build();
}
}
最后,这是一个

@ApplicationScoped
public class AIRWatcher {

    private static final Logger LOGGER = LoggerFactory.getLogger(AIRWatcher.class);

    void OnStart(@Observes StartupEvent ev) {
        KubernetesClient oc = new DefaultKubernetesClient();
        CustomResourceDefinition crd = oc.customResourceDefinitions()
                .list().getItems().stream()
                    .filter( ob -> ob.getMetadata().getName().equals("types.openshift.example-cloud.com"))
                    .findFirst().get();
        LOGGER.info("Using {}", crd.getMetadata().getName());

    }

}


这就像出于某种原因,模拟服务器仍然没有为启动事件初始化一样,有什么方法可以解决它吗?

问题是,模拟服务器仅配置为在测试执行之前响应,而此代码:

void OnStart(@Observes StartupEvent ev) {
        KubernetesClient oc = new DefaultKubernetesClient();
        CustomResourceDefinition crd = oc.customResourceDefinitions()
                .list().getItems().stream()
                    .filter( ob -> ob.getMetadata().getName().equals("types.openshift.example-cloud.com"))
                    .findFirst().get();
        LOGGER.info("Using {}", crd.getMetadata().getName());

    }
当应用程序实际启动时运行(在每次运行之前的任何
@beforeach
之前)


您能在Quarkus Github上打开一个问题吗?这应该是我们为

提供的解决方案。问题是,模拟服务器仅配置为在测试执行之前响应,而此代码:

void OnStart(@Observes StartupEvent ev) {
        KubernetesClient oc = new DefaultKubernetesClient();
        CustomResourceDefinition crd = oc.customResourceDefinitions()
                .list().getItems().stream()
                    .filter( ob -> ob.getMetadata().getName().equals("types.openshift.example-cloud.com"))
                    .findFirst().get();
        LOGGER.info("Using {}", crd.getMetadata().getName());

    }
当应用程序实际启动时运行(在每次运行之前的任何
@beforeach
之前)

您能在Quarkus Github上打开一个问题吗?这应该是我们为

在Git中打开的票证->在Git中打开的票证->